Skip to content

DES - Data Encryption Standard ve Feistel Ağı

DES, modern kriptografinin dönüm noktasıdır. 1970'lerde IBM tarafından "Lucifer" projesi adıyla geliştirilen ve 1977'de Amerikan Ulusal Standartlar Bürosu (NBS, günümüzdeki NIST) tarafından federal bir standart olarak kabul edilen simetrik (gizli) anahtarlı bir blok şifreleme algoritmasıdır.

Günümüzde 56 bitlik kısa anahtar boyutu nedeniyle kaba kuvvet (brute-force) saldırılarına karşı yetersiz kalıp yerini AES algoritmasına bırakmış olsa da, modern şifreleme mimarilerinin (Feistel Ağları, S-Box ve P-Box mantığı) temelini anlamak için DES'i öğrenmek bir kriptografi öğrencisi için zorunluluktur.

💻 Harflerden Bitlere Geçiş

Şu ana kadar gördüğümüz klasik şifrelemelerde (Sezar, Afin, Vigenère, Permütasyon) hep İngiliz alfabesi (Z26) üzerinden karakterlerin veya sayıların yerini/kimliğini değiştirdik.

DES ile birlikte bu "insan odaklı" yapı tamamen terk edilir. Algoritma harflerin ne olduğunu bilmez; doğrudan bilgisayar işlemcisinin dilinde (0'lar ve 1'ler) çalışır. Açık metniniz (ister bir metin dosyası, ister bir fotoğraf, ister bir video olsun) önce makine diline çevrilir ve tamamen bit (binary) seviyesindeki işlemlerle (XOR, bit kaydırma, bit permütasyonları) şifrelenir.

🔑 Blok ve Anahtar Yapısı

DES algoritması veriyi bir bütün olarak değil, 64-bitlik bloklar halinde işler. Yani mesajınız ne kadar uzun olursa olsun, sistem bunu 64 bitlik parçalara böler ve her bir bloğu sırayla şifreler.

Algoritmanın kalbindeki anahtar yapısı ise kriptografi tarihindeki en ilginç tasarımlardan biridir:

  • Girdi Anahtarı: DES algoritmasına dışarıdan verilen orijinal anahtar 64 bittir.
  • Efektif (Gerçek) Anahtar Boyutu: Orijinal 64 bitlik anahtarın her 8. biti (8, 16, 24... 64) bir Eşlik Biti (Parity Bit) olarak hata kontrolü amacıyla kullanılır ve şifreleme işlemine dahil edilmez. Bu yüzden DES'in gerçek kriptografik gücü 56 bit ile sınırlıdır.

DES Anahtar Üretim Algoritması (Key Schedule)

DES algoritması, her biri 64 bitlik veri bloklarını şifrelemek için tam 16 döngü (round) kullanır. Şifrelemenin güvenli olabilmesi için bu 16 döngünün her birine, orijinal anahtardan türetilmiş farklı ve benzersiz 48 bitlik alt anahtarlar (K1,K2,,K16) verilmesi gerekir.

İşte 64 bitlik tek bir kök anahtardan, 16 farklı mermi (alt anahtar) üreten bu fabrikaya Key Schedule (Anahtar Zamanlaması) denir. İşlem 3 temel aşamada gerçekleşir:

Adım 1: PC-1 (Eşlik Bitlerini Çöpe Atma ve İkiye Bölme)

K=b1,b2,b3,,b63,b64

Sisteme giren orijinal kök anahtar (K), 64 bitten oluşur. Ancak algoritma bu anahtarın her 8. bitini (8, 16, 24, 32, 40, 48, 56, 64) bir iletişim kontrolü olan Eşlik Biti (Parity Bit) olarak görür.

5749413325179
1585042342618
1025951433527
1911360524436
63554739312315
7625446383022
1466153453729
211352820124

Anahtar dizisi PC-1 (Permuted Choice 1) matrisinden geçirilir. Bu matrisin içinde eşlik bitlerinin indeksleri bulunmaz; bu sayede 8 adet eşlik biti otomatik olarak çöpe atılır.

