Anda di halaman 1dari 7

FAHMI AULIYA TSANI amixcustomlinux@gmail.

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:

algoritma MDS (bit) MBS Kolisi


MD2 128 128 Ya
MD4 128 512 Hampir
MD5 128 512 Ya
RIPEMD 128 512 Ya
RIPEMD-128/256 128/256 512 Tidak
RIPEMD-160/320 160/320 512 Tidak
SHA-0 160 512 Ya
SHA-1 160 512 Ada cacat
SHA-256/224 256/224 512 Tidak
SHA-512/384 512 1024 Tidak
WHIRPOOL 512 512 Tidak

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:

pesan MD2 411A1EE452D7DD64ADEF3672FA917E2A

pesan MD4 96B5C79B3B906FCFF6C08E5E333312B5

pesan MD5 B7D64968D70061B781D1E9EF8B941AF5


FAHMI AULIYA TSANI amixcustomlinux@gmail.com

pesan RIPEMD-160/320 7A44805B8A7BEDAACACD4A5BC2161D


A4A3B693A8

pesan SHA-1 9C524259D364A56BA5623C60B228AB5624609C2B

pesan SHA-256/224 C2D731BDE7EB5F033BD477D004E0A28DCC


2CF8A0E055BF33AE16A373647C4102

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.

B. Pembuatan Message Digest

Pembuatan message diggest dengan algoritma MD5 diperlihatkan dalam gambar berikut:

Padding bits K mod 264


K bit

(1-512 bit)
pesan 1000....000 panjang pesan

512 512 512 512

Y0 Y1 ... Yq
... YL-1

512 512 512 512

ABCD HMD5 HMD5 H MD5 H MD5


128 128 128 128 128 128
128

Sederhananya seperti ini:


1. Appending padding bits (menambahkan bit-bit pengganjal),
2. Appending length (menambahkan nilai panjang pesan awal),
3. Initializing MD buffer (menginisialisasi penyangga MD),
4. Processing message in 16-words blocks (memproses pesan dalam blok 16-words).
FAHMI AULIYA TSANI amixcustomlinux@gmail.com

Masing-masing akan dijelaskan secara rinci di bawah ini.

1. Appending Padding Bits (Menambahkan Bit-bit Pengganjal)

Pesan dipanjangkan dengan menambahkan bit-bit pengganjal, sehingga memiliki


panjang (dalam bit) sama dengan 448, modulo 512. Sehingga, panjang pesan setelah
ditambahkan bit-bit pengganjal adalah 64 bit kurang dari kelipatan 512. Penambahan
bit-bit pengganjal ini selalu dilakukan sebagai langkah pertama, meskipun dalam kondisi
awal pun pesan sudah memiliki panjang sama dengan 448, modulo 512.

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.

2. Appending Length (Menambahkan Nilai Panjang Pesan Awal)

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.

3. Initializing MD Buffer (Menginisialisasi Penyangga MD)

MD5 menggunakan penyangga sebanyak 4 buah yang masing-masing memiliki panjang


32 bit. Sehingga, panjang penyangga total adalah sebanyak 32 bit x 4 = 128 bit. Masing-
masing penyangga diberi nama A, B, C, D. Nama-nama ini diinisialisasi dengan nilai-
nilai dalam bentuk heksadesimal sebagai berikut:

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

4. Processing Message in 16 Block (Memproses Pesan dalam Blok 16-words)


Pertama harus didefinisikan empat fungsi pelengkap terlebih dahulu yang masing-
masing sebagai input tiga buah word dengan panjang 32 bit dan menghasilkan sebuah
word output dengan panjang 32 bit.

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:

/* Proses dalam masing-masing blok 16 word */


For i = 0 to N/16-1 do
/* Salin blok i ke dalam X */
For j = 0 to 15 do
Set X[j] to M[i*16+j].
end /* end loop dari j */

