Article cover

01.08.2023

3

Like

370

Views

Yerine Koyma Şifrelemesi

Bu yazıda, en basit şifreleme algoritmalarından biri olan Yerine Koyma Şifrelemesini (Substitution Cipher) ele alacağız. Keyifli okumalar dilerim :)

Adından da anlaşılacağı üzere alfabedeki her bir karakterin yerine, alfabedeki seçilmiş başka bir karakteri atamaya dayanır. Sezar şifrelemesinde anahtar genellikle alfabedeki harflerin 3 birim kaydırılmasıyla oluşturulurken bu algoritmada anahtarın belirlenmesinde belirli bir kural yoktur. Yani anahtar, metni şifrelemek isteyen kişi tarafından tamamıyla rastgele seçilebilir.

Uygulanışı

  • Şifrelenecek metin ve anahtar belirlenir. Anahtar belirlemekte belirli bir kural olmadığı için bizde kafamıza göre bir anahtar oluşturalım.

Alfabe ve Anahtar:

abcçdefgğhıijklmnoöprsştuüvyz

müfıvejihpğaodyrubşgzcötsçlnk

Örnek bir uygulama olarak "Patika" kelimelerini şifreleyelim: Gmtadm

Avantajları:

  • Oldukça basit olması, eğer anahtarı biliyorsanız şifreleme ve çözme işlemleri hızlıca gerçekleştirilebilir.

Dezavantajları:

  • Anahtarın güvenliği ve yönetimi çok önemlidir. Her kullanıcı için ayrı bir anahtar oluşturulması ve güvenli bir şekilde paylaşılması gereklidir. Ayrıca, anahtarların düzenli olarak değiştirilmesi de önem arz eder. Dolayısıyla bu aşamalarda yaşanacak bir güvenlik zafiyeti anahtarın açığa çıkmasına neden olabilir.
  • Basit saldırı tekniklerine açıktır. En basitinden frekans analizi saldırısı ile anahtar tahmin edilebilir. Bu saldırı türünde, şifrelenmiş metindeki harf veya karakter sıklıkları analiz edilerek, şifreleme tablosu tahmin edilmeye çalışılır. Dolayısıyla, yerine koyma şifrelemesi, modern kriptografi standartlarına göre yetersiz bir güvenlik sağlar.

Yerine Koyma Şifrelemesini Kırmak

En başlıca bilinen basit yöntemlere bakalım:

  1. Frekans analizi: Yukarıda da belirtildiği gibi frekans analiziyle kolaylıkla kırılabilir.
  2. Deneme yanılma yöntemi: Şifrelenmiş metnin bir kısmının bilindiği durumlarda deneme yanılma yöntemi ile devamı da tahmin edilebilir.
  3. Düz metin saldırıları: Şifreleme tablosunun yani anahtarın bir kısmı biliniyorsa, bu bilgiden yararlanarak geri kalan kısmının tahmin edilmesi esasına dayanan bir saldırı türüdür.

Python Kodu

def yerine_koyma_sifre(alfabe, anahtar, acik_metin):
    yerine_koy = {}
    for i in range(len(alfabe)):
        yerine_koy[alfabe[i]] = anahtar[i]
    sifreli_metin = ''
    for karakter in acik_metin:
        if karakter.lower() in alfabe:
            sifreli_metin += yerine_koy[karakter.lower()].upper() if karakter.isupper() else yerine_koy[karakter.lower()]
        else:
            sifreli_metin += karakter
    return sifreli_metin
  1. def anahtar kelimesi ile yerine_koyma_sifre() isimli fonksiyonumuzu tanımladık. Fonksiyon 3 adet parametre alıyor. Bunlar; şifreleme yapacağımız dilin alfabesi, alfabedeki her harfe karşılık oluşturacak anahtar ve son olarak da şifrelenecek metin.
  2. yerine_koy isminde bir dictionary tanımlıyoruz. Bu dictionary alfabedeki harfleri anahtardaki harfler ile eşleştirdiğimizde, her harfe karşılık gelen değeri key-value ilişkisi ile tutacak.
  3. Akabinde eşleştirme işlemini yapmak için bir for döngüsü tanımlıyoruz. Bu for döngüsü alfabenin uzunluğu kadar dönecek ve alfabedeki her harfi index numarasına göre anahtardaki karşılığı ile eşleştirecek.
  4. 5. satırda şifrelenmiş metni tutmak için boş bir string tanımlıyoruz.
  5. Ardından metni şifrelemek için bir for döngüsü başlatıyoruz. Bu döngü açık_metin'deki her karakteri gezecek ve eğer karakter alfabenin içerisinde ise (karakteri lower() fonksiyonu ile küçültüyoruz çünkü alfabeyi küçük olarak tanımlayacağız) ternary bir ifade kullanarak:
  • eğer açık_metin'deki ifade büyük ise yerine_koy'daki karşılığı olan harfi büyük olarak sifreli_metin stringine ekler
  • küçük ise küçük olarak ekler
  1. else durumunda ise karakter şifrelenmeden direkt olarak sifreli_metin stringine eklenir.
  2. Son olarak da sifreli_metin return anahtar kelimesi ile döndürülür.

Dilerseniz fonksiyonu Patika kelimesi ile test edelim:

alfabe =  'abcçdefgğhıijklmnoöprsştuüvyz'
anahtar = 'müfıvejihpğaodyrubşgzcötsçlnk'
metin = 'Patika'
sifrele = yerine_koyma_sifre(alfabe, anahtar, metin)
print(sifrele) #Gmtadm


Beni daha fazla dokümantasyon ve bilgi için aşağıdaki GitHub hesabımdan takip edebilirsiniz :)


Enes Fehmi Manan GitHub


Okuduğunuz için teşekkür ederim, başka algoritmalarda görüşmek üzere :)

Cryptography
Python Temel
İleri Python

Comments

You need to log in to be able to comment!

Enes Fehmi Manan

Data Scientist

Location

İzmir, TR

Education

İstatistik - Ege

© 2021 Patika Dev

facebook
twitter
instagram
youtube
linkedin