22
December
2011

Algoritma DES (Data Encryption Standard)

Sebagai salah satu sistem kriptografi simetris, DES tergolong jenis cipher blok. DES dikatakan enkripsi blok karena pemrosesan data baik enkripsi maupun dekripsi, diimplementasikan per blok (dalam hal ini 8 byte). Proses pada algoritma DES terbilang panjang, bahkan jauh lebih panjang daripada Elgamal, tapi pada implementasinya ternyata proses komputasinya dapat berjalan lebih cepat. Mengapa demikian? karena pada DES tidak ada operasi aritmatika yang berjalan seperti halnya pada Elgamal. Proses yang berjalan pada DES hanya sebatas pergeseran bit-bit pada tiap blok enkripsi/dekripsi. Tidak percaya? mari kita bahas…

sip

Pertama yang harus kita ketahui dari algoritma ini adalah Skema global yang ada pada algoritma DES, diuraikan sebagai berikut:

a. Blok plainteks dipermutasi dengan permutasi awal (IP, Initial Permutation).

b. Hasil permutasi awal kemudian dienciphering sebanyak 16 kali (16 putaran). Setiap putaran menggunakan kunci internal yang berbeda dengan perhitungan LiRi dengan 1 ≤ i ≤ 16.

c. Hasil enciphering kemudian dipermutasi dengan matriks permutasi balikan (invers initial  permutation atau IP-1) menjadi blok cipherteks.

Permutasi Awal (Initial Permutation)

Sebelum putaran pertama, terhadap blok plainteks dilakukan permutasi awal (Initial Permutation atau IP). Tujuan permutasi awal adalah mengacak plainteks sehingga urutan-bit-bit di dalamnya berubah. Lihat pada gambar dibawah, Matriks pada Tabel (a) sebagai plainteks masukan, kemudian dilakukan pengacakan dengan menggunakan matriks permutasi awal Tabel (b):

Setelah melewati Permutasi Awal, plainteks yang akan disandikan kemudian dibagi menjadi dua blok (ditunjukkan dengan warna yang berbeda pada Tabel (b)), yaitu blok atas dan blok bawah yang masing‐masing lebarnya 4 byte (32-bit).

Pembangkitan Kunci Internal DES

Pada algoritma DES, dibutuhkan kunci internal sebanyak 16 buah, yaitu K1, K2,…,K16. Kunci-kunci internal ini dapat dibangkitkan sebelum proses enkripsi atau bersamaan dengan proses enkripsi. Kunci internal dibangkitkan dari kunci eksternal yang diberikan oleh pengguna. Kunci eksternal pada DES panjangnya 64-bit atau 8 karakter seperti pada Tabel (c) dibawah.

Misalkan kunci eksternal yang tersusun atas 64-bit adalah K. Kunci eksternal ini menjadi masukan untuk permutasi dengan menggunakan matriks kompresi PC-1 seperti pada Tabel (d). Dalam permutasi ini, tiap-bit kedelapan dari delapan byte kunci diabaikan (Tabel (c) dengan kolom yang berwarna gelap). Hasil permutasinya adalah sepanjang 56-bit, sehingga dapat dikatakan panjang kunci DES adalah 56-bit.

Selanjutnya, 56-bit ini dibagi menjadi 2 bagian, atas dan bawah, yang masing-masing panjangnya 28-bit, dan masing-masing disimpan di dalam C0 dan D0.

C0:  berisi-bit-bit dari K pada sisi gelap tabel (d)

D0:  berisi-bit-bit dari K pada sisi putih tabel (d)

Selanjutnya, kedua bagian digeser ke kiri (left shift) sepanjang satu atau dua-bit bergantung pada tiap putaran. Jumlah pergeseran pada tiap putaran ditunjukkan pada Tabel (e).

Misalkan (Ci, Di) menyatakan penggabungan Ci dan Di. (Ci-1, Di-1) diperoleh dengan menggeser Ci dan Di satu atau dua-bit. Setelah Pergeseran-bit, (Ci, Di) mengalami permutasi kompresi dengan menggunakan matriks PC-2 seperti pada Tabel (f).

Dengan permutasi ini, kunci internal Ki diturunkan dari (Ci, Di) yang dalam hal ini Ki merupakan panggabungan-bit-bit Ci pada sisi gelap tabel (f), dengan-bit-bit Di pada sisi putih tabel (f).

Setiap kunci internal Ki mempunyai panjang 48-bit. Proses Pembangkitan kunci-kunci internal dapat dilihat pada gambar berikut ini :

Proses Enkripsi DES

Proses enkripsi terhadap blok plainteks dilakukan setelah permutasi awal. Setiap blok plainteks mengalami 16 kali putaran enkripsi. Untuk setiap putaran, digambarkan seperti gambar berikut :

