Использование симметричного ключа (AES -128) для подписи и проверки сообщения - PullRequest
9 голосов
/ 28 ноября 2011

Я хочу знать, можно ли использовать симметричные ключи для подписи сообщения? Мы можем зашифровать, используя общий секретный ключ. Кроме того, когда для подписи используется симметричный ключ, какой API можно использовать в JAVA для загрузки ключа и подписания сообщения?

Если я использовал Signature from java.security, он имеет api initSign, но в качестве аргумента для подписи сообщения он использует закрытый ключ из пары открытый / закрытый ключ. Здесь ключ симметричный ключ.

Есть указатели?

Ответы [ 3 ]

14 голосов
/ 28 ноября 2011

Общий секретный ключ может использоваться для вычисления кода аутентификации сообщения (MAC) , который затем может использоваться для подтверждения целостности и подлинности сообщения другой стороне, которая знает тот же общий секретный ключ.В отличие от цифровых подписей, которые создаются с использованием закрытого ключа и проверяются с использованием открытого ключа, MAC-адреса не дают отказа в праве (любой, кто может проверить MAC-адрес, может также сгенерировать MAC-адрес для другого сообщения).

различные формы кодов аутентификации сообщений;вероятно, наиболее часто используемым вариантом является HMAC .

8 голосов
/ 28 ноября 2011

Симметричные алгоритмы не могут дать свойство неотказности, которое дают схемы асимметричной подписи, то есть получатель сообщения не может доказать, что он сам не создал сообщение, поскольку они должны знать схему.

Тем не менее, код аутентификации сообщения (MAC) может дать вам то, что вы хотите: и отправитель, и получатель имеют общий ключ, отправитель вычисляет MAC с секретоми добавляет его к сообщению, и получатель вычисляет тот же MAC-адрес и сравнивает его с полученным сообщением.

В то время как наиболее часто используемый тип MAC ( HMAC ) основан на хэш-функциях,Есть также такие, которые основаны на блочном шифре, таком как AES, например CBC-MAC (это похоже на CBC, но с нулевым вектором инициализации и использованием только последнего блока в качестве вывода).(Как говорит noloader, CBC-MAC - не самый безопасный способ сделать это, используйте другие режимы.)

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

В Java MAC можно вычислить (и проверить) с помощью класса javax.crypto.Mac .

1 голос
/ 28 ноября 2011

Если вы хотите подписать сообщение с помощью симметричного ключа, вы хотите использовать CMAC на основе AES (или TDEA с 3 ключами, или Cameilla).CMAC - это коды аутентификации сообщений (MAC), созданные поверх блочных шифров.Обычно вы используете CMAC, если вы также используете AES / 3TDEA / Cameilla для шифрования (т. Е. Это удобно).

Вы также можете использовать HMAC.HMAC - это код аутентификации сообщения (MAC), созданный поверх хэша.Вы бы использовали HMAC, если хэш уже присутствовал в программе (т. Е. Это было удобно).

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

Наконец (для полноты) не используйте MD5.Он сломан (несмотря на то, что думают многие в мире свободного программного обеспечения).SHA-1 больше не одобрен для новых применений такими органами, как NIST, NESSIE и ECRYPT.Используйте семейство хэшей SHA-2 или Whirlpool.

Сведения о java см. В Расширения Java Cryptography .

...