/ / Jak zaimplementować szyfrowanie Ferneta za pomocą AES 256 - python, szyfrowanie, kryptografia, aes, python-kryptografia

Jak zaimplementować szyfrowanie Ferneta za pomocą AES 256 - python, szyfrowanie, kryptografia, aes, python-cryptography

Obecnie używam Fernet szyfrowanie za pomocą kluczy AES 128. Jednak mój klient wymaga użycia AES 256. Nie jestem bardzo zaznajomiony z kryptografią, ale oto, co zrozumiałem do tej pory.

Fernet potrzebuje klucza 256-bitowego podzielonego na pół. Pierwsza połowa to klucz podpisywania, druga to klucz szyfrowania. Ponieważ mają 128 bitów, jest to AES 128.

Czy wystarczy podwoić klucz wejściowy i zmodyfikować implementację jak poniżej, aby uzyskać 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

Odpowiedzi:

3 dla odpowiedzi № 1

Tak, możesz podwoić wejście binarne, wejście przed zakodowaniem klucza 64. Jeśli wynik jest 256-bitowy, zależy od sposobu klucz jest generowany. Więc tak, możliwe jest podwojenie rozmiaru czek na klucz, ale to nie znaczy dużo.Jeśli materiał klucza wejściowego jest 512 bitów z poziomem bezpieczeństwa 512 bitów to tak, wtedy podział klucza jest w porządku.

Osobiście polecam (i mamzalecane w przeszłości dla Fernet), aby użyć HKDF do wyprowadzenia dwóch kluczy zamiast po prostu podzielić klucz na dwa. Nie widzę, jak generowany jest klucz, ale jeśli jest generowany przez PBKDF2 - którego używa Fernet do tworzenia kluczy z haseł - wówczas PBKDF2 może wymagać podwójnej ilości pracy do wygenerowania 512 bitów, podczas gdy atakujący będzie musiał jedynie wygenerować 256 bity do wykonania ataku (i dlatego wykonują połowę pracy).

Zauważ, że używanie kodowania base64 nie jest dobre dla kluczy, ponieważ łańcuchy są trudne do usunięcia z pamięci w większości runtimes; jest o wiele lepiej, jeśli klucze są przechowywane w klucz magazynu.


0 dla odpowiedzi nr 2

The Specyfikacja Fernet jest użycie AES-128. Jeśli zmodyfikujesz algorytm do korzystania z AES-256, to nie będziesz już używać Fernet. Jeśli jest to wymagane, musisz używać zarówno Fernetai AES-256, polecam szyfrowanie twojej ładowności niezależnie przy użyciu AES-256, a następnie zastosowanie algorytmu Ferneta do wyniku. To zasadniczo szyfruje je ponownie za pomocą AES-128.