Şifreleme Algoritmaları

10 min readApr 30, 2024

Herkese yeniden merhaba! Biliyorsunuz ki öğrendiğim, araştırdığım, kafa yorduğum şeylerle alakalı yazılar yazmayı çok seviyorum. Bu içeriklerin ilerde bana toplu kaynak olarak hizmet edeceğine inanarak üniversitede seçtiğim seçmeli bir dersin proje ödevi olarak sunduğum algoritmaları da sizlerle paylaşmak istedim.

Ayrıca belirtmek istiyorum ki bu yazıyı yazarken ara sıra ünlü matematikçi John Nash’in biyografi filmi olan “A Beautiful Mind”a atıfta bulunabilirim. (İzlemediyseniz izlemenizi tavsiye ediyorum.)

O zaman hazırsanız bu yazımızda bu aralar oldukça gündem olan hesap çaldırmalara da atıfta bulunarak “şifreleme algoritmaları”ndan bahsedeceğiz.

Bu algoritmaları daha iyi anlamamız için daha öncesinde bilmemiz gereken bazı terimler var. Nedir bunlar?

  • Kriptografi
  • Kriptoanaliz
  • Kriptoloji

Kriptografi: Gizliliği sağlamak için bilgiyi matematiksel algoritmalar kullanarak şifrelemek veya şifresini çözmek için kullanılan bir bilim dalıdır.

Kriptoanaliz: Kriptografik sistemlerin güvenliğini analiz etmek ve kırma girişimlerinde bulunmak için kullanılan bir disiplindir.

Kriptoloji: Kriptografi ve kriptoanalizin birleşimidir ve bu iki alana genel bir bakış sunar. Kriptoloji, hem bilgiyi güvenli bir şekilde iletmek ve saklamak için şifreleme tekniklerini geliştirmeyi hem de bu tekniklerin güvenliğini test etmek için kriptoanaliz yöntemlerini içerir.

Kriptografi”de kullanılan bazı temel terimler:

  • Açık Metin (Plaintext): Orijinal, düz metin.
  • Şifreli Metin (Ciphertext): Şifrelenmiş metin.
  • Şifre (Cipher): Açık metni şifreli metne dönüştüren algoritma. Şifreleme algoritması.
  • Şifreleme (Encrypt): Açık metni şifreli metne dönüştürme işlemi.
  • Deşifreleme (Decrypt): Şifreli metinden açık metni kurtarma işlemi.

Şifreleme Algoritmalarının Kullanım Alanları:
◼ Güvenli iletişim
◼ Veri gizliliği
◼ Şifreli dosya depolama
◼ Veri imzası

Güvenlik ve Zayıflıklar:
◼ Uzun anahtar uzayları sayesinde Brute Force saldırılarına karşı dayanıklıdır.
◼ Matematiksel zayıflıkların keşfedilmesi yani bilgisayar gücünün artmasıyla eskiden güçlü olduğunu düşündüğümüz algoritmalar artık zayıf olabilir.
◼ Zayıf parolalar veya anahtarlar kullanıldığında güvenlik zedelenir.

Brute Force saldırısına temsili görsel.

Alt yapımızı sağladıysak üzerinde duracağımız konulara geçelim…

Üstünde duracağımız bazı konular:

  • Vigenere Şifrelemesi
  • Kasiski Analizi
  • Running Key Şifrelemesi

Vigenère Şifresi

Bugün Vigenère Şifresi olarak bilinen şifreleme aslında ilk kez Giovan Battista Bellaso tarafından 1553 tarihli “La cifra del” kitabında tanımlanmıştır.

Polialfabetik şifreleme olarak da bilinir. Adından da anlaşılacağı gibi polialfabetik şifreleme, mono alfabetik yöntemlerden farklı olarak bir harf değiştirilince her seferinde aynı harfe dönülmez. Anahtara bağlı olarak her harf alfabede birden fazla harfle eşleşmektedir.

