DES ŞİFRELEME ALGORİTMASI

Furkan Güngör
5 min readApr 4, 2019

Data Encryption Standard (DES)

DES, ilk simetrik şifreleme algoritmasıdır. IBM tarafından 1970 lerde geliştirilmiş ve daha sonra NSA tarafından 1977’de bir standart haline gelmiştir.

DES’in, önceki substitution (yerine koyma) algoritmalarından en büyük farkı, işlemlerini bitler (0 ve 1) üzerinden yapıyor olmasıdır.

Veriyi bloklara ayırarak şifreleme yapar. Her blok 64 bitten oluşur. Ve 56 bitlik anahtar kullanır. Aynı anahtarla hem şifreleme hem de deşifreleme yapar.

Aslında, orjinal anahtar 64 bittir. Fakat parite kontrolu için 8 biti ayırır. Dolayısıyla kullandığı 56 bittir. Bu projede, her karakterin ASCII değerini alıp onu 8 bitlik binary değerine dönüştürdük.

Not:

Burada kullandığımız Sbox ve diğer permutasyon tabloları public olarak yayınlandığından herkesin erişimine açıktır.

  1. Initial Permutation (İlk karıştırma)

    Amaç, metni karıştırmaktır. Aşağıdaki tabloyu incelediğinizde, bloklara ayrılan metnin ilk biti 58.sıraya, ikinci biti 50. sıraya geçer. Bu karıştırma işleminden sonra metin 2’ye bölünür. 32 bit sol tarafa (LPT), 32 bit sağ tarafa (RPT) ayrılır.
  1. 16 Rounds
  • Key Transformation (anahtar oluşturma)

    Circular Left shift Table (For Encryption)

56 bitlik anahtar 2'ye bölünür. C key(28 bit) ve D key (28 bit) İkiye ayrılan bu anahtara shifting (kaydırma) uygulanır. Shifting işlemi aşağıdaki tabloya göre yapılır. Shifting işlemi tamamlandıktan sonra C ve D keyleri birleştirilir ve böylece 56 bitlik anahtar üretilir.

Deşifreleme için ise burdaki tablonun tersi kullanılır. Circular Right shift Table (For Decryption)

2. Compression Permutation (sıkıştırma)

Burası da, bir üstte üretilen 56 bitlik shifted key içinden 48 bitlik anahtar üretimi içindir. Aslında burada hem sıkıştırma hem de karıştırma (permutasyon) yapılmış olur. Örneğin, key’in ilk biti 14. sırayla değiştirilir. İkinci biti 17.sırayla, gibi..

3. Expansion Permutation (genişletme)

Başlangıç aşamasında yaptığımız ilk karıştırma (initial permutation) sonrasında elimizde 32 bitten oluşan 2 bölüm oluşuyor. LPT (left plain text) ve RPT (right plain text) Genişleme tablosuna (expansion table) girdiğinde 32 bitlik RPT 48 bite çıkıyor. Tabi bu esnada aynı zamanda karıştırılmış (permuted) da oluyor. 32 bitlik RPT, 4 bitlik 8 bloğa bölünür. Ve her 4 bitlik blok, 6 bite dönüştürülür. Böylece 8*6 = 48 bite ulaşır. Bu işlemi, 4 bitlik bloğun başına 1 bit ve sonuna 1 bit ekleyerek yapar. Örnekle anlatacak olursak. İlk iki bloğu düşünün 1234 ve 5678 olsun. Son 4 lü blok 32 ile biter. Bu durumda expansion yapıldığı anda, yandaki bloku ilk biti, ilk bloğun son bitine eklenir, ilk bloğun son biti de yanındaki bloğun ilk bitine eklenir. Son durumda 1234 şeklindeki ilk blok 32 1 2 3 4 5 olacaktır.

4. XOR

Burada, 48 bitlik genişletilmiş düz text (expanded RPT of 48 bit) ile 48 bitlik anahtar (compressed key of 48 bit) arasında bitwise XOR işlemi yapılıyor. Sonuç olarak yine 48 bitlik bir metin ortaya çıkacaktır.

5. S Box Substitution

Bir önceki işlemle XOR’lanmış metin (XORed RPT) (plain text ile keyin birleştirilmesi) S box’a verilir. Burada metin (48 bit), her biri 6 bitten oluşan 8 bloğa bölünür. Her blok için ayrı bir Sbox tablosu bulunur. Bu sebeple de aşağıda 8 adet Sbox tablosu göreceksiniz. Sbox’lar 16 sütun, 4 satırdan oluşur. 0 ile 15 arasında değer alır. Ve her SBox 4 bitlik çıkış verir. Bütün SBox’ların görevi bittiğinde sonuç olarak (4*8) 32 bit dönecektir. (Sbox RPT) Bu 6 bitlik verinin 1. ve 6. verisi satır, 2.3.4.5 bitleri ise Sbox üzerindeki sütünları gösterir. Bunların kesiştiği nokta da dönüş değerini oluşturacaktır. Böylece her sbox’ın 4 bitlik çıkışı olacaktır.

Örneğin, SBOX1 kullanarak, 110101 bloğunu ele alalım. İlk ve son biti satırı gösterecek. Bu durumda 11 olur. 11 lik binary değeri, decimal olarak 3 yapar. Yani sbox 3. indexine gidiyoruz.1010 ise sütün değerini gösterecektir. Binary 1010 ise 10 decimal yapacaktır. Bu durumda sütünlardan 10. index değerini seçiyoruz. Kesiştiği nokta bize 3' ü verecektir.

6. P Box Permutation

Burası da bir önceki aşamada, SBOX tan geçen verinin karıştırılma işlemi yapılır. Tüm SBOX’lardan geçtikten sonra elimize gelen 32 bit veri, bu tablo aracılığı ile karıştırılır (P Box table)

7. XOR and Swap

Bu aşamaya kadar LPT ‘ye hiç dokunmadık. (Initial permutation sonrası LPT ve RPT olarak ikiye bölmüştük) Buraya dikkat, orjinal RPT yi(XOR’lanmamış) sola alıyoruz dolayısıyla yeni LPT oluyor. Sağ taraf ile (P Box RPT of 32 bit) ilk bölümde ayırdığımız sol taraf (LPT of 32 bit) XOR’lanıyor. Bu da bizim yeni RPT’miz oluyor. Ve bu işlem 16 kez tekrarlanıyor. 16 roundun sonunda, 32 bitlit LPT ve 32 bitlik RPT bize 64 bitlik bir çıktı veriyor.

Ve son olarak elde ettiğimiz bu veriyi final permutasyon tablosundan geçirip karıştırıyoruz.

--

--

Furkan Güngör

Solution Developer — I want to change the world, give me the source code.