Jelajahi eBook
Kategori
Jelajahi Buku audio
Kategori
Jelajahi Majalah
Kategori
Jelajahi Dokumen
Kategori
com
Algoritma MD5
A. Pendahuluan
Akhir-akhir ini inbox e-mail kita semakin penuh dengan pesan, baik pesan penting dari
keluarga, sahabat, rekan kerja, atau sekedar pesan sampah (spam). Namun, pernahkan anda
membayangkan bagaimana jika ada seseorang yang berhasil menyadap percakapan anda dengan
rekan anda melalui e-mail, dan tanpa anda ketahui ternyata e-mail yang dikirim oleh rekan anda sudah
disadap dan dimodifikasi sebelumnya oleh si penyadap (sniffer)?
Di dalam keamanan informasi, otentikasi dan integritas pesan merupakan suatu hal yang
sangat penting. Tanpa diketahui siapakah pengirim pesan yang sebenarnya dan apakah pesan benar-
benar asli dari si pengirim, tentu informasi menjadi tidak valid. Oleh karena itu, di dalam kriptografi
terdapat fungsi hash satu arah yang biasa digunakan untuk mengecek otentikasi dan integritas pesan.
Fungsi hash satu arah ini bekerja dengan menerima input pesan dengan panjang pesan sembarang
dan mengkonversinya menjadi kumpulan string dengan panjang fixed (tidak berubah), umumnya
berukuran lebih kecil daripada ukuran string pesan asli. Kumpulan string hasil konversi ini biasa
disebut message digest.
Di dalam fungsi hash satu arah sendiri dikenal berbagai macam algoritma untuk membuat
message digest dari suatu pesan, diantaranya sebagai berikut yang saya ambil dari buku "Kriptografi"
karangan Rinaldi Munir:
Keterangan:
MDS = Message Digest Size (ukuran message digest)
MBS = Message Block Size (ukuran blok pesan)
Kolisi = Tabrakan, pesan input berbeda yang memiliki message digest yang sama.
Sebagai contoh, misalkan saya memiliki pesan dengan isi (tanpa tanda petik) "Teknik
Informatika UIN Sunan Kalijaga Yogyakarta", maka nilai hash dari pesan tersebut adalah:
Dalam contoh di atas terlihat bahwa message digest yang dihasilkan oleh masing-masing
fungsi hash berbeda-beda. Message digest yang dihasilkan terdiri dari huruf-huruf yang tersusun
acak. Perlu diketahui, bahwa message digest bukanlah hasil pengenkripsian suatu pesan. Bukan hasil
enkripsi suatu pesan karena, tidak ada algortima yang bisa mengembalikan bentuk message digest
ke dalam bentuk pesan aslinya (plain text). Fungsi hash satu arah juga dikenal sebagai fungsi
kompresi (compression function), fingerprint, cryptographic checksum, message integrity check,
manipulation detection code.
Selanjutnya, saya hanya akan membahas algoritma hash MD5 saja. Algoritma ini sudah
sangat umum digunakan sebagai standar untuk otentikasi pesan dan mengecek integritas pesan. MD5
dibuat oleh Ronald Rivest pada tahun 1991. Algoritma MD5 merupakan penyempurnaan dari algoritma
hash MD4 setelah diketahui bahwa MD4 berhasil diserang oleh kriptanalisis. Meskipun MD5 lebih
lambat dari MD4, tetapi MD5 lebih konservatif dalam desainnya.
Pembuatan message diggest dengan algoritma MD5 diperlihatkan dalam gambar berikut:
(1-512 bit)
pesan 1000....000 panjang pesan
Y0 Y1 ... Yq
... YL-1
Penambahan ini dilakukan dengan cara seperti berikut: satu bit tunggal ditambahkan ke
pesan, kemudian ditambahkan bit nol, sehingga pesan yang sudah diganjal menjadi
sama dengan 448, modulo 512. Secara keseluruhan, paling tidak terjadi penambahan
satu bit saja dan paling banyak terjadi penambahan sampai 512 bit.
B merupakan panjang pesan sebelum diberi bit-bit pengganjal yang dinyatakan dengan
panjang 64 bit. Kemudian ditambahkan dengan hasil pada langkah pertama. Jika,
panjang pesan lebih dari 2 64, maka yang diambil adalah panjangnya dalam modulo 2 64.
Bit-bit ini ditambahkan sebagai 2 buah 32 bit words dan ditambahkan word semula
sesuai dengan aturan pertama.
Pada poin ini, pesan yang dihasilkan (setelah ditambahkan dengan bit pengganjal dan
B) memiliki panjang yang merupakan kelipatan dari 512 bit. Bisa dikatakan, pesan ini
memiliki sebuah nilai panjang yang merupakan kelipatan dari 16 (32 bit) words.
word A: 01 23 45 67
word B: 89 ab cd ef
word C: fe dc ba 98
word D: 76 54 32 10
Perlu diketahui, beberapa versi menggunakan nilai inisialisasi yang berbeda yaitu:
word A: 67 45 23 01
word B: ef cd ab 89
word C: 98 ba dc fe
word D: 10 32 54 67
FAHMI AULIYA TSANI amixcustomlinux@gmail.com
F(X,Y,Z) = XY v not(X) Z
G(X,Y,Z) = XZ v Y not(Z)
H(X,Y,Z) = X xor Y xor Z
I(X,Y,Z) = Y xor (X v not(Z))
Pemrosesan blok pesan terdiri atas empat tahap, tiap putaran membuat 16 operasi
serupa berdasarkan pada fungsi non-linear F, tambahan modular, dan rotasi ke kiri.
Langkah-langkah yang terjadi sebagai berikut:
/* Putaran 2 */
/* Let [abcd k s i] denote the operation
a = b + ((a + G(b,c,d) + X[k] + T[i]) <<< s). */
/* Lakukan 16 operasi berikut ini */
[ABCD 1 5 17] [DABC 6 9 18] [CDAB 11 14 19] [BCDA 0 20 20]
[ABCD 5 5 21] [DABC 10 9 22] [CDAB 15 14 23] [BCDA 4 20 24]
[ABCD 9 5 25] [DABC 14 9 26] [CDAB 3 14 27] [BCDA 8 20 28]
[ABCD 13 5 29] [DABC 2 9 30] [CDAB 7 14 31] [BCDA 12 20 32]
/* Putaran 3. */
/* Let [abcd k s t] denote the operation
a = b + ((a + H(b,c,d) + X[k] + T[i]) <<< s). */
/* Lakukan 16 operasi berikut ini */
[ABCD 5 4 33] [DABC 8 11 34] [CDAB 11 16 35] [BCDA 14 23 36]
[ABCD 1 4 37] [DABC 4 11 38] [CDAB 7 16 39] [BCDA 10 23 40]
[ABCD 13 4 41] [DABC 0 11 42] [CDAB 3 16 43] [BCDA 6 23 44]
[ABCD 9 4 45] [DABC 12 11 46] [CDAB 15 16 47] [BCDA 2 23 48]
/* Putaran 4. */
/* Let [abcd k s t] denote the operation
a = b + ((a + I(b,c,d) + X[k] + T[i]) <<< s). */
/* Lakukan 16 operasi berikut ini */
[ABCD 0 6 49] [DABC 7 10 50] [CDAB 14 15 51] [BCDA 5 21 52]
[ABCD 12 6 53] [DABC 3 10 54] [CDAB 10 15 55] [BCDA 1 21 56]
[ABCD 8 6 57] [DABC 15 10 58] [CDAB 6 15 59] [BCDA 13 21 60]
[ABCD 4 6 61] [DABC 11 10 62] [CDAB 2 15 63] [BCDA 9 21 64]
C. Penggunaan MD5
Sangat susah memeriksa keaslian sebuah pesan dengan membandingkan pesan asli
dengan pesan yang dikirimkan kepada kita. Apalagi jika pesan yang akan dibandingkan berukuran
sangat besar. Akan sangat susah mendeteksi perubahan yang sangat kecil mengingat keterbatasan
mata yang kita punya. Fungsi hash dapat digunakan untuk mendeteksi integritas pesan/data. Caranya
dengan membangkitkan message digest dari pesan yang kita terima. Kemudian, message digest
pesan yang kita terima dibandingkan dengan message digest pesan asli. Algoritma hash MD5 sangat
peka terhadap perubahan sekecil apapun, meskipun perubahan itu hanya satu huruf tetapi akan
menghasilkan message digest yang sama sekali berbeda.
Namun, kadang kala kerahasiaan pesan tidak terlalu kita butuhkan. Namun, kita sangat
membutuhkan keyakinan bahwa pesan benar-benar dikirim oleh si pengirim. Hal ini sering disebut
dengan otentikasi. Oleh karena itu, diciptakanlah konsep tanda tangan digital. Yang dimaksud tanda
tangan digital di sini bukanlah tanda tangan yang di-scan menggunakan scanner, sehingga bisa
ditempelkan pada suatu dokumen, melainkan suatu nilai string yang dihasilkan dari perhitungan
kriptografis yang bergantung pada pesan yang dikirim dan pengirim pesan tersebut.
Di buku "Applied Cryptography 2nd" karangan Bruce Schneier, disebutkan bahwa tanda
tangan mempunyai karakteristik seperti berikut ini:
1. tanda tangan merupakan bukti yang otentik,
2. tanda tangan tidak dapat dilupakan,
3. tanda tangan tidak dapat dipindahkan untuk digunakan ulang,
4. dokumen yang telah ditandatangani tidak dapat diubah,
5. tanda tangan tidak dapat disangkal.
Di tempat penerima, tanda tangan ini diverivikasi dengan cara sebagai berikut:
1. tanda tangan didekripsi dengan menggunakan kunci publik sang pengirim pesan,
sehingga didapatkan MD pesan semula
2. penerima kemudian mencari nilai MD' dari pesan yang diterima menggunakan algoritma
hash yang sama.
3. Jika hasil MD'=MD, maka tanda tangan yang diterima otentik dan benar-benar berasal
dari pengirim yang benar.
Jadi, secara implisit sebenarnya dengan menggunakan konsep tanda tangan digital ini juga
bisa digunakan untuk mencari integritas pesan yang dikirimkan.
FAHMI AULIYA TSANI amixcustomlinux@gmail.com
Seperti yang sudah saya sebutkan sebelumnya di atas, bahwa MD5 ini bisa digunakan
untuk mencari integritas suatu pesan dan tanda tangan digital. Namun, ternyata algortima MD5 ini
ditemukan kelemahan. Yaitu terjadinya kolisi (tabrakan) pada message digest yang dihasilkan.
Dengan panjang message digest 128 bit, maka dibutuhkan percobaan secara brute force sebanyak
2128 kali. Pada awalnya, usaha untuk menemukan message digest yang sama ini dianggap tidak
mungkin mengingat waktu yang dibutuhkan sangat lama. Namun, pada tahun 1996 berhasil ditemukan
kolisi oleh Dobbertin meskipun bukan kelemahan yang fatal.
Hal ini mendorong para kriptanalisis berusaha untuk mencari kelemahan yang terdapat
pada algoritma MD5. Dan terbukti, pada 1 Maret 2005 Arjen Lenstra, Xiaouyun Wang, dan Benne de
Werger menemukan dua buah sertifikat X.509 dengan kunci publik yang berbeda tetapi memiliki nilai
hash yang sama. Beberapa hari kemudian, Vlastimil Klima berhasil membuat perbaikan untuk
algoritma Lenstra dkk. dan dapat menghasilkan kolisi message digest MD5 hanya dalam waktu
beberapa jam saja menggunakan PC.
E. Referensi
[RIV92] Rivest, R. The MD5 Message Digest Algorithm. RFC 1321. MIT and RSA Data Security,
Inc. April 1992.
[MUN06] Munir, Rinaldi. Kriptografi. Bandung: Informatika. 2006.
[WIK09] http://id.wikipedia.org/md5. diakses 28 Oktober 2009.
F. About Me
nick : amculin
a.k.a : sun-coolin
real name : Fahmi Auliya Tsani
catch me at : campuz, internet cafe, idws forum
member of : NIC
email : amixcustomlinux@gmail.com, sanicustomlinux@yahoo.com
url : http://infinity.uin-suka.ac.id [dead!!! server-nya dikemanain nih?]
idolz : cyberheb, s'to, Milo Hoffman, Linus Torvalds, acong
FAHMI AULIYA TSANI amixcustomlinux@gmail.com
G. ASCII Art