Vigenère Şifresi, Trithemius Şifresinin bir uyarlamasıdır, ancak Tabula Recta’daki şifreli metin alfabelerinde sistematik olarak ilerlemek yerine, hangi sütunların kullanılacağını seçmek için bir anahtar kelime kullanır.

Tarihteki en ünlü kod ve şifre örneklerinden biri olan ENIGMA makinesi, geliştirilmiş çok alfabeli yer değiştirme şifresinden başka bir şey değildir.

Şifrelemeyi yapabilmemiz için birkaç şeye ihtiyacımız var. Nedir bunlar?

  • Vigenere Tablosu olarak bilinen bir tablo
  • Anahtar kelime (mesajın şifrelenebilmesi için)
Vigenere Tablosu

Tablo, farklı satırlarda 26(İngilizce alfabe kullandığımızı varsayıyoruz) kez yazılmış alfabelerden oluşur. Her alfabe, bir önceki alfabeye göre döngüsel olarak sola kaydırılmıştır ve 26 olası Sezar Şifresine karşılık gelir. Algoritmasını basitçe uygulamak için: [A-Z] → [0–25]

Alfabedeki her harf belli bir sayıya karşılık gelir.
(Şifreleme ve deşifreleme için kullanılan mod işlemi)

Hadi bir örnek üzerinden kendi şifremizi oluşturalım.

  • Şifrelenecek metnimiz (plaintext) “SoftwareDevelopment” olsun.
  • Anahtar kelimemizi(key) de “Gokce” olarak seçelim.

Şifrelemek için yapmamız gereken alt alta yazdığımız harflerin Vigenere tablosundaki kesişimlerini bulmak.

Şifrelenen ilk harfimiz böylece “Y” oldu.
Şifrelenen 2. harfimiz “C” oldu.

Bu şekilde devam ederek şifrelenen metnimize ulaşıyoruz.

Şifreli Metin (Ciphertext): “YCPVAGFOFIBSVQTSSXV

Aynı sonuca aşağıdaki yöntemi kullanarak da oluşabiliriz:

