Temat: Szyfrator/deszyfrator MARS + RSA
Opis:
W ramach projektu stworzony zostanie program do szyfrowania plików oparty o algorytmy MARS (szyfrowanie pliku) oraz RSA (szyfrowanie klucza sesyjnego).
Szczegóły
Technologia: Java w środowisku Eclipse
Biblioteka: Java Cryptography Extension w ramach IBM SDK
Długość bloku algorytmu: 128 bitów
Długość klucza: 128, 192, 256 bitów
Tryb pracy: ECB, CBC, CFB lub OFB (dla dwóch ostatnich z długością podbloku 8, 16, 32, 64 bity)
Wektor początkowy : generowany przez klasę Cipher
Klucz sesji: generowany przez klasę SecureRandom, szyfrowany kluczem publicznym RSA odbiorcy
RSA: Klucz publiczny i prywatny są generowane za pomocą klasy KeyPairGenerator
Struktura pliku
<encryptedFile>
<encryptedHeader>
<algorithm>nazwa algorytmu</algorithm>
<keysize>rozmiar klucza</keysize>
<blocksize>rozmiar bloku</blocksize>
<mode>tryb algorytmu</mode>
<iv>wektor początkowy; element ten nie występuje dla trybu ECB</iv>
<users>
<user>
<email>mail</email>
<key>klucz sesyjny zaszyfrowany kluczem publicznym danego użytkownika </key>
</user>
...
</users>
<padding>Liczba bajtów dopełnienia do ostatniego bloku szyfrogramu; element ten nie występuje dla trybów CFB i OFB</padding>
</encryptedHeader>
</encryptedFile>
(Bajt zerowy)Zaszyfrowane dane
Interfejs:
Wyniki testów
Testowanie odbywało się na komputerze z procesorem AMD Turion(tm) X2 Dual-Core Mobile RM-74 (2 CPUs), ~2.2GHz, pamięcią RAM 4GB oraz 64-bitowym systemem operacyjnym Windows 7. Poddawany testowaniu był plik multimedialny (wav) o wielkości 75 MB. Algorytm pracował z kluczem o długości 192 bitów, z jednym odbiorcą. W razie podania nieprawidłowego hasła klucza prywatnego lub podania nieprawidłowego klucza prywatnego, program ponownie enkryptuje podany zaszyfrowany plik, aby imitować długością działania poprawną pracę.
Tryb pracy | Szyfrowanie | Odszyfrowanie |
---|---|---|
ECB | 4,406 s | 5,873 s |
CBC | 5,114 s | 6,272 s |
CFB8 | 60,201 s | 59,212 s |
CFB64 | 8,474 s | 8,934 s |
OFB8 | 61,124 s | 60,004 s |
OFB64 | 9,635 s | 8,911 s |