Cześć, problem dotyczy potencjalnej podatności podczas generowania tokena szyfrowanego szyfrem AES256, na którą natrafiłem w jednym z projektów. Nie jestem do końca pewien czy to faktycznie jest podatność, dlatego chciałbym poznać wszą opinię.
Cała autoryzacja opiera się na założeniu, że jeżeli potrafisz wygenerować token to jesteś tym za kogo się podajesz. Ze względu na symetryczność szyfru zarówno klucz (KEY), jak i wektor inicjalizacyjny (IV) muszą być współdzielone pomiędzy systemy (tym, który się autoryzuje i tym autoryzującym). Procedura generowania tokena i autoryzacji wygląda następująco (Zarówno KEY, jak i IV mają po 16 bajtów):
- Kodujemy KEY do Base64 -> otrzymujemy KEY_B64.
- Tworzymy wiadomość przeznaczona do zaszyfrowania, składającą się z zakodowanego klucza (KEY_B64), delimitera (DEL) i aktualnego czasu w określonym formacie tekstowym (DATE_TIME), wynikowa wiadomość ma postać KEY_B64 + DEL + DATE_TIME
- Wiadmość szyfrujemy AESem (AES/CBC/PKCS5Padding) z wykorzystaniem KEY i IV, po czym kodujemy do Base64.
- Tak otrzymany token przesyłamy odbiorcy.
- Odbiorca dekoduje token z Base64, przeprowadza deszyfrowanie używając KEY i IV i otrzymuje wiadomość.
- Jeżeli KEY się zgadza a czas użyty do jako DATE_TIME jest nie starszy niż określona wartość dostęp jest przyznawany.
Pytania:
- Zakładając, że potencjalny atakujący wie to wszystko, a nie zna jedynie KEY i IV to czy jest w stanie je odtworzyć dysponując skończoną liczbą tokenów? Chodzi mi głównie o to, czy fakt szyfrowania klucza kluczem ułatwia przeprowadzenie ataku? Czy może obniżenie skuteczności jest tutaj znikome?
- Czy odwrócenie kolejności elementów w wiadomości (tzn. DATE_TIME + DEL + KEY_B64) coś zmienia? W tym układzie każdy token byłby znacząco różny od poprzedniego, obecnie początek każdego tokena jest taki sam.
Wołam @Shalom, @msm, @Gynvael Coldwind