Рейтинг:0

Доведение ключа до 256 бит алгоритмом хеширования

флаг us

Например, если я использую Rijndael для шифрования, мне нужно указать ключ определенной длины. Для удобства пользователя я хочу, чтобы пользователь мог использовать ключ любой длины. Затем, чтобы получить ключ нужной длины алгоритма, я строю хеш-значение, которое затем использую для шифрования и дешифрования. Гарантируется ли безопасность зашифрованного текста, например, если я использую SHA-256? Должен ли я скорее дополнять ключ пользователя и сокращать длинные ключи? Каков наилучший способ получить длину ключа 256 бит?

SAI Peregrinus avatar
флаг si
Какую криптографическую библиотеку вы используете? Он должен предоставлять функцию получения ключа (KDF), такую ​​как HKDF-SHA256, или, если вы используете пароль пользователя, функцию получения ключа на основе пароля, например Argon2id. SHA256 небезопасен для такого использования сам по себе, но его можно использовать в KDF, таком как HKDF-SHA256. И почему Rijndael вместо AES? Какой режим работы вы используете, почему не AES-GCM-SIV, AES-GCM или ChaCha20-Poly1305? Шифрование с помощью чего-либо, кроме одного из этих 3, подозрительно и должно быть оправдано.
Luqus avatar
флаг us
Я использую библиотеку шифров Java с алгоритмом AES в режиме CBC (Rijndael).Безопасность алгоритма мне пока достаточна, меня интересовал хэш как ключ.
SAI Peregrinus avatar
флаг si
Существует множество библиотек шифров Java. То, что неаутентифицированный режим CBC кажется легкодоступным, является плохим знаком для удобства использования и безопасности того, что вы выбрали.
Luqus avatar
флаг us
Я использую стандартную [библиотеку javax.crypto.Cipher] (https://docs.oracle.com/javase/7/docs/api/javax/crypto/Cipher.html), которая, скорее всего, не является вредоносной.
SAI Peregrinus avatar
флаг si
Я не говорю, что это вредоносно, я говорю, что это плохо спроектировано. Он делает небезопасные варианты легко доступными (например, требуются режимы ECB и CBC, но безопасные режимы, такие как GCM и SIV, являются необязательными) и даже включает полностью взломанные шифры, такие как RC2 и RC4. Дело не в том, что оно вредоносное, а в том, что его легко испортить до катастрофы. Сравните с чем-то вроде libsodium, который спроектирован таким образом, чтобы его было трудно облажаться, в то время как оба могут в конечном итоге обеспечить одинаковую безопасность, если вы сделаете правильный выбор, с libsodium гораздо сложнее сделать плохой выбор.
Рейтинг:2
флаг si

SHA-256 не является функцией формирования ключа (KDF) и не должен использоваться как таковая.

SHA-256 может быть частью KDF, например ХКДФ-SHA256, который использует HMAC-SHA256, который, в свою очередь, использует SHA256. HKDF подлежит злоупотребление который может нарушить его безопасность, убедитесь, что вы используете его правильно (если вы его используете).

HKDF это ПОДХОДИТ ТОЛЬКО ДЛЯ ВЫСОКОЭНТРОПИЙНЫХ ВХОДОВ, как и другие ключи или результат обмена Диффи Хеллмана на эллиптической кривой. Если вы получаете ключи из паролей, вам нужна функция получения ключа на основе пароля, например Argon2id.

baro77 avatar
флаг gd
отличная ссылка на блог! (у)
Рейтинг:0
флаг gd

Если вам нужна безопасность, обеспечиваемая паролем с 256-битной энтропией, хеширование само по себе не поможет вам, если начальный ключ < 256-битной энтропии, потому что хеш-функции являются быстрыми функциями, поэтому проверка исходного ключа из его пространства уменьшенного размера или хешированного ключа почти не отличается. . Функция деривации ключа (она же аппаратные функции ЦП и/или памяти/хранилища) может смягчить проблему, но только с вычислительной точки зрения, а не с теоретической (поэтому имеет значение, как долго вы надеетесь на помощь KDF). Конечно, если исходный пароль> 256 бит и 256 бит вам достаточно, SHA256 в порядке, но я думаю, что это не реалистичный случай пользователя;)

SAI Peregrinus avatar
флаг si
Вы перепутали KDF и PBKDF. KDF по-прежнему быстры, PBKDF имеют настраиваемую сложность.
baro77 avatar
флаг gd
Вы правы, извините за ОП и спасибо за разъяснения!

Ответить или комментировать

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