Harflerin değerlerini yazının başlarında belirtmiştik. (Değerler 26'yı geçerse modunu alarak devam ediyoruz.)
Yukarda adım adım bahsettiğimiz Vigenère Şifrelemesinin nasıl çalıştığını daha iyi anlamamız için bir GIF. (https://images.code.org/06858f88ac12997bba73f4f76638a068-image-1443574425185.gif)

Yüzyıllar boyunca Vigenère Şifresi çok güvenli bir şifre olarak biliniyordu ve çok uzun bir süre boyunca kırılamaz olduğuna inanılıyordu. 1863 yılında Friedrich Kasiski tarafından kırıldı.

Konuyu anladığımızı varsayıyorum. Şimdi birlikte kod örneğine bakalım mı?

Anahtar kelimeyi metnin uzunluğuna genişleten metod
  • Koda baktığımızda boş bir StringBuilder nesnesi oluşturulduğunu görüyoruz. Anahtar kelime, metnin uzunluğuna eşit olana kadar döngü devam eder. Anahtar kelimenin karakterleri tek tek eklenir. Anahtar kelimesindeki karakterlerin tekrar kullanılabilmesi için döngü oluşturulur. Genişletilmiş anahtar kelimeyi döndürür.
Metni şifreleyen metod
  • Boş bir StringBuilder nesnesi oluşturuluyor. Anahtar kelime, metnin uzunluğuna genişletilir. Metnin her karakteri için döngü başlatılır. Metnin karakterleri tek tek alınır. Anahtar kelimenin karakterleri tek tek alınır. Şifreleme işlemi yapılır. Anahtar kelimenin karakteri kullanılarak harfler kaydırılır. Şifrelenmiş karakterler, şifrelenmiş metne eklenir. Şifrelenmiş metni döndürür.
Ana fonksiyonumuz ile şifrelenmiş metnimizi buluyoruz.

Kasiski Analizi

Kasiski, şifreleme sistemlerinde kullanılan anahtar uzunluğunu belirlemek için kullanılan bir kripto analitik tekniği olup, özellikle çok alfabeli şifreleme yöntemlerine, örneğin Vigenère şifresine karşı etkili bir saldırı yöntemidir.

Bu algoritma, metindeki periyodik tekrarlanan desenleri bulmaya odaklanır ve bu desenler arasındaki uzaklık, muhtemel anahtar uzunluğunu belirlememize yardımcı olur.

Anahtar kelimesinin uzunluğu bulunduktan sonra, kripto analist şifreli metni anahtar kelimesinin uzunluğu kadar sütuna ayırır. Ardından, her bir sütun, bir mono alfabetik şifreleme yönteminin şifreli metni gibi ele alınabilir. Bu şekilde, her bir sütun frekans analizi ile saldırılabilir.

Hadi birlikte cefasını Friedrich Kasiski’nin çektiği, sefasının da Charles Babbage tarafından sürüldüğü Kasiski Analizinin aşamalarına bakalım.

Aşamaları:

◼Şifreli metinde tekrarlanan karakter dizileri aranır.

◼Başarılı bir inceleme için karakter dizileri en az üç karakter uzunluğunda olmalıdır.

◼Ardından, tekrarlanan karakter dizileri arasındaki mesafeler, anahtar kelimesinin uzunluğunun katları olma eğilimindedir.

◼Daha fazla tekrarlanan karakter dizisi bulmak, anahtar kelimesinin olası uzunluklarını daraltır, çünkü tüm mesafelerin en büyük ortak böleni alınabilir.

Kasiski incelemesinin zorluğu tekrarlanan kelimelerin bulunmasında yatar. Bu işlem manuel olarak gerçekleştirildiğinde oldukça zordur, ancak bilgisayarlar bu görevi büyük ölçüde kolaylaştırabilir. Ancak, bazı tekrarlanan dizilerin tesadüfen oluşabileceği unutulmamalıdır, bu nedenle analist, yanıltıcı olabilecek bazı tekrar mesafelerini elemek zorundadır. Doğru uzunluğu bulmak için tesadüfleri elemesi gerekir ve ardından elde edilen mono alfabetik şifreleme metinleri kripto analize tabi tutulmalıdır.

Yeterince teknik detaylara baktıysak Vigenère şifresiyle şifrelenmiş örnek metnimizi Kasiski Analizi ile çözmeye çalışalım.

Örnek metnimiz:

YAGFQNSUSAWQOISQAKLRANUPOYNMRWLZSMOQYERQTHNDOPWXAGAEAGKRLHDQRLUFHXYAWGZYAESSAKKQNLHZDMOQYTSEOXUVORCETGNFHXNMRWLZSHMNGAHGSX

Adım adım gitmekte fayda var…

1.Adım:

Şifrelenmiş metin incelenir, tekrar eden metin grupları arasındaki uzaklıklar bulunur.

Metne baktığımızda tekrar eden metin gruplarının AG ve QN olduğunu görüyoruz. Her biri için tekrar etme sıklığını bulalım.(Frekans analizi için ihtiyacımız olacak.)

Frekans analizini kısaca özetleyecek olursak kullanacağımız alfabenin (burda İngiliz alfabesi olduğunu varsayıyoruz) en çok tekrar eden harfiyle şifreli metnimizde en çok değer eden harfin çok büyük olasılıkla eşdeğer olduğunu savunur. Yani İngiliz alfabesinin en çok tekrar eden harfi “e” ise şifreli metinde en çok tekrar eden harf e harfine denk geliyordur diyebiliriz.
  • Tekrar eden AG’ler arasındaki uzaklıklar: 48 ve 4'tür.
  • Tekrar eden QN’ler arasındaki uzaklıklar: 76

2.Adım:

4, 48 ve 76 sayılarının çarpanlarına bakıyoruz.

  • 4 sayısının çarpanları: 1, 2, 4
  • 48 sayısının çarpanları: 1, 2, 3, 4, 6, 8, 12, 16, 24, 48
  • 76 sayısının çarpanları: 1, 2, 4, 19, 76

Ortak çarpanları 4 olduğundan vektör uzunluğu için tahminimiz 4'tür. Yani anahtarımızın 4 harfli olduğunu tahmin ediyoruz.

3.Adım:

Rastlantı dizinin testini kullanarak anahtar uzunluğunun 4 olup olmadığını kontrol edelim.

Verilen değerler yerine yazıldığında m=4 ifadesinin doğruluğu görünür.

4.Adım:

Anahtar uzunluğumuzun 4 olduğunu bulduk. Bu da bize örnek şifreli metnimizin her 4 harfte bir anahtarın ilk harfi ile şifrelendiğini anlatıyor.

  • Yani şifreli metnin 1. 5. 9. 13. 14… harfleri anahtarın 1.harfi ile şifrelendiğini söylüyor.
  • Aynı mantıkla 2. 6. 10. 14… harfler de vektörün 2.harfi ile şifrelenmiştir.
  • Yine aynı mantıkla 3. 7. 11… harfler de vektörün 3.harfi ile şifrelenmiştir.
  • 4. 8. 12. 16…harfler de vektörün 4.harfi(son) ile şifrelenmiştir.

O halde:

1.Harf: Y Q U Q Q R P M Z Q D X E R Q F A Y S Q Z Q E V E F M Z N G

Frekans analizinin de yardımıyla en çok tekrar eden harf ve ona karşılık gelen alfabedeki(İngilizce olduğunu varsayıyoruz) harf bulunur.

2.Harf: A N S O A A O R S Y T O A A L R H W A A N D Y O O T H R S G S

3.Harf: G Z A I K N Y W M E H P G G H L X G E K L M T X R G X W H A X

4.Harf: F S W S L U N L O R N W A K D U Y Z S K H O S U C N L M H

SONUÇ:

  • Şifrelenmiş metnin anahtarını harflerin kullanılma sıklıklarından yararlanarak “MATH” olarak bulduk.
  • Şifreli bir metnin anahtarını kullanarak nasıl deşifre edileceğini en baştan söylemiştik. (Viegenere Tablosundan yararlanarak.)

Böylece açık metin:

“MANY ENGLISH PEOPLE ARE FAUND OF GARDENS. THEY LIKE TO GROW PLANTS AND FLOWERS IN THEIR OWN SMALL GARDENS AND THEY ALSO ENJOY VISITING THE GARDENS OF BIG HOUSE” şeklinde bulunur.

Hadi kod üzerinden bakalım…

Metinde tekrar eden blokları bulan metod
  • repeatedBlocks adında boş bir liste oluşturulur. Bu liste, tekrar eden blokları içerecektir.
  • blockPositions adında boş bir HashMap oluşturulur. Bu harita, blokların başlangıç pozisyonlarını saklayacak.
  • for (int i = 0; i < text.length() - minLength; i++) { Metnin her karakterini kontrol etmek için bir döngü başlatılır. Bu döngü, metnin sonundan minLength kadar önceye kadar devam eder. Bu, metnin sonundaki bir bloğun, minLength kadar karaktere sahip olmadığından emin olmak içindir.
  • String block = text.substring(i, i + minLength);: Metnin i indeksinden başlayarak minLength kadar uzunluğunda bir blok oluşturulur.
  • if (blockPositions.containsKey(block)) {: blockPositions haritası, oluşturulan bloğu zaten içeriyorsa: Bu, bloğun daha önce metinde başka bir yerde bulunduğu anlamına gelir. Bu durumda, bu bloğun önceki pozisyonunu alırız (prevPosition) ve bu pozisyondan itibaren tekrar eden bloğu alırız. Bu tekrar eden blok, repeatedBlocks listesine eklenir.
  • blockPositions.put(block, i);: Eğer blockPositions haritası, oluşturulan bloğu içermiyorsa, bloğu ve başlangıç pozisyonunu (i) haritaya ekleriz.
  • return repeatedBlocks;: Döngü tamamlandıktan sonra, repeatedBlocks listesi, bulunan tekrar eden bloklarla doldurulur ve bu liste döndürülür.
En büyük ortak böleni bulan metod
  • findRepeatedBlocks metodunu kullanarak, ciphertext içindeki tekrar eden blokları bulur ve bu blokları repeatedBlocks adlı bir ArrayList'e kaydeder.
  • İki iç içe döngü kullanarak, tekrar eden bloklar arasındaki mesafeleri hesaplar.
  • Her bir tekrar eden blok için, diğer tüm blokları kontrol eder ve bloklar arasındaki mesafeyi hesaplar.
  • Math.abs() fonksiyonu, blokların pozisyonları arasındaki mutlak farkı hesaplar.

Running Key

Bu şifreleme yöntemi, geçmişte askeri iletişimde ve gizli yazışmalarda kullanılmıştır.

Bu yöntemde, şifrelenecek metin (PlainText) ile birlikte bir anahtar metin (RunningKey) kullanılır. Running Key’in uzunluğu şifrelenecek metnin uzunluğuna eşit veya daha uzun olmalıdır.

Matematiksel Gösterimi:

Uygulama Adımları:

  • Anahtar Şifreleme
  • Harf Harf Şifreleme
  • Kaydırma ve Tekrarlama

Uygulama Örneği:

Şifrelenecek Metin (PlainText): Flee at once. We are discovered.

Anahtar Metin (RunningKey): errors can occur in several places

İndikatör belirleyebilmemiz için anahtar metin olarak seçtiğimiz errors can occur in several places şeklinde devam eden cümleyi referans aldığımız sayfa ve satır numarasına ihtiyacımız var.

Sayfa ve satır numarası: 06301

  • İlk üç basamak sayfa numarasına tekabül ediyor.
  • Son 2 basamak da satır numarasına tekabül ediyor.

Yani 63.sayfanın 1.satırı bizim anahtar metnimiz.

İndikatörü belirlemek için de şifrelenecek metin değerlerinin(plaintext value) alfabenin hangi harflerine(plaintext alphabet) denk geldiğini buluyoruz.

Sayfa ve satır numarasını temsil eden 06301 sayısı bizim indikatörümüz. 0 sayısı A harfine tekabül ediyor, 6 sayısı G harfine, aynı şekilde 3 sayısı D harfine… Böylece indikatörümüzü buluyoruz.

İndikatörümüz: AGDAB

Son olarak şifreli metnimizi yazarken indikatörümüzü sondan bir önceki kelime grubuna koyuyoruz.

Final Mesajımız: JCVSR LQNPS YGUIM QAWXS AGDAB MECTO

Şimdi asker olduğumuzu düşünelim. Başka asker bir arkadaşımıza şifreli mesaj göndermek istiyoruz. Yukarıda bahsettiğimiz şekilde göndermek istediğimiz mesajı şifreledik. Diğer asker arkadaşımızın mesajı çözebilmesi için hangi kitabı indikatör oluşturmak için seçtiğimizi bilmesi gerekiyor. Bunu bildikten sonra indikatör yardımıyla şifreyi çözebilir.

Running Key Cipher anahtar metni rastgele seçilen ve şifreleme işlemi sırasında sürekli olarak kaydırılan bir metin olduğu için güvenlik açısından daha yüksek bir seviyeye sahip olabilir. Ancak anahtar metni güvenli bir şekilde paylaşma ve saklamak gerekir.

Hadi kod örneğine bakalım…

Okuduğunuz için teşekkür ediyor, geri bildirimlerinizi dört gözle bekliyorum.

Beni LinkedIn, Github hesaplarımdan takip ederek destek olabilirsiniz.

--

--

Zehra Gökçe Aynacı

Written by Zehra Gökçe Aynacı

Learning, growing, and chasing excellence—one challenge at a time.

No responses yet