Pengertian Data Encrytion Standard
Data Encryption Standard (DES) adalah salah satu algoritma kriptografi simetris, artinya kunci yang digunakan untuk proses enkripsi sama dengan kunci yang digunakan untuk proses dekripsi. Algoritma DES ini juga merupakan algoritma enkripsi block-chiperdengan panjang blok 64 bit dan dengan panjang kunci 56 bit yang bersifat rahasia yang dibagi (shared secret). Shared secret sendiri merupakan sepenggal data yang hanya diketahui oleh pihak-pihak yang melakukan komunikasi, dalam hal ini yaitu pengirim pesan dan penerima pesan. Yang dimaksud sepenggal data di sini dapat berupa kata sandi (password), passphrase, atau kunci pada algoritma enkripsi. Saat ini DES sudah hampir tidak digunakan lagi karena panjang kunci yang hanya 56 bit itu amat dengan mudah dibongkar dengan serangan Brute Force. Menggunakan prosesor tercepat saat tulisan ini dibuat, DES dapat dibongkar hanya dalam waktu beberapa menit. Algoritma lain yang dianggap sebagai ganti dari algoritma DES ialah algoritma AES (Advanced Encryption Standard).
Cara Kerja Data Encryption Standard
Cara kerjanya adalah dengan mengubah pesan asli yang dapat dimengerti/dibaca manusia (plainteks) ke bentuk lain yang tidak dapat dimengerti/dibaca oleh manusia (cipherteks). Proses transformasi plainteks menjadi chiperteks diistilahkan dengan enkripsi.
Contohnya seperti ini :
plaintext : bayucaem
binary : 0110001001100001011110010111010101100011011000010110010101101101
jika sudah diacak oleh matriks IP akan menjadi:
| 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 |
| 1 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
| 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 |
begini code-nya dalam c#:
pertama jadikan plaintext ke binary :
setelah jadi tuh binary, dibagi-bagi tiap 64 bit.
jika sudah dibagi-bagi menjadi 64 bit maka di permutasikan dengan matriks IP
setelah tahap permutasi selesai dilakukan maka sekarang menuju ke tahap enchipering. disni butuh yang namanya kunci eksternal yang akan membentuk kunci internal. jadi gambarannya sang user jika ingin mengenkripsi maka ada dua yang harus diinputkan yaitu plaintextnya dan kuncinya sepanjang 16 digit hexadesimal. kunci ini juga (selanjutnya disebut kunci eksternal) akan digunakan pada saat mendekripsi DES.
diperlukan 16 kunci internal untuk digunakan dalam putaran enchipering. untuk mendapatkannya pertama, kunci external yang diinputkan oleh user dalam bentuk hexadesimal diubah kebentuk biner kemudian dipermutasikan oleh matriks PC-1. ini matriksnya :
| 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 |
cara permutasinya sama dengan permutasi plaintext dan mengahsilkan 56 bit dari 64 bit kunci eksternal. setelah didapatkan hasil dari permutasi maka hasil permutasi tadi dibagi dua, yaitu bagian kiri dan kanan masing-masing 28 bit. Selanjutnya, kedua bagian digeser ke kiri (left shift) sepanjang satu atau dua bit bergantung pada tiap putaran. Operasi pergeseran bersifat wrappingatau round-shift. Jumlah pergeseran pada setiap putaran ditunjukkan pada Tabel 1 sbb:
| Putaran, i | Jumlah pergeseran bit |
| 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 |
setelah digeser, masing-masing digabungkan kembali dan kembali lagi dipermutasikan. tetapi matriks yang digunakan adalah matriks 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 |
ilustrasinya begini:
key eksternal inputan user : ab12781bac253987
binernya:
| 1 | 0 | 1 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 |
| 0 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 1 |
| 1 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 |
| 0 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 1 |
setelah dipermutasikan dengan pc-1 dan dibagi menjadi dua bagian (L0 dan R0)
L0
| 1 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 |
| 0 | 0 | 0 | 1 | 1 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 0 |
R0
| 1 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 1 | 0 | 1 | 1 | 0 | 0 |
| 0 | 0 | 0 | 1 | 0 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 0 |
karena ini adalah putaran pertama maka L0 dan R0 masing-masing digeser kekiri 1 kali menurut tabel pergeseran diatas, hasilnya begini setelah L0 dan R0 digeser dan digabung kembali kemudian dipermutasikan dengan pc-2
| 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 0 |
| 1 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 |
| 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 1 |
| 0 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 1 |
dalam hexadecimal : 432c1248d7c5
itulah key internal pertama yang didapatkan. untuk mendapatkan key/kunci internal yang kedua cukup key yang pertama dibagi masing-masing 24 bit kiri dan kanan setelah itu digeser menurut table pergesaran dan dipermutasikan dengan pc-2. berikut key internal lengkapnya :
| Key eksternal : ab12781bac253987 | |
| no | key |
| 1 | 432c1248d7c5 |
| 2 | 50422d7cb8e8 |
| 3 | 81912420fc7f |
| 4 | 800ae72fbcb2 |
| 5 | b17220ad4d73 |
| 6 | 8017e00fca56 |
| 7 | d05255d5c5d4 |
| 8 | 05d3408986cd |
| 9 | e621187136f8 |
| 10 | 0e861139b82f |
| 11 | 4f181a267cb6 |
| 12 | 2ea0c82d29f7 |
| 13 | 1a4c0aa7c8d3 |
| 14 | 682918478757 |
| 15 | 04ac0d9f85cc |
| 16 | 9805c455366e |
implementasi pembentukan kunci dalam bahasa c# sebagai berikut :
pertama adalah menerima input dari user berupa hexadesimal kemudian inputan tersebut dijadikan biner:
bilangan biner yang di dapat akan dilakukan permutasi dengan pc-1. fungsi yang digunakan adalah fungsi permutasi yang dilakukan pada plaintext hanya berbeda array matriksnya saja. setelah itu dibagi dua masing-masing menjadi L0 dan R0:
setelah itu adalah pergesaran pada kedua bagian tersebut
Setelah digeser proses terakhir adalah menggabungkan L0 dan R0 lalu dilakukan permutasi pada matriks pc-2. nah untuk fungsi permutasi yang digunakan adalah fungsi pada permutasi pada plaintext, hanya saja array yang digunakan adalah array matriks pc-2.
Nah sekarang masuk ke proses 16 kali enchipering karena kunci internalnya dan hasil permutasi matriks IP sudah didapatkan.
secara lengkap bagan DES adalah seperti ini :
ini dia bagian terumit dari DES. gambar diatas ada dua bagian, yang kanan tuh proses DES lengkap sedangkan yang kiri adalah rincian dari proses fungsi F. proses enchipering dimulai pada saat hasil dari permutasi matriks IP dibagi dua yaitu Lo dan Ro masing-masing 32 bit. setelah itu dilakukan rumus dibawah ini untuk hasil putaran pertama (disebut L1 dan R1):
Li = Ri – 1
Ri = Li – 1 xor f(Ri – 1, Ki)
misalnya hasil dari permutasi IP adalah 1111111111111111111111111111111100000000000000000000000000000000 maka begini jika di pisah menjadi L0 dan R0
jadi untuk mendapatkan L1 itu tinggal copas dari R0. sedangkan R1 di dapatkan dari L0 di-xor-kan dengan fungsi F. bagan fungsi F bisa dilihat diatas. fungsi F ini memerlukan R0 dan kunci internal pertama (K1).
didalam fungsi F ini nantinya R0 akan diekspansi dari 32 bit menjadi 48 bit. cara mengekspansinya adalah dengan melakukan permutasi oleh matriks E :
| 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 |
cara permutasi sudah ada di episode 1. hasil dari permutasi matriks E di-xor-kan oleh kunci internal pertama. hasil xor ini nantinya di sebut oleh vektor A. selanjutnya vektor A ini bagi-bagi menjadi 8 bagian masing-masing 6 bit. dari bagian yang paling kiri disebut A1 dan paling kanan A8. nah nanti A1-A8 ini disubtitusikan oleh S-box yang banyaknya juga ada 8 kotak. berikut adalah S-box urut dari S1-S8 :
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 |
bisa diliat bahwa masing-masing S-box memiliki 4 baris (baris ke 0 sampai baris ke 3) dan 16 kolom (kolom ke 0 sampai kolom ke 15). vektor A yang sudah dibagi menjadi 8 masing-masing 6 bit akan disubsitusikan dengan S-box dengan cara berikut :
misal A1 adalah 010011 maka dapat dilihat seperti gambar diatas dikonversi menjadi baris 01 (dalam desimal 1) dan kolom 1001 (dalam desimal 9). maka cari pada S1 baris 1 dan kolom 9 maka hasilnya adalah 6 (dirubah menjadi 4 bit = 0110). begitu seterusnya untuk A2 dan S2, dst. setelah semua bagian disubtitusi dan dirubah menjadi bit-bit maka digabungkan akan menjadi 32 bit yang disebut vektor B. nah nanti vektor B ini akan dipermutasikan oleh matriks P :
| 16 | 7 | 20 | 21 | 29 | 12 | 28 | 17 | 1 | 15 | 23 | 26 | 5 | 8 | 31 | 10 |
| 2 | 8 | 24 | 14 | 32 | 27 | 3 | 9 | 19 | 13 | 30 | 6 | 22 | 11 | 4 | 25 |
hasil dari permutasi inilah keluaran dari fungsi F yang nantinya akan di-xor-kan dengan L0 untuk menghasilkan R1.
untuk mengahsilkan L2 dan R2 maka ulangi proses tadi dengan data yang sudah di peroleh yaitu L1,R1, dan K2. proses ini diulang sampai didapatkan L16 dan R16. nah setelah mendapatkan L16 dan R16, dua bagian ini akan digabungkan, namun posisinya dipertukarkan. pemisalan enchipering akhir sebagai berikut :
selesai sudah proses enchipering, inti dari proses DES. proses enchipering tidak diberikan contoh karena sangat panjang, nih pseudo codenya aja
fungsi enkirpsides menerima variable Lo, R0,dan kunci yang nantinya fungsi ini akan diputar 16 kali.
fungsi funsif yang dipanggil oleh fungsi enkirpsides yang menerima inputan R dan kunci internal
fungsi-fungsi yang dipanggil oleh fungsi fungsif
selesai sudah tahap dari enchipering DES. sekarang keluaran dari tahap enchipering ini akan di invers. caranya yaitu dilakukan permutasi oleh matriks 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 |

















