07.04.2024







Projekt VMPC:


Badania nad funkcją VMPC i problemem matematycznym "czy P=NP?"
pieknafunkcja.pl



Aplikacja do szyfrowania danych VMPCrypt
szyfrowanie.com



Gra Permutu na bazie funkcji VMPC
permutu.pl







Zobacz także:


Gra komputerowa Urban



Multimedialne kursy do nauki języka angielskiego
ADL Publishing




Szyfr strumieniowy VMPC



Źródłowe prace naukowe opisujące Technologię Szyfrowania VMPC:

Implementacje Technologii Szyfrowania VMPC:



Szyfr strumieniowy VMPC (VMPC Stream Cipher) opracowałem w roku 2004 i opublikowałem między innymi na międzynarodowej konferencji kryptograficznej Fast Software Encryption w 2004 roku w Delhi w Indiach.

Szyfr ten może być uważany za bezpieczniejszą alternatywę dla popularnego algorytmu szyfrowania strumieniowego RC4 zaprojektowanego przez Rona Rivesta.

Głównymi zaletami szyfru VMPC są prostota, bezpieczeństwo i wysoka wydajność.

Główne źródła przewagi szyfru VMPC nad algorytmem RC4:
  • VMPC oferuje znacznie lepsze własności statystyczne generowanego strumienia danych (strumień VMPC jest znacznie bliższy modelowi idealnie losowego ciągu liczb niż ten generowany przez RC4).
  • VMPC posiada znacznie lepszy algorytm inicjowania klucza (VMPC-KSA / VMPC-KSA3) - bezpieczniejszy i zaprojektowany do przetwarzania nie tylko klucza (jak KSA RC4), ale także wektora inicjującego, którego użycie jest w praktyce niezbędne.
  • szyfr VMPC wykorzystuje własności funkcji jednokierunkowej VMPC do stworzenia dodatkowej warstwy bezpieczeństwa kryptograficznego przeciw atakom mającym na celu odtworzenie stanu wewnętrznego szyfru.
Szyfr VMPC generuje strumień pseudolosowych 8-bitowych wartości ze stanu wewnętrznego (internal state) obejmującego 256-elementową permutacją i dwie 8-bitowe zmienne. Początkowa wartość stanu wewnętrznego jest obliczana na podstawie wartości tajnego klucza oraz jawnego wektora inicjującego przy pomocy algorytmu inicjowania klucza (Key Scheduling Algorithm, KSA). Podczas szyfrowania stan wewnętrzny ulega modyfikacji po wygenerowaniu każdego bajtu. Stan wewnętrzny szyfru VMPC może przyjmować 256!*2562=21700 możliwych postaci.

Szyfrowanie odbywa się poprzez poddanie kolejnych bajtów szyfrowanej wiadomości operacji logicznej xor (alternatywa wykluczająca) z kolejnymi bajtami generowanego przez szyfr strumienia. Deszyfrowanie realizowane jest przez wykonanie identycznej operacji (dzięki własności A xor B xor B = A).

Jeśli podczas szyfrowania i deszyfrowania użyte zostało to samo hasło, strumień użyty do szyfrowania i deszyfrowania będzie taki sam i wiadomość zostanie prawidłowo odszyfrowana. Gdyby do deszyfrowania użyć innego hasła (różniącego się choćby jednym bitem od właściwego hasła), szyfr VMPC wygeneruje "całkowicie" inny strumień danych i jako wynik deszyfrowania otrzymamy ciąg pseudolosowych liczb.

Fundamentalnym wymogiem bezpieczeństwa podczas używania szyfru strumieniowego jest użycie innej wartości wektora inicjującego do każdej wiadomości szyfrowanej tym samym kluczem.



Aby stwierdzić, czy po odszyfrowaniu otrzymaliśmy tę samą wiadomość, która została zaszyfrowana (a więc czy użyliśmy właściwego klucza i czy zaszyfrowana wiadomość nie została w międzyczasie zmieniona), potrzebujemy dodatkowego algorytmu, który obliczy i sprawdzi tzw. kod uwierzytelniający wiadomość (Message Authentication Code - MAC).

W praktyce algorytmy obliczające kody MAC są niezbędne. Jaka bowiem byłaby wartość szyfrowania bez pewności, że po odszyfrowaniu otrzymaliśmy dokładnie tę wiadomość, która została zaszyfrowana. Dla szyfru VMPC funkcję tę spełnia specjalnie zaprojektowany w tym celu algorytm VMPC-MAC.



