“Metode-metode Enkripsi Modern”
- Data Encryption Standard (DES) : standar bagi USA Government, didukung ANSI dan IETF, popular untuk metode secret key, terdiri dari : 40-bit, 56-bit dan 3×56-bit (Triple DES)
- Advanced Encryption Standard (AES) : untuk menggantikan DES (launching akhir 2001), menggunakan variable length block chipper, key length : 128-bit, 192-bit, 256-bit, dapat diterapkan untuksmart card.
- Digital Certificate Server (DCS) : verifikasi untuk digital signature, autentikasi user, menggunakan public dan private key, contoh : Netscape Certificate Server
- IP Security (IPSec) : enkripsi public/private key , dirancang oleh CISCO System, menggunakan DES 40-bit dan authentication, built-in pada produk CISCO, solusi tepat untuk Virtual Private Network (VPN) dan Remote Network Access
- Kerberos : solusi untuk user authentication, dapat menangani multiple platform/system, free charge (open source), IBM menyediakan versi komersial : Global Sign On (GSO)
- Point to point Tunneling Protocol(PPTP) : Layer Two Tunneling Protocol (L2TP), dirancang oleh Microsoft, autentication berdasarkan PPP(Point to point protocol), enkripsi berdasarkan algoritm Microsoft (tidak terbuka), terintegrasi dengan NOS Microsoft (NT, 2000, XP)
- Remote Access Dial-in User Service (RADIUS), multiple remote access device menggunakan 1 database untuk authentication, didukung oleh 3com, CISCO, Ascend, tidak menggunakan encryption
- RSA Encryption : dirancang oleh Rivest, Shamir, Adleman tahun 1977, standar de facto dalam enkripsi public/private key , didukung oleh Microsoft, apple, novell, sun, lotus, mendukung proses authentication, multi platform
- Secure Hash Algoritm (SHA), dirancang oleh National Institute of Standard and Technology (NIST) USA., bagian dari standar DSS(Decision Support System) USA dan bekerja sama dengan DES untuk digital signature., SHA-1 menyediakan 160-bit message digest, Versi : SHA-256, SHA-384, SHA-512 (terintegrasi dengan AES)
- MD5 : dirancang oleh Prof. Robert Rivest (RSA, MIT) tahun 1991, menghasilkan 128-bit digest., cepat tapi kurang aman
- Secure Shell (SSH) : digunakan untuk client side authentication antara 2 sistem, mendukung UNIX, windows, OS/2, melindungi telnet dan ftp (file transfer protocol
- Secure Socket Layer (SSL) : dirancang oleh Netscape, menyediakan enkripsi RSA pada layes session dari model OSI., independen terhadap servise yang digunakan., melindungi system secure web e-commerce, metode public/private key dan dapat melakukan authentication, terintegrasi dalam produk browser dan web server Netscape.
- Security Token, aplikasi penyimpanan password dan data user dismart card
- Simple Key Management for Internet Protocol : seperti SSL bekerja pada level session model OSI., menghasilkan key yang static, mudah bobol.
MD5 (Message Digest algorithm 5)ialah fungsi hash kriptografik yang digunakan secara luas dengan hash value 128-bit. Pada standart Internet (RFC 1321), MD5 telah dimanfaatkan secara bermacam-macam pada aplikasi keamanan, dan MD5 juga umum digunkan untuk melakukan pengujian integritas sebuah file. MD5 di desain oleh Ronald Rivest pada tahun 1991 untuk menggantikan hash function sebelumnya yaitu MD4.
MD5 banyak digunakan oleh CMS-CMS besar seperti Joomla dan Mambo untuk melakukan enkripsi password.
MD5 Hash
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:
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
anda bisa menggunakan program-program komputer yang bisa mengubah MD5 Hash menjadi plain text. Contoh program-program tersebut salahsatunya adalah Cain & Able. Selain itu ada beberapa website yang juga menyediakan fasilitas untuk melakukan cracking MD5 Hash. Website-website tersebut antara lain adalah
http://passcracking.com/
http://milw0rm.com/cracker/insert.php
http://passcracking.com/
http://milw0rm.com/cracker/insert.php
Dalam kriptografi, MD5 (Message-Digest algortihm 5) ialah fungsi hash kriptografik yang digunakan secara luas dengan hash value 128-bit. Pada standart Internet (RFC 1321), MD5 telah dimanfaatkan secara bermacam-macam pada aplikasi keamanan, dan MD5 juga umum digunakan untuk melakukan pengujian integritas sebuah file.
Sejarah dan kriptoanalisis
MD5 di desain oleh Ronald Rivest pada tahun 1991 untuk menggantikan hash function sebelumnya, MD4. Pada tahun 1996, sebuah kecacatan ditemukan dalam desainnya, walau bukan kelemahan fatal, pengguna kriptografi mulai menganjurkan menggunakan algoritma lain, seperti SHA-1 (klaim terbaru menyatakan bahwa SHA-1 juga cacat). Pada tahun 2004, kecacatan-kecacatan yang lebih serius ditemukan menyebabkan penggunaan algoritma tersebut dalam tujuan untuk keamanan jadi makin dipertanyakan.
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).
Pada tahun 1993, den Boer dan Bosselaers memberikan awal, bahkan terbatas, hasil dari penemuan pseudo-collision dari fungsi kompresi MD5. Dua vektor inisialisasi berbeda I dan J dengan beda 4-bit diantara keduanya.
MD5compress(I,X) = MD5compress(J,X)
Pada tahun 1996 Dobbertin mengumumkan sebuah kerusakan pada fungsi kompresi MD5. Dikarenakan hal ini bukanlah serangan terhadap fungsi hash MD5 sepenuhnya, hal ini menyebabkan para pengguna kriptografi menganjurkan pengganti seperti WHIRLPOOL, SHA-1 atau RIPEMD-160.
Ukuran dari hash — 128-bit — cukup kecil untuk terjadinya serangan brute force birthday attack. MD5CRK adalah proyek distribusi mulai Maret 2004 dengan tujuan untuk menunjukka kelemahan dari MD5 dengan menemukan kerusakan kompresi menggunakan brute force attack.
Bagaimanapun juga, MD5CRK berhenti pada tanggal 17 Agustus 2004, saat [[kerusakan hash]] pada MD5 diumumkan oleh Xiaoyun Wang, Dengguo Feng, Xuejia Lai dan Hongbo Yu [1][2]. Serangan analitik mereka dikabarkan hanya memerlukan satu jam dengan menggunakan IBM P690 cluster.
Pada tanggal 1 Maret 2005, Arjen Lenstra, Xiaoyun Wang, and Benne de Weger mendemontrasikan[3] kunstruksi dari dua buah sertifikat X.509 dengan public key yang berbeda dan hash MD5 yang sama, hasil dari demontrasi menunjukkan adanya kerusakan. Konstruksi tersebut melibatkan private key untuk kedua public key tersebut. Dan beberapa hari setelahnya, Vlastimil Klimamenjabarkan[4] dan mengembangkan algortima, mampu membuat kerusakan Md5 dalam beberapa jam dengan menggunakan sebuah komputer notebook. Hal ini menyebabkan MD5 tidak bebas dari kerusakan.
Dikarenakan MD5 hanya menggunakan satu langkah pada data, jika dua buah awalan dengan hash yang sama dapat dibangun, sebuah akhiran yang umum dapat ditambahkan pada keduanya untuk membuat kerusakan lebih masuk akal. Dan dikarenakan teknik penemuan kerusakan mengijinkan pendahuluan kondisi hash menjadi arbitari tertentu, sebuah kerusakan dapat ditemukan dengan awalan apapun. Proses tersebut memerlukan pembangkitan dua buah file perusak sebagai file templat, dengan menggunakan blok 128-byte dari tatanan data pada 64-byte batasan, file-file tersebut dapat mengubah dengan bebas dengan menggunakan algoritma penemuan kerusakan.
Efek nyata dari kriptoanalisis
Saat ini dapat diketahui, dengan beberapa jam kerja, bagaimana proses pembangkitan kerusakan MD5. Yaitu dengan membangkitkan dua byte string dengan hash yang sama. Dikarenakan terdapat bilangan yang terbatas pada keluaran MD5 (2128), tetapi terdapat bilangan yang tak terbatas sebagai masukannya, hal ini harus dipahami sebelum kerusakan dapat ditimbulkan, tapi hal ini telah diyakini benar bahwa menemukannya adalah hal yang sulit.
Sebagai hasilnya bahwa hash MD5 dari informasi tertentu tidak dapat lagi mengenalinya secara berbeda. Jika ditunjukkan informasi dari sebuah public key, hash MD5 tidak mengenalinya secata berbeda jika terdapat public key selanjutnya yang mempunyai hash MD5 yang sama.
Bagaimanapun juga, penyerangan tersebut memerlukan kemampuan untuk memilih kedua pesan kerusakan. Kedua pesan tersebut tidak dengan mudah untuk memberikan serangan preimage, menemukan pesan dengan hash MD5 yang sudah ditentukan, ataupun serangan preimage kedua, menemukan pesan dengan hash MD5 yang sama sebagai pesan yang diinginkan.
Hash MD5 lama, yang dibuat sebelum serangan-serangan tersebut diungkap, masih dinilai aman untuk saat ini. Khususnya pada digital signature lama masih dianggap layak pakai. Seorang user boleh saja tidak ingin membangkitkan atau mempercayai signature baru menggunakan MD5 jika masih ada kemungkinan kecil pada teks (kerusakan dilakukan dengan melibatkan pelompatan beberapa bit pada bagian 128-byte pada masukan hash) akan memberikan perubahan yang berarti.
Penjaminan ini berdasar pada posisi saat ini dari kriptoanalisis. Situasi bisa saja berubah secara tiba-tiba, tetapi menemukan kerusakan dengan beberapa data yang belum-ada adalah permasalahan yang lebih susah lagi, dan akan selalu butuh waktu untuk terjadinya sebuah transisi.
Pengujian Integritas
Ringkasan MD5 digunakan secara luas dalam dunia perangkat lunak untuk menyediakan semacam jaminan bahwa file yang diambil (download) belum terdapat perubahan. Seorang user dapat membandingkan MD5 sum yang dipublikasikan dengan checksum dari file yang diambil. Dengan asumsi bahwa checksum yang dipublikasikan dapat dipercaya akan keasliannya, seorang user dapat secara yakin bahwa dile tersebut adalah file yang sama dengan file yang dirilis oleh para developer, jaminan perlindungan dari Trojan Horse dan virus komputer yang ditambahkan pada perangkat lunak. Bagaimanapun juga, seringkali kasus yangterjadi bahwa checksum yang dipublikasikan tidak dapat dipercaya (sebagai contoh, checksum didapat dari channel atau lokasi yang sama dengan tempat mengambil file), dalam hal ini MD5 hanya mampu melakukan error-checking. MD5 akan mengenali file yang didownload tidak sempurna, cacat atau tidak lengkap.
Algoritma
menunjukkan perputaran bit kiri oleh s; s bervariasi untuk tiap-tiap operasi. menunjukan tambahan modulo 232. MD5 memproses variasi panjang pesan kedalam keluaran 128-bit dengan panjang yang tetap. Pesan masukan dipecah menjadi dua gumpalan blok 512-bit; Pesan ditata sehingga panjang pesan dapat dibagi 512. Penataan bekerja sebagai berikut: bit tunggal pertama, 1, diletakkan pada akhir pedan. Proses ini diikuti dengan serangkaian nol (0) yang diperlukan agar panjang pesan lebih dari 64-bit dan kurang dari kelipatan 512. Bit-bit sisa diisi dengan 64-bit integer untuk menunjukkan panjang pesan yang asli. Sebuah pesan selalu ditata setidaknya dengan 1-bit tunggal, seperti jika panjang pesan adalah kelipatan 512 dikurangi 64-bit untuk informasi panjang (panjang mod(512) = 448), sebuah blok baru dari 512-bit ditambahkan dengan 1-bit diikuti dengan 447 bit-bit nol (0) diikuti dengan panjang 64-bit.
Algoritma MD5 yang utama beroperasi pada kondisi 128-bit, dibagi menjadi empat word 32-bit, menunjukkan A, B, C dan D. Operasi tersebut di inisialisasi dijaga untuk tetap konstan. Algoritma utama kemudian beroperasi pada masing-masing blok pesan 512-bit, masing-masing blok melakukan pengubahan terhadap kondisi.Pemrosesan blok pesan terdiri atas empat tahap, batasan putaran; tiap putasan membuat 16 operasi serupa berdasar pada fungsi non-linear F, tambahan modular, dan rotasi ke kiri. Gambar satu mengilustrasikan satu operasi dalam putaran. Ada empat macam kemungkinan fungsi F, berbeda dari yang digunakan pada tiap-tiap putaran:
menunjukkan operasi logikan XOR, AND, OR dan NOT.
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.
Pseudocode
//Catatan: Seluruh variable pada unsigned integer 32-bit dan dan wrap modulo 2^32 saat melakukan perhitungan
//Mendefinisikan r sebagai berikut
var int[64] r, k
r[ 0..15] := {7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22}
r[16..31] := {5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20}
r[32..47] := {4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23}
r[48..63] := {6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21}
//Menggunakan bagian fraksional biner dari integral sinus sebagai konstanta:
for i from 0 to 63
k[i] := floor(abs(sin(i + 1)) × 2^32)
//Inisialisasi variabel:
var int h0 := 0x67452301
var int h1 := 0xEFCDAB89
var int h2 := 0x98BADCFE
var int h3 := 0x10325476
//Pemrosesan awal:
append "1" bit to message
append "0" bits until message length in bits ≡ 448 (mod 512)
append bit length of message as 64-bit little-endian integer to message
//Pengolahan pesan paada kondisi gumpalan 512-bit:
for each 512-bit chunk of message
break chunk into sixteen 32-bit little-endian words w(i), 0 ≤ i ≤ 15
//Inisialisasi nilai hash pada gumpalan ini:
var int a := h0
var int b := h1
var int c := h2
var int d := h3
//Kalang utama:
for i from 0 to 63
if 0 ≤ i ≤ 15 then
f := (b and c) or ((not b) and d)
g := i
else if 16 ≤ i ≤ 31
f := (d and b) or ((not d) and c)
g := (5×i + 1) mod 16
else if 32 ≤ i ≤ 47
f := b xor c xor d
g := (3×i + 5) mod 16
else if 48 ≤ i ≤ 63
f := c xor (b or (not d))
g := (7×i) mod 16
temp := d
d := c
c := b
b := ((a + f + k(i) + w(g)) leftrotate r(i)) + b
a := temp
//Tambahkan hash dari gumpalan sebagai hasil:
h0 := h0 + a
h1 := h1 + b
h2 := h2 + c
h3 := h3 + d
var int digest := h0 append h1 append h2 append h3 //(diwujudkan dalam little-endian)
Catatan: Meskipun rumusan dari yang tertera pada RFC 1321, berikut ini sering digunakan untuk meningkatkan efisiensi:
(0 ≤ i ≤ 15): f := d xor (b and (c xor d))
(16 ≤ i ≤ 31): f := c xor (d and (b xor c))
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 ASCIIsepanjang 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
id.wikipedia.org/wiki/MD5
Heran! Sudah lama MD5 terbukti memiliki kelemahan serius, namun hingga kini masih banyak orang yang memakainya.
MD5 adalah salah satu fungsi hash yang sangat populer. Di usianya yang mencapai sweet seventeen, semakin banyak serangan yang makin efektif terhadap MD5. Kalau dulu di tahun 1995 ilmuwan hanya sebatas mempublikasikan kelemahan di tataran teoretis, kini semakin banyak orang yang mampu meng-exploit kelemahan itu dengan sangat efektif. Sudah saat MD5 dijauhi sebagai sesuatu yang berbahaya, jangan ditunda lagi!
Cryptographic Hash Basics
Untuk mudahnya anggap saja cryptographic hash sebagai semacam signature atau segel yang unik dari sebuah file. Setiap file yang berbeda akan memiliki signature yang berbeda. Perbedaan satu bit saja pada file akan menghasilkan signature yang berbeda. Sehingga dua file yang identik (seluruh bitnya sama), akan memiliki signature yang sama.
Sebelumnya mari kita lihat bagaimana fungsi hash MD5 in action. Input:
Bayangkan dalam satu pesawat umum terdapat dua kelas penumpang, yaitu kelas VIP dan kelas ekonomi. Prosedur dan proses security harus menjamin agar penumpang menempati tempat duduk sesuai haknya. Untuk itu penumpang harus menunjukkan bukti berupa tiket yang di situ tertera namanya. Kemudian dari daftar penumpang pramugari akan tahu bahwa anda berhak duduk di kelas VIP atau ekonomi. Bila anda memegang tiket ekonomi mencoba duduk di kelas VIP maka pramugari akan menolak anda. Apalagi bila anda tidak memegang tiket, mencoba naik pesawat itu, sudah pasti anda akan ditendang.
Input paragraf tersebut memiliki nilai hash:
Hexa:11ee98b599338ae66458f9b86ab4a6fb
Binary:00010001 11101110 10011000 10110101 10011001 00110011 10001010 11100110 01100100 01011000 11111001 10111000 01101010 10110100 10100110 11111011
Input di atas adalah teks sepanjang 578 karakter, sedangkan outputnya hanya 32 karakter, sangat timpang bukan? Mari kita lihat kalau inputnya hanya satu karakter saja, ‘X’, maka nilai hashnya adalah 02129bb861061d1a052c592e2dc6b383 atau dalam binary 00000010 00010010 10011011 10111000 01100001 00000110 00011101 00011010 00000101 00101100 01011001 00101110 00101101 11000110 10110011 10000011. Terlihat kan inputnya berapapun panjangnya, nilai hashnya tetap 128 bit atau 32 karakter hexa. Bahkan string kosong “” memiliki nilai hashnya sendiri sepanjang 32 karakter, yaitu 02129bb861061d1a052c592e2dc6b383.
MD5 bukan Enkripsi!
Seringkali orang menganggap MD5 sebagai enkripsi. Memang MD5 dipakai dalam kriptografi, namun MD5 bukanlah algoritma enkripsi. Enkripsi mengubah plain-text menjadi ciphertext yang ukurannya berbanding lurus dengan ukuran file aslinya. Semakin panjang plain-text maka hasil enkripsinya juga semakin panjang. Hasil enkripsi bisa dikembalikan ke plain-text semula dengan proses dekripsi. Jadi enkripsi adalah fungsi dua arah dan reversible. Selain itu dalam enkripsi dibutuhkan kunci, tanpa kunci itu namanya bukan enkripsi, melainkan hanya encoding/decoding.
Berbeda dengan enkripsi, fungsi hash tidak butuh kunci dan sifatnya hanya satu arah, yaitu dari teks masukan menjadi nilai hash yang panjangnya selalu sama. Setelah menjadi nilai hash, tidak ada fungsi yang bisa mengembalikan nilai hash itu menjadi teks semula.
Penggunaan Hash
Hash digunakan untuk banyak hal yang terkait dengan kriptografi dan security.
1. 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.
2. 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.
Ketika user mendaftar, password dia akan dihitung nilai hashnya dan disimpan dalam database. Contohnya bila dia mendaftar dengan password “rahasia” maka nilai hashnya adalah ac43724f16e9241d990427ab7c8f4228 dan disimpan dalam database. Bila kemudian dia login dengan password yang lain, maka nilai hashnya akan tidak cocok dengan yang di database sehingga authentication gagal.
3. Digital signature
Digital signature tidak lain adalah nilai hash yang ter-enkrip dengan kunci private pembuat dokumen. Penerima dokumen bisa memverifikasi signature ini dengan cara menghitung nilai hash dokumen yang dia terima. Kemudian men-dekrip digital signature dengan kunci publik pembuat dokumen sehingga kembali menjadi hash. Kedua nilai hash ini lalu dibandingkan, hasil dekrip dan hasil perhitungan, jika sama maka signature valid.
Digital signature ini dipakai juga untuk membuat certifikate SSL. Certificate SSL sangat vital peranannnya menjaga confidentiality dan authentication ketika seseorang mengakses web. Browser sudah memiliki daftar trusted Certificate Authority, jadi setiap browser mengakses situs dengan https akan diperiksa apakah certificate server tersebut ditanda-tangani oleh salah satu dari CA yang dipercaya browser.
Collision Vulnerability
Salah satu masalah yang mungkin terjadi dari fungsi hash adalah collision. Maksudnya adalah ada 2 atau lebih teks yang menghasilkan nilai hash yang sama. Anda sendiri telah melihat dengan MD5 bahwa masukan sepanjang berapapun, akan menghasilkan nilai hash sepanjang 128 bit. Itu artinya kemungkinan inputnya sangat banyak jumlahnya, tak terhingga, namun kemungkinan nilai hashnya hanya sejumlah 2^128. Sebagai ilustrasi, bayangkan apa yang terjadi bila dalam suatu negara jumlah wanitanya sangat banyak, hingga 5 kali lipat jumlah pria. Maka kemungkinan akan ada 2 atau lebih wanita yang memiliki suami yang sama. Inilah yang disebut collision. Ada 2 atau lebih input teks yang memiliki nilai hash yang sama.
Sebenarnya 2^128 itu jumlah yang sangat besar, yaitu sebesar:
340.282.366.920.938.463.463.374.607.431.768.211.456 . Saya tidak tahu bagaimana cara menyebutkannya setelah juta, milyar dan triliun. Jika fungsi hashnya secara merata menyebarkan nilai hash di semua ruang yang ada, maka sangat sulit untuk menemukan collision. Namun bila fungsi hashnya mengandung kelemahan sehingga hanya menghasilkan sebagian kecil saja dari semua kemungkinan yang tersedia, maka peluang terjadinya collision akan besar.
MD5 memiilki kelemahan yang memungkinkan dicari 2 file yang memiliki nilai hash yang sama dengan waktu yang singkat. Ilmuwan yang mempublikasikan cara mencari MD5 collision adalah ilmuwan Cina Xiaoyun Wang and Hongbo Yu dari Shandong University.
Kelemahan MD5 adalah IF MD5(X) = MD5(Y) THEN MD5(X+q) = MD5(Y+q)
Nilai hash keduanya: 79054025255fb1a26e4bc422aef54eb4
Dua file binary di atas adalah contoh populer dari MD5 collision. Keduanya adalah dua file yang berbeda namun memiliki nilai hash yang sama. Dalam kedua file di atas hanya berbeda 6 byte saja, tidak terlalu berarti memang karena hanya sebagai proof of concept saja. Berikutnya akan saya tunjukkan contoh-contoh collision lain yang lebih seram dari ini.
Executables File Collision
Sebelumnya sudah saya jelaskan bahwa MD5 digunakan untuk menjaga integritas file contohnya ketika memverifikasi hasil download atau dalam Tripwire IDS. Fungsi hash digunakan untuk menjaga integrity karena perubahan pada file 1 bit saja akan mengubah nilai hashnya. Namun bila terjadi collision seperti pada MD5, maka file integrity tidak lagi bisa terjamin.
Dua file binary di atas adalah contoh populer dari MD5 collision. Keduanya adalah dua file yang berbeda namun memiliki nilai hash yang sama. Dalam kedua file di atas hanya berbeda 6 byte saja, tidak terlalu berarti memang karena hanya sebagai proof of concept saja. Berikutnya akan saya tunjukkan contoh-contoh collision lain yang lebih seram dari ini.
Executables File Collision
Sebelumnya sudah saya jelaskan bahwa MD5 digunakan untuk menjaga integritas file contohnya ketika memverifikasi hasil download atau dalam Tripwire IDS. Fungsi hash digunakan untuk menjaga integrity karena perubahan pada file 1 bit saja akan mengubah nilai hashnya. Namun bila terjadi collision seperti pada MD5, maka file integrity tidak lagi bisa terjamin.
executables collision
Peter Selingertelah membuat demonstrasi 2 buah file executable yang berbeda tapi memiliki nilai hash MD5 yang sama. Skenarionya adalah dari dua file itu salah satunya adalah file yang asli, satu lagi adalah file yang jahat. Keduanya memiliki ukuran dan nilai hash MD5 yang sama.
Kesamaan hash ini akan mengelabui Tripwire dan orang yang mendownload file itu dari internet. Tripwire akan diam seribu bahasa walaupun file executables telah diubah attacker. Begitu juga orang yang medownload sebuah file executable dari internet ternyata file yang dia terima sudah diubah di tengah perjalanan. Namun karena setelah dihitung nilai hashnya cocok dengan nilai hash file yang asli, korban akan menganggap file itu benar dan asli padahal berbeda.
Law #1: If a bad guy can persuade you to run his program on your computer, it’s not your computer anymore
Law #2: If a bad guy can alter the operating system on your computer, it’s not your computer anymore
Hukum di atas adalah 2 di antara 10 immutable laws of security. Memang benar, jika orang lain bisa menjalankan program atau mengubah program di komputer anda, maka komputer itu bukan milik anda lagi. Collision executables ini sungguh berbahaya!
Postscript File Collision
Postscript sebenarnya adalah bahasa pemrograman/script yang ditujukan khusus untuk membuat dokumen yang akan dicetak mirip sekali dengan PDF. Biasanya scriptnya tidak ditulis manual, namun orang menulis dokumen menggunakan editor WYSIWYG seperti microsoft word, kemudian program yang akan menulis scriptnya.
Mungkin anda lebih familiar dengan PDF. Bayangkan apa yang terjadi bila ada dua file PDF yang isinya bertolak belakang namun memiliki nilai hash yang sama. Karena nilai hashnya sama,maka bila file PDF yang satu di-tandatangani oleh seseorang, maka tandatangan itu akan valid juga untuk file PDF yang lainnya. Ketika diperlihatkan dokumen yang satunya lagi, orang yang menandatangani akan kaget karena dia tidak merasa menandatangani dokumen itu.
Dua orang ilmuwan dari jerman membuat demonstrasi collision dua buah file postscript. File ini isinya sangat jauh berbeda, namun keduanya memiliki nilai hash yang sama.
SSL Certificate Collision
SSL certificate sangat vital untuk keamanan mengakses situs yang sensitif seperti situs belanja dan internet banking. Dengan menunjukkan certificate SSL yang valid, suatu server membuktikan dirinya pada browser bahwa dia adalah situs yang sah, browser yakin sedang berbicara dengan situs yang benar dan dengan certificate browser yakin akan public key server itu.
Bila attacker berhasil membuat certificate palsu, maka attacker bisa melakukan man in the middle attack (mitm) dan menyadap semua komunikasi antara browser dan server.
Browser hanya percaya dengan certificate yang ditandatangani oleh root CA atau intermediary CA yang terpercaya.
Bila attacker mencoba melakukan mitm attack, namun tidak punya sertifikat yang diterbitkan CA yang dipercaya browser, maka browser akan memunculkan warning bahwa sertifikat ini tidak bisa dipercaya. Bagaimana bila attacker mampu membuat certificate palsu dengan tanda tangan asli dari CA yang dipercaya browser?
Sekelompok hacker di US dan eropa dengan menggunakan 200 mesin PlayStation 3, berhasil membuat sertifikat palsu yang ditandatangani oleh CA yang dipercaya browser. Tidak hanya membuat sertifikat untuk satu website, namun mereka membuat sertifikat sebagai intermediary CA, artinya mereka berhak menerbitkan sertifikat untuk website apapun sebanyak yang mereka mau.
Semua itu bisa terjadi karena collision MD5 sehingga membuat digital signature untuk satu certificate akan valid juga untuk certificate lain yang palsu. Cara mereka melakukannya adalah:
1. Mereka menyiapkan dua sertifikat yang punya hash yang sama. Sertifikat ini masih belum ditandatangani. Sertifikat yang satu adalah sertifikat untuk website, dan yang satu lagi sertifikat untuk menjadi CA (penerbit sertifikat).
2. Mereka membeli tanda tangan CA untuk sertifikat yang untuk website.
3. Setelah sertifikat yang telah ditandatangani CA dikirimkan, mereka mengkopi digital signature sertifikat itu dan dipasangkan pada sertifikat satu lagi yang telah disiapkan untuk menjadi CA.
4. Karena sertifikat yang untuk website dan sertifikat untuk menjadi CA memiliki hash yang sama, maka tanda tangan di sertifikat satu akan valid juga di sertifikat yang lain.
5. Dengan cara ini mereka kini berhak menerbitkan sertifikat untuk website lain.
Berikut adalah dua buah sertifikat yang dihasilkan dari serangan ini. Sertifikat yang pertama dalah sertifikat untuk website, yang dikeluarkan oleh CA yang asli. Sertifikat kedua adalah sertifikat yang dibuat sendiri dan tandatangannya dicomot dari sertifikat yang satunya.
Kesimpulan
Saya sudah berikan 3 contoh yang memperlihatkan bahaya collision pada MD5. 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.
http://www.ilmuhacking.com/cryptography/md5-itu-berbahaya/
Tidak ada komentar:
Posting Komentar