A. MD5
MD5 adalah salah satu dari serangkaian algortima message digest yang didesain oleh Profesor Ronald Rivest dari MIT (Rivest, 1994). Saat kerja analitik menunjukkan bahwa pendahulu MD5 — MD4 — mulai tidak aman, MD5 kemudian didesain pada tahun 1991 sebagai pengganti dari MD4 (kelemahan MD4 ditemukan oleh Hans Dobbertin).
Sewaktu kita menerima atau mengirim pesan padajaringan, terdapat tiga buah persoalan yang sangat penting, kerahasian, autentikasi, keutuhan dan tak berbantahkan (non-repudiation). Message Digest 5 (MD5) adalah salah satu alat untuk memberi garansi bahwa pesan yang dikirim akan sama dengan pesan yang diterima, hal ini dengan membandingkan ‘sidik jari’ atau ‘intisari pesan’ kedua pesan tersebut. MD5 merupakan pengembangan dari MD4 dimana terjadi penambahan satu ronde. MD5 memproses teks masukan ke dalam blok-blok bit sebanyak 512 bit, kemudian dibagi ke dalam 32 bit sub blok sebanyak 16 buah. Keluaran dari MD5 berupa 4 buah blok yang masing-masing 32 bit yang mana akan menjadi 128 bit yang biasa disebut nilai hash. Makalah ini mempunyai tujuan untuk merencanakan dan merancang suatu aplikasi untuk menganalisa proses keutuhan atau perubahan pesan dengan menggunakan MD5 dan juga dapat menganalisa hasil keluaran dari MD-5 yang berupa kecepatan dari proses aplikasi yang dibuat.
Salah satu dari bagian kriptografi adalah fungsi hash satu arah. Fungsi hash satu arah adalah dimana kita dengan mudah melakukan enkripsi untuk mendapatkan cipher-nya tetapi sangat sulit untuk mendapatkan plaintext-nya. Salah satu fungsi hash yang paling banyak digunakan adalah Message Digest 5 (MD-5). MD-5 merupakan fungsi hash satu arah yang diciptakan oleh Ron Rivest. MD-5 adalah salah satu aplikasi yang digunakan untuk mengetahui bahwa pesan yang dikirim tidak ada perubahan sewaktu berada di jaringan.
Message digest atau intisari pesan harus mempunyai tiga sifat penting, yaitu:
1. Bila P diketahui, maka MD(P) akan dengan mudah dapat dihitung.
2. Bila MD(P) diketahui, maka tidak mungkin menghitung P.
3. Tidak seorang pun dapat memberi dua pesan yang mempunyai intisari pesan yang sama. H(M) ≠ H(M’).
Hash-hash MD5
Hash-hash MD5 sepanjang 128-bit (16-byte), yang dikenal juga sebagai ringkasan pesan, secara tipikal ditampilkan dalam bilangan heksadesimal 32-digit. Berikut ini merupakan contoh pesan ASCII sepanjang 43-byte sebagai masukan dan hash MD5 terkait:
MD5("The quick brown fox jumps over the lazy dog") = 9e107d9d372bb6826bd81d3542a419d6
Bahkan perubahan yang kecil pada pesan akan (dengan probabilitas lebih) menghasilkan hash yang benar-benar berbeda, misalnya pada kata "dog", huruf d diganti menjadi c:
MD5("The quick brown fox jumps over the lazy cog") = 1055d3e698d289f2af8663725127bd4b
Hash dari panjang-nol ialah:
MD5("") = d41d8cd98f00b204e9800998ecf8427e
Penggunaan Hash
Hash digunakan untuk banyak hal yang terkait dengan kriptografi dan security.
a. Verifying file integrity
Karena setiap file yang berbeda memiliki nilai hash yang berbeda, maka fungsi hash dimanfaatkan untuk verifikasi integritas file. Yang dimaksud dengan intergritas file adalah keaslian file, apakah file sudah diubah atau belum. Bila sebuah file berubah walaupun satu bit saja, maka nilai hashnya akan berbeda sehingga orang bisa menyadari bahwa file tersebut sudah tidak asli lagi. Kalau anda sering download file dari internet anda akan diberikan nilai MD5 yang bisa anda pakai untuk memverifikasi apakah file yang anda download masih asli atau tidak. MD5 juga dipakai untuk mendeteksi perubahan file, salah satu contonya adalah Tripwire di Linux. Ini adalah bagian dari Intrusion Detection System, bila ada file yang berubah nilai hashnya, maka IDS akan menyalakan alarm bahwa telah terjadi perubahan file.
b. Storing password
MD5 sering juga dipakai untuk menyimpan password di database. Daripada menyimpan password dalam bentuk plain-text, lebih baik yang disimpan bukan password tapi hash dari password itu. Ketika pengguna memasukkan password maka password tersebut akan dihitung nilai hashnya. Nilai hash dari password yang dimasukkan pengguna ketika login dibandingkan dengan nilai hash yang di database. Bila cocok, maka authentication sukses.
Beberapa kesimpulan yang dapat diperoleh dari beberapa sumber mengenai MD5 adalah :
1. Message Digest 5 (MD5) adalah sebuah fungsi hash satu arah yang mengubah masukan dengan panjang variabel menjadi keluaran dengan panjang tetap yaitu 128 bit.
2. Rata-rata kecepatan dari program aplikasi MD adalah 7,1633 Mbytes/detik
3. Aplikasi yang dibuat hanya efektif digunakan untuk ukuran file kurang dari 40 Mbytes.
4. Jauhilah MD5, gunakan fungsi hash yang lebih strong, contohnya SHA-256. Awalnya vulnerability di kriptografi biasanya hanya teoretis saja sehingga orang tidak merasa perlu mengganti algoritma kriptografi yang dipakainya, namun makin lama serangan makin efektif dan cepat. Sebaiknya begitu ditemukan kelemahan signifikan pada sebuah algoritma, jauhilah algoritma itu.
5. Sumber daya computer berpengaruh terhadap kecepatan enkripsi.
B. DES
Begitu banyak cara yang digunakan untuk mengamankan data atau informasi, karena nilai informasi kini menjadi sangat berharga. Salah satu cara yang digunakan untuk mengamankan data (informasi) tersebut adalah dengan melakukan enkripsi. Istilah enkripsi ini digunakan untuk menyatakan proses yang dilakukan untuk mengubah informasi yang dapat dibaca dengan mudah (plaintext) menjadi informasi tersembunyi yang sulit dipahami maknanya (ciphertext). Kebalikan dari proses enkripsi adalah dekripsi. Untuk melakukan enkripsi dan dekripsi ini digunakan algoritma kriptografi (cipher). DES (Data Encryption Standard) merupakan salah satu jenis dari algoritma kriptografi yang termasuk dalam algoritma kunci simetri (menggunakan kunci yang sama untuk melakukan enkripsi dan dekripsi).
DES dikeluarkan oleh Federal Information Processing Standard (FIPS) 46 – 1 Amerika Serikat. DES termasuk algoritma block cipher yang dijadikan standar enkripsi kunci simetris pertama. DES beroperasi pada ukuran blok 64 bit (sekitar 8 karakter). DES mengenkripsikan 64 bit plaintext menjadi 64 bit ciphertext dengan menggunakan 56 bit kunci internal yang dibangkitkan dari 64 bit kunci eksternal. Kunci eksternal merupakan kunci yang dimasukkan oleh user pada sistem. Kunci internal merupakan kunci yang digunakan untuk melakukan enkripsi pada setiap putaran DES, yang berjumlah 16 putaran, yang diperoleh dari kunci eksternal yang telah diproses.
Skema global dari algoritma DES dapat dituliskan sebagai berikut:
1. Blok plaintext dipermutasi dengan matrik permutasi awal (initial permutation atau IP). Plaintext merupakan data (teks) yang akan dienkripsi. Plaintext ini direpresentasikan sebagai bit, misalnya huruf P direpresentasikan sebagai 01010000. Keseluruhan plaintext dibagi ke dalam blok-blok. Setiap blok terdiri atas 64 bit.
2. Hasil permutasi awal kemudian dienkripsikan sebanyak 16 kali (16 putaran). Setiap putaran menggunakan kunci internal yang berbeda.
3. Hasil enkripsi kemudian dipermutasikan dengan matriks balikan (invers initial permutation atau IP-1) menjadi blok ciphertext.
Seperti apa yang telah disebutkan sebelumnya, DES menggunakan 56 bit kunci untuk melakukan enkripsi dan dekripsi blok masukan. Kunci internal dibangkitkan dari kunci eksternal yang diberikan oleh user. Kunci eksternal tersebut panjangnya 64 bit (8 byte) atau 8 karakter. Namun tiap bit ke-8 (parity bits) dari 8 byte kunci tersebut diabaikan. Oleh karena itu, hanya ada 56 bit kunci yang digunakan (effective bits). Permutasi yang dilakukan pada bit-bit ini disebut dengan permuted choice 1. Permuted choice 1 ini mengubah posisi bit-bit pada kunci eksternal dan mengurangi bit kunci eksternal yang awalnya berjumlah 64 bit menjadi 56 bit dengan cara menghilangkan parity bits.
Kunci internal yang diperoleh dibagi menjadi 2 bagian, kiri (C) dan kanan (D), yang masing-masing panjangnya 28 bit. D terdiri dari bit pada posisi ke-0 hingga ke-27, sedangkan C terdiri dari bit pada posisi ke-28 hingga ke-55. Kedua bagian digeser ke kiri (left shift) sepanjang 1 atau 2 bit bergantung pada tiap putaran. Setelah pergeseran bit, dilakukan permutasi (permuted choice 2) pada hasil pergeseran bit dari kedua bagian tersebut untuk memperoleh kunci internal pada tiap putaran, yang selanjutnya disebut dengan subkey.
Contoh proses penjadwalan kunci.
- Kunci eksternal = PASSWORD, dengan
P = 01010000
A = 01000001
S = 01010011
S = 01010011
W = 01010111
O = 01001111
R = 01010010
D = 01000100
Jika dituliskan dalam bentuk biner, PASSWORD menjadi:
01010000 01000001 01010011 01010011 01010111 01001111 01010010 01000100
- Kemudian dilakukan permuted choice 1 pada kunci eksternal untuk memperoleh 56 bit kunci internal. Bit ke-0 (bit yang berada paling kanan dari keseluruhan blok bit) dari 56 bit kunci internal merupakan bit ke-60 pada kunci eksternal. Bit ke-1 dari bit kunci internal merupakan bit ke-52 pada kunci eksternal, demikian seterusnya. Hasilnya menjadi:
0000000 0111111 1100000 0000101 0111110 0101100 0000100 0001101
- Blok bit ini dibagi menjadi 2 bagian, yang terdiri atas
C0 = 0000000 0111111 1100000 0000101
D0 = 0111110 0101100 0000100 0001101
Dari C0 dan D0 dilakukan pergeseran bit yang jumlahnya sesuai dengan tabel shifts (pergeseran bit tiap putaran). C0 dan D0 menjadi
C1 = 0000000 1111111 1000000 0001010
D1 = 1111100 1011000 0001000 0011010
-Untuk memperoleh K1, dilakukan permuted choice 2 pada C1 dan D1, diperoleh:
K1 = 101000 001001 001001 001010 011001 100010 001001 100111
- K2 diperoleh dari permuted choice 2 yang dilakukan pada C1 dan D1 yang digeser 1 bit ke kiri.
C2 = 0000001 1111111 0000000 0010100
D2 = 1111001 0110000 0010000 0110101
K2 = ……….
- Begitu seterusnya hingga K16.
a. Triple DES (TDES)
Dalam kriptografi, Triple DES adalah sebuah cipher blok yang dibentuk oleh DES dengan menggunakannya tiga kali. Ketika diketahui bahwa kunci berukuran 56- bit dari DES tidak cukup kuat untuk menjaga dari brute force attacks, Triple DES dipilih sebagai cara simpel untuk memperbesar ukuran kunci tanpa perlu mengganti algoritma. Penggunaan dari tiga tahap tersebut penting untuk mencegah meet-in-themiddle attacks yang efektif untuk digunakan terhadap enkripsi Double DES. Catat bahwa DES bukanlah sebuah grup (dalam matematika), karena jika merupakan grup, pembangunan Triple DES akan ekivalen dengan operasi Single DES yang berarti tidak lagi aman. Variasi paling simpel dari Triple DES adalah:
DES(k3;DES(k2;DES(k1;M)))
di mana M adalah blok pesan yang akan dienkripsi, k1, k2, dan k3, adalah kunci DES. Variasi ini umumnya diketahui sebagai EEE karena ketiga operasi DES adalah proses enkripsi. Untuk menyederhanakan operasi antara DES dan TDES, langkah tengah biasanya diganti dengan proses dekripsi (EDE mode):
DES(k3;DES − 1(k2;DES(k1;M))) maka sebuah enkripsi DES dengan kunci k
dapat direpresentasikan sebagai TDES-EDE dengan k1=k2=k3=k. Pemilihan proses dekripsi pada langkah tengah tidak mempengaruhi keamanan dari algoritma.
b. Keamanan Triple DES (TDES)
Secara umum TDES dengan tiga kunci berbeda memiliki kunci berukuran 168-bit (3 kali kunci 56-bit dari DES), namun dengan metode meet-in-the-middle keamanan yang diberikan hanyalah 112-bit. Sebuah varian, Double TDES, menggunakan kunci k1=k3, yang berarti mengecilkan ukuran kunci ke 112-bit dan ukuran storage menjadi 128-bit. Namun mode ini lemah terhadap beberapa serangan jenis chose-plaintext atau knownplaintext. Oleh sebab itu, mode ini biasanya hanya didesain dengan keamanan 80-bit.
c. Penggunaan Triple DES (TDES)
Penggunaan TDES semakin hari semakin menurun digantikan oleh Advanced Encryption Standard AES. Sebuah pengecualian dalam skala besar adalah dalam industri pembayaran elektronik yang masih menggunakan Double TDES dan secara ekstensif mengembangaman standardnya. Ini menjamin bahwa TDES akan tetap aktif di dunia kriptografi hingga masa yang belum dapat ditentukan. Secara desain, DES dan juga TDES, cenderung lambat pada perangkat lunak, pada prosesor modern, AES cenderung lebih cepat. TDE lebih cocok untuk implementasi perangkat keras, walaupun AES masih tetap lebih cepat.
LAMPIRAN
A. MD5
Gambar 1. Satu operasi MD5 — MD5 terdiri atas 64 operasi, dikelompokkan dalam empat putaran dari 16 operasi. F adalah fungsi nonlinear; satu fungsi digunakan pada tiap-tiap putaran. Mi menujukkan blok 32-bit dari masukan pesan, dan Ki menunjukkan konstanta 32-bit, berbeda untuk tiap-tiap operasi.
Modifikasi Algoritma MD5
Agar dapat secara efisien memproses aliran data yang tidak dari awal diketahui panjangnya, algoritma MD5 perlu dimodifikasi menjadi tiga bagian MD5 init, MD5 update, MD5 final. MD5 init menginisialisasi MD5 contex, MD5 update memproses potongan message untuk mengupdate nilai MD5 contex. MD5 final memproses MD5 contex menjadi output hash MD5.
MD5 contex ((h1, h2, h3, h4), s, l) adalah kumpulan empat word 32 bit (h1, h2, h3, h4), satu string s yang panjangnya kurang dari 64 byte (512 bit) dan satu bilangan 64 bit l.
Algoritma MD5 init
INPUT : Tidak ada
OUTPUT : MD5 contex
1. (h1, h2, h3, h4) ? (0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476)
2. 2. s ? NULL
3. 3. l ? 0
4. 4. Output adalah MD5 contex ((h1, h2, h3, h4), s, l).
Algoritma MD5 update
INPUT : MD5 contex ((h1, h2, h3, h4), s, k) dan string x dengan panjang b sembarang.
OUTPUT : MD5 contex
1. Notasi.
L(z) adalah panjang string z
Mbl((H1,H2,H3,H4),z) adalah pemrosesan MD5 blok dengan empat word
(H1,H2,H3,H4) dan blok string z 512 bit.
+ adalah penjumlahan modulo 264
2. y ? s||x
3. Andaikan n = L(y), maka ada m dan l sedemikian hingga n = 512m+l, 0 = l< 512, m = 0.
Uraikan y menjadi y = y0y1..ym-1ym dengan L(yi) = 512 untuk 0 = i = m - 1, L(ym)=l.
4. Untuk i dari 0 sampai m - 1 lakukan langkah berikut:
(h1, h2, h3, h4) ? Mbl((h1, h2, h3, h4), yi)
k ? k + 512
5. Output.
Output adalah MD5 contex ((h1, h2, h3, h4), ym, k)
Algoritma MD5 Final
INPUT : MD5 contex ((h1, h2, h3, h4), s, k)
OUTPUT : kode hash
1. l ? L(s)
2. k ? k + l
3. Jika l = 448 lakukan:
Tambahkan satu bit 1 pada s, kemudian tambahkan bit 0 sampai L(s) = 512 + 448
Uraikan s menjadi s = s0s1 dengan L(s0) = 512 dan L(s1) = 448
(h1, h2, h3, h4) ? Mbl((h1, h2, h3, h4), s0)
s ? s1
4. Jika l < 448 lakukan:
Tambahkan satu bit 1 pada s, kemudian tambahkan bit 0 sampai L(s) = 448
5. Tambahkan bit-bit representasi k pada s, sehingga L(s) = 512.
6. (h1, h2, h3, h4) ? Mbl((h1, h2, h3, h4), s).
7. Output.
Output adalah penggabungan h1||h2||h3||h4.
Algoritma Message digest MD5
INPUT : String-string x0x1..xm dengan panjang masing-masing sembarang.
OUTPUT : Kode hash Message digest.
1. Notasi.
Cx adalah MD5 contex, Cx = ((h1, h2, h3, h4), x,l).
Min adalah pemrosesan MD5 init.
Mup(Cx, x) adalah pemrosesan MD5 update dengan input MD5 contex Cx dan string x.
Mfin(Cx) adalah pemrosesan MD5 final dengan input MD5 contex Cx.
2. Cx ? Min
3. Untuk i dari 0 sampai m lakukan langkah berikut:
Cx ? Mup(Cx, xi)
4. Output.
Output adalah Mfin(Cx)
Algoritma Crypt MD5
Algoritma crypt MD5 mengambil input string password dan string salt, dan menghasilkan output string dengan panjang 26 sampai 34 karakter, tergantung dari panjang salt.
Algoritma Crypt MD5
INPUT : string password s dan string salt t yang diawali ‘$1$’
OUTPUT : string hasil crypt.
1. Notasi.
p karakter pertama dari s.
f tiga karakter awal salt ‘$1$’.
r karakter-karakter salt setelah ‘$1$’ sampai delapan karakter atau sampai
ditemukan karakter ‘$’ atau sampai akhir string.
Cx1 , Cx2 MD5 contex.
L(a) adalah panjang string a dalam satuan byte.
2. m L(s)
3. Cx1 ? Min
4. Cx1 ? Mup(Cx1 , s)
5. Cx1 ? Mup (Cx1 , f)
6. Cx1 ? Mup (Cx1 , r)
7. Cx2 ? Min
8. Cx2 ? Mup (Cx2 , s)
9. Cx2 ? Mup (Cx2 , r)
10. Cx2 ? Mup (Cx2 , s)
11. a ? Mfin(Cx2)
12. 12. Uraikan a menjadi a = a0a1..a15 dengan L(ai) = 1, 0 = i = 15.
Ambil b = b0b1..bm-1 dengan bi = ai mod 16, 0 = i = m - 1
Cx1 ? Mup(Cx1 , b)
13. i ? m
14. Selama i > 0 lakukan langkah berikut:
jika i ^ 1 = 1 maka c ? 0 (satu byte).
jika i ^ 1 ? 1 maka c ? p
Cx1 ? Mup(Cx1 , c)
i ? i ? 1
15. a ? Mfin(Cx1)
16. Untuk i dari 0 sampai 999 lakukan langkah berikut:
Cx1 ? Min
jika i ^ 1 ? 0 maka Cx1 ? Mup(Cx1 , s)
jika i ^ 1 = 0 maka Cx1 ? Mup(Cx1 , a)
jika i mod 3 ? 0 maka Cx1 ? Mup(Cx1 , r)
jika i mod 7 ? 0 maka Cx1 ? Mup(Cx1 , s)
jika i ^ 1 ? 0 maka Cx1 ? Mup(Cx1 , a)
jika i ^ 1 = 0 maka Cx1 ? Mup(Cx1 , s)
a ? Mfin(Cx1)
17. Uraikan a menjadi a = a0a1..a15 dengan L(ai) = 1, 0 = i = 15.
18. c0 ? B64(a0||a6||a12, 4)
19. c1 ? B64(a1||a7||a13, 4)
20. c2 ? B64(a2||a8||a14, 4)
21. c3 ? B64(a3||a9||a15, 4)
22. c4 ? B64(a4||a10||a5, 4)
23. c5 ? B64(a11, 2)
24. Output.
Output adalah penyambungan f||r||$||c0||c1||c2||c3||c4||c5
B. DES
Initial Permutation
Plaintet sebesar 64-bit akan dipecah menjadi 2 bagian yaitu Left (L) dan Right.Bit-bit dari plaintext akan mengalami permutasi sehingga susunannya akan berubah sebagai berikut :
61 53 45 37 29 21 13 5
63 55 47 39 31 23 15 7]
Maksud daripada keterangan di atas adalah, bit yang pada plaintext terletak pada
urutan ke 58, setelah di Inisial permutasi posisinya berubah yang tadinya berada di
urutan ke 58 menjadi urutan ke-1 atau yang pertama.Jika diperhatikan, bit-bit bernomor genap setelah dipecah berada di blok L (kiri) dan bit yang bernomor ganjil terletak di blok R (kanan).Permutasi diatas menggunakan sebuah urutan yang ditunjukkan oleh arah panah berwarna merah.Dimulai pada kolom paling kanan dan bit-bit yang ada akan bergerak secara urut dengan vertikal ke arah bawah.Sebagai contoh pada blok L, bilangan genap asli terkecil adalah 2 sehingga dimulai dengan angka 2 lalu 4,6,8 lalu menuju kolom di sebelah kirinya 10,12,dst.
Tidak ada komentar:
Posting Komentar