Pełną specyfikację Technologii Szyfrowania VMPC można znaleźć w trzech poświęconej jej pracach naukowych.

Gotowe implementacje Technologii Szyfrowania VMPC są dostępne są za darmo w trzech językach programowania - C, Pascal/Delphi oraz Assembler.

W dwóch tabelach poniżej przedstawiono pseudokod szyfru strumieniowego VMPC oraz algorytmu inicjowania klucza VMPC-KSA / VMPC-KSA3).

Szyfr strumieniowy VMPC

  P  :  256-bajtowa tablica zawierająca permutację liczb całkowitych {0,1,...,255}
  n, s  :  8-bitowe zmienne całkowitoliczbowe
  L  :  długość wiadomości w bajtach
  +     oznacza dodawanie modulo 256

Tabela 1. Szyfr strumieniowy VMPC
powtórz kroki 1-4  L  razy:

   1. s = P[ s + P[n] ]
   2. wynik = P[P[P[s]]+1]   
   3. zamień P[n] z P[s]
   4. n = n + 1


W kroku 2 szyfru VMPC (wynik = P[P[P[s]]+1]) mamy bezpośrednie wykorzystanie funkcji jednokierunkowej VMPC. Użycie w tym miejscu funkcji VMPC tworzy dodatkową warstwę bezpieczeństwa kryptograficznego. Szyfr VMPC byłby bezpieczny nawet bez użycia funkcji VMPC (gdyby w kroku 2 wykonywano tylko operację wynik = P[s]). Ale przepuszczenie zmiennej s przez jednokierunkową funkcję VMPC tworzy dodatkową warstwę bezpieczeństwa przeciw atakom mającym na celu odtworzenie stanu wewnętrznego szyfru (permutacji P i zmiennych s, n). Atakujący, który przeprowadziłby atak ze znanym tekstem jawnym (known plaintext attack) (dzięki czemu znałby kolejne wartości strumienia powstałe w kroku 2) musiałby odtworzyć wartość permutacji P z ciągu wartości funkcji VMPC (P[P[P[s]]+1]), a więc odwrócić funkcję VMPC.


Algorytm inicjowania klucza VMPC-KSA

Algorytm inicjowania klucza VMPC-KSA jest integralnym elementem szyfru strumieniowego VMPC. Przekształca on tajny klucz i jawny wektor inicjujący (Initialization Vector) w stan wewnętrzny szyfru VMPC (w permutację P i zmienne s, n).

Każda wiadomość szyfrowana tym samym kluczem musi posiadać inną wartość wektora inicjującego. W przeciwnym razie bezpieczeństwo szyfrowania zostanie drastycznie obniżone. Wektor inicjujący jest wartością jawną i należy go dołączyć do szyfrogramu.

Algorytm występuje w dwóch wariantach:
  • Podstawowy VMPC-KSA opublikowany na konferencji FSE 2004
  • Rozwinięty później VMPC-KSA3 (o 1/3 wolniejszy, ale oferujący dodatkową warstwę bezpieczeństwa)
Jedyną różnicą między tymi wariantami jest jedno dodatkowe wywołanie funkcji mieszającej w wariancie VMPC-KSA3 (krok 3 w Tabeli 2). Poza tą różnicą algorytmy są identyczne.

Wariant VMPC-KSA3 powstał w wyniku dalszych badań nad Technologią Szyfrowania VMPC po konferencji FSE 2004. Szczegółową analizę bezpieczeństwa algorytmu VMPC-KSA3 można znaleźć w pracy naukowej poświęconej temu algorytmowi oraz na stronie www.vmpcfunction.com (w języku angielskim).

Oba algorytmy (VMPC-KSA oraz VMPC-KSA3) są zalecane do zastosowania. Powstanie VMPC-KSA3 nie było podyktowane żadną słabością podstawowego algorytmu VMPC-KSA. Algorytm VMPC-KSA3 powstał, aby dostarczyć dodatkową warstwę bezpieczeństwa redukującą do pewnego stopnia skutki hipotetycznego ataku odzyskującego stan wewnętrzny szyfru. Odbywa się to kosztem obniżenia o około 1/3 wydajności algorytmu inicjowania klucza, co jest wynikiem ponownego wykonania funkcji mieszającej dla klucza (krok 3).

Wybór pomiędzy VMPC-KSA i VMPC-KSA3 jest indywidualny. Jeśli obniżona wydajność algorytmu inicjowania klucza VMPC-KSA3 jest akceptowalna, wówczas lepszym wyborem jest VMPC-KSA3. Jednocześnie w aplikacjach wymagających wysokiej wydajności algorytmu inicjowania klucza można bez żadnych obaw stosować podstawowy wariant VMPC-KSA.