Setiap putaran enkripsi DES secara matematis dinyatakan sebagai :

Dengan  f adalah suatu fungsi yang ditunjukkan pada Gambar berikut :

E adalah fungsi ekspansi yang memperluas blok Ri – 1 32-bit menjadi blok 48-bit. Fungsi ekspansi direalisasikan dengan matriks permutasi ekspansi :

Hasil ekpansi, yaitu E(Ri – 1) di-XOR-kan dengan Ki menghasilkan vektor A 48-bit:

Matriks A dikelompokkan menjadi 8 kelompok, masing-masing 6-bit, dan menjadi masukan bagi proses substitusi. Proses substitusi dilakukan dengan menggunakan delapan buah kotak-S (S-box), S1 sampai S8. Setiap kotak-S menerima masukan 6-bit dan menghasilkan keluaran 4-bit. Kelompok 6-bit pertama menggunakan S1, kelompok 6-bit kedua menggunakan S2, dan seterusnya. Kedelapan kotak-S tersebut ditunjukkan pada gambar di bawah ini (klik untuk memperbesar).

Keluaran proses substitusi adalah vektor B yang panjangnya 32-bit. Vektor B menjadi masukan untuk proses permutasi. Tujuan permutasi adalah untuk mengacak hasil proses substitusi kotak-S. Permutasi dilakukan dengan menggunakan matriks permutasi P (P-box) sbb :

Bit-bit P(B) merupakan keluaran dari fungsi f.

Akhirnya, bit-bit P(B) di-XOR-kan dengan Li–1 untuk mendapatkan Ri

Jadi, keluaran dari putaran ke-i adalah

Skema perolehan Ri

Permutasi Akhir (Invers Inisial Permutasi)

Permutasi terakhir dilakukan setelah 16 kali putaran terhadap gabungan  blok kiri dan blok kanan. Permutasi menggunakan matriks permutasi awal balikan (IP-1 ) sbb:

Proses Dekripsi DES

Proses dekripsi terhadap cipherteks merupakan kebalikan dari proses enkripsi. DES menggunakan algoritma yang sama untuk proses enkripsi dan dekripsi. Jika pada proses enkripsi urutan kunci internal yang digunakan adalah K1, K2, …, K16, maka pada proses dekripsi urutan kunci yang digunakan adalah K16, K15, …, K1. Setiap putaran 16, 15, …, 1, keluaran pada proses dekripsi adalah

dalam hal ini, (R16, L16) adalah blok masukan awal untuk proses dekripsi.

Blok (R16, L16) diperoleh dengan mempermutasikan cipherteks dengan matriks permutasi IP. Pra-keluaran dari proses dekripsi adalah adalah (L0, R0). Dengan permutasi awal IP-1 akan didapatkan kembali blok plainteks semula. Kunci-kunci dekripsi diperoleh dengan menggeser Ci dan Di dengan cara yang sama seperti pada proses enkripsi, tetapi pergeseran kiri (left shift) diganti menjadi pergeseran kanan (right shift).

Lumayan panjang bukan?

pada posting selanjutnya akan saya contohkan dengan perhitungannya. sip

CMIIW

ads

