AES - niekompletne dane

0
  1. Chcę zaszyfrować dane za pomocą 128 bitowego klucza, 16 bajtów. Co jeśli użytkownik poda klucz o długości, np. 10 bajtów? Pozostałe 6 wypełniamy zerami? Mam na myśli dopisanie tych 6 zer jeszcze przed operacją rozszerzania klucza do 176 bajtów.
  2. Mamy dane o długości 40 bajtów. Pierwsze 32 B szyfrujemy normalnie, ale czy do 8 ostatnich potrzebujemy pełen blok, tzn. macierz stanu o wymiarach 4x4? W tym przypadku można dopisać 8 bajtów i to zaszyfrować. Problem jest taki, że po odszyfrowaniu dane mają nie, 40 a 48 bajtów wraz z tymi 8 niepotrzebnymi zerami. Mogę w pliku zapisać sobie nagłówek informujący ile bajtów z ostatniego 16 bajtowego bloku stanowią rzeczywiste dane i wykorzystać to przy deszyfracji, ale może jest jakieś lepsze rozwiązanie?
4
  1. Nie ma takiej możliwosci, użytkownik musi podać cały klucz! Podanie klucza krótszego skutkuje osłabieniem algorytmu. Trudność łamania klucza rośnie wykładniczo z rozmiarem klucza, ale także spada wykładniczo jeśli klucz skracasz! O ile złamanie AESa z 16 bajtowym kluczem jest póki co niewykonalne o tyle brutowanie mniejszej liczby bajtów już niekoniecznie. Konkretnie twój 10 bajtowy klucz można złamać 248 razy szybciej niż pełny klucz...
  2. Stosuje się padding PKCS7. Padding występuje zawsze (tzn nawet jeśli user podał dokładnie tyle bajtów ile trzeba to dodajesz caly nowy blok paddingu). Padding ma postać bajtów o tej samej wartości, które mówią ile bajtów paddingu jest. Np. 3 bajty paddingu to będzie: XXXXXXXXXXXXX 0x3 0x3 0x3 gdzie X to bajty wiadomości a 0x3 to padding. W ten sposób usuwanie paddingu jest banalnie proste:
  • odczytujesz ostatni bajt zdekodowanej wiadomości
  • usuwasz od końca tyle bajtów ile wynosiła ta liczba
    Dodatkowo mozesz też dokonać weryfikacji i sprawdzić czy te usuwane bajty paddingu mają wszystkie poprawną wartość. Jeśli nie, to znaczy ze ktoś modyfikował ciphertext.

1 użytkowników online, w tym zalogowanych: 0, gości: 1