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 |
selesai sudah enkripsi DES.
Klick Lanjutan pengertian dan cara kerja : International Data Encryption Algorithm (IDEA )
ada source code nya ngga bang ?
BalasHapus