DES (Veri Şifreleme Standardı, Data Encryption Standard)

Yazan: Şadi Evren ŞEKER

DES, veri şifrelemek (encryption) ve şifrelenmiş verileri açmak (decryption) için geliştirilmiş bir standarttır. Esas olarak kullanılan yönteme (veya algoritmaya) DEA yani Data Encryption Algorithm (Veri Şifreleme Algoritması) adı verilir. Bu algoritmanın standartlaştırılmış halinin ismi DES olarak geçmektedir.

DES yapısı itibari ile blok şifreleme örneğidir (daha fazla bilgi için vigenere şifrelemesine bakabilirsiniz). Yani basitçe şifrelenecek olan açık metni (plain text) parçalara bölerek (blok) her parçayı birbirinden bağımsız olarak şifreler ve şifrenmiş metni (cipher text) açmak içinden aynı işlemi bloklar üzerinde yapar. Bu blokların uzunluğu 64 bittir.
Aşağıda 64 bitlik bir veri girişinin bir geçiş boyunca yaptığı işlemler gösterilmiştir:

DES aynı zamanda 64 bit uzunluğunda bir anahtar alır. Ancak bu anahtarın geçerli olan uzunluğu 56 bittir çünkü 8 bit partiy için harcanır.

DES’in çalışması aşağıdaki şekilde verilmiştir:

DES bir geçiş

yukarıdaki şekilde 64 bitten oluşan bir metnin öncelikle 2 parçaya ayrılması gerekir, soldaki ve sağdaki parça ayrı ayrı işlenmektedir. Bu işleme sağdaki 32 bitlik parçanın f fonksiyonuna anahtar ile birlikte girmesi ve parçaların yer değiştirmesi şeklinde yapılmaktadır.
Yukarıdaki şekilde + işlemi yahut işlemidir (xor (exclusive or, özel veya)) .
Yukarıdaki şekilde DES için yapılan bir geçiş çizilmiştir, DES şifrelemesinde bu işlem 16 defa tekrar edilmektedir.
Yukarıdaki şekilde f fonksiyonu olarak verilen fonksiyonun detayı aşağıdaki şekilde verilmiştir:
DES fonksiyonunun çalışması

Yukarıdaki şekilde bir DES geçişi (pass) içindeki f fonksiyonunun nasıl çalıştığı gösterilmiştir. Bu fonksiyon bir 32bit’lik parçayı alarak 48 bit’lik anahtar ile 32 bit’lik sonuç üretmektedir. Bu üretme işlemi sırasında en kritik işlem yukarıdaki şekilde E olarka görüntülenmiş expansion işlemidir. Bu işlem basitçe aynı bit için birden fazla sonuç üretilebilmesini ön görür. Aşağıda detaylıca anlatılacaktır ancak yukarıdaki resmin detaylarına devam edilecek olursa genişletilmiş (expanded) bili, anahtar ile xor işlemine tabî tutulur. Sonuçta 48 bitlik olarak üretilen metin 8 bloğa bölünür. Her blok 6 bitlik bir parçadan oluşmaktadır. Her 6 bitlik parça bu sefer expansion işleminin tersi olarak küçültülmekte ve 4 bit’e indirilmektedir. Sonuçta 4 bitlik 8 blok yani toplam 32 bitlik veri üretilmiştir.

Yukarıdaki işlemde genişletme işlemi olarak adlandırılan işlem (expansion) basitçe aşağıdakine benzer bir tablo ile yapılmaktadır:
des_expansion_table.jpg
Yukarıdaki tablodaki mantık basitçe bir sayının birden fazla pozisyonda bulunmasıdır. Bu durumda örneğin 1 sayısı için hem 2. hem de 4. konumda karşılık bulunmaktadır.

DES ile ilgili diğer bir ayrıntı da anahtar üretilmesidir. Dikkat edilirse DES’in 64 bitlik bir anahtar ile çalıştığı ve 8 bitlik parity kontrolü çıkarılacak olursa bu anahtarın 56 bitlik olduğu yukarıda anlatılmıştı. Ancak f fonksiyonuna giren her geçişteki anahtar boyutu yukarıda 48 bit olarak verilmiştir. Dolayısıyla aslında her geçiş (pass) için farklı bir anahtar üretilmektedir. Bu anahtarlar 56 bitlik esas anahtardan üretilen anahtarlardır. Aşağıda bu anahtarların nasıl üretildiği gösterilmiştir:
des_anahtar.jpg
Yukarıdaki şekilde 56 bitlik giriş anahtarından her geçiş için gereken anahtarların üretilmesi gösterilmiştir. Bu işlem 16 adımda yapılmaktadır ve her adımda o adım için üretilmiş olan tablo kullanılmaktadır. Her adım öncelikle 2 adet 28 bitlik parçaya bölünmüştür. Tablolara PC1’den PC16’ya kadar isimler verilmiştir. Ayrıca her tablo girişinden önce bir kaydırma işlemi kullanılarak üretilen anahtar değiştirilmektedir. Buna göre örneğin 10. adımda orjinal verinin her iki parçası da 10 bit kaydırılmış olacaktır.

DES ile şifrelenmiş bir metni açmak için aynı algoritmaya şifreli metni (cipher text) aynı anahtar ile vermek yeterlidir.

DES için zaman içinde bilgisayarların işlem hızının gelişmesi ile saldırılar kolay hale gelmiştir. DES’in daha zor saldırılır hale gelmesi için 128 bit anahtar uzunluğu kullanan üçlü DES uygulaması geliştirilmiştir.

