26/02/2024
Merhaba, tekrardan hoş geldiniz!
Umarım ilk yazım kriptolojinin temel terminolojisini size iyi bir şekilde tanıtmıştır. Artık ufaktan şifrelemeye ve şifre çözmeye başlıyoruz, fakat tarihten özel algoritma örneklerini incelemeye hemen başlamak yerine başlangıçta önemli temel kavramların oturtulması üzerine daha çok çalışacağız.
Gelecekteki yazılarda birçok algoritma örneğini inceleyeceğiz, ancak bahsettiğim kavramların anlaşılması ile bu çok daha kolay olacaktır. Bu yüzden ilk yazılarda kavramsal bir başlangıç yapmayı uygun gördüm.
Hazırsanız, kaldığımız yerden devam edelim. Buradan itibaren anlatımlarımı kod parçacıkları ile destekleyeceğim. Tüm kodlara aşağıdaki GitHub deposundan erişebilirsiniz:
https://github.com/altugbeyhan/KriptolojiBlogSerisi/
Yer Değiştirme Şifrelemesi (Transposition/Permutation Cipher): Düz metnin harflerinin kendi içinde sıralanması ilkesine dayanır. Harflerin nasıl sıralanacağını sıralama anahtarı belirler. Aşağıda bazı yer değiştirme yöntemleri verilmiştir (bu yöntemlerin bazılarına sonraki yazılarda değineceğiz):
- Scytale Yöntemi (Scytale Cipher)
- Rota Yöntemi (Route Cipher)
- Zikzak Yöntemi (Rail Fence Cipher)
- Sütun Yöntemi (Columnar Transposition Cipher)
- Myszkowski Yöntemi (Myszkowski Transposition Cipher)
- Çift Yer Değiştirme Yöntemi (Double Transposition Cipher)
Şimdi, yer değiştirme şifrelemesinin mantığını veren iki adet örneği inceleyelim.
Örnek 1 (Şifreleme): Alice, "VERİ" düz metnini yer değiştirme ile K=(3421) sıralama anahtarını kullanarak şifrelemek istiyor. Bunun için düz metnin harflerini sayılar ile
V E R İ
1 2 3 4
şeklinde eşleyecektir. Ardından, eğer Alice harflerin yerini anahtara göre değiştirirse
R İ E V
3 4 2 1
olur. Dolayısıyla şifreli metin "RİEV" şeklinde bulunur. Alice bu metni Bob'a gönderiyor.
Örnek 1 (Şifre Çözme): Bob, Alice'ten "RİEV" metnini aldı. Ayrıca bu metnin yer değiştirme ile K=(3421) sıralama anahtarının kullanılarak elde edildiğini biliyor. O halde Bob, bu metnin harflerini sayılar ile
R İ E V
3 4 2 1
şeklinde eşleyecektir. Böylece, düz metni elde etmek için harfleri (1234) şeklinde sıralarsa
V E R İ
1 2 3 4
düz metnini elde edecektir.
Bu oldukça basit bir örnekti. Şimdi benzer bir örneği daha uzun bir metin ile ele alalım.
Örnek 2 (Şifreleme): Alice, "İSTANBUL TEKNİK" metnini yer değiştirme ile K=(35214) sıralama anahtarını kullanarak şifrelemek istiyor. Bunun için, öncelikle metni beş harfli bloklara ayırmalıdır (genellikle boşlukları ihmal edip düz metni boşluksuzmuş gibi görmeyi tercih edeceğiz):
İSTAN BULTE KNİK_
Görüldüğü üzere beş harfli bloklara ayırma işleminde son grubun harf sayısı beşten az olabilmektedir. Alice, bu eksikliği gidermek için doldurma (padding) işleminden yararlanacaktır. Bu işlem ile son blokta boş kalan yerlere rastgele harfler atanır:
İSTAN BULTE KNİKX
Burada X yerine herhangi bir karakter yazılabilir. Yapılan bu işleme doldurma denir ve özellikle blok şifreleme algoritmalarında sıkça kullanılan bir işlem olduğundan bu örnekte yer verdim. Devam edelim.
Şimdi Alice, her bir bloğu K=(35214) sıralama anahtarını kullanarak şifreleyecek:
Böylece Alice, "TNSİALEUBTİXNKK" şifreli metnini elde etmiştir. Alice bu metni Bob'a gönderiyor.
Örnek 2 (Şifre Çözme): Bob, Alice'ten "TNSİALEUBTİXNKK" şifreli metnini aldı. Bob bu metnin yer değiştirme ile K=(35214) sıralama anahtarı kullanılarak elde edildiğini biliyor. O halde Bob, bu metni beş harfli bloklara aşağıdaki şekilde ayıracak ve ardından her bir bloğu (12345) şeklinde sıralayarak düz metne ulaşacaktır:
Böylece Bob, "İSTANBUL TEKNİK" düz metnine ulaşır.
PYTHON KODU
Bu kodu kopyalayıp OnlineGDB (https://www.onlinegdb.com) sitesinde çalıştırabilirsiniz:
https://github.com/altugbeyhan/KriptolojiBlogSerisi/blob/main/Ders2-YerDegistirme.py
ÇIKTI:
ŞİFRELİ METİN: TNSİALEUBTİXNKK
DÜZ METİN: İSTANBULTEKNİKX
Şimdi siz deneyin! Adınız soyadınızı yer değiştirme ile K=(321) sıralama anahtarını kullanarak şifreleyin. Ardından, elde ettiğiniz şifreli metni çözerek tekrar adınız soyadınıza ulaşın (Bu örneği önce mutlaka elle yapınız, daha sonra kod ile teyit edebilirsiniz).
Not: Yer değiştirme şifrelemesinde dikkat edilmesi gereken, düz metnin karakterlerinin yalnızca kendi içinde sıralandığı, başka karakterler ile değiştirilmediğidir. Başka karakterlerle değiştirme işlemi, "yerine koyma" altında bir sonraki yazıda ele alınacaktır.
Bir sonraki yazıda görüşmek üzere!