Pada artikel kali ini kita akan membahas salah satu metode enkripsi tertua bernama DES (Data Encryption Standard).
Dan lebih dalam lagi akan mempelajari bagaimana secara garis besar metode enkripsi ini bekerja.
Sedikit catatan, kalian akan melihat banyak angka 0 dan 1 yang merupakan sistem bilangan biner.
Baca juga : Bilangan Biner dan Konversi Biner – Antek Teknologi
Maka dari itu, siapkan air minum jikalau kepala mulai terasa panas dan pusing, selamat membaca.
Pengertian DES
DES adalah singkatan dari Data Encryption Standard atau artinya dalam bahasa indonesia adalah standar enkripsi data.
Algoritma atau metode ini merupakan salah satu yang tertua di era modern.
Dimana metode enkripsi yang sejenis adalah AES ataupun RSA.
DES sendiri termasuk ke dalam tipe symmetric-key algorithm atau single-key algorithm.
Maksudnya adalah key atau kunci yang dipakai untuk melakukan enkripsi adalah key yang sama yang dipakai untuk dekripsi.
Dan hal ini membuat algoritma DES tidak terlalu aman dan juga sudah jarang digunakan.
Meskipun demikian, algoritma ini memiliki peran yang besar dalam memajukan bidang kriptografi.
Sekian perkenalan DES, sekarang kita berlanjut ke pembahasan utama.
Yaitu tentang bagaimana caranya DES bekerja.
Cara Kerja Enkripsi
Pada bagian ini, kita akan belajar bagaimana algoritma DES mengenkripsi sebuah data.
Secara garis besar, seperti inilah proses DES mengenkripsikan suatu data.
Penjelasannya akan terbagi menjadi beberapa tahapan, untuk rinciannya silahkan kunjungi google docs berikut ini.
Mari langsung lanjut ke bagian pertama.
Pendahuluan
Untuk pendahuluan, akan disiapkan terlebih dahulu sebuah plain text dan key.
Plain text untuk contoh kali ini adalah “Selamat!” yang tepat berjumlah 8 karakter atau berukuran 64-bit.
Sedangkan key yang merupakan bilangan heksadesimal 566ed524174cf072, key ini juga berukuran 64-bit.
Baik plain text dan key akan dikonversikan ke dalam bentuk biner.
64-bit Plain text in binary
0101001101100101011011000110000101101101011000010111010000100001.
64-bit Key in binary
0101011001101110110101010010010000010111010011001111000001110010.
Initial Permutation
Kemudian masuk ke tahapan mutasi pertama atau initial permutation.
Yang akan dimutasikan adalah 64-bit Plain text in binary sesuai dengan tabel mutasi berikut.
Caranya melakukan mutasi sendiri cukup mudah dan butuh ketelitian jika dilakukan secara manual.
Tinggal pindahkan saja angka pada digit tertentu dan taruh pada posisi yang sesuai dengan tabel.
Misalkan contoh pada tabel yaitu karakter ke-58 kita taruh pada posisi pertama.
Terus lakukan ini sampai semua karakter berpindah posisi.
Untuk contoh kali ini, key tadi bermutasi menjadi
IP(x) = 0111111101000001010101101011101100000000111111100001010000000001
Setelah itu bagi dua key yang sudah bermutasi menjadi bagian kiri (L0) dan kanan (R0).
32-bit L0 (Bagian Kiri) = 01111111010000010101011010111011.
32-bit R0 (Bagian Kanan) = 00000000111111100001010000000001.
Compress Key
Kalau initial permutation melibatkan 64-bit plain text in binary.
Sekarang kita akan mengkompresi 64-bit key in binary menjadi berukuran 56-bit.
Dimana caranya mirip dengan tabel permutasi, namun ada beberapa digit yang dihilangkan.
Sesuai dengan tabel, kita ambil angka biner yang sesuai posisinya pada tabel, misalkan angka ke-57 dan letakkan di paling awal.
Mengikuti angka ke-49 di sebelahnya dan seterusnya.
Hasil kompresi untuk contoh kali ini adalah CD0 = 01000100111001111100101011011001001100111111001000100101.
Sama seperti hasil permutasi sebelumnya, hasi kompresi juga terbagi menjadi dua bagian yaitu bagian kiri dan kanan.
C0 (Bagian Kiri) = 0100010011100111110010101101.
D0 (Bagian Kanan) = 1001001100111111001000100101.
Left Shift
Untuk bagian kali ini, yang terlibat adalah C0 dan D0 yang sudah didapatkan tadi pada tahap kompresi.
Key yang sudah dikompresi menjadi berukuran 56-bit ini akan kita geser setiap angka di dalamnya ke arah kiri.
Misalkan contoh 011 digeser ke kiri akan menjadi 110, dan pergeseran akan terjadi sebanyak 16 kali.
Namun dari 16 kali pergeseran, bisa terjadi pergeseran 1 digit atau 2 digit, mengikuti tabel berikut.
Untuk contoh langsung saja yaitu C0 D0 akan kita geser pertama kali, pergeseran sebanyak 1 digit.
Jadi C0 = 0100010011100111110010101101 akan menjadi C1 = 1000100111001111100101011010.
D0 = 1001001100111111001000100101 akan menjadi D1 = 0010011001111110010001001011.
Maka akan diperoleh CD1 = 10001001110011111001010110100010011001111110010001001011.
Kemudian CD1 pisahkan lagi dan lakukan lagi pergeseran dengan jumlah pergeseran menyesuaikan tabel.
Hal ini terus dilakukan sampai memperoleh CD16, untuk rinciannya silahkan lihat pada google docs yang alamatnya sudah tertera di atas.
Kemudian dari CD1 sampai CD16 akan lanjut diproses pada bagian selanjutnya.
Key Permutation to 48-bit
Ke-16 key yang sudah dimutasikan dan mengalami left shift akan dimutasikan lagi atau dikompresi menjadi berukuran 46-bit.
Dan nanti hasilnya akan menjadi 16 buah 48-bit key (K1 – K16).
Masih sama dengan cara menggunakan tabel mutasi dan tabel kompresi, namun dengan tabel yang berbeda.
Untuk contoh yaitu CD1 = 10001001110011111001010110100010011001111110010001001011.
Akan berubah menjadi K1 = 110111001001000001101110101001010000001111111000.
Mutasi atau kompresi akan terus terjadi sampai K16 telah kita dapatkan.
Karena nantinya 16 buah key ini (K1 – K16) akan masuk ke dalam perulangan yang terjadi sebanyak 16 kali.
16 Rounds Looping
Sekarang kita masuk ke tahapan yang paling vital, karena ada beberapa tahapan yang terjadi selama 16 kali.
Jadi kuncinya adalah variabel i yang mulai dari angka 1 dan akan terus bertambah sampai 16.
Langsung saja mulai ke tahapan pertama yaitu ekspansi.
Ekspansi 32-bit R(i-1) menjadi 48-bit E(Ri-1)
Dalam tahapan ini, akan terjadi sebuah ekspansi atau perbesaran ukuran pada 32-bit R(i-1).
Ekspansi kita lakukan dengan menggunakan tabel ekspansi dan hasilnya akan kita sebut dengan E(Ri-1).
Cara mengerjakan tabel ekspansi sama dengan tabel permutasi, namun ada angka yang ditambahkan sebanyak 2 kali.
Karena variabel i berawal dari angka 1, maka sekarang yang masuk ke tabel ekspansi adalah R(1-1) = R0.
R0 sendiri membawa nilai yaitu 00000000111111100001010000000001.
Sesuai dengan tabel, maka nilai dari E(R1-1) atau E(R0) adalah
100000000001011111111100000010101000000000000010.
XOR 48-bit E(Ri-1) dengan 48-bit K(i), hasil XOR akan disebut dengan Ai
Karena i masih bernilai satu, maka sekarang E(Ri-1) atau E(R1-1) = E(R0) dan K(i) = K1.
Dan setiap digit angka biner di dalam E(R0) dan K(1) akan masuk ke dalam perbandingan gerbang logika XOR.
Kita dapat A(i) atau A1 = 010111001000011110010010101011111000001111111010.
48-bit Ai masuk ke Substitution Box dan menghasilkan 32-bit Bi
Kemudian 48-bit A(i) atau A1 akan masuk ke dalam 8 buah substitution box.
Lebih tepatnya 48-bit Ai akan terbagi menjadi 8 bagian dengan setiap bagian berukuran 6-bit.
010111 | 001000 | 011110 | 010010 | 101011 | 111000 | 001111 | 111010 |.
Dan setiap bagian ini akan masuk ke sebuah substitution box sesuai dengan urutannya masing-masing dan mulai dari kiri.
Jadi bagian paling kiri akan masuk ke substitution box pertama dan seterusnya.
Hal ini karena setiap substitution box yang ada berbeda satu sama lain.
Sesuai dengan kedelapan s-box pada gambar di atas, maka hasilnya adalah B1 = 10110110100000101110000110100011.
Untuk mempelajari substitution box, mungkin kalian bisa kunjungi artikel berikut ini.
Baca juga : Mengenal Substitution Box – Antek Teknologi.
Permutasi untuk 32-bit Bi menjadi 32-bit P(Bi)
Kemudian hasil dari S-box akan kita mutasikan lagi menggunakan tabel permutasi 32-bit.
Hasil mutasi ini akan kita sebut dengan P(Bi), karena i masih bernilai 1 maka sekarang akan menjadi P(B1)
P(B1) = 01000001110001100010111110010011.
32-bit P(Bi) XOR dengan 32-bit L(i-1)
Dan bagian terakhir sebelum nilai i mengalami increment adalah membandingkan P(Bi) dengan 32-bit L(i-1) menggunakan perbandingan XOR.
Sekarang i masih bernilai 1, maka setiap nilai dari P(B1) dan L(1-1) atau L0 akan masuk ke gerbang logika XOR.
Maka R1 = 00111110100001110111100100101000.
Untuk nilai dari L1 berasal dari nilai R0, maka L1 = 00000000111111100001010000000001.
Karena nilai dari R1 dan L1 telah kita dapatkan, maka selanjutnya variabel i akan bertambah 1 dan kembali lagi ke tahapan ekspansi.
Hal ini akan terus dilakukan secara berulang-ulang sampai variabel i bernilai 16 atau L16 dan R16 telah diperoleh.
Untuk contoh kasus kali ini, silahkan lihat pada google docs tentang rincian proses atau tahapan yang terjadi sampai pada L16 dan R16.
Invers Permutation
Pada bagian ini, kita membutuhkan nilai dari L16 dan R16 yang akan kita gabungkan.
Sesuai pada google docs:
L16 = 00101110101001010110011101011110.
R16 = 10011100000100000111101000001001.
Maka LR16 = 0010111010100101011001110101111010011100000100000111101000001001.
Dan nilai dari LR16 akan masuk ke tabel invers permutation berikut ini.
Maka hasil dari mutasi terakhir ini adalah 0001011001001101110101011100101110101001010111000000110110010000.
Dan apabila kita konversi ke heksadesimal akan menjadi 164dd5cba95cd90.
Selanjutnya karakter heksadesimal ini bisa berubah lagi menjadi karakter ASCII atau lainnya dan akan disebut dengan cipher text.
Rangkuman
Sekian saja pembahasan kita kali ini tentang metode atau algoritma enkripsi DES.
Terlihat bahwa untuk banyak proses yang terjadi untuk mendapatkan sebuah cipher text yang sudah terenkripsi.
Mohon maaf sebelumnya jika ada yang salah dalam artikel kali ini, khususnya bagian yang berhubungan dengan bilangan biner.
Karena memang tujuan utama pembahasan kali ini adalah konsep dan bukan hasilnya.
Untuk mendapatkan hasil yang lebih maksimal, mungkin kalian bisa membuat program komputernya.
Semoga artikel ini bermanfaat dan terima kasih untuk kunjungannya.