2017-01-14 11 views
0

Итак, я пытаюсь выполнить обмен ключами, используя методы OpenSSL EVP для эллиптической кривой DH, чтобы получить общий секрет. Это необходимо для обеспечения надежной безопасности с использованием AES в режиме GCM для пользовательского протокола.Эфемерный ECDH (ECDHE) с использованием OpenSSL EVP

Проблема в том, что я могу только найти информацию и примеры об обмене статическими ключами (ECDH) (см. here).

Чтобы сделать обмен ключами «эфемерным», выполняю ли я следующее?

  1. Сформировать новый «эфемерный» публичный и закрытый ключ на сервере (pub_s_e, priv_s_e) и на клиенте (pub_c_e, priv_c_e) с использованием EVP_PKEY_keygen
  2. Подписать новые эфемерные открытые ключи с основным закрытым ключом на как клиент и сервер (знак pub_s_e с priv_s на сервере, pub_c_e с priv_c на клиенте), используя функции EVP_DigestSign.
  3. Обмен подписанными эфемерными открытыми ключами между клиентом и сервером (может быть в открытом виде).
  4. Аутентификация эфемерного открытого ключа сервера с известным основным открытым ключом для сервера, аутентификация эфемерного открытого ключа клиента с известным общедоступным ключом для клиента с использованием функций EVP_DigestVerify.
  5. Выполните ECDH для получения общего секрета, хеш его (чтобы удалить слабые биты) и используя функцию деривации ключа, например EVP_BytesToKey, чтобы получить ключ шифрования и вектор инициализации (IV) для AES.
  6. Зашифруйте, как обычно, с помощью производного ключа и IV.

Это, казалось бы, обеспечит идеальную прямую секретность, поскольку компромисс между главными ключами позволит подписать будущие ключи, но не позволит извлекать прошлые эфемерные ключи.

Я ничего не пропустил?

ответ

0

Хорошо, я решил это решить. Эфемерный ECDH просто требует генерации эфемерных клавиатур как на сервере, так и на клиенте (с использованием EVP_PKEY_keygen. Аутентификация их является необязательной для ECDHE, но подход «подписи» с использованием статического ключа, который я предложил выше, действителен.

Отправка статических открытых ключей через cleartext не должно создавать проблем, поэтому все, что нужно сделать клиенту, - это аутентификация сертификата сервера и проверка подписи на эфемерном открывшемся ключе сервера.

 Смежные вопросы

  • Нет связанных вопросов^_^