Задать вопрос
yurtaev
@yurtaev

Проверка правильности ключа для расшифровки AES'ом

Мне кажется я горожу велосипеды и что-то пропустил, но как реализовать проверку ключа для AES что он верный прежде чем расшифровывать данные, например пользователь указал неверный пароль. Пока что как идея хранить:

password_crypt = AES.encrypt("True Secret Passphrase", "True Secret Passphrase")

а потом делать проверку на стороне клиента которому будет передаваться password_crypt:

"User Secret Passphrase" === AES.decrypt(password_crypt, "User Secret Passphrase") ? "мастер пароль правильный" : "мастер пароль введен некорректно"

Мне кажется я где-то что-то упустил очень важное и всё давно без меня придумали и стандартизовали.

P.S весь алгоритм будет виден пользователю т.к будет еще работа на клиенте в браузере, как сделать проверку так что бы гарантировать пользователю надежность шифрования (снижение стойкости) от взлома в первую очередь с нашей стороны.
  • Вопрос задан
  • 5077 просмотров
Подписаться 2 Оценить 2 комментария
Решения вопроса 1
zed91
@zed91
Хранение любых magic number's которые расшифровываются и сравниваются — существенное снижение криптостойкости. Хорошее решение — хранения crc блока. Шифруется весь блок данных + crc. Для проверки происходит полная расшифровка предоставленным ключом, снятие crc и сравнение его. Если crc совпадают — ключ был верным.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
ntkt
@ntkt
Потомственный рыцарь клавиатуры и паяльника
Тогда это вполне легитимный метод. Нам придется-таки получить ключ и хоть что-то, да расшифровать. Посмотрите, как делает TrueCrypt — перед тем, как расшифровать весь диск, он проверяет, что расшифровался заголовок тома, а он известного формата. Если условия задачи не позволяют добавлять известную проверочную строку в заголовок к plaintext-данным на входе, то ее придется хранить отдельно.

Еще можно хранить key check value, но это те же яйца — KCV это усеченный ключевой хэш от ключа на ключе :)
Ответ написан
vsespb
@vsespb
Чем меньше magic number, тем меньше снижение криптостойкости, используйте 2-4 байта.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы