Есть ли разница между ключами ECDH и ECDSA? - PullRequest
10 голосов
/ 11 февраля 2011

Я создаю сетевое приложение, которое использует BouncyCastle в качестве поставщика криптографии. Допустим, у вас есть это для генерации пары ключей:

ECParameterSpec ecSpec = ECNamedCurveTable.getParameterSpec("prime192v1");
KeyPairGenerator g = KeyPairGenerator.getInstance("ECDSA", "BC");
g.initialize(ecSpec, new SecureRandom());
KeyPair pair = g.generateKeyPair();

Я не понимаю, почему вы получаете экземпляр ECDSA KeyPairGenerator. Почему он просто не говорит EC ? Я знаю, что есть тип ECDH Key, который поставляется с BouncyCastle, но я подумал, что эти два представляют одинаковые вещи о точках на кривой - или я совершенно не прав с теорией, стоящей за этим?

Причина, по которой я спрашиваю, состоит в том, что сейчас мое приложение использует ECDH для создания секретного ключа AES, но теперь я хочу использовать один и тот же ключ EC для подписи каждого сообщения с использованием ECDSA.

1 Ответ

25 голосов
/ 11 февраля 2011

ECDSA и ECDH взяты из разных стандартов (ANSI X9.62 и X9.63 соответственно) и используются в разных контекстах.X9.63 явно повторно использует элементы из X9.62, включая стандартное представление открытых ключей (например, в сертификатах X.509).Следовательно, пары ключей ECDSA и ECDH в значительной степени взаимозаменяемы.Однако разрешит ли данная реализация такой обмен, остается открытым вопросом.Исторически (EC) DSA и (EC) DH происходят из разных миров.

Обратите внимание, однако, что контексты использования весьма различны.Криптография - это нечто большее, чем вычисления на эллиптических кривых;«жизненный цикл ключа» должен быть принят во внимание.Проще говоря, вы не хотите управлять ключами соглашения о ключах и ключами подписи с помощью одних и тех же процедур.Например, если вы потеряете ключ соглашения о ключе (ваша собака ест вашу смарт-карту - не смейтесь, это действительно происходит), то вы больше не сможете расшифровывать данные, которые были зашифрованы относительно этого ключа (например, зашифрованные электронные письма, отправленные вам, ихранится в зашифрованном формате).С точки зрения бизнеса, потеря ключа также может быть потерей сотрудника (сотрудник был уволен, или его сбил автобус, или он вышел на пенсию, или что-то еще).Следовательно, ключи шифрования (включая ключи соглашения о ключах) часто необходимо депонировать (например, копия закрытого ключа печатается и хранится в сейфе).С другой стороны, потеря ключа подписи не означает потери данных;ранее выданные подписи все еще могут быть проверены;Восстановление после такой потери так же просто, как создание новой пары ключей.Однако существование системы условного депонирования приводит к автоматическому удалению подписей любых допустимых значений, которые могут быть к ним прикреплены.

Кроме того, я бы настоятельно рекомендовал не использовать один и тот же закрытый ключ в двух случаях.отличные алгоритмы: взаимодействия между алгоритмами не были полностью изучены (просто изучение одного алгоритма уже тяжелая работа).Например, что произойдет, если кто-то начнет снабжать ваш протокол на основе ECDH точками кривой, извлеченными из сигнатур ECDSA, которые вы вычислили с помощью того же закрытого ключа?

Так что вам действительно не следует повторно использовать один и тот же ключ для ECDH и ECDSA.

...