Возможно ли получить 128-битный ключ AES с PBKDF2 с использованием SHA-256 - PullRequest
1 голос
/ 09 июля 2019

Я разрабатываю протокол шифрования, в котором мне нужно создать ключ AES в режиме CTR.Я решил оставить длину ключа 128 битов, так как более короткий размер ключа будет означать меньшую вычислительную мощность для мобильных устройств.

Теперь, чтобы создать этот ключ, я использую PBKDF2, который позволяет мне устанавливать его определенные параметры, такие как функция хеширования и номер итерации, поскольку он получает ключ, используя исходную информацию, такую ​​как пароль, который является тем, чтоЯ имею.Поскольку SHA-1 не работает, я хотел использовать SHA-256 для хеширования ключа функции вывода ключей, но я не понимаю, возможно ли это.Поскольку я хочу, чтобы ключ был 128 бит, а SHA-256 выдает 256 бит, способен ли PBKDF2 сделать это?

Ответы [ 2 ]

1 голос
/ 09 июля 2019

AES-256 не намного медленнее, чем AES-128, набор ключей немного медленнее, и каждому блоку требуется всего 4 раунда (от 11 до 15).Так что это примерно на 40% медленнее всего, а у современных телефонов с выделенными наборами AES-инструкций, вероятно, даже меньше.

PBKDF2 может выводить практически любой ключ размера, и в основном HMAC-SHA1 или HMAC-SHA256 (не SHA1 илиSHA256 напрямую, но большинство API принимают только хеш-функцию в качестве параметра и делают HMAC неявно) в качестве строительного блока "случайная функция".Но любой из них может выдавать ключи на 256, 128 или 10000 байт (в любом случае вам не нужен этот большой ключ).С HMAC-SHA256 одинаково дешево или дорого получить 256 или 128-битный ключ (последний является урезанной версией первого, но это не проблема);это та же самая работа.С HMAC-SHA1 (который так же безопасен, как и HMAC-SHA256 для PBKDF2) получить 256-битный ключ немного больше, поскольку 256 больше, чем размер дайджеста.

Поэтому использование AES-256 и PBKDF2- (HMAC) -SHA256 не должно вызывать проблем с производительностью.

1 голос
/ 09 июля 2019

Прежде всего AES-256 не такой медленный по сравнению с AES-128.См. Криптография

Загрузка ЦП (+ 20% для 192-битного ключа, + 40% для 256-битного ключа:

Выходной размер PBKDF2 равен используемой функции PRF, в вашем случае это хеш-функция, как SHA-256, поэтому выход будет иметь 256-битный размер.

Для функции PBKDF2 требуется dkLenпараметр - требуемая длина ключа.

PBKDF2 (PRF, пароль, соль, c, dkLen)

Когда вы введете 128 в этот параметр, вы получите 128-битВыходные данные являются подстрокой полного 256-разрядного вывода. Вы получите первые 128-разрядные.

Вы можете увидеть это из реализаций как здесь

...