Szyfr afiniczny – szyfr 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:
gdzie
to szyfrowana litera,
jest kluczem, a
to liczba liter w alfabecie (zwykle korzystamy z
bo tyle liter ma język angielski)
Łatwo zauważyć, że jeśli
to mamy do czynienia ze zwykłym przesunięciem.
Szyfr afiniczny ma sens tylko wtedy, gdy funkcja afiniczna
jest różnowartościowa, tzn. gdy dla dowolnego y należącego do zbioru klas reszt
równanie
![{\displaystyle ax+b\equiv y\mod \ m}](https://wikimedia.org/api/rest_v1/media/math/render/svg/1419dd7805524db2c498a5d857b550a637149f03)
ma co najwyżej jedno rozwiązanie ze względu na zmienną
Zapiszmy nasze równanie w sposób następujący:
![{\displaystyle ax\equiv y-b\mod \ m.}](https://wikimedia.org/api/rest_v1/media/math/render/svg/72f722796ca38d9c7a0fc7520ab40dc2d3b4b0a5)
Zauważmy, że gdy wartości
przebiegają cały zbiór
to i wartości
się wyczerpują, czyli wystarczy jeśli zbadamy rozwiązywalność równań
![{\displaystyle ax\equiv y\mod \ m}](https://wikimedia.org/api/rest_v1/media/math/render/svg/7f533cb1f5a9959e9598ddc6798853cf332750fc)
dla
Równanie to ma dokładnie jedno rozwiązanie dla każdego
wtedy i tylko wtedy, gdy
(gdzie NWD oznacza największy wspólny dzielnik dwóch liczb).
Na przykład gdy
to wartości
należące do
dla których
są następujące:
- 1, 3, 5, 7, 9, 11, 15, 17, 19, 21, 23, 25.
Parametr
może być dowolny toteż mamy
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:
![{\displaystyle d(y)=a^{-1}*(y-b)\mod m,}](https://wikimedia.org/api/rest_v1/media/math/render/svg/056d02df487c1b1357f0a0e06b653360989f3ebe)
gdzie
jest odwrotnością
w pierścieniu
Wzór wynika z wyliczeń:
![{\displaystyle {\begin{aligned}{\mbox{D}}({\mbox{E}}(x))&=a^{-1}({\mbox{E}}(x)-b)\mod {m}\\&=a^{-1}(((ax+b)\mod {m})-b)\mod {m}\\&=a^{-1}(ax+b-b)\mod {m}\\&=a^{-1}ax\mod {m}\\&=x\mod {m}.\end{aligned}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/b2e887eec7aa8152514d75a13a9004be053e7646)
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ć:
![{\displaystyle e(x)=7x+5}](https://wikimedia.org/api/rest_v1/media/math/render/svg/b902706c0be21690ba2c696da72e4636dbd24616)
Zmieniamy litery wyrazu „kot” na wartości liczbowe:
- K = 10; O = 14; T = 19;
Szyfrowanie:
![{\displaystyle 10*7+5\mod 26=75\mod 26=23}](https://wikimedia.org/api/rest_v1/media/math/render/svg/67740df9ece9224bea991bb6614cff6baf606067)
![{\displaystyle 14*7+5\mod 26=103\mod 26=25}](https://wikimedia.org/api/rest_v1/media/math/render/svg/9feed3e7a696d62f47894a970921c11213a2ec74)
![{\displaystyle 19*7+5\mod 26=138\mod 26=8}](https://wikimedia.org/api/rest_v1/media/math/render/svg/1e2d6943466f7b01aac7957c0b2761137a3c773d)
Tekst zaszyfrowany odpowiada ciągowi 23, 25, 8, czyli: XZI.
Deszyfrowanie:
![{\displaystyle 7^{-1}\mod 26=15}](https://wikimedia.org/api/rest_v1/media/math/render/svg/ec3083022af0651996d6170e94b25b8bc36057c1)
Funkcja deszyfrująca ma postać:
![{\displaystyle d(y)=15*(y-5)\mod 26}](https://wikimedia.org/api/rest_v1/media/math/render/svg/44b15809c14ae5975a4938634275c3ee16cd2e91)
![{\displaystyle 15*(23-5)\mod 26=270\mod 26=10}](https://wikimedia.org/api/rest_v1/media/math/render/svg/c8d604c0b92b0d971f22a76386c872be6d29ffa1)
![{\displaystyle 15*(25-5)\mod 26=300\mod 26=14}](https://wikimedia.org/api/rest_v1/media/math/render/svg/a2aa5e42d6a142096fc34415e958ee3f7156003c)
![{\displaystyle 15*(8-5)\mod 26=45\mod 26=19}](https://wikimedia.org/api/rest_v1/media/math/render/svg/56f0d97468ba7aa65fb2c5b6cf99af988b497e7c)
Ciąg liczb 10, 14, 19 odpowiada naszemu wyjściowemu KOT.