Tablonun Uygulanma Mantığı: Bu işlemi, önceki konularda işlediğimiz Ayrık Permütasyon Fonksiyonu (π) mantığıyla düşünmeliyiz. Orijinal 64-bitlik anahtar dizimizin bitlerini b, oluşacak yeni 56-bitlik dizinin bitlerini b olarak tanımlayalım. PC-1 tablosu aslında bizim π permütasyon anahtarımızdır ve bitlerin konum indeksleri (τ) üzerinde çalışır.

Matematiksel olarak bu permütasyon işlemi şu şekilde ifade edilir:

bτ=bπ(τ),τ{1,2,,56}

Örneğin tablonun ilk elemanlarına göre:

  • π(1)=57k1=k57
  • π(2)=49k2=k49

Elde edilen bu 56 bit, matrisin üst yarısı (C0) ve alt yarısı (D0) olacak şekilde doğrudan karıştırılarak ikiye bölünür.

Matematiksel olarak bu ayrışma şöyledir:

K64π permütasyonu uygulanırK56

Sonra bu 56 bitlik yeni anahtar (K56) ortadan ikiye bölünür:

K56=b57,b49,,b36C0 (Sol Yarı - 28 bit)  b63,b55,,b4D0 (Sağ Yarı - 28 bit)

Adım 2: Dairesel Sola Kaydırma (Circular Left Shift)

Algoritma 16 döngü boyunca C ve D yarılarını kendi içlerinde sola doğru kaydırarak sürekli günceller. "Dairesel" olmasının esprisi şudur: Sınırın dışına çıkan bit silinmez, bloğun en sağına geri döner.

🔍 Görsel Örnek (1-bit Kaydırma): 8-bitlik örnek bir X bloğumuz olsun: 10110011 1 bit sola kaydırıldığında, en soldaki 1 kopar ve en sağa kuyruk olur: Yeni X: 01100111

Kaydırma miktarı döngünün numarasına göre sabittir:

  • 1., 2., 9. ve 16. Döngülerde: Sadece 1 bit dairesel kaydırılır.
  • Diğer tüm döngülerde: 2 bit dairesel kaydırılır.

Örneğin 1. ve 2. döngüler için yeni yarılar şu şekilde oluşur:C1=LeftShift(C0,1)veD1=LeftShift(D0,1)C2=LeftShift(C1,1)veD2=LeftShift(D1,1)

Adım 3: PC-2 (Sıkıştırma Permütasyonu)

Döngüye ait kaydırılmış Ci ve Di yarıları yan yana getirilerek birleştirilir (28+28=56 bit). Ancak şifreleme çekirdeğimiz (Feistel fonksiyonu), her döngüde 48 bitlik bir anahtara ihtiyaç duymaktadır.

Bu noktada PC-2 (Permuted Choice 2) tablosu devreye girer. Bu tablo tıpkı bir filtre gibi davranarak; 56 bitlik diziyi karıştırır ve içinden önceden belirlenmiş 8 biti atarak (sıkıştırarak) o döngünün asıl silahı olan 48 bitlik Ki alt anahtarını üretir.

PC-2 Matrisi (48-bit Seçim):

14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10, 23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2, 41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48, 44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32

Matematiksel dönüşümün jilet gibi özeti:

Ci28-bit || Di28-bitBirleştirilirCDi (56-bit)CDi (56-bit)PC-2 FiltresiKi (48-bit Alt Anahtar)

Bu 3 adım, 16 döngünün tamamı için zincirleme olarak tekrarlanır ve şifreleme işleminde kullanılacak olan o meşhur 16 anahtar seti hazır hale getirilmiş olur.

Akademik amaçlarla tasarlanmış açık kaynaklı eğitim arşivi. Bu sitedeki tüm ders notları ve içerikler CC BY-NC-SA 4.0 Lisansı ile korunmaktadır.