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.

Şadi Evren ŞEKER için bir cevap yazın Cevabı iptal et

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