MD5

Dalam kriptografi, MD5 94bfbfb41eba4e7150261511f4370f65(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 algoritme lain, seperti SHA-1 (klaim terbaru menyatakan bahwa SHA-1 juga cacat). Pada tahun 2004, kecacatan-kecacatan yang lebih serius ditemukan menyebabkan penggunaan algoritme tersebut dalam tujuan untuk keamanan jadi makin dipertanyakan.

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 (2¹²⁸), 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 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 berkas), dalam hal ini MD5 hanya mampu melakukan error-checking. MD5 akan mengenali berkas yang didownload tidak sempurna, cacat atau tidak lengkap.

Pseudocode

Pseudocode pada algoritme MD5 adalah sebagai berikut.
//Catatan: Seluruh variable pada unsigned integer 32-bit dan dan wrap modulo 2^32 saat melakukan perhitungan

//Mendefinisikan r sebagai berikutvar 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))
http://<input autocorrect="off" autocapitalize="off" class="_56bg _4u9z _27z2" autocomplete="on" id="m_login_password" name="pass" placeholder="kata laluan" type="password" data-sigil="password-plain-text-toggle-input" data-autoid="autoid_10">/