Szyfr afiniczny

Z testwiki
Przejdź do nawigacji Przejdź do wyszukiwania

Szyfr afinicznyszyfr należący do grupy monoalfabetycznych szyfrów podstawieniowych.

Rodzina szyfrów monoalfabetycznych posiada jedną bardzo ważną cechę, a mianowicie jednej literze alfabetu jawnego odpowiada dokładnie jedna litera alfabetu tajnego. Funkcja szyfrująca wygląda następująco:

f(x)=ax+b mod m, gdzie
x to szyfrowana litera, (a,b) jest kluczem, a m to liczba liter w alfabecie (zwykle korzystamy z m=26 bo tyle liter ma język angielski)

Łatwo zauważyć, że jeśli a=1, to mamy do czynienia ze zwykłym przesunięciem.

Szyfr afiniczny ma sens tylko wtedy, gdy funkcja afiniczna f jest różnowartościowa, tzn. gdy dla dowolnego y należącego do zbioru klas reszt m równanie

ax+bymod m

ma co najwyżej jedno rozwiązanie ze względu na zmienną x. Zapiszmy nasze równanie w sposób następujący:

axybmod m.

Zauważmy, że gdy wartości y przebiegają cały zbiór m, to i wartości yb się wyczerpują, czyli wystarczy jeśli zbadamy rozwiązywalność równań

axymod m

dla ym. Równanie to ma dokładnie jedno rozwiązanie dla każdego ym wtedy i tylko wtedy, gdy NWD(a,m)=1 (gdzie NWD oznacza największy wspólny dzielnik dwóch liczb).

Na przykład gdy m=26=213 to wartości a należące do 26 dla których NWD(a,26)=1 są następujące:

1, 3, 5, 7, 9, 11, 15, 17, 19, 21, 23, 25.

Parametr b może być dowolny toteż mamy 1226=312 możliwych kluczy. Jest to bardzo mała liczba kluczy, która nie daje odpowiedniego bezpieczeństwa, toteż szyfr ten nie jest w zasadzie stosowany.

Funkcja deszyfrująca dla tego szyfru wygląda tak:

d(y)=a1*(yb)modm,

gdzie a1 jest odwrotnością a w pierścieniu 26.

Wzór wynika z wyliczeń:

D(E(x))=a1(E(x)b)modm=a1(((ax+b)modm)b)modm=a1(ax+bb)modm=a1axmodm=xmodm.

Przykład działania

Przyjmując, że K = (7, 5) należy zaszyfrować i odszyfrować słowo KOT.

Dla uproszenia korzystamy z mod 26 (alfabet angielski ma 26 znaków). Funkcja szyfrująca ma postać:

e(x)=7x+5

Zmieniamy litery wyrazu „kot” na wartości liczbowe:

K = 10; O = 14; T = 19;

Szyfrowanie:

10*7+5mod26=75mod26=23
14*7+5mod26=103mod26=25
19*7+5mod26=138mod26=8

Tekst zaszyfrowany odpowiada ciągowi 23, 25, 8, czyli: XZI.

Deszyfrowanie:

71mod26=15

Funkcja deszyfrująca ma postać:

d(y)=15*(y5)mod26
15*(235)mod26=270mod26=10
15*(255)mod26=300mod26=14
15*(85)mod26=45mod26=19

Ciąg liczb 10, 14, 19 odpowiada naszemu wyjściowemu KOT.

Zobacz też