/* Simpan A sebagai AA, B sebagai BB, C sebagai CC, D sebagai DD*/


AA = A
BB = B
CC = C
DD = D
/* Putaran 1 */
/* Let [abcd k s i] denote the operation
a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s). */

/* Lakukan 16 operasi berikut ini */


[ABCD 0 7 1] [DABC 1 12 2] [CDAB 2 17 3] [BCDA 3 22 4]
[ABCD 4 7 5] [DABC 5 12 6] [CDAB 6 17 7] [BCDA 7 22 8]
[ABCD 8 7 9] [DABC 9 12 10] [CDAB 10 17 11] [BCDA 11 22 12]
[ABCD 12 7 13] [DABC 13 12 14] [CDAB 14 17 15] [BCDA 15 22 16]

/* 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]

/* Lalu lakukan langkah berikut */


A = A + AA
B = B + BB
C = C + CC
D = D + DD
end /* end loop dari i */
FAHMI AULIYA TSANI amixcustomlinux@gmail.com

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.

Dengan menggunakan karakteristik-karakteristik seperti di atas, konsep tanda tangan digital


dapat diaplikasikan menggunakan dua cara yaitu enkripsi pesan dan menggunakan hash function.
Dalam hal ini, saya akan sedikit menjelaskan sedikit saja pengaplikasian MD5 dalam tanda tangan
digital.
Proses yang pertama sama dengan proses pemeriksaan integritas suatu pesan yaitu
dengan mencari nilai message digest dari pesan. Bedanya, pencarian nilai message digest dilakukan
oleh si pembuat pesan. Setelah didapat nilai message digest (selanjutnya akan disebut sebagai MD
saja), MD dienkripsi menggunakan algoritma kriptografi kunci-publik dan menggunakan kunci-privat si
pengirim. Hasil enkripsi inilah yang disebut sebagai tanda tangan digital (digital signature). Kemudian,
tanda tangan digital ini disisipkan ke pesan yang akan dikirim.

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

D. Kemananan Algoritma MD5

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

█████ ██████ █ ████████████████


█████ █████████████ ███ ███████████████████████
█████ █████████████████ █████ ███████████████████████████
█████ ███████ ███ ███████ █████
█████ ██████ █ ██████ █████
█████ ██████ ██████ █████
█████ ██████ █████ ██████ █████
█████ █████ █████ █████ █████
█████ █████ █████ █████ █████
█████ █████ █████ █████ █████
██████ █████ █████ █████ ██████
██████ █████ █████ █████ ██████
██████ █████ █████ █████ ██████
███████ █████ █████ █████ ███████
███████████████████████████ █████ █████ █████████████████
███████████████████████ █████ █████ █████████████
█████████████████ █████ █████ ███████

Universitas Islam Negeri Sunan Kalijaga

ASCII by Fahmi Auliya Tsani a.k.a amculin


┌─────────────────────────────────────────────────────────────────────────┐
│▓▓▓▓▓▒░ R E L E A S E i N F O ░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓│
└─────────────────────────────────────────────────────────────────────────┘
┌──┐ ┌──┐
│▓▓│ Title : Knowing The MD5 Algorithm │▓▓│
│▓▓│ Releaze name : sun-zine[0x01-052010]-Knowing_The_MD5_Algorithm.nfo│▓▓│
│▓▓│ Year : 2010 │▓▓│
│▓▓│ Genre : Electronic Magazine │▓▓│
│▓▓│ Made : 30 Mei 2010 │▓▓│
│▓▓│ Total : 1 │▓▓│
│▓▓│ File type : text │▓▓│
│▓▓│ File size : 21.5 Kb │▓▓│
│▒▒│ Language : Indonesian │▒▒│
│░░│ Otherz : My Firzt e-zine, enjoy it │░░│
└──┘ └──┘
┌─────────────────────────────────────────────────────────────────────────┐
│▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓│
└─────────────────────────────────────────────────────────────────────────┘