16. Yüzyıldan Kalma Güçlü Bir Şifreleme Yöntemi: Vigenere Cipher

Vigenere Şifrelemesi (Vigenere Cipher), 1530'lu yıllarda geliştirilen bir şifreleme algoritması. 19. yüzyıla kadar kırılamayacağı düşünülen bu algoritma nasıl bir şey? Basitçe açıklamaya çalışalım.
16. Yüzyıldan Kalma Güçlü Bir Şifreleme Yöntemi: Vigenere Cipher

16.yüzyıldan kalma, güzide bir şifreleme yöntemidir vigenere şifrelemesi (vigenere cipher).

basit örneklerle -ve ingiliz alfabesi üzerinden- açıklamak istersek; öncelikle, bir şifre anahtarımız olmalı. bu anahtara "crypto" diyelim. daha sonra da tabi ki şifreleyecek bir metnimiz olmalı. bu metin de "what a nice day today" olsun. daha sonra metnimizden boşlukları, noktalama işaretlerini vs. çıkararak şu hale getirelim: "whatanicedaytoday"

şimdi alt satıra metnimizi, üst satıra anahtarımızı yazalım. bunu yaparken de anahtarımızı gerektiği kadar peş peşe tekrar edelim ve metindeki her harfi bu anahtarda uygun düşen harfle eşleştirelim (aralardaki "-" işaretlerinin harfleri gösterimde aynı hizaya getirebilmek dışında hiçbir anlamı yoktur):

c--r--y-p-t--o-c--r--y--p-t-o-c-r--y-p--t
w-h-a-t--a-n--i--c--e-d-a-y-t-o-d-a--y

bilindiği gibi, ingiliz alfabesinde 26 harf bulunmakta. bu nedenle kendimize mod 26'yı kaydırma oranı olarak alıyoruz. yani diyelim ki anahtardaki ilk "c" harfi metinde "w" harfine denk geliyor. bu durumda "c" ve "w"nun alfabedeki sıralarını sayısal olarak topluyor, mod26'ya göre kalanını alıyor, bu degere karşılık gelen sıradaki harfi de şifrelenmiş metnimize yazıyoruz ki bu örnekte bahsettiğimiz harf "z" olacaktır.

işin içine mod girdiği için asıl metindeki her harf şifreli metinde tek bir harfe karşılık gelmeyeceği gibi şifreli metindeki aynı iki harf de asıl metinde farklı harflere denk gelebilecektir. örneğimiz üzerinden devam edersek "whatanicedaytoday" metni şifrelendiğinde "zzzjucludtunwgcqs" halini alacaktır.
...

uzun süre bu yöntemle oluşturulan şifreli metinlerin anahtar bilinmeden okunamayacağı (kırılamayacağı) düşünüldü. ancak olasılık hesapları işin içine girdiğinde bunun hiç de öyle olmadığı anlaşılabildi. burada en önemli etken ingilizce'de "e" harfinin yaygın kullanımıydı.

şimdi diyelim ki anahtarımızın uzunluğunu biliyoruz fakat kendisini bilmiyoruz ve elimizde şifreli bir metin var. bu durumda metnimizi anahtarımız uzunluğunda parçalara bölmeye başlıyoruz. yine örneğimiz üzerinden gidersek elimizde şu şekilde gruplar olacaktır:

zzzjuc ludtun wgcqs

bu durumda, örneğin: her grubun ilk harfinin (z, l, w) anahtarın ilk harfi ile şifrelendiğini biliyoruz ancak şifrelenen gerçek harfleri bilmiyoruz. elimizdeki şifreli metinin uzunluğu anahtar uzunluğuna kıyasla yeterince büyükse istatistik veri toplamaya elverişli bir kümeye sahibiz demektir. (ki bu metin şimdiye kadar ki örneğimizde yer alan "what a nice day today" cümlesinden çok daha uzun olmalıdır. sadece 5 kelimelik bir metin pek de yeterli bir küme oluşturmaz) hal böyle iken yapmamız gereken bu ilk harfleri listelemek ve içlerinde en sık kullanılanı bulmaktır. ingiliz alfabesinde en sık kullanılan harf "e" olduğu için bizim listemizde de en sık geçen harf büyük ihtimalle "e" harfinin şifrelenmiş hali olacaktır.

bu noktada tersine mühendislik ile şifreleme işleminin tersini gerçekleştirebiliriz. diyelim ki "e" harfine karşılık anahtarın ilk harfi ile şifrelenen harfler arasında en yaygın harfimiz "h" olsun. bu durumda ("h" - "e") işlemi bize örneğimizde "c" harfini verecektir.

evet, artık anahtarımızın ilk harfini biliyoruz. şimdi aynı işlemi sırayla anahtarın her harfi için gerçekleştirebilir ve önce anahtarımızı bulabilir, sonra da bu anahtarı kullanarak metnimizi çözebiliriz.
...

eğer anahtar uzunluğuna dair bir fikrimiz yok ise yapmamız gereken önce anahtarı tek harften oluşuyor gibi kabul etmek ve yukarıdaki işlemi gerçekleştirmektir, daha sonra elimizde anlamlı bir metin oluşana kadar bu uzunluğunu artırarak tekrar tekrar denemeye devam ederiz.

bazı kaynaklarda "a" harfi 0 degerini alırken bazı kaynaklarda 1 degerini aldığı kabul edilmiştir. sonuç olarak hangi değeri alırsa alsın yöntem ana hatlarıyla aynı kalmaktadır.

wikipedia linki