Affine şifreleme
Affine şifreleme veya Doğrusal şifreleme, bir tür monoalfabetik ikame şifresi olup, bir alfabedeki her harf sayısal eşdeğeriyle eşleştirilir, basit bir matematiksel fonksiyon kullanılarak şifrelenir ve tekrar bir harfe dönüştürülür. Kullanılan formül, her harfin başka bir harfe şifrelendiği ve tekrar geri döndüğü anlamına gelir, yani şifre esasen hangi harfin hangisine gideceğini düzenleyen bir kurala sahip standart bir ikame şifresidir. Bu nedenle, tüm ikame şifrelerinin zayıflıklarına sahiptir. Her harf (ax + b) mod 26[a] fonksiyonu ile şifrelenir, burada b kaydırmanın büyüklüğüdür.
Tanım
Burada, m boyutundaki bir alfabenin harfleri ilk olarak 0 ... (m - 1) aralığındaki tam sayılara eşlenir. Daha sonra modüler aritmetik kullanarak her bir düz metin, harfinin karşılık geldiği tam sayıyı bir şifreli metin harfine karşılık gelen başka bir tamsayıya dönüştürür. Tek bir harf için şifreleme işlevi şöyledir;
burada modül m, alfabenin boyutu ve a ile b ise şifrenin anahtarlarıdır. a değeri, a ve m aralarında asal olacak şekilde seçilmelidir. Şifre çözme fonksiyonu şöyledir;
burada a-1, a modulo m'nın modüler çarpımsal tersidir. Yani, şu denklemi karşılar;
a'nın çarpımsal tersi yalnızca a ve m'nin eş olması durumunda mevcuttur. Dolayısıyla a kısıtlaması olmadan şifre çözme mümkün olmayabilir. Şifre çözme fonksiyonunun şifreleme fonksiyonunun tersi olduğu aşağıdaki gibi gösterilebilir;
Zayıf yönler
Afin şifresi, özünde bir monoalfabetik ikame şifresi olduğundan, bu şifreler sınıfının zayıflıklarını miras alır. Sezar şifrelemesi a = 1 ile bir Afin şifresidir, çünkü şifreleme fonksiyonu basitçe doğrusal bir kaydırmaya indirgenir. Atbash şifresi ise a = -1 kullanır.
İngilizce mesajların şifrelenmesi, özel durumu göz önüne alındığında (yani m = 26), 26 önemsiz Sezar şifresini saymazsak, toplam 286 önemsiz olmayan afin şifre vardır. Bu sayı, 26'dan küçük olan 26 ile aralarında asal olan 12 sayı olduğu gerçeğinden gelir (bunlar a'nın olası değerleridir). Her a değeri, 26 farklı toplama kaymasına sahip olabilir (b değeri); bu nedenle 12 × 26 veya 312 olası anahtar vardır. Bu çeşitlilik eksikliği, Kerckhoffs İlkesi ışığında düşünüldüğünde sistemi oldukça güvensiz hale getirir.
Şifrenin birincil zayıflığı, kriptanalistin iki şifreli metin karakterinin düz metnini (frekans analizi, kaba-kuvvet (brute force), tahmin veya başka bir yolla) keşfedebilmesi durumunda anahtarın bir eşzamanlı denklem çözülerek elde edilebileceği gerçeğinden kaynaklanmaktadır. a ve m'nin nispeten asal olduğunu bildiğimizden, bu otomatik bir sistemde birçok "yanlış" anahtarı hızla elemek için kullanılabilir.
Afin şifrelerde kullanılan aynı dönüşüm türü, bir sözde rastgele sayı üreteci türü olan doğrusal kongrüansiyel üreteçlerde de kullanılır. Bu üreteç, afin şifrenin güvenli olmamasıyla aynı sebepten dolayı kriptografik olarak güvenli sözde rastgele sayı üreteci değildir.
Örnek
Şifreleme ve şifre çözmeyi gösteren bu örnekte İngiliz alfabesi temel alınarak, alfabe A'dan Z'ye kadar olan harfler olacak ve aşağıdaki tabloda bulunan karşılık gelen değerlere sahip olacaktır.
A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 |
Şifreleme
Bu şifreleme örneğinde,[1] şifrelenecek düz metin, her harfin sayısal değerleri için yukarıda belirtilen tablo kullanılarak, a 5, b 8 ve kullanılan alfabede 26 karakter olduğu için m 26 olarak alınarak "AFFINE CIPHER" şeklindedir. Sadece a değerinin 26 ile eş olması gerektiğinden bir kısıtlaması vardır. a'nın alabileceği olası değerler 1, 3, 5, 7, 9, 11, 15, 17, 19, 21, 23 ve 25'tir. b için değer, a 1'e eşit olmadığı sürece keyfi olabilir, çünkü bu şifrenin kaymasıdır. Böylece, bu örnek için şifreleme fonksiyonu y' = E(x) = (5x + 8) mod 26 olacaktır. Mesajı şifrelemenin ilk adımı her harfin sayısal değerlerini yazmaktır.
düz metin | A | F | F | I | N | E | C | I | P | H | E | R |
---|---|---|---|---|---|---|---|---|---|---|---|---|
x | 0 | 5 | 5 | 8 | 13 | 4 | 2 | 8 | 15 | 7 | 4 | 17 |
Şimdi, x'in her bir değerini alın ve denklemin ilk kısmını, (5x + 8) çözün. Her karakter için (5x + 8) değerini bulduktan sonra, (5x + 8) sonucunu 26'ya böldüğünüzde kalanı alın. Aşağıdaki tablo şifreleme işleminin ilk dört adımını göstermektedir.
düz metin | A | F | F | I | N | E | C | I | P | H | E | R |
---|---|---|---|---|---|---|---|---|---|---|---|---|
x | 0 | 5 | 5 | 8 | 13 | 4 | 2 | 8 | 15 | 7 | 4 | 17 |
(5x + 8) | 8 | 33 | 33 | 48 | 73 | 28 | 18 | 48 | 83 | 43 | 28 | 93 |
(5x + 8) mod 26 | 8 | 7 | 7 | 22 | 21 | 2 | 18 | 22 | 5 | 17 | 2 | 15 |
Mesajı şifrelemenin son adımı, karşılık gelen harfler için tablodaki her bir sayısal değeri aramaktır. Bu örnekte, şifrelenmiş metin IHHWVCSWFRCP olacaktır. Aşağıdaki tablo Affine şifrelemesinde bir mesajın şifrelenmesi için tamamlanmış tabloyu göstermektedir.
düz metin | A | F | F | I | N | E | C | I | P | H | E | R |
---|---|---|---|---|---|---|---|---|---|---|---|---|
x | 0 | 5 | 5 | 8 | 13 | 4 | 2 | 8 | 15 | 7 | 4 | 17 |
(5x + 8) | 8 | 33 | 33 | 48 | 73 | 28 | 18 | 48 | 83 | 43 | 28 | 93 |
(5x + 8) mod 26 | 8 | 7 | 7 | 22 | 21 | 2 | 18 | 22 | 5 | 17 | 2 | 15 |
şifreli metin | I | H | H | W | V | C | S | W | F | R | C | P |
Şifre çözme
Bu şifre çözme örneğinde, şifresi çözülecek olan şifreli metin, şifreleme örneğindeki şifreli metindir. İlgili şifre çözme fonksiyonu D'(y) = 21(y - b) mod 26'dır, burada a-1 21 ve b 8 olarak hesaplanır. Başlamak için, aşağıdaki tabloda gösterildiği gibi, şifre metnindeki her harfin sayısal karşılıkları yazılır.
şifreli metin | I | H | H | W | V | C | S | W | F | R | C | P |
---|---|---|---|---|---|---|---|---|---|---|---|---|
y | 8 | 7 | 7 | 22 | 21 | 2 | 18 | 22 | 5 | 17 | 2 | 15 |
Şimdi, bir sonraki adım 21(y - 8)'i hesaplamak ve ardından bu sonuç 26'ya bölündüğünde kalanı almaktır. Aşağıdaki tablo her iki hesaplamanın sonuçlarını göstermektedir.
şifreli metin | I | H | H | W | V | C | S | W | F | R | C | P |
---|---|---|---|---|---|---|---|---|---|---|---|---|
y | 8 | 7 | 7 | 22 | 21 | 2 | 18 | 22 | 5 | 17 | 2 | 15 |
21(y − 8) | 0 | −21 | −21 | 294 | 273 | −126 | 210 | 294 | −63 | 189 | −126 | 147 |
21(y − 8) mod 26 | 0 | 5 | 5 | 8 | 13 | 4 | 2 | 8 | 15 | 7 | 4 | 17 |
Şifreli metnin şifresini çözmenin son adımı, sayısal değerleri tekrar harflere dönüştürmek için tabloyu kullanmaktır. Bu şifre çözme işlemindeki düz metin AFFINECIPHER'dır. Son adımın tamamlandığı tablo aşağıdadır.
şifreli metin | I | H | H | W | V | C | S | W | F | R | C | P |
---|---|---|---|---|---|---|---|---|---|---|---|---|
y | 8 | 7 | 7 | 22 | 21 | 2 | 18 | 22 | 5 | 17 | 2 | 15 |
21(y − 8) | 0 | −21 | −21 | 294 | 273 | −126 | 210 | 294 | −63 | 189 | −126 | 147 |
21(y − 8) mod 26 | 0 | 5 | 5 | 8 | 13 | 4 | 2 | 8 | 15 | 7 | 4 | 17 |
düz metin | A | F | F | I | N | E | C | I | P | H | E | R |
Kodlanmış alfabenin tümü
Şifrelemeyi ve şifre çözmeyi daha hızlı hale getirmek için, açık metin ve şifreli metnin harfleri arasında bire bir harita oluşturmak üzere tüm alfabe şifrelenebilir. Bu örnekte, bire bir harita aşağıdaki gibi olacaktır:
açık metindeki harf | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
açık metindeki sayı | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 |
(5x + 8) mod 26 | 8 | 13 | 18 | 23 | 2 | 7 | 12 | 17 | 22 | 1 | 6 | 11 | 16 | 21 | 0 | 5 | 10 | 15 | 20 | 25 | 4 | 9 | 14 | 19 | 24 | 3 |
şifreli metin harfi | I | N | S | X | C | H | M | R | W | B | G | L | Q | V | A | F | K | P | U | Z | E | J | O | T | Y | D |
Programlama örnekleri
Aşağıdaki Python kodu, afin şifreleme ile metin şifrelemek için kullanılabilir:
# Prints a transposition table for an affine cipher.
def affine(a: int, b: int, s: str):
import string
D = dict(enumerate(string.ascii_lowercase, start=0))
E = {v: k for k,v in D.items()}
size = len(string.ascii_lowercase)
ret = ""
print(size)
for c in s:
N = E[c]
val = a * N + b
val = val % size
print(f"{c}({N}) -> {D[val]}({val})")
ret += D[val]
return ret
affine(7, 3, 'foobar')
Ayrıca bakınız
- Afin fonksiyonlar
- Atbash kodu
- Sezar şifrelemesi
- ROT13
- Kriptografi konuları
Notlar
Kaynakça
- ^ Kozdron, Michael. "Affine Ciphers" (PDF). 11 Temmuz 2019 tarihinde kaynağından arşivlendi (PDF). Erişim tarihi: 22 Nisan 2014.
Dış bağlantılar
- Şadi Evren ŞEKER (21 Şubat 2008). "Doğrusal Şifreleme (Affine Cipher)". 2 Şubat 2009 tarihinde kaynağından arşivlendi.