Имеет ли значение ключ AES? - PullRequest
2 голосов
/ 17 марта 2020

Я искал и алгоритм генерации ключей AES, немного обеспокоенный тем, «каким» был мой ключ, и, что более важно, существуют ли «сильные» и «слабые» ключи?

Нашел ли python статья, которая специально не использует алгоритм, подобный этому, при генерации ключа:

import random

key = []
for x in range(16):
    key.append(chr(random.randrange(0,255)))
return key

Я понимаю, что ключ не должен быть предсказуемым, и я знаю, что обычный «случайный» байт поколение, основанное на времени, не совсем случайно.

Мой вопрос, однако, заключается в том, что даже если вы используете простой алгоритм (или даже 16-байтовую фразу-пароль) для ключа, и AES реализован правильно, является ли ключ слабее, чем любой другой?

1 Ответ

2 голосов
/ 17 марта 2020

AES сам по себе не имеет слабых ключей. Слабые ключи - это ключи, которые будут выдвигать специальные свойства блочного шифра. Например, слабый ключ может быть ключом, в котором двойное шифрование с этим ключом снова приведет к открытому тексту. Это определение слабого ключа, однако, не то, которое вы используете.

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

Любой симметричный шифр c требует, чтобы ключи были полностью непредсказуемыми. Это не значит, что их трудно угадать; их должно быть невозможно угадать. В противном случае надежность ключа не будет достигнута. Например, если вы используете 16 полностью случайных шестнадцатеричных символов вместо байтов в качестве ключа, вы уменьшите размер ключа вдвое, оставив только 128 бит вместо 128.

Та же проблема с паролями , К сожалению, пароли, которые приводят люди, невероятно слабы. Вот почему мы используем такие приемы, как растяжение ключа, в функции получения ключа на основе пароля или PBKDF для усиления шифрования на основе пароля или PBE.

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

Содержимое ключа действительно определенно имеет значение.

...