Ostatnio przyglądam się (z powodów, o których może kiedyś napiszę) formatowi pakietu SPA (wersja z szyfrowaniem symetrycznym) używanego przez fwknop.
Archeologia
Całość wygląda dość prosto i bezpiecznie, o ile użyte zostaną mocne klucze. Pakiet jest szyfrowany AES (Rijndael), następnie liczony jest HMAC (czyli mamy typowe podejście encrypt-then-mac, tak jak teraz się zaleca).
To gdzie ta archeologia? W samym pakiecie:
16 bytes of random data Local username Local time stamp fwknop version SPA message type Access request or command to execute SPA message digest (SHA-256 by default)
Jaka jest wartość ostatniego pola - SPA message digest? Pozwala potwierdzić, że pakiet został rozszyfrowany prawidłowo, a nie wygląda prawidłowo przez przypadek. Pole to miało większą wartość wtedy, gdy HMAC nie był używany. A nie był, można to sprawdzić tutaj.
A teraz pytanie - wykorzystywane jest szyfrowanie w trybie CBC. W jakim przypadku atakujący byłby w stanie zmodyfikować zaszyfrowany pakiet w taki sposób, by po rozszyfrowaniu zaszły założone przez atakującego zmiany? Czy jest to możliwe w przypadku wykorzystanego algorytmu szyfrowania (nie chodzi mi tu o AES, tylko o całą otoczkę związaną z generowaniem IV - podpowiem Crypt:CBC)?
Nie wiem też, czy długość pakietu jest wyrównana do bloku, czy jest też padding.
A jeśli chodzi o pozostałą część Twojego komentarza to właśnie to jest ta zagadka Zagadka nie jest specjalnie trudna, bo wystarczy zajrzeć do kodu by zobaczyć z jakimi parametrami Cipher::CBC->new jest wołany, a potem w Cipher::CBC wystarczy zobaczyć co dzieje się pod spodem odnośnie IV.