# 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 #YÖNLENDİRME #YÖNLENDİRME fonksiyonu ile şifrelenir, burada b kaydırmanın büyüklüğüdür.


## Tanım.
Burada, m boyutundaki bir alfabenin harfleri ilk olarak #YÖNLENDİRME 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;
E(x)=(ax+b)m
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;
D(x)=a^-1(x-b)m
burada #YÖNLENDİRME , a modulo m'nın modüler çarpımsal tersidir. Yani, şu denklemi karşılar;
1 = a a^-1m
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;
 D(E(x)) amp;= a^-1(E(x)-b)m
 amp;= a^-1(((ax+b)m)-b)m
 amp;= a^-1(ax+b-b)m
 amp;= a^-1ax m
 amp;= xm


## 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 #YÖNLENDİRME ile bir Afin şifresidir, çünkü şifreleme fonksiyonu basitçe doğrusal bir kaydırmaya indirgenir. Atbash şifresi ise #YÖNLENDİRME kullanır.
İngilizce mesajların şifrelenmesi, özel durumu göz önüne alındığında (yani #YÖNLENDİRME ), 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.


### Şifreleme.
Bu şifreleme örneğinde, ş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ÖNLENDİRME olacaktır. Mesajı şifrelemenin ilk adımı her harfin sayısal değerlerini yazmaktır.
Şimdi, x'in her bir değerini alın ve denklemin ilk kısmını, #YÖNLENDİRME çözün. Her karakter için #YÖNLENDİRME değerini bulduktan sonra, #YÖNLENDİRME 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.
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.


### Şifre çözme.
Bu şifre çözme örneğinde, şifresi çözülecek olan şifreli metin, şifreleme örneğindeki şifreli metindir. İlgili şifre çözme fonksiyonu #YÖNLENDİRME 'dır, burada #YÖNLENDİRME 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.
Şimdi, bir sonraki adım #YÖNLENDİRME '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 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.


### 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:


### 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))
 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')