Cryptography : Data Encryption Standard (DES)

Kresna Devara
9 min readSep 3, 2020

--

Halo, pada post sebelumnya saya telah menjelaskan mengenai Cryptogaphy Vigenere Cipher. Pada post kali ini, saya akan menjelaskan mengenai algoritma symmetric lainnya, yaitu: Data Encryption Standard (DES). DES mungkin bisa dibilang salah satu algoritma pertama yang digunakan untuk produk-produk komersial, dimana beberapa cryptography sebelumnya lebih banyak digunakan pada kepentingan militer. Oke langsung saja kita ke pembahasannya.

Data Encryption Standard (DES)

DES adalah salah satu jenis algoritma cryptography symmetric yang cukup populer sampai saat ini. Algoritma ini pertama kali dikenalkan oleh Horst Feistel dari IBM pada sekitar tahun 1970 dan telah disetujui oleh National Bereau of Standard (NBS) setelah penilain ketangguhannya oleh National Security Agency (NSA) Amerika Serikat.

DES merupakan algoritma bertipe block cipher, dimana pengoperasiannya berjalan pada ukuran blok 64 bit plaintext untuk menghasilkan 64 bit ciphertext dengan menggunakan 64 bit external key serta prosesnya yang dilakukan sebanyak 16 round, dimana setiap round memiliki sub key yang berbeda-beda sebanyak 54 bit saja (8 Least Significat Bit hanya untuk checking parity). Karena hal itulah timbul kecurigaan bahwa algoritma ini dapat dibobol melalui “back door” dari design pertamanya, sehingga terjadi pembaharuan oleh NSA.

Dikarenakan tipe algoritmanya berupa block cipher, pada informasi dengan panjang lebih dari 64 bit, informasi tersebut akan dipecah menjadi beberapa block plaintext dan akan dilakukan proses penggabungan. Pada pembahasan kali ini kita akan membahas terlebih dahulu cara kerja dasar algoritma DES pada plaintext 64 bit. Untuk lebih jelasnya mari kita lihat blok diagram DES berikut

Struktur DES

Algoritma encryption ataupun decryption pada DES terdiri dari proses Initial Permutation Round Final Permutation. Dimana masing-masing round akan menggunakan sub keys yang berbeda-beda. Proses Key schedule dilakukan untuk menghasilkan sub keys pada masing-masing round. Untuk lebih jelasnya mari kita langsung masuk ke contoh kasus.

Jika kita memiliki

Data yang akan diencrypt: HELOBUDY (dalam bentuk ASCII), kita ubah ke bentuk HEX menjadiPlaintext: 48 45 4c 4f 42 55 44 59
Key: 11 22 33 44 55 66 77 88

Key Schedule

Pertama-tama kita akan melakukan proses Key Schedule. Kita perlu merubah Key yang ada menjadi dalam bentuk biner:

Key: 
00010001 00100010 00110011 01000100 01010101 01100110 01110111 10001000

Key akan dimelalui proses Permuted Choice 1 (PC-1)—Cyclic Shift — Permuted Choice 2 (PC-2) untuk mendapatkan sub key pada setiap round.

Proses Key Schedule

Selanjutnya kita akan memberikan index dari masing-masing key yang ada seperti berikut:

Key Index

Setelah itu kita akan melakukan proses Permuted Choice 1 (PC-1). dengan menggunakan tabel referensi sebagai berikut:

Tabel PC-1 DES

Pada PC-1 ini kita akan membagi bit-bit menjadi dua bagian: “Left (C0)” dan “Right (D0)”. Contohnya untuk baris pertama pada C0 dengan urutan 57, 49, 41, 33, 25, 17, dan 9. Mari kita lihat padanan Tabel PC-1 dengan key index sebelumnya:

57 -> 1
49 -> 0
41 -> 0
33 -> 0
25 -> 0
17 -> 0
9 -> 0

Sehingga hasilnya akan seperti berikut

Hasil PC-1

*Ingat karena kita tidak menggunakan LSB pada masing-masing Byte Key maka pada index (8, 16, 24, 32, 40, 48, 56, 64) nilainya tidak digunakan.

proses selanjutnya adalah Cyclic Shift. Yaitu dengan melakukan pergeseran pada masing-masing C0 dan juga D0. Pada setiap roundnya Cyclic Shift memiliki jumlah pergeseran yang berbeda-beda tergantung dari tabel referensi sebagai berikut:

Misalnya pada Round-1 kita akan melakukan pergeseran C0 dan D0 sebanyak 1 kali ke sebelah kiri sehingga menghasilkan C1 dan D1

Setelah itu kita akan menggunakan C1 dan D1 untuk sub key pada round-1 dengan melakukan proses Permuted Choice (PC-2) dan menjadikan jumlah output sub key sebanyak 48 bit. Sama seperti pada PC-1 kita akan menggunakan tabel referensi, namun tabel yang digunakan adalah tabel PC-2 berikut:

Tabel PC-2 DES

Sehingga didapatkan hasil seperti berikut

Hasil PC-2

Hasil dari PC-2 lah yang akan digunakan sebagai sub key untuk round-1. Untuk mendapatkan sub key round-2 kita akan menggunakan C1 dan D1 untuk menghasilkan C2 dan D2 pada proses Cycle Shift, dilanjutkan dengan proses PC-2.

Setelah mengulang proses tersebut sampai dengan 16 kali, kita akan mendapatkan 48 bit sub keys untuk masing-masing round pada proses DES.

Initial Permutation

Setelah proses Key Schedule selesai, sebelum masuk pada proses encryption pada DES, kita perlu melakukan proses yang disebut Initial Permutation (IP). Pada proses ini plaintext akan dilakukan permutasi dengan tabel IP. Pertama-tama kita perlu mengkonversikan data plaintext ke dalam bentuk HEX, kita perlu mengkonversikanya lagi juga ke dalam bentuk biner serta memberikan index seperti pada proses sebelumnya:

