Проверка ключа в AES - PullRequest
       7

Проверка ключа в AES

0 голосов
/ 24 мая 2018

У меня есть реализация на C ++ для AES, которая поддерживает ключи длиной 128, 192 и 256 бит.Если для дешифрования введен неправильный ключ, генерируются некоторые данные мусора, но я хочу проверить ключ, введенный пользователем во время дешифрования, и следует выдать ошибку, если ключ неверный.

Как проверитьключ, введенный пользователем.

спасибо

Ответы [ 3 ]

0 голосов
/ 24 мая 2018

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

ИЛИ, если вы хотите знать перед расшифровкой, используйте материал ключа, предоставленный пользователем, для получения двух дополнительных ключей (используя, скажем, PBKDF2).Используйте один для шифрования, а другой для HMAC.В этом случае сначала зашифруйте и , затем примените HMAC, используя второй ключ.Таким образом, вы можете вычислить HMAC и проверить, соответствует ли он перед тем, как вы расшифруете.

0 голосов
/ 24 мая 2018

Один из распространенных способов проверки правильности ввода ключа без раскрытия фактического ключа - использование KCV (Key Check Value) .Когда вы создаете ключ, вы в то же время вычисляете KCV , а когда ключ вводится вручную, вы можете проверить ввод, перерассчитав KCV .Это например.используется при ручном вводе ключей в HSM из букв физического ключа.

Для вычисления KCV для ключа AES вы шифруете пустой (0x00) блок с помощью ключа и первых 3 байтоврезультирующий зашифрованный блок будет тогда KCV .

Взгляните здесь

0 голосов
/ 24 мая 2018

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

Для этого используйте AES в режиме с проверкой подлинности (например, AES-GCM ), который дает более строгие гарантиичто остальная часть сообщения не была подделана.

...