Yorumlar

  1. talip

    DES aynı zamanda 64 bit uzunluğunda bir anahtar alır. Ancak bu anahtarın geçerli olan uzunluğu 56 bittir çünkü 8 bit partiy için harcanır.

    Burada 64 bit yerine 56,56 yerine 48 gelmesi lazım.

  2. Şadi Evren ŞEKER Article Author

    Evet haklısınız DES’in anahtar boyutu 64’tür ve 8 bit parity (kontrol) bitidir. Ancak yukarıdaki şekilde gösterilen anahtar her geçişteki (pass) anahtar boyutudur. DES her geçişte 64 bitlik anahtardan yeni anahtarlar üretir. Bu durumda her anahtar 8 bit kısalmaktadır.
    Sonuçta parity bit dahil halde anahtar uzunlukları 56 bit olmaktadır.
    Nitekim DES’in şifreleme sırasında kullandığı fonksiyona 32 bitlik mesaj girmekte ve 48 bit’e genişletilmektedir (expand), bu durumda 48 bitlik yeni genişletilmiş hal ile yahut (XOR) işlemine tabi tutulan anahtar da yine 48 bit uzunluğudadır.

  3. zeynel coşgun

    64 bitten nasıl 48 bit key oluşturulduğunu da ben anlatayım.64 bit verilen key, permuted choice 1 (initial permutation tablosuna benzer) tablosu referans alınarak 56 bit e düşürülür(tabloyu aratıp bulabilirsiniz).28-28 bit olarak 2 kısma ayrılır.28 bitlik 2 kısımda left shift yapılır.Kaç kez shift edeceğimiz her iterasyona göre değişir.Yani Key1 bulunurken 1 Key4 için 2 shift gibi değişir.Daha sonra shift edilen sag ve sol kısımlar birleştirilip permuted choice 2 tablosu referans alınarak 48 bitlik key elde edilir.

  4. Hadi Borozan

    Bilgi: 2. şekildeki tekrar 32 bir elde edilmiş veriden (32 bitlik sonuç) sonra permitasyon şifresine girmiş olması gerekiyordu.

  5. Şadi Evren ŞEKER Article Author

    evet haklısınız, şekilde bu işlem gösterilmemiş. En kısa sürede düzeltirim. Zaten DES’te kullanılan bu f fonkisyonu bir fiestel ağı örneğidir ve bu ağlar SPN, substitution permutation network (yerine koyma, yer değiştirme ağları) olarak geçer. Şekilde sadece yerine koyma kısmı görülüyor, bu aşamadan sonra bir de yer değiştirme olması gerekiyor. İlginiz için teşekkürler.

  6. merve

    Merhabalar, benim bi ödev konum olarak DES ile CBC(Cipher Block Chaining) arasında olan ilişkiden bahsetmem lazım daha doğrusu ben bu 2 konuyu bağdaştıramadım.Yardımcı olursanız çok sevinirim.

  7. merve

    Çok teşekkür ederim.Peki triple des ile cbc nin bağlantısı nedir? daha doğrusu triple des(ecb) ile triple des(cbc) nin farkı nedir?Yarın projemin sunumu var yarına kadar cevap alabilirsem çok sevinirim.

    1. Şadi Evren ŞEKER

      şifreleme algoritmasının 3-des olması yaklaşımı değiştirmez. Aynı şekilde CBC için şifreleme algoritmasını triple des olarak düünebilirsiniz.

      ECB için da aşağıdaki yazıda bulunan şifreleme algoritmalarının yerinde triple des varmış gibi düşünebilirsiniz:

      http://bilgisayarkavramlari.sadievrenseker.com/2009/03/06/elektronik-kod-defteri-sekli-electronic-code-book-mode/

      Triple DES’de aşağıdaki yazıda bulunuyor:

      http://bilgisayarkavramlari.sadievrenseker.com/2008/03/13/uclu-des-triple-des/

  8. Tayfun

    Acaba eapol’u dışarıdan bir müdahele yanıltamaz mı ? Yani misafiri yönetici olarak göstermek için doğrulama aşamasını geçemez miyiz ? Bu arada bilgiler için teşekkürler

    1. Şadi Evren ŞEKER

      Evet matematiksel detaylara girmiyorum, Fiestel Ağlarını çekeceğim ilave bir video olacak orada ve hatta devamında substitution permutation network konusunda s-box’lardan biraz daha detaylı bahsederim. ama s-box nasıl oluşturulur, bu s-box’larda doğrusal bağlantı bulunma ihtimali ve hangi durumlarda zaafiyet oluşturur gibi konulara özel video çekeceğimi sanmıyorum.
      Başarılar

  9. ahmet

    ” DES aynı zamanda 64 bit uzunluğunda bir anahtar alır. Ancak bu anahtarın geçerli olan uzunluğu 56 bittir çünkü 8 bit partiy için harcanır.”demiş ya öyle mi olması lazım hocam kafam karıştı.

    Burada 64 bit yerine 56,56 yerine 48 gelmesi lazım.”

  10. Arif

    Hocam çok teşekkürler bilgiler için, gayet güzel.
    Bir sorum olacak. Bunun algoritmasını koda dökmem gerekiyor. Örnekleri incelediğimde sboxlar için hep aynı diziler kullanılmış. Bunlar standart mıdır?
    static int[][] sbox = {
    // sbox 1 -> 0
    new int[]{
    14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7,
    0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8,
    4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0,
    15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13
    },
    new int[]{
    15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10,
    3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5,
    0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15,
    13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9
    },
    new int[]{
    10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8,
    13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1,
    13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7,
    1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12
    },
    … gibi.
    Mantığı nedir?
    Teşekkürler.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir