#java #encryption
#Ява #шифрование
Вопрос:
Я использую PBEWithHmacSHA256AndAES_128 в java для шифрования, и мой вопрос касается внутренних компонентов алгоритма. Я понимаю роль PBE, Hmac и aes в процессе шифрования. Мой вопрос: переваривает ли Hmac открытый текст, а затем добавляется к открытому тексту и шифруется aes (как в SSL)? поскольку результат всегда кратен 16 байтам aes (если я зашифрую только 1 символ, я получу 16 байтов в качестве конечного результата), но Hmac составляет 32 байта. Когда я прочитал о Hmac, я обнаружил, что наиболее часто используемый способ-это переварить зашифрованный текст, добавить результат в зашифрованный текст и сохранить его, но, похоже, в PBEWithHmacSHA256AndAES_128 это не так.
Я спрашиваю об этом, потому что не хочу сохранять пароль и полагаться на результат Hmac для проверки правильности пароля, а также для лучшего понимания алгоритма. (Иногда я снова вычисляю Hmac отдельно, используя PBKDF2WithHmacSHA1 с другой солью и подсчетом для генерации секретного ключа, и добавляю результат к окончательному зашифрованному тексту для большей безопасности.)
Комментарии:
1. В алгоритме есть две части — «PBEWithHmacSHA256» и «AES_128», что означает, что они работают «независимо». На первом этапе предоставленная кодовая фраза (или пароль) проходит через метод получения ключа, который внутренне использует Hmac256 в качестве алгоритма хэширования. В итоге выводится ключ длиной 16 байт (128 бит), который затем используется для шифрования с помощью алгоритма AES в режиме CBC. Поскольку AES имеет размер блока 16 байт, вывод должен быть кратен 16 (при использовании режима CBC некоторые режимы показывают другое поведение). Таким образом, Hmac НЕ добавляется к зашифрованному тексту (как, например, в режиме GCM).
2. Честно говоря, мне не нравятся конструкции PBE на Java. Это не алгоритмы, это плохо заданные протоколы, состоящие из множества алгоритмов. Неудивительно, что люди путаются в них. Было бы гораздо лучше сохранить часть PBKDF и часть шифрования отдельно.
3. Фер: о, теперь я понимаю, поэтому Hmac используется для создания секретного ключа, а не для проверки целостности зашифрованного текста. Такое именование действительно сбивает с толку пользователей.
4. Бодевес: Вы правы, а также некоторые алгоритмы, которые вы найдете в документации oracle, отсутствуют в предоставленном jdk, и названия алгоритмов очень запутанны, также запутаны библиотека и сами классы. Теперь я выполняю шифрование с помощью PBEWithHmacSHA256 (очень лениво менять код) и PKDF для дайджеста сообщений для проверки целостности.