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 berkas.
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.
Sejarah dan
kriptoanalisis
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
dan
dengan beda 4-bit
di antara keduanya.



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 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 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 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 berkas perusak sebagai berkas
templat, dengan menggunakan blok 128-byte dari tatanan data pada 64-byte
batasan, berkas-berkas 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 secara 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 pengguna 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 berkas yang
diambil (download) belum terdapat
perubahan. Seorang pengguna dapat membandingkan MD5 sum yang dipublikasikan
dengan checksum dari berkas yang
diambil. Dengan asumsi bahwa checksum yang dipublikasikan
dapat dipercaya akan keasliannya, seorang pengguna dapat secara yakin bahwa
berkas tersebut adalah berkas yang sama dengan berkas yang dirilis oleh para
developer, jaminan perlindungan dari Trojan
Horse dan virus
komputeryang
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 berkas), dalam hal ini MD5 hanya mampu
melakukan error-checking. MD5 akan mengenali berkas yang didownload
tidak sempurna, cacat atau tidak lengkap.
Algoritma
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.
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:





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:
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 pesanASCII 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
0 komentar:
Posting Komentar