Как реализовать шифрование Fernet с помощью AES 256 - PullRequest
0 голосов
/ 19 мая 2018

В настоящее время я использую шифрование Fernet , в котором используются ключи AES 128.Однако мой клиент требует использования AES 256. Я не очень знаком с криптографией, но вот что я понял до сих пор.

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

Было бы достаточно удвоить клавишу ввода и изменить реализацию, как показано ниже, чтобы получить AES 256?

class Fernet(object):
    def __init__(self, key, backend=None):
        if backend is None:
            backend = default_backend()

        key = base64.urlsafe_b64decode(key) # Here 512 bits long instead of 256

        self._signing_key = key[:16] # double this
        self._encryption_key = key[16:] # double this
        self._backend = backend

Ответы [ 2 ]

0 голосов
/ 23 июня 2018

В спецификации Fernet используется AES-128.Если вы измените алгоритм для использования AES-256, то вы больше не будете использовать Fernet .Если требуется, чтобы вы использовали и Fernet, и AES-256, я бы порекомендовал независимо шифровать вашу полезную нагрузку с помощью AES-256, а затем применить алгоритм Fernet к полученному результату.По сути, это снова зашифровывает его с помощью AES-128.

0 голосов
/ 19 мая 2018

Да, вы можете удвоить двоичный вход, вход до того, как ключ был закодирован в кодировке 64.Если результат является 256-битным безопасным, зависит от того, как сгенерирован ключ .Так что да, можно удвоить размер check на ключе, но это не говорит о многом.Если материал входного ключа 512 бит с уровнем безопасности 512 бит, тогда да, тогда разделение ключа - это хорошо.

Лично я бы порекомендовал (и в прошлом рекомендовал это Fernet) использовать HKDFполучить два ключа вместо того, чтобы просто разделить ключ на две части.Я не вижу, как генерируется ключ, но если он генерируется PBKDF2 - который Fernet использует для создания ключей из паролей - тогда PBKDF2 может потребоваться удвоить объем работы, чтобы сгенерировать 512 бит, в то время как злоумышленнику потребуется сгенерировать только 256биты для выполнения атаки (и, следовательно, для выполнения половины работы).

Обратите внимание, что использование кодировки base64 не подходит для ключей, поскольку строки трудно удалить из памяти в большинстве сред выполнения;гораздо лучше, если ключи хранятся в хранилище ключей .

...