PHP mcrypt_decrypt - могу ли я определить, расшифровываются ли данные с помощью правильного ключа? - PullRequest
3 голосов
/ 03 сентября 2011

Я работаю над сценарием php и использую mcrypt для шифрования / дешифрования произвольных данных.

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

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

Есть ли способ обойти это?


Когда я писал этот вопрос, у меня появилась идея:)

Могу ли я поставить перед входными данными статическую строку «control» и использовать ее для проверки при расшифровке?

Ответы [ 2 ]

1 голос
/ 24 июня 2012

Я обычно делаю это:

  • Хешировать входные данные (файл, сообщение или что-то еще).
  • Шифрование данных.
  • Предварительно добавьте зашифрованные данные к IV и хешу данных.
  • Отправьте или сохраните IV + хеш + шифротекст.

Поскольку IV и хэш всегда имеют одинаковую длину, нет необходимости добавлять символы заполнения или управляющие символы.

На стороне приема или чтения:

  • Извлечение IV.
  • Извлеките хеш.
  • Извлечение и дешифрование зашифрованного текста.
  • Хешируйте дешифрованные данные и проверьте, совпадают ли они с извлеченным хешем.

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

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

0 голосов
/ 29 июля 2013

Лучший способ обеспечить целостность зашифрованных данных - добавить MAC, созданный ТОЛЬКО для зашифрованных данных.

Не применяйте MAC к простому тексту, потому что MAC может раскрыть некоторую информацию об этом тексте. MAC не создан для обеспечения безопасности - только целостность.

Итак, правильный алгоритм будет ENCRYPT-THEN-MAC!

Более подробная информация доступна в этом видео http://d396qusza40orc.cloudfront.net/crypto/recoded_videos%2F7.4%20%5B974a4c90%5D%20.mp4

...