Powrót do proste szyfry podstawieniowe z wykorzystaniem vb.net i ASCII

wykorzystanie liczb pierwszych w prostych szyfrach podstawieniowych

W kryptografii często używa się liczb pierwszych, wykorzystuje się ich specyficzne właściwości, które są nieocenione w nowoczesnej kryptografii. W podstawowym artykule do szyfrowania używaliśmy dodawania i odejmowania, poprzez zmianę pozycji litery w słowniku, używaliśmy dodawania i odejmowania, ponieważ po ich użyciu otrzymywaliśmy liczby całkowite. Innym operatorem, który po użyciu również daje liczbę całkowitą, jest mnożenie. Jednak jego wykorzystanie jest dużo bardziej kłopotliwe. Przypuśćmy że chcemy zaszyfrować wartość 54 przy użyciu szyfru *12 (mnożenie razy 12)

54 = (54 * 12) mod 256 =648 mod 256 = 2*256 + 136 = 136 wartość zaszyfrowana *12

Czy takie szyfrowanie jest skuteczne? Spróbujmy odwrócić szyfr z kryptogramu. Wiemy że szyfr jest *12 i znamy rezultat szyfrowania którym jest 136

(x*12) mod 256 = 136    ||  12x -(256*y) = 136  || y=(12x-136)/256

Oczywiste jest, że x przyjmuje wartości, od 0 do 255 a y należy do zbioru liczb całkowitych, tak więc sprawdzając odpowiedzi prostym algorytmem:

Algorytm wskazuje, że nasza liczba x może być liczbą (54,118, 182, 246) Sprawdźmy więc

246 || (246*12) mod 256 = 2952 mod 256 = 11*256 +136 =136

182 || (182*12) mod 256 = 2184 mod 256 = 8*256 +136 =136

118 || (118*12) mod 256 = 1416 mod 256 = 5*256 +136 =136

54  || (54*12) mod 256 = 648 mod 256 = 2*256 +136 =136

Nasz wzór ma wiele rozwiązań, co wiąże się z tym, że zaszyfrowanie nim wartości 246, 182, 118 po odszyfrowaniu da wartość najniższą 54. Sprawdźmy co się jednak stanie, gdy użyjemy do przesunięcia liczby pierwszej? Czy odwrócenie reszty z dzielenia da w odpowiedzi wiele rozwiązań? Użyjmy prostej liczby pierwszej *11

54 = (54 * 11) mod 256 =594 mod 256 = 2*256 + 82 = 82 wartość zaszyfrowana *12

y=(11x-82)/256

Algorytm wskazuje, że naszą liczbą x może być tylko liczba 54. Co więcej, nie ma skutecznego wzoru na obliczanie liczby pierwszej (mimo iż odkryto już bardzo wielkie liczby pierwsze). Mimo iż liczb pierwszych jest ograniczona ilość (tych znanych), jest ich wystarczająco dużo, aby skutecznie zaszyfrować wiadomość, co więcej, kiedy zaszyfrujemy wiadomość lub obrazek przy pomocy dodawania, lub odejmowania zachowujemy ich pierwotny rozkład wartości, który jest zwiększony, lub zmniejszony, łatwo wtedy określić długość klucza szyfrującego sprawdzając, czy taki rozkład ma stałą amplitudę zmian sezonowych. Aby usunąć ten problem, należy pozbyć się tej amplitudy, poprzez mnożenie wartości klucza/indeksu, nie da się więc tak łatwo, poznać długości klucza co komplikuje sprawę. Najlepiej widać to podczas szyfrowania obrazków, wybierzmy sobie jakąś liczbę pierwszą, np. 139:

Widać różnicę gołym okiem. Spowodowane jest to tym, że wszystkie wartości na pierwszym obrazku zostały zamienione na wartości o x razy większe, a wartości w obrazku drugim wartości nie zostały zwiększone ani zmniejszone, one zostały podmienione na wartości wynikające z działania odpowiedniej funkcji. Wartości w drugim obrazku nie są w żaden sposób ze sobą powiązane, jak to bywa w obrazku pierwszym. Jeśli weźmiemy wartości kolorów:

kolor Obrazek +139 Obrazek *139
(203,205,207) (203+139) mod 256 = 87

(205+139) mod 256 = 89

(207+139) mod 256 = 91

(203*139) mod 256 = 57

(205*139) mod 256 = 79

(207*139) mod 256 = 101

Mimo iż kolory w +139 nie są identyczne ich odcień został zachowany, ich zależność wewnętrzna i zewnętrzna (w skali całego obrazka) została zachowana. Zależność ta przy działaniu *139 została zaburzona i otrzymaliśmy kolor o innym odcieniu i barwie.

Przykładowy algorytm szyfrujący tą metodą:

Program do odszyfrowania takiego obrazka:  

Oba te algorytmy działają na opisanej powyżej zasadzie. Przestawienie tekstu też nie powinno stanowić problemu: 

Mimo wszystko metoda ta nadal będzie podatna na analizę statystyczną, poprzez podstawianie pod znaki w kryptogramie litery najczęściej występujące dobierzemy dla każdej odpowiednie przesunięcie, można również zastosować metodą siłową (sprawdzając liczby pierwsze, których jest ograniczona ilość). Wszystkie te metody powinny przynieść skutek w miarę rozsądnym czasie, jeśli będziemy dysponowali odpowiednią ilością próbek. Model taki komplikuje fakt, że do utworzenia kryptogramu posłużyły trzy zmienne, których deszyfrant nie zna, nawet gdyby znał elementy ukryte to i tak trudno byłoby mu oszacować wartość, jaka została użyta do zaszyfrowania wiadomości, ponieważ:

Gdzie a,b,c jest zbiorem liczb naturalnych. Jedynie znając część obrazu jawnego, dalibyśmy radę odszyfrować obrazek poprzez określenie podstawień jej wartości względem wartości oryginalnej. Metodę tą można użyć również do szyfrowania struktury plików. Stworzenie bardziej złożonego modelu sprawia, że jego złamanie jest bardzo trudne.

Kod łączący liczby pierwsze i szyfr z kluczem:

Kod deszyfrujący powyższą metodę

 

 

 

 

Permalink do tego artykułu: https://visualmonsters.cba.pl/kryptografia/szyfr-podstawieniowy-kluczem/wykorzystanie-pierwszych-podstawieniowych/