Zmienne jak dla szyfru strumieniowego VMPC oraz:
  n, s  
  k  :  długość klucza kryptograficznego w bajtach; k ∈ {16,17,...,64}
  K  :  k-bajtowa tablica zawierająca klucz kryptograficzny
  v  :  długość wektora inicjującego w bajtach; v ∈ {16,17,...,64}
  V  :  v-bajtowa tablica zawierająca wektor inicjujący
  i  :  tymczasowa zmienna całkowitoliczbowa
  +     oznacza dodawanie modulo 256

Tabela 2. Algorytm inicjowania klucza VMPC-KSA / VMPC-KSA3
0. s = 0;  P[i] = i  dla i ∈ {0,1,...,255}    

Podstawowy wariant VMPC-KSA:

1. KSARound(K, k)
2. KSARound(V, v)
Wariant VMPC-KSA3:

1. KSARound(K, k)
2. KSARound(V, v)
3. KSARound(K, k)

Definicja funkcji KSARound(M, m):
  4. n = i = 0
  5. powtórz kroki 6-9  768  razy:
      6. s = P[ s + P[n] + M[i] ]
      7. zamień P[n] z P[s]

      8. i = (i + 1) mod m
      9. n = n + 1

Przykładowe dane wyjściowe algorytmów (test vectors) można znaleźć w pracach naukowych oraz na stronie specjalistycznej (w języku angielskim):

www.vmpcfunction.com





Publikacje naukowe i popularnonaukowe, w których opisana została Technologia Szyfrowania VMPC:
  • VMPC One-Way Function and Stream Cipher (Funkcja jednokierunkowa i szyfr strumieniowy VMPC). Międzynarodowa konferencja kryptograficzna Fast Software Encryption (FSE 2004), Delhi, Indie, 5-7 lutego 2004 [PDF]
  • Funkcja jednokierunkowa VMPC i system uwierzytelnionego szyfrowania VMPC-Tail-MAC. Krajowa Konferencja Zastosowań Kryptografii Enigma 2004, Warszawa, 10-13 maja 2004 [PDF]
  • Rok w kryptoanalizie VMPC, schemat uwierzytelnionego szyfrowania VMPC-MAC oraz algorytm VMPC-HASH. Krajowa Konferencja Zastosowań Kryptografii Enigma 2005, Warszawa, 30 maja - 02 czerwca 2005 [PDF]
  • VMPC-MAC: A Stream Cipher Based Authenticated Encryption Scheme (VMPC-MAC: schemat uwierzytelnionego szyfrowania oparty na szyfrze strumieniowym). Archiwum Międzynarodowego Stowarzyszenia Badań Kryptologicznych IACR ePrint Archive, 11 listopada 2004, Report 2004/301 [PDF]
  • Security of Symmetric Encryption Schemes with One-Way IND-CNA Key Setup (Bezpieczeństwo symetrycznych schematów szyfrowania z jednokierunkowym inicjowaniem klucza typu IND-CNA). Archiwum Międzynarodowego Stowarzyszenia Badań Kryptologicznych IACR ePrint Archive, 20 maja 2004, Report 2004/120. [PDF]
  • Artykuł "Funkcja jednokierunkowa i szyfr strumieniowy VMPC", magazyn komputerowy SOFTWARE 2.0 numer 9 (117), wrzesień 2004, strony 26-29. Zobacz okładkę magazynu. Artykuł online [PDF]
  • Artykuł "Szyfrowanie i uwierzytelnianie z użyciem szyfru VMPC", magazyn komputerowy Software Developer's Journal numer 9 (129), wrzesień 2005, strony 24-27. Artykuł opublikowany w polskiej, angielskiej i francuskiej edycji magazynu. Artykuł online [PDF]







FSE 2004
Publikacja na konferencji Międzynarodowego Stowarzyszenia Badań Kryptologicznych (IACR) FSE 2004

Konferencje Enigma
Publikacje na Krajowej Konferencji Zastosowań Kryptografii Enigma w Warszawie

WCTT
Nagroda Wrocławskiego Centrum Transferu Technologii przy Politechnice Wrocławskiej

Software Developer's Journal
Rekomendowany projekt magazynu Software Developer's Journal























Copyright © 1999-2022 by Bartosz Żółtak
Aktualizacja: 07.04.2024