Selanjutnya kita akan memetakan plaintext dengan menggunakan tabel referensi IP yang telah disediakan oleh DES.

Tabel IP DES

Sehingga kita akan mendapatkan hasil sebagai berikut

Dari data tersebut kita akan kembali memisahkannya menjadi dua bagian 32 bit pertama kita sebut “Left (L0)” dan 32 bit kedua kita sebut “Right (R0)”.

Proses DES: Feistel Network

Setelah kita melakukan proses IP pada plaintext yang akan digunakan. Selanjutnya kita akan mulai melakukan proses encryption. Pada proses ini kita akan menggunakan prinsip dari Feistel Network sebagai berikut

Feistel Network

Untuk lebih jelasnya mari kita lanjutkan proses pada sub sebelumnya. Pertama-tama kita akan menggunakan nilai R0 untuk menjadikannya nilai L1 selanjutnya sekaligus memasukannya dalam suatu blok fungsi (f).

Isi dari blok fungsi (f) tersebut adalah ekspansi, operasi XOR dengan sub key, pemetaan dengan menggunakan S-Boxes, dan permutasi.

Blok (f) DES

Pertama-tama nilai R0 sebanyak 32 bit akan kita berikan masing-masing index seperti pada proses-proses sebelumnya. Setelahnya kita akan melakukan ekspansi bit menjadi 48 bit menggunakan tabel referensi sebagai berikut

Tabel Ekspansi DES

Sehingga kita akan mendapat 48 bit baru

Selanjutnya 48 bit hasil ekspansi akan kita XOR dengan menggunakan Sub Key-1 yang telah kita dapat pada proses Key Shedule sebelumnya

Setelah melalui proses XOR, kita akan membagi hasilnya menjadi 8 bagian (per 6 bit) untuk kita petakan menggunakan S BOX DES. Sehingga 6 bit input hanya menjadi output 4 bit saja.

Kita akan melihat baris dan kolom pada Tabel S BOX untuk mendapatkan output bitnya. Contohnya pada 6 bit pertama 011000. Untuk membaca baris kita melihat LSB dan MSBnya, pada kasus ini nilainya adalah “0” dan “0” sehingga barisnya adalah 0. Untuk membaca kolom kita akan melihat bit sisanya, dimana nilainya adalah 1100 sehingga jika kita konversikan ke desimal nilainya sama dengan 12. hasil output S BOX pada baris 0 dan kolom 12 adalah “5” atau jika kita konversi ke biner adalah 0101. Kita akan melakukan proses ini sampai dengan 8 kali S BOX (Terdapat 8 jenis tabel SBOX yang berbeda).

Sehingga hasil dari 8 S BOX adalah sebagai berikut

Selanjutnya hasil yang didapatkan akan dimasukan lagi ke dalam permutasi berdasarkan tabel berikut

Sehingga kita akan mendapatkan 32 bit baru hasil permutasi yaitu

Nilai R0 yang telah masuk ke dalam blok function (f) akan dilakukan XOR dengan L0 sebelumnya sehingga menjadi nilai R1 yang baru.

Kita akan menggunakan nilai L1 dan R1 untuk menghasilkan L2 dan R2 hingga seterusnya sebanyak 16 round hingga menghasilkan L16 dan R16.

Final Permutation

Setelah kita mendapatkan L16 dan juga R16, kita akan menggunakan data tersebut untuk melakukan Final Permutation (FP) dengan menggunakan tabel referensi sebagai berikut

Sehingga kita akan mendapatkan hasil

Data inilah hasil dari encryption dengan menggunakan algoritma DES. Jika kita rangkum hasilnya adalah seperti berikut ini

Atau jika kita lihat dalam bentuk HEX seperti diawal

Sulit sekali bukan !!!! Bayangkan bagaimana bisa membobol algoritma serumit ini. Jika kita melakukan Brute Forcepun kita memiliki kemungkinan key sebanyak 2⁶⁴ = 18.446.744.073.709.551.616 !!!!! Untuk melakukannya dengan cara dan komputer biasa hampir sulit sekali dilakukan.

Sayangnya pada tahun 1997 terdapat pengumuman bahwa DES berhasil dibobol, dan pada dua tahun setelahnya metode “Deep Crack” berhasil membobol DES hanya dalam waktu 22 jam 15 menit saja !!! Dikarenakan hal inilah dibutuhkan algoritma yang lebih kuat sehingga penggunaan DES diperbaharui menjadi Triple DES (3DES). Selain itu muncul algoritma baru yang lebih cepat namun lebih tangguh yaitu Advance Encryption Standard (AES).

Untuk lebih jelasnya saya sudah membuat contoh penggunaan DES dengan menggunakan pemograman Python pada jupyter notebook yang bisa diakses di Example DES.

Aplikasi DES pada Python Notebook

Penutup

Sekian dulu penjelasan mengenai algoritma DES. Algoritma ini sangat sulit sekali dibobol tanpa menggunakan komputer berspesifikasi tinggi. Namun terdapat metode lain yang disebut Side Channel Analysis/Attack (SCA) dimana kita dapat membobol DES dari leakage yang terjadi pada perangkat yang digunakan, misalnya dengan menggunakan Daya (Power Measurement) ataupun Elektro Magnetik. Cara ini sangat ampuh, jauh lebih cepat dan efisien dibandingkan kita melakukan Brute Force !!! Pada kesempatan lainnya saya akan membahas mengenai metode Side Channel Attack untuk melakukan pembobolan pada DES dan juga algoritma lainnya.

Materi terkait lainnya:

-Terimakasih-

--

--