Des Algoritması – Kriptoloji Yazı Dizisi 4

Yazı dizisinin 4. makalesi DES algoritmasının çevirisini nihayet bitirdim. Orlin Grabbe’nin yazdığı DES makalesi gerçekten güzel bir kaynak.

İngilizce halini http://orlingrabbe.com/des.htm linkinden okuyabilirsiniz.

DES Algoritması

DES (Data Encryption Standard) dünyada en çok kullanılan şifreleme algoritmasıdır.  Bir çok sene boyunca insanlar için ‘güvenli şifreleme’ işlemi DES birlikte anıldı. Electronic Frontier Foundation’nın 220.000 dolara DES ile şifrelenmiş metinleri kıran bir makine geliştirmelerine rağmen, DES yeni versiyonu TRIPLE-DES ile uzunca süre bankalar ve devlet tarafından kullanılmaya devam edecek.

DES nasıl çalışır ? Bu makale DES şifreleme algoritmasındaki adımları açıklıyor ve örnekler vasıtasıyla tarif ediyor.

DES’in Temel Örnekleri

DES bitler, veya ikilik sayılar (1 ve 0 ) ile çalışır . Her 4 grupluk bitler onaltılık veya 16 tabanındaki sayıları oluşturur. İkilik düzende “0001″ onaltılık olarak “1″ ‘e,  ikilik düzendeki “1000″  onaltılık olarak “8″ ‘ e, “1001″ onaltılık olarak “9″ ‘a , “1010″ onaltılık olarak “A”‘ya  ve “1111″ ise onaltılık olarak “F”‘e denk gelir.

DES 64 bitlik (16 tane hexadecimal sayılık) mesaj gruplarını şifrelereyek çalışır.  Şifrelemeyi gerçekleştirmek için,  DES görünüşte 16 hexadecimal rakamlık (64 bit uzunluğunda) “anahtarları” kullanır. Her 8. bit DES algoritması tarafından göz ardı edildiğinden dolayı geçerli olan anahtar büyüklü 56 bittir.  Ama, her durum için, 64 bitlik (16 tane onaltılık sayı)  DES bulunduğundan beri kullanılan yuvarlak bir sayıdır.

Örneğin düz metin olarak “8787878787878787″ sayısını alırsak , ve “0E329232EA6D0D73″ anahtarını kullanarak şifrelersek en sonunda  şifrelenmiş olarak “0000000000000000″ metnini elde ederiz.  Eğer şifrelenmiş metni aynı güvenli DES anahtarı “0E329232EA6D0D73″ ile çözersek, sonuç orjinal metin olan “8787878787878787″ çıkacaktır.

Bu örnek düz metnimiz tam olarak 64 bit uzunluğunda olduğundan basit ve nizami bir örnektir. Eğer düz metnin 64 bitin tam katları olsaydı aynı şey geçerli olacaktı. Ama bir çok mesaj 64 bitin (16 tane onaltılık sayının) tam katı olmaz.

Örneğin “Your lips are smoother than vaseline” düz metnini ele alalım. Bu düz metin 38 byte (76 tane onaltılık) uzunluğundadır. Bu yüzden şifreleme için düz metnin sonuna fazladan bytelar eklenmelidir. Şifrelenmiş metin çözüldüğü zaman, bu fazladan bytelar atılabilir. Farklı kaydırma şemaları, fazladan byte eklemek için farklı yollar mevcuttur. Burada örnek için sonunua sadece 0 ekleyeceğiz, böylece toplam mesaj 8 byte’ın katı olabilir ( veya 16 tane onaltılık sayının, veya 64 bitin).

“Your lips are smoother than vaseline” düz metni, 16lık tabandaki (hexadecimal) gösterimi şu şekildedir;

“596F7572206C6970 732061726520736D 6F6F746865722074 68616E2076617365 6C696E650D0A”.

(İlk 72 rakam İngilizce mesajı temsil etmektedir. “oD ” satır başını, “oA” yeni satırı, mesaj dosyasının sonlandığını göstermektedir.). Bu satırın sonuna 80 adet 16 lık rakam elde etek için “0″ ekleyeceğiz:

“596F7572206C6970 732061726520736D 6F6F746865722074 68616E2076617365 6C696E650D0A0000″.

Eğer bu düzmetnin daha önceki DES anahtarını “0E329232EA6D0D73″ kullanarak, ilk 64 bitini şifrelersek, şu şifrelenmiş metni elde ederiz:

“C0999FDDE378D7ED 727DA00BCA5A84EE 47F269A4D6438190 9DD52F78F5358499 828AC9B453E0E653″.

Bu gizli kod transfer edilebilir veya saklanabilir. Bu şifrelenmiş metnin çözülmüş hali orjinal metin, yani “Your lips are smoother than vaseline” olacaktır. (Eğer Monica Lewinsky kendi bilgisayrında şifreleme kullansaydı, bugün Bill Clinton’un ne kadar iyi duruma olacağını düşünün !)

Detaylı Olarak DES Nasıl Çalışır ?

DES bir blok-şifreleme , yani düz metni belirli büyüklükte bloklara (64 bit) böler ve aynı büyüklükte şifrelenmiş metni geri döndürür. Bu yüzden DES sonucu 64 bitin 2^64 ( “2 üzeri 64″ olarak okunur) olası 1 veya 0 olarak düzünlenmesi şeklinde oluşabilir. Her 64 bitlik bloklar 32 bitlik bloklara bölünür, soldaki block L, sağdaki blok R.( Bu bölünde sadece belli bir işlem için kullanılır.

Örneğin: M 16lık tabanda şifrelenmemiş metnimiz olsun M = 0123456789ABCDEF. M ‘nin ikilik düzlemde yazarsak 64 bitlik bir metin elde ederiz.

M = 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
L = 0000 0001 0010 0011 0100 0101 0110 0111
R = 1000 1001 1010 1011 1100 1101 1110 1111

M‘nin ilk biti “0″, son biti ise “1″. Soldan sağa doğru okuyoruz.

DES 56 bitlik anahtarlar kullanarak, 64 bitlik verileri şifreler. Anahtalar 64 bit olarak saklanmasına rağmen, anahtar içindeki her 8 bitlik değer kullanılmaz (örnerğin 8, 16, 24, 32, 40, 48, 56, ve 64. bitler). Aslında biz işlemlerde, sırasına bakmadan, soldan sağa doğru 1 den 64 kadar kullanacağız. Ama, ileride görebileceğiniz gibi alt-anatalar oluşturduğumuz zaman 8 bitlik değerleri elimine edeceğiz.

Örnerğin: K 16lık tabanda bir anahtar olsun K = 133457799BBCDFF1. Bu anahtarı ikilik düzlemde yazarsak (1 = 0001, 3 = 0011 şeklinde ve her 8 biti gruplayarak, son 8 biti kullanılmayacak.)

K = 00010011 00110100 01010111 01111001 10011011 10111100 11011111 11110001

DES algoritması şu adımları izler:

Adım 1: 48-bit uzunluğunda 16 tane alt-anahtar oluştur.

64-bitlik anahtar PC-1 tablosundaki gibi karıştırılır. Tablodaki ilk girdi 57, orjinal anahtar olan K‘daki 57. bitin karışıtırlmış K+ anahtarındaki ilk bit olacağı anlamına gelir. Ojinal anahtardaki 49. bit, tablodaki ikinci girdi olacak. Orjinal anahtarki 4. bit ise karıştırılmış anahtardaki son bite denk gelir. Orjinal anahtardaki yalnızca 56 bitin kullanıldığına dikkat edin.

             PC-1

              57   49    41   33    25    17    9
               1   58    50   42    34    26   18
              10    2    59   51    43    35   27
              19   11     3   60    52    44   36
              63   55    47   39    31    23   15
               7   62    54   46    38    30   22
              14    6    61   53    45    37   29
              21   13     5   28    20    12    4

Örnek:Orjinal anahtardan
 K =  00010011 00110100 01010111 01111001 10011011 10111100 11011111 11110001

Yer değiştirmiş 56 bitlik anahtar elde ettik

K+ = 1111000 0110011 0010101 0101111 0101010 1011001 1001111 0001111

Şimdi anahtarı 28 bit içeren sağ ve sol, C0 ve D0, parçalara bölüyoruz.

Örnek: Karıştırılmış K+ anahtarından, şunları elde ediyoruz.

C0 = 1111000 0110011 0010101 0101111
D0 = 0101010 1011001 1001111 0001111

C0 ve D0 tanımladıktan sonra, 16 adet blok tanımlıyoruz Cn ve Dn, 1<=n<=16. Her Cn ve Dn blokları bir öncekli Cn-1 ve Dn-1 bloklarını kullanarak, sırasıyla, n =1, 2, …, 16,  değerleri için, aşağıdaki listeyi kullanarak  “sola kaydırma” işlemi yapar. Sola kaydırma işlemi yapmak  için,baştak bit hariç,her biti bir sola kaydırır baştaki bit bloğun sonuna gelir.

                       Tekrar   Sola Kaydırma
                      Numarası     Sayısı

                          1          1
                          2          1
                          3          2
                          4          2
                          5          2
                          6          2
                          7          2
                          8          2
                          9          1
                         10          2
                         11          2
                         12          2
                         13          2
                         14          2
                         15          2
                         16          1

Bunun anlamı, örneğin, C3 ve D3, C2ve  D2, iki bit sola kaydırması ile elde edilir.C16 ve D16 ,C15 ve D15, ‘in sola bir bit kaydırılması ile elde edilir. Bütün durumlarda, bir bit sola kaydırmanın anlamı, bitlerin bir soldaki sıraya gitmesidir, bu yüzden sola kaydırmanın ardından, 28 bitlik sıra bir önceki sıraya göre, 2, 3,…, 28, 1 şeklinde olacaktır.

Örnek: Orjinal C0 ve D0 çiftlerinden şunları elde ederiz:

C0 = 1111000011001100101010101111
D0 = 0101010101100110011110001111

C1 = 1110000110011001010101011111
D1 = 1010101011001100111100011110

C2 = 1100001100110010101010111111
D2 = 0101010110011001111000111101

C3 = 0000110011001010101011111111
D3 = 0101011001100111100011110101

C4 = 0011001100101010101111111100
D4 = 0101100110011110001111010101

C5 = 1100110010101010111111110000
D5 = 0110011001111000111101010101

C6 = 0011001010101011111111000011
D6 = 1001100111100011110101010101

C7 = 1100101010101111111100001100
D7 = 0110011110001111010101010110

C8 = 0010101010111111110000110011
D8 = 1001111000111101010101011001

C9 = 0101010101111111100001100110
D9 = 0011110001111010101010110011

C10 = 0101010111111110000110011001
D10 = 1111000111101010101011001100

C11 = 0101011111111000011001100101
D11 = 1100011110101010101100110011

C12 = 0101111111100001100110010101
D12 = 0001111010101010110011001111

C13 = 0111111110000110011001010101
D13 = 0111101010101011001100111100

C14 = 1111111000011001100101010101
D14 = 1110101010101100110011110001

C15 = 1111100001100110010101010111
D15 = 1010101010110011001111000111

C16 = 1111000011001100101010101111
D16 = 0101010101100110011110001111

Şimdi  1<=n<=16, için  CnDn şeklinde birleştirilmiş  anahtar çiftlerini aşağıdaki tabloya göre karıştırarak Kn  anahtarı elde edeceğiz. CnDn den oluşan anahtar çifti 56 bit uzunluğunda, ama PC-2 yalnızca 48 tanesini kullanıyor.

                              PC-2

                 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

Kn ‘in ilk biti CnDn, anahtarının 14. biti, ikinci biti ise 17. biti şeklinde devam ediyor ve Kn‘in 48. biti CnDn‘in 32 biti şeklinde bitiyor.

Örnek: İlk anahtar  C1D1 = 1110000 1100110 0101010 1011111 1010101 0110011 0011110 0011110  için,  PC-2 ‘ye göre karıştırma işlemi uyguladığımızda,

K1 = 000110 110000 001011 101111 111111 000111 000001 110010

Diğer anahtarlar için uyguladığımızda

K2 = 011110 011010 111011 011001 110110 111100 100111 100101
K3 = 010101 011111 110010 001010 010000 101100 111110 011001
K4 = 011100 101010 110111 010110 110110 110011 010100 011101
K5 = 011111 001110 110000 000111 111010 110101 001110 101000
K6 = 011000 111010 010100 111110 010100 000111 101100 101111
K7 = 111011 001000 010010 110111 111101 100001 100010 111100
K8 = 111101 111000 101000 111010 110000 010011 101111 111011
K9 = 111000 001101 101111 101011 111011 011110 011110 000001
K10 = 101100 011111 001101 000111 101110 100100 011001 001111
K11 = 001000 010101 111111 010011 110111 101101 001110 000110
K12 = 011101 010111 000111 110101 100101 000110 011111 101001
K13 = 100101 111100 010111 010001 111110 101011 101001 000001
K14 = 010111 110100 001110 110111 111100 101110 011100 111010
K15 = 101111 111001 000110 001101 001111 010011 111100 001010
K16 = 110010 110011 110110 001011 000011 100001 011111 110101

Alt-anahtarlar için bu kadar yeter. Şimdi mesajın kendisini inceleyelim.

Adım 2: 64-bit datanın şifrelenmesi.

IP ( initial permutation ) adında karıştırma tablosu, ve 64 bitlik M adında mesajımız olsun. Bu tablo bitlerin ilk değerlerinin yerlerini değiştirmek için kullanılır. M değerinin 58. biti, IP‘in ilk bitine, M‘nin 59. biti IP‘nin ikicinci bitine denk gelir. M‘nin 7. biti IP‘nin son bitine denk gelir.

                             IP

            58    50   42    34    26   18    10    2
            60    52   44    36    28   20    12    4
            62    54   46    38    30   22    14    6
            64    56   48    40    32   24    16    8
            57    49   41    33    25   17     9    1
            59    51   43    35    27   19    11    3
            61    53   45    37    29   21    13    5
            63    55   47    39    31   23    15    7

Örnek: M değerini IP'ye göre karıştırırsak, şu değerleri elde ederiz.

M = 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
IP = 1100 1100 0000 0000 1100 1100 1111 1111 1111 0000 1010 1010 1111 0000 1010 1010

M‘nin 58. biti “1″, IP‘nin ilk biti olmuştur. M‘nin “1″ olan 50. biti, IP‘nin ikinci biti olmuştur. M‘nin  7 biti “0″ ise, IP‘nin son biti olmuştur.

Bir sonraki adım olarak karıştırılmış IP bloğunu sol 32 bit  L0  ve, sağ 32 bit  R0 olarak bölünür.

Örnek: IP‘ değerinden L0 and R0 değerlerini şu şekilde elde ederiz:

L0 = 1100 1100 0000 0000 1100 1100 1111 1111
R0 = 1111 0000 1010 1010 1111 0000 1010 1010

Daha sonra 48 bitlik Kn , ve 32 bitlik daha blok ile işlem yapan  f  fonksiyonunu, 1<=n<=16,  için 16 kere kullanıyoruz.  Burada + operatörü XOR (ikilik tabanda toplama) işlemini temsil eder, n değeri için 1 den 16′ya kadar şu hesabı yaparız:

Ln = Rn-1
Rn = Ln-1 + f(Rn-1,Kn)

n = 16, değer için son olarak L16R16 değerini hesaplar. Her bir adımda, bir önceki 32 bitlik sağ bloğu alıp, şimdiki adımın sol bloğu olarak kullanıyoruz. Sağ blok için, bir önceki sol blok ile, f  den gelen sonuca XOR  işlemi uyguluyoruz.

Örnek: n=1 için:

K1 = 000110 110000 001011 101111 111111 000111 000001 110010
L1 = R0 = 1111 0000 1010 1010 1111 0000 1010 1010
R1 = L0 + f(R0,K1)

This results in a final block, for n = 16, of L16R16. That is, in each iteration, we take the right 32 bits of the previous result and make them the left 32 bits of the current step. For the right 32 bits in the current step, we XOR the left 32 bits of the previous step with the calculation f .

Example: For n = 1, we have

K1 = 000110 110000 001011 101111 111111 000111 000001 110010
L1 = R0 = 1111 0000 1010 1010 1111 0000 1010 1010
R1 = L0 + f(R0,K1)

Hala f fonksiyonun açıklamadık. f değerini hesaplamak için  Rn-1 bloğunu 32 bitten 48 bite çıkartıyoruz. Bunu yapmak için Rn-1 tablosundaki bitleri tekrarlayan seçme tablosu kullanılır. Bu seçme tablosunu kullanmayı E fonksiyo olarak tanımlayalım. E(Rn-1) 32 bitlik bir girdi alır ve 48 bitlik bir sonuç üretir.

E‘nin girden elde edilen, 48 bitlik çıktı sonucu her birinde 6 bit olan 8 li bloklar halinde yazarsak şunu elde ederiz:

                    E BIT-SELECTION TABLE

                 32     1    2     3     4    5
                  4     5    6     7     8    9
                  8     9   10    11    12   13
                 12    13   14    15    16   17
                 16    17   18    19    20   21
                 20    21   22    23    24   25
                 24    25   26    27    28   29
                 28    29   30    31    32    1

Bu durumda E(Rn-1) ‘nin ilk üç biti Rn-1 ‘ın 32, 1 ve 2. bitleri, E(Rn-1) ‘nin son iki biti ise 32 ve 1. bitleri olur.

Örnek: E(R0) ve R0 ‘ı şu şekilde hesaplarız

R0 = 1111 0000 1010 1010 1111 0000 1010 1010
E(R0) = 011110 100001 010101 010101 011110 100001 010101 010101

( her 4 bitlik bloklar 6 bite çıkartıldı.

(Note that each block of 4 original bits has been expanded to a block of 6 output bits.)

Daha sonra  f  fonskiyonu içinde, E(Rn-1)  çıktısını Kn ile XOR işlemine sokuyoruz:

Kn + E(Rn-1).

Örnek: K1 , E(R0) için:

K1 = 000110 110000 001011 101111 111111 000111 000001 110010
E(R0) = 011110 100001 010101 010101 011110 100001 010101 010101
K1+E(R0) = 011000 010001 011110 111010 100001 100110 010100 100111.

f fonksiyonunu hesaplamayı henüz bitirmedik. Buraya kadar Rn-1 değerini , seçme tablosu kullanarak 32 bitten 48 bite çıkardık ve çıkan sonucu Kn  ile XORladık. Sonuç olarak 48 bitlik veya 8 tane 6 bitlik grubumuz var. Şimdi her 6 bitlik grup için ilginç bir şey yapacağız: onları S boxes”  denilen tablolar içinde adres olarak kullanacağız. Her 6 bitlik grup bize farklı S box larda,bir adres verecek. Bu adreste 4 bitlik bir sayı olacak. Bu 4 bitlik sayı orjinal 6 bitlik sayının yerine geçecek. Sonuç olarak 8 tane 6 bitlik sayı gurubu yerine toplamda 32 bit olan 8 tane 4 bitlik (4-bitlik çıktı üreten S boxeslardan elde edilen) sayı gurubu elde edeceğiz.

48 bitlik önceki değerden elde ettiğimiz değeri şu formda yazarsak:

Kn + E(Rn-1) =B1B2B3B4B5B6B7B8,
Bi 6 bitlik grupları temsil ediyor. Şimdi

S1(B1)S2(B2)S3(B3)S4(B4)S5(B5)S6(B6)S7(B7)S8(B8)
Si(Bi) i sırasındaki S box’ın çıktısı anlamına gelir.

Her  S1, S2,…, S8 fonksiyonu, 6-bitlik girdi verip, 4 bitlik çıktı üretir. S1 ‘e karar vermek için gerekli tablo aşağıda açıklanmıştır.

                             S1

                        Column Number
Row
No.    0  1   2  3   4  5   6  7   8  9  10 11  12 13  14 15

  0   14  4  13  1   2 15  11  8   3 10   6 12   5  9   0  7
  1    0 15   7  4  14  2  13  1  10  6  12 11   9  5   3  8
  2    4  1  14  8  13  6   2 11  15 12   9  7   3 10   5  0
  3   15 12   8  2   4  9   1  7   5 11   3 14  10  0   6 13

Eğer S1 bu tabloda tanımlı fonksiyon ve 6 bitlik bir blok ise,  S1(B) şu şekilde hesaplanır: B‘nin ilk ve son biti, 0-3 (veya ikilik tabanda 00 – 11 ) arasında iki bitlik bir sayı ifade edecek şekilde yazılır. Bu sayıya diyelim. B‘nin ortasındaki 4 bit, 0-15 (veya ikilik düzlemde 0000 -1111) arasında bir sayıyı ifade edecek şekilde yazılır. Buna  j diyelim. talobadaki i ‘nci satıra ve j ‘nci sütuna bakalım. Bu sayı 0-15 arasında (veya ikilik düzlemde 0000 -1111) arasında ve 4 bitlik bir bloğu temsil eder. Bu blok S1(B) fonksiyonunu çıktısını oluşturur. Örneğin, B = 011011 bloğu için, satır olarak ilk bit “0″, son bit “1″  ‘den elde edilen 01 kullanılır. 1. satır anlamına gelir. Ortasındaki 4 bit “1101″ ‘dir. Bu onluk tabanda 13′e denk gelir ve sütün olarak kullanılır. 1. satırdaki 13. sutündaki sayı 5 dir. Bu çıktıyı belirler, 5 ikilik düzlemde 0101 olarak yazılır ve  bu durumda S1(011011) = 0101 şeklinde ifade edilir.

S1,…,S8 ‘ e kadar gerekli tablo aşağıda verilmiştir.

                             S1

     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

                             S2

     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

                             S3

     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

                             S4

      7 13  14  3   0  6   9 10   1  2   8  5  11 12   4 15
     13  8  11  5   6 15   0  3   4  7   2 12   1 10  14  9
     10  6   9  0  12 11   7 13  15  1   3 14   5  2   8  4
      3 15   0  6  10  1  13  8   9  4   5 11  12  7   2 14

                             S5

      2 12   4  1   7 10  11  6   8  5   3 15  13  0  14  9
     14 11   2 12   4  7  13  1   5  0  15 10   3  9   8  6
      4  2   1 11  10 13   7  8  15  9  12  5   6  3   0 14
     11  8  12  7   1 14   2 13   6 15   0  9  10  4   5  3

                             S6

     12  1  10 15   9  2   6  8   0 13   3  4  14  7   5 11
     10 15   4  2   7 12   9  5   6  1  13 14   0 11   3  8
      9 14  15  5   2  8  12  3   7  0   4 10   1 13  11  6
      4  3   2 12   9  5  15 10  11 14   1  7   6  0   8 13

                             S7

      4 11   2 14  15  0   8 13   3 12   9  7   5 10   6  1
     13  0  11  7   4  9   1 10  14  3   5 12   2 15   8  6
      1  4  11 13  12  3   7 14  10 15   6  8   0  5   9  2
      6 11  13  8   1  4  10  7   9  5   0 15  14  2   3 12

                             S8

     13  2   8  4   6 15  11  1  10  9   3 14   5  0  12  7
      1 15  13  8  10  3   7  4  12  5   6 11   0 14   9  2
      7 11   4  1   9 12  14  2   0  6  10 13  15  3   5  8
      2  1  14  7   4 10   8 13  15 12   9  0   3  5   6 11

Örnek: İlk adım olarak, 8 S box’dan  çıktıları elde ederiz:

K1 + E(R0) = 011000 010001 011110 111010 100001 100110 010100 100111.

S1(B1)S2(B2)S3(B3)S4(B4)S5(B5)S6(B6)S7(B7)S8(B8) = 0101 1100 1000 0010 1011 0101 1001 0111

f fonksiyonunu hesaplamak için son adım, tablosuna göre S-box çıktılarını karıştırmaktır. f‘in son hali:

f = P(S1(B1)S2(B2)…S8(B8))
aşağıdaki tabloda verilmiştir. P 32 bitlik girdi değerinden 32 bitlik bir çıktı üretir.

                                P

                         16   7  20  21
                         29  12  28  17
                          1  15  23  26
                          5  18  31  10
                          2   8  24  14
                         32  27   3   9
                         19  13  30   6
                         22  11   4  25

Örneğin: 8 S-box’ın çıktısından:

S1(B1)S2(B2)S3(B3)S4(B4)S5(B5)S6(B6)S7(B7)S8(B8) = 0101 1100 1000 0010 1011 0101 1001 0111
elde edeceğimiz değer:

f = 0010 0011 0100 1010 1010 1001 1011 1011
R1 = L0 + f(R0 , K1 )

= 1100 1100 0000 0000 1100 1100 1111 1111
+ 0010 0011 0100 1010 1010 1001 1011 1011
= 1110 1111 0100 1010 0110 0101 0100 0100

Bir sonraki adımda, L2 = R1 atamasını apıp, R2 =L1 + f(R1, K2işlemini hesaplamalıyız. Bu işlemi 16 kere uygulaacağız. 16. adımın sonunda L16 ve R16 bloklarını elde edeceğiz. Daha sonra bunların yerlerini değiştirip 64-bitlik bir blok elde edeceğiz.

R16L16
ve aşağıdaki tabloda belirtilen son karıştırma işlemi IP-1 uygulayacağız:

                             IP-1

            40     8   48    16    56   24    64   32
            39     7   47    15    55   23    63   31
            38     6   46    14    54   22    62   30
            37     5   45    13    53   21    61   29
            36     4   44    12    52   20    60   28
            35     3   43    11    51   19    59   27
            34     2   42    10    50   18    58   26
            33     1   41     9    49   17    57   25

Bu durumda algoritmadan çıkan sonucun ( R16L16 ) 40. biti  tablonun ilk biti, 8. bit ikinci biti şeklinde 25. bit son bit olana kadar devam eder.

Örnek: Eğer 16 bloğun tamamını yukarda anlatıldığı şekilde işlemlerden geçirirsek, 16. adımda şunu elde ederiz:

L16 = 0100 0011 0100 0010 0011 0010 0011 0100
R16 = 0000 1010 0100 1100 1101 1001 1001 0101

Yer değiştirip, son karıştırma işlemini uygularsak,

R16L16 = 00001010 01001100 11011001 10010101 01000011 01000010 00110010 00110100

IP-1 = 10000101 11101000 00010011 01010100 00001111 00001010 10110100 00000101

Değerini elde ederiz ve 16′lık tabanda şu şekilde gözükür.

85E813540F0AB405.

Bu M = 0123456789ABCDEF nin şifrelemniş hali,  C = 85E813540F0AB405 dir.

which in hexadecimal format is

85E813540F0AB405.

Çözme işlemi , şifrleme işleminin tersi şeklinde işler, yukarıda bahsedilen adımlarda, alt-anahtarların sırasıyla kullanımı sonucu düz metin elde edilebilir.

DES Çalışma Türleri

DES algoritması 64-bit uzulunluğundaki M bloğunu şifreleyerek 64-bitlik C bloğuna çevirir.  Eğer her 64-bitlik şifreleme işlemi ayrı ayrı yapılıyorsa bu şifreleme türüne Electronic Code Book (ECB) denir. Şifrelenecek bloğun bir önceki bloğa bağlı olduğu iki ayrı şifreleme türü daha vardır Chain Block Coding (CBC) ve  Cipher Feedback (CFB.

DES Kırma

DES’in ulusal bir standart olmasından önce, NBS’nin bir General önerilen bir algoritma önerisi için yorum istediği dönemde, açık anahtarlı şifrelemenin kurucuları, Martin Hellman ve Whitfield Diffie, DES’ın kullanılması hakkında bazı itirazlarda bulundular.Hellman, “Diffie ve ben önerilen data sifrelemesinin ticari saldırılara karşı muhtemelen güvenli olmasına rağmen, istihbarat örgütleri tarafindan yapılabilecek saldırılara karşı son derece savunmasız olduğu konusunda endişelendik” diye yazmistir.

Diffie ve Hellman daha sonra DES algoritmasını kırmak için bir “brute force”  saldırısı denediler. (“brute force”‘un anlamı 2^56 tane olası anaharın, şifrelenmiş metin üzerinde denenmesidir.) Özel amaç için tasarlanmış parallel bilgisayarlar ile bir saniyede bir milyon anahtar denemek için  bir milyon mikroçip kullandılar, ve yaklaşık $20 milyon dolara mal oldu.

Hızlıca 1998′e gelelim. Joh Gilmore’un yöneticiliği alındaki EFF, $220.000 dolar harcayarak bütün DES anahtar  ihtimallerini 4.5 günde deneyen bir bilgisayar ürettiler. 17 Temmuz 1998′de , 56-bitlik bir anahtar ile şifrelenmiş bir metni 56 saatte kırdıklarını açıkladılar. Deep Crack adlı bilgisayar her biri 64 mikroçip içeren 27 kart kullanıyordu ve saniyede 90 milyar anahtar testebiliyordu.

Buna rağmen, Haziran 8 1998 gibi yakın bir tarihte, Doçent Yardımcısı ve Adalet Bakanlığında Başsavcı olan Robert Litt, FBI’ın DES’in kırılabilecek bir yapıda olmasını inkar etti ve dedi ki: “Teknik problemi şu bağlamda bakalım: Tek bir mesajın şifresini çözmek için 14.000 bilgisayar 4 ay boyunca çalıştı. Sadece FBI ve NSA’den değil (işlemci gücü bağlamında), her polis departmanından bahsediyoruz.”

Bu şifreleme uzmanı Bruce Schneier tarafından cevaplandı: ” … FBI ya yetersiz ya da yalan söylüyor ya da her ikisi.” Schneier şu şekilde devam etti: “Bunun için tek çözüm daha uzun bir anahtarlı algoritma seçmek, galaksimizde, güneş yok olmadan önce, triple-DES’i brute-force ile kırmak için gerekli silicon veya zaman yok.”

Triple-DES ( Üçlü-DES )

Üçlü-DES, iki tane 56-bitlik anahtar kullanmaktadır. Verilen düzmetin önce ilk anahtar kullanılarak DES algoritması ile şifrelenir. İkinci anahtar ile, şifrelenmiş metin üzerinde, DES’in çözme algoritması uygulanır. (İkinci anahtar çözmek için doğru bir anahtar olmadığından, bu çözme işlemi veriyi daha karmaşık bir hale sokacaktır.). İki kez karıştırılmış mesaj, son olarak ilk  anahtar kullanılarak tekrar şifrelenir ve şifrelenmiş metin elde edilir. Bu iç adıma Üçlü-DES denir.

Üçlü-DES, DES’in iki anahtar kullanarak üç kez uygulanmasıdır. (Üçlü-DES 2 anahtar yerine 3 ayrı anahtar kullanılarakta ugulanabilir. Bu duruma anahtar uzayında 2’112 adet anahtar bulunur.)

Triple-DES is just DES done three times with two keys used in a particular order. (Triple-DES can also be done with three separate keys instead of only two. In either case the resultant key space is about 2^112.)

Referenslar
“Cryptographic Algorithms for Protection of Computer Data During Transmission and Dormant Storage,” Federal Register 38, No. 93 (May 15, 1973).

Data Encryption Standard, Federal Information Processing Standard (FIPS) Publication 46, National Bureau of Standards, U.S. Department of Commerce, Washington D.C. (January 1977).

Carl H. Meyer and Stephen M. Matyas, Cryptography: A New Dimension in Computer Data Security, John Wiley & Sons, New York, 1982.

Dorthy Elizabeth Robling Denning, Cryptography and Data Security, Addison-Wesley Publishing Company, Reading, Massachusetts, 1982.

D.W. Davies and W.L. Price, Security for Computer Networks: An Introduction to Data Security in Teleprocessing and Electronics Funds Transfer, Second Edition, John Wiley & Sons, New York, 1984, 1989.

Miles E. Smid and Dennis K. Branstad, “The Data Encryption Standard: Past and Future,” in Gustavus J. Simmons, ed., Contemporary Cryptography: The Science of Information Integrity, IEEE Press, 1992.

Douglas R. Stinson, Cryptography: Theory and Practice, CRC Press, Boca Raton, 1995.

Bruce Schneier, Applied Cryptography, Second Edition, John Wiley & Sons, New York, 1996.

Alfred J. Menezes, Paul C. van Oorschot, and Scott A. Vanstone, Handbook of Applied Cryptography, CRC Press, Boca Raton, 1997.

rst rou

Orlin Grabbe

http://orlingrabbe.com/des.htm

Bu yazı toplam 3,247 kere görüntülenmiştir.

0saves
Eğer yazıyı beğendiyseniz lütfen yorum bırakın veya diğer yazılardan haberdar olmak için RSS'e üye olun..
Paylaş / Kaydet

Yazar Hakkında


Yazar:

Hakkında / İlgi Alanları: * php ve pyton kullanıcısı * güvenlik üzerine çalışmakta * girişimci * fotoğraf, kitap, sinema, basketbol ile ilgili
Kategori: Güvenlik, April 27th, 2012

Yazarlarımızdan , bu yazı dahil toplam 51 adet yazı yazmış.

2 yanıt



Cevap yaz