18 Responses here...

  1. opik says:

    bagus neh posting nya..
    izin memanfaatkan buat pembelajaran yah ^^
    dtunggu contoh soalnya..
    klo bisa berupa kalimat trus di enkripsi.
    soalnya kebanyakan contoh DES merupakan bilangan Heksa yang di enkripsi. ^^

  2. opik says:

    mas mau tanya neh sekalian nunggu kelanjutan dari tulisan nya.

    itu tabel PC-1, PC-2, dan tabel tabel permutasi laennya didapat dari mana yah ?
    apakah ada cara tertentu untuk mengetahui permutasi yg di gunakan tsb ?

    trus Pergeseran Left Side nya mengapa urutannya harus begitu ?
    1 1 2 2 2 2 ———
    kenapa iterasi pertama dan kedua di geser 1, iterasi 3 4 di geser 2 ?

    maaf yah mas klo nanya aneh2..
    soalnya klo saya cari2 ama nanya2 di tiap forum ga dapet2 jawaban nya T_T
    siapa tau mas mengerti..
    terima kasih

    • hekta says:

      konstanta pada matriks2 PC-1, PC-2 dan tabel-tabel permutasi laennya sudah diatur sedemikian rupa oleh pembuatnya, sampai sekarang saya juga belum menemukan referensi yang bisa menjelaskannya… itulah kenapa banyak orang yang menduga bahwa si pembuat mengatur sedemikian rupa agar algoritma tsb hanya bisa dipecahkan oleh dirinya sendiri bisik
      kalo mengenai urutan left shifting nya silahkan di coba sendiri, apa yg terjadi jika urutannya di rubah… hihi yang pasti jumlah konstanta matriks tsb harus 28, sesuai dengan panjang bit kunci internalnya (56 bit=C0 28 bit+D0 28 bit),
      agar lebih jelas, silahkan baca posting terbaru mengenai pembangkitan kunci internal pada des sip

  3. […] == "undefined"){ addthis_share = [];}Seperti yang telah dijelaskan pada artikel sebelumnya, Kunci-kunci internal dapat dibangkitkan sebelum proses enkripsi maupun bersamaan dengan proses […]

  4. opik says:

    wah si mas bae bgt.
    jadi jumlah dari pergeseran harus 28 sesuai panjang kunci internal yang telah di bagi 2 tadi yah ?

    nah kalo alasan kenapa harus di bagi 2 ?
    kenapa tidak di bagi menjadi 4 jadi Co, Do, Eo, Fo ?
    kan klo di bagi 4 data yang di hasilkan akan lebih “acak” di bandingkan dengan dibagi 2 ?

    hehehe maaf nanya aneh lg …

    terima kasih banget jawabannya yg sebelum nya mas

  5. frinto says:

    tolong la do kirim kan aku listing program a mas

  6. Anna says:

    mau tanya kalo untuk algoritma ama penjelasan yang triple des gimana ? 😀

  7. ani says:

    mas, sy mau download source code des kok gak bisa ya? bisa gak mas minta tolong kirimkan ke email sy. makasih

  8. fredy says:

    mas, boleh minta penjelasan lbh detail tentang bagian S-box.?
    misalnya masukan 6-bit(1,2,3,4,5,6) ke S-box 1, terus entar cara substitusinya gmn.?
    sebelumnya, makasih.. 😀

    • hekta says:

      perlu diperhatikan, masukan ke S-Box itu 6-bit bilangan biner. ingat lagi, bilangan BINER. Kalau contoh masukan dari Anda diatas itu bukan 6 bit, melainkan 48-bit.

    • hekta says:

      untuk lebih jelasnya, ayo lihat S1 pada Gambar S-Box,
      Baris diberi nomor urut dari 0 sampai 3 (ada 4 baris matriks)
      Kolom diberi nomor urut dari 0 sampai 15 (ada 16 kolom matriks)

      Misalkan masukan adalah bilangan biner 100001
      Nomor baris tabel = 11 (artinya baris ke-3)
      Nomor kolom tabel = 0000 (artinya kolom ke-0)
      Jadi, substitusi untuk 100001 adalah entry pada baris ke-3 dan kolom ke-0, yaitu 15 (atau 1111 dalam bentuk bilangan biner).

      begitu seterusnya untuk blok-blok lainnya.

    • fredy says:

      trima kasih 😀

    • fredy says:

      mas, dalam proses dekripsi K16 di dapat dari PC2(C0,D0).
      kemudian untuk K15 didapat dari hasil pergeseran right shift (C0,D0).
      yg mau saya tanya, pergeserannya tetap
      “1 1 2 2 2 2 2 2 1 2 2 2 2 2 2 1”
      atau urutannya di balik.? jadi
      “1 2 2 2 2 2 2 1 2 2 2 2 2 2 1 1”
      kalau K16 dari (C0,D0) tanpa pergeseran, berarti dalam proses dekripsi cuma terjadi 15X pergeseran.?
      sebelumnya, makasih.. 😀

    • hekta says:

      bukan seperti itu, pembangkitan kunci pada proses dekripsi sama persis dengan proses enkripsi, seperti di tunjukkan pada gambar “pembangkit kunci internal”, hanya pemakaian kunci internalnya saja yang di balik, K16, K15, dst..

      jadi intinya, proses tetap sama, hanya pemakaian kuncinya yang dibalik

    • hekta says:

      sebagai penegasan saja, jika anda menghitung proses dekripsinya secara manual, anda tetap harus menghitung untuk K1 terlebih dulu, K2, K3, dst hingga K16. jadi bukan seperti yang anda pikirkan diatas. no

  9. fredy says:

    o, jadi kunci yang dipakai di proses enkripsi sama dengan yg dipakai pada proses dekripsi, cuma dibalik mulai dari K16…
    ok, makasi mas.
    kebetulan saya lagi dapat tugas buat aplikasi DES, saya kesulitan karena sudah di enkripsi ketika di dekripsi plaintextnya lain.

Leave a Reply

[+] monkey emoticons

Latest Posts

×

Categories

×

Recent Comments

×

Powered by Wordpress with an original design by Coralitus