|
|
Specyfikacja techniczna aplikacji VMPCrypt
1. Technologia szyfrowania
VMPCrypt wykorzystuje do szyfrowania
szyfr strumieniowy VMPC (VMPC Stream Cipher),
bazujący na
funkcji jednokierunkowej VMPC.
Do inicjowania klucza używany jest algorytm
trójfazowego inicjowania klucza -
VMPC-KSA3.
Do uwierzytelniania szyfrogramów stosowany jest algorytm
VMPC-MAC.
2. Obsługa kluczy tekstowych
VMPCrypt przyjmuje klucze w formacie tekstowym. Nie wchodzą one jednak bezpośrednio
do procedury inicjowania kluczy KSA3. Klucz tekstowy dzielony jest
na bloki o maksymalnej długości 63 bajtów. Każdy blok dopełniany jest do długości
64 bajtów kolejnymi bajtami pewnego stałego 64-bajtowego ciągu danych, będącego fragmentem pseudolosowej permutacji.
Tak przygotowany blok wchodzi do procedury inicjowania klucza
VMPC KSA (768 operacji swap).
Jeśli klucz jest dłuższy niż 63 bajty (utworzy więcej niż jeden 64-bajtowy blok), wówczas procedura jest
powtarzana, a kolejne bloki klucza operują na
permutacji P uzyskanej w poprzednim kroku (KSA rozpoczyna się od
kroku 11, tabela 2.1).
Po przemieszaniu permutacji P wszystkimi 64-bajtowymi
blokami klucza, wynikowa permutacja P wchodzi do
szyfru strumieniowego VMPC i generowany
jest 64-bajtowy strumień bajtów. Strumień ten stanowi właściwy klucz, który wchodzi do
algorytmu KSA3, wraz z uzyskanym wg zasad z pkt. 3 wektorem inicjującym i inicjuje
permutację P. Tak przygotowana permutacja P jest użyta do szyfrowania szyfrem strumieniowym VMPC.
W przypadku użycia wielu kluczy do jednego szyfrowania (funkcja "Generuj kolejny klucz")
64-bajtowe klucze uzyskane wg tego algorytmu są ze sobą xorowane. Program posiada wbudowaną kontrolę,
czy wprowadzone klucze nie są jednakowe (poszczególne klucze nie są nigdzie zapamiętywane)
i w przypadku sytuacji, gdy klucz wynikowy (po operacji xor) będzie zawierał ponad 30 bajtów zerowych,
wyświetlony zostaje komunikat i Moduł Generowania Kluczy jest automatycznie resetowany do stanu początkowego.
W wyniku działania opcji "Połącz klucze" klucz uzyskany wg powyższego algorytmu wchodzi do KSA, a następnie
generowany jest strumień wartości szyfrem VMPC, który to strumień, po zamianie na format tekstowy przy
jednoczesnym odpowiednim wydłużeniu klucza, stanowi wynikowy klucz tekstowy. Następnie podczas
szyfrowania jest on traktowany tak samo, jak opisano powyżej dla zwykłych kluczy tekstowych (dzielenie na 63 bajtowe bloki itd.).
Algorytm generowania kluczy z przypadkowych ruchów myszką umieszcza w 8-bajtowej tablicy:
poprzednią pozycję kursora myszki (2 bajty); wartość bieżącego licznika czasu w milisekundach (1/1000 s),
oraz aktualną pozycję kursora myszki (2 bajty). Tak przygotowana tablica
wchodzi do algorytmu KSA, który operuje na sekwencyjnie przetwarzanej permutacji P (KSA rozpoczyna się od
kroku 11, tabela 2.1).
Po uzyskaniu wystarczającej liczby losowych danych, z wynikowej permutacji P generowany jest
strumień wartości szyfrem VMPC, który to strumień, po zamianie na format tekstowy przy
jednoczesnym odpowiednim wydłużeniu klucza, stanowi wynikowy klucz tekstowy. Następnie podczas
szyfrowania jest on traktowany tak, jak opisano powyżej dla kluczy tekstowych (dzielenie na 63 bajtowe bloki itd.).
3. Gospodarowanie wektorem inicjującym (IV)
Każdy zaszyfrowany plik w archiwum posiada własny unikalny wektor inicjujący. Zaszyfrowane obie kopie nagłówka archiwum (zapisane na początku archiwum),
zaszyfrowane dwie kopie bloku nazw plików (zapisane na końcu archiwum) oraz zaszyfrowany tekst komentarza - wszystkie posiadają własne
unikalne wektory inicjujące.
Główny wektor inicjujący dla danego archiwum pozyskany jest z bieżącego czasu (rok, miesiąc, dzień, godzina, minuta, sekunda, milisekunda [1/1000 s]).
Czas umieszczany jest w 16-bajtowej tablicy, która wchodzi do
VMPC KSA (768 operacji swap).
Następnie tak zainicjowana permutacja P wchodzi do
szyfru strumieniowego VMPC
i generowane jest 16 bajtów, które stanowią wynikowy wektor inicjujący (IV).
Tak uzyskany wektor wchodzi do algorytmu KSA3, wraz z uzyskanym wg zasad z pkt. 2 kluczem, inicjuje
permutację P i tak zainicjowana permutacja P jest użyta do szyfrowania.
Kolejne wektory inicjujące (dla kolejnych plików, nagłówka, itd.) są generowane przy pomocy
szyfru strumieniowego VMPC. Po zaszyfrowaniu danego bloku (np. pliku) szyfr VMPC generuje
nadmiarowe 16 bajtów, które stanowią wektor inicjujący wykorzystany do
zaszyfrowania kolejnego bloku danych (kolejnego pliku, kolejnej kopii nagłówka, itd.).
Podczas aktualizacji archiwum generowany jest nowy wektor inicjujący z bieżącego czasu.
Wszystkie pliki aktualizowane w archiwum bądź dodawane do archiwum, tekst komentarza,
obie kopie nagłówka oraz bloku nazw plików, są szyfrowane nowymi
wektorami inicjującymi.
4. Gospodarowanie sumami kontrolnymi MAC
Każdy blok danych (plik, pierwsza i druga kopia nagłówka, pierwsza i druga kopia bloku nazw plików,
tekst komentarza - posiadają własne 20-bajtowe sumy kontrolne MAC, obliczone algorytmem
VMPC-MAC.
Przy każdym deszyfrowaniu tych bloków suma kontrolna MAC jest obliczana i porównywana z tą
zapisaną w archiwum. W przypadku niezgodności sygnalizowany jest komunikat
o treści "MAC: Błąd...", co zwykle oznacza, że użyty został nieprawidłowy klucz lub że
szyfrogram został zakłócony.
5. Szyfrowanie wiadomości tekstowych (emaili)
Wprowadzony w edytorze tekst szyfrowany jest jako ciąg znaków ASCII zgodnie
z ogólnymi zasadami opisanymi w pkt. 1-4. Suma kontrolna MAC (20 bajtów) oraz wektor inicjujący (16 bajtów)
zaszyfrowanego tekstu są zapisywane na końcu szyfrogramu. Tak przygotowany szyfrogram zamieniany jest
na format zapisu tekstowego Base64.
|
|
|
|
Publikacja na konferencji Międzynarodowego Stowarzyszenia Badań Kryptologicznych (IACR) FSE 2004
|
|
Publikacje na Krajowej Konferencji Zastosowań Kryptografii Enigma w Warszawie
|
|
Nagroda Wrocławskiego Centrum Transferu Technologii przy Politechnice Wrocławskiej
|
|
Rekomendowany projekt magazynu Software Developer's Journal
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|