2017-02-18 18 views
1

Во-первых, я новичок в криптографии. Предположим, что я шифрую простой тест с использованием AES 128-битного шифрования и передается в приемник. Ключ также передается приемнику. На стороне приемника, как я могу проверить, что KEY является правильным или нет, без полного дешифрования сообщения. То, что я имею в виду, мы можем проверить, как этотКак узнать ключ шифрования AES правильно на стороне приемника?

IF(KEY==something) 

     DECRYPT 

ELSE 

     NOT a correct key. 

Есть ли что-нибудь сделать с IV? Я действительно не понимаю, что такое IV.

+0

Обратите внимание, что вопросы, связанные с криптографией, которые не связаны напрямую с программированием, лучше задавать на [сайте crypto sister] (http://crypto.stackexchange.com) –

ответ

4

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

Вместо того, чтобы определять, правильно ли задан ключ для зашифрованного текста, криптографические системы вместо этого определяют, является ли зашифрованный текст законным, прежде чем они даже расшифруют. Наиболее распространенный способ сделать это - использовать MAC или Code Authentication Code. HMAC - это общий способ сделать это, как и аутентифицированные блочные режимы, такие как GCM.

И, наконец, IV используется для обеспечения того, чтобы дублированные блоки открытого текста не приводили к повторным блокам зашифрованного текста. Например. в режиме ECB, который не использует IV, каждый идентичный блок открытого текста будет шифровать один и тот же шифрованный текст под заданным ключом. Применение IV (в таких режимах, как CBC) гарантирует, что одинаковые блоки открытого текста выглядят по-разному из-за прикованной операции XOR, которая начинается с IV.

Чтобы решить вашу проблему, используйте режим GCM или используйте KDF для получения симметричного ключа и ключа для HMAC.

+1

[Здесь] (http://stackoverflow.com/a/ 34157326/1816580), мой ответ, специфичный для Java. –