Как использовать CBC и HMac? Mcrypt PHP

Как вы используете CBC и HMAC?

Я не мог найти достаточно информации в интернете.

Как вы получаете IV? Как бы вы узнали, что это, когда вам нужно расшифровать позже? (Разве не поместит это в базу данных, чтобы победить цель?)

Что такое HMAC и защищен ли он от взлома?

Зашифрованный текст остается в базе данных. Если кто-то взломает базу данных, он, вероятно, также получит доступ к файловому менеджеру, если не найдет способ сделать SQL-инъекцию. Как сценарий узнает, какой IV и какой ключ использовать, что хакер не узнает?

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

Сейчас я использую ECB (сайт еще не выпущен для бета-тестирования), но я слышал, что CBC намного безопаснее.

1 ответ

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

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

Также стоит рассмотреть возможность использования аутентифицированного режима шифрования, такого как AES-GCM, который надежно сочетает аутентификацию и шифрование. Просто убедитесь, что вы никогда не будете использовать IV в этом случае.


Где хранить ключ - сложный вопрос, и очень зависит от приложения. Как вы заметили, хранение ключа в той же системе, что и база данных, не принесет вам большой пользы.

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

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

Другие вопросы по тегам