Cześć, piszę aplikację, która używa algorytmu AES z użyciem trybu CBC. Mimo szukania, nie bardzo rozumiem co zrobić z wektorem inicjującym po zaszyfrowaniu danych. Rozumiem, że atakujący nie powinien znać tego wektora? Jeśli nie może go znać, to co zrobić, aby ten wektor był bezpieczny?
IV nie musi być tajne, często w ogóle dokleja się je jako 1 blok szyfrogramu. To klucz ma być tajny! Ja bym jednak zadał sobie pytanie czy CBC to w roku 2019 dobry pomysł, ale to inna sprawa... State of the art to raczej AE/AEAD i jakiś AES-GCM.
IV samo w sobie jest dla atakujacego bezużyteczne, równie dobrze mógłby po prostu potraktować 1 blok jako IV i atakować resztę szyfrogramu, będzie mu na koniec brakować tylko tego pierwszego bloku.
Pamiętaj też, jakie możliwości twoja aplikacja udostępnia atakującemu. Jeśli może deszyfrować dowolny szyfrogram, a ty np. raportujesz mu "błąd deszyfrowania", to można w ten sposób odszyfrować dowolne dane za pomocą padding oracle...
@Shalom: Myślałem nad użyciem innego trybu, ale na chwilę obecną chcę użyć biblioteki, która nie wspiera trybu GCM: https://github.com/bricke/Qt-AES
W każdym razie dzięki za odpowiedź na pytanie oraz na uświadomienie mnie w kwestii padding oracle. Mam zamiar jeszcze raz zweryfikować bardzo dokładnie mój pomysł, aby to szyfrowanie było bezpieczne.
@arkadiusz97: jak chcesz być bezpieczny, to zapomnij o tym, że jakiekolwiek szyfry istnieją - https://www.nccgroup.trust/us/about-us/newsroom-and-events/blog/2009/july/if-youre-typing-the-letters-a-e-s-into-your-code-youre-doing-it-wrong/
@arkadiusz97: spoko, jakby co to możesz potem przedstawić pomysł / demo a ja i @msm pokażemy ci jak to połamać... :D