Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

2 Страницы<12
Опции
К последнему сообщению К первому непрочитанному
Offline Андрей Писарев  
#11 Оставлено : 12 ноября 2015 г. 14:21:36(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 12,691
Мужчина
Российская Федерация

Сказал «Спасибо»: 500 раз
Поблагодарили: 2046 раз в 1586 постах
Техническую поддержку оказываем тут
Наша база знаний
Offline Максим Коллегин  
#12 Оставлено : 12 ноября 2015 г. 17:25:20(UTC)
Максим Коллегин

Статус: Сотрудник

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,377
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 32 раз
Поблагодарили: 706 раз в 614 постах
Так (2 байта) показывает студия - смотрите в окно Memory.
И да, в примерах всё есть.
Знания в базе знаний, поддержка в техподдержке
Offline urbrato  
#13 Оставлено : 1 июня 2017 г. 1:38:26(UTC)
urbrato

Статус: Участник

Группы: Участники
Зарегистрирован: 04.11.2016(UTC)
Сообщений: 15
Российская Федерация
Откуда: Москва

Сказал(а) «Спасибо»: 7 раз
Добрый день! Тоже вопрос по поводу передачи сессионного ключа.

1. На машинах создаётся ключ обмена.
2. На одной машине создаётся сессионный ключ. Алгоритм следующий (проверки, логирование и пр. не пишу, но они есть).
2.1. Создаём ключ через CryptGenKey с флагом CRYPT_EXPORTABLE.
2.2. Экспортируем его через CryptExportKey, используя ключ обмена, с флагом SIMPLEBLOB (вызываем дважды - узнать размер и получить блоб).
2.3. Подписываем его своим сертификатом через CryptSignMessage.
2.4. Старый ключ, если он был, уничтожаем через CryptDestroyKey.
3. Полученный пакет пересылаем на другую машину.
4. На второй машине принимаем сессионный ключ.
4.1. Проверяем подпись через CryptVerifyMessageSignature.
4.2. Если на принимавшей стороне существовал сессионный ключ, уничтожаем его через CryptDestroyKey.
4.3. Импортируем новый ключ через CryptImportKey, используя ключ обмена.

Наблюдается странность. Допустим, у нас машины А и Б. Если машина А создала сессионный ключ и передала его машине Б, всё проходит нормально. Но если потом машина Б создала сессионный ключ и передала его машине А, на машине А при вызове CryptImportKey возвращается NTE_BAD_DATA.
К сожалению, процесс обмена ключами невозможно сделать односторонним (протокол обмена, который мы не можем изменить, подразумевает, что передача данных односторонняя, но в определённый момент меняющая направление). Если машины А и Б поменять местами, остаётся ситуация, что та машина, которая первой принимала ключ, принимает его нормально, а когда при смене направления передачи данных передаётся новый ключ, он при попытке импортировать даёт bad data. Отказаться от перегенерации ключей мы также не можем ввиду ограничения нагрузки на сессионный ключ.

Где может быть проблема?
Спасибо!

p.S. Сертификаты действующие на обеих машинах.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
2 Страницы<12
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.