Back to IF4020 Kriptografi

Algoritma MAC dan HMAC

Questions/Cues

  • Bagaimana MAC dibangun dari block cipher (CBC-MAC, DAA)?
  • Bagaimana MAC dibangun dari fungsi hash satu-arah?
  • Apa itu HMAC, bagaimana rumusnya, dan mengapa lebih baik dari ?
  • Teknik apa lagi yang dapat mengotentikasi pesan dengan kunci?

Reference Points

  • IF4020 Kriptografi — MAC (Slides 11-20)

Dua Cara Membangun MAC

MAC sama dengan fungsi hash dalam hal kompresi irreversible, dan dapat dibangun dari (1) block cipher atau (2) fungsi hash satu-arah yang sudah ada (Konsep MAC).

(a) MAC Berbasis Block Cipher

Pesan dienkripsi dengan block cipher mode CBC atau CFB; MAC = hasil enkripsi blok terakhir (). Seluruh blok sebelumnya ikut mempengaruhi blok terakhir lewat umpan balik (Konsep Cipher Blok dan Mode Operasi).

Bila DES dipakai, MAC = ukuran blok = 64 bit, dan kunci rahasia MAC adalah kunci DES (56 bit) (DES dan Triple DES). DAA (Data Authentication Algorithm) adalah algoritma MAC berbasis DES-CBC yang dipakai luas.

Detail DAA (slide 12): pesan dipecah menjadi blok 64 bit (pada ). Tiap blok dienkripsi DES dengan kunci (56 bit); mulai blok ke-2, di-XOR dengan luaran sebelumnya sebelum dienkripsi. Luaran terakhir menjadi DAC (Data Authentication Code), diambil sebesar 16 sampai 64 bit (bit paling kiri).

(b) MAC Berbasis Fungsi Hash

Fungsi hash seperti MD5 dan SHA dapat dipakai sebagai MAC: pesan disambung (concatenate) dengan kunci , lalu di-hash:

( = concatenation.) Panjang MAC mengikuti fungsi hash: SHA-1 menghasilkan MAC 160 bit. Skenarionya: Alice dan Bob berbagi kunci rahasia KEY; Alice mengirim DATA bersama MAC-nya, Bob menghitung ulang dan membandingkan.

HMAC

HMAC adalah algoritma pembangkit MAC dengan fungsi hash dan kunci, dituliskan HMAC-x dengan nama fungsi hash: HMAC-MD5, HMAC-SHA1, HMAC-SHA256, dst. Definisinya ada di RFC 2104 (slide menulis “RFC 2014”):

  • = kunci yang dipadding dengan nol (atau di-hash bila lebih panjang) hingga sepanjang blok hash.
  • = byte 0x36 diulang; = byte 0x5C diulang.
  • Hash dijalankan dua kali (dalam dan luar), dengan kunci masuk di kedua lapisan.

Rincian HMAC (slide 15-16): adalah kunci seukuran blok hash yang diturunkan dari :

opad = byte 0x5c diulang sepanjang blok (outer padding), ipad = byte 0x36 diulang (inner padding). Pseudocode dari Wikipedia pada slide:

function hmac(key, message, hash, blockSize, outputSize):
    block_sized_key = computeBlockSizedKey(key, hash, blockSize)
    o_key_pad = block_sized_key xor [0x5c * blockSize]    # outer padded key
    i_key_pad = block_sized_key xor [0x36 * blockSize]    # inner padded key
    return hash(o_key_pad || hash(i_key_pad || message))

function computeBlockSizedKey(key, hash, blockSize):
    if length(key) > blockSize: key = hash(key)           # kunci panjang di-hash
    if length(key) < blockSize: return Pad(key, blockSize) # kunci pendek di-pad nol
    return key

(Contoh blockSize: 64 byte untuk SHA-1, outputSize: 20 byte.) Alur skema berbasis hash pada slide 14: Alice dan Bob berbagi KEY; Alice memasukkan KEY dan DATA ke fungsi hash menghasilkan MAC, lalu mengirim MAC + DATA; Bob menghitung ulang MAC dari KEY dan DATA yang diterima lalu memeriksa kesamaan (=?).

Demo daring (slide 17-18): alat HMAC Generator di freeformatter.com menerima teks (pada slide: dua baris Kita bikin romantis / Bikin paling romantis), kunci rahasia (MALIQ), dan algoritma digest (SHA256), lalu menampilkan computed HMAC heksadesimal 64 digit.

Contoh slide: = Halo, Bob!, = 12345678, hash SHA-1 MAC = 6f8605c7c3a649a40abfb87b44aa21f356e931a0 (ini hasil HMAC-SHA1 asli, berbeda dari hash polos SHA1(M || K) yang bernilai d3308cfe4d98c738757b9d654d61e213889a578b).

Teknik Otentikasi Lain dengan Kunci

Selain MAC, slide menyebut tiga cara lain untuk mengotentikasi pesan memakai kunci:

  • (a) Enkripsi konvensional: pengirim menghitung , mengenkripsinya dengan kunci simetri , menempelkan hasilnya pada pesan; penerima menghitung sendiri, mendekripsi bagian yang ditempel dengan , lalu membandingkan keduanya.
  • (b) Enkripsi kunci publik: sama, tetapi digest dienkripsi dengan kunci privat pengirim dan didekripsi dengan kunci publik (ini cikal bakal tanda tangan digital).
  • (c) Nilai rahasia : pengirim menghitung (pesan disambung nilai rahasia yang disepakati) dan mengirim bersama hash itu, tanpa mengirim ; penerima menyambung dengan miliknya, menghitung hash, lalu membandingkan.

Summary

MAC dapat dibangun dari block cipher atau fungsi hash. MAC berbasis block cipher memakai mode CBC/CFB dan mengambil blok cipherteks terakhir sebagai MAC (DAA = DES-CBC; MAC 64 bit, kunci 56 bit). MAC berbasis hash menyambung pesan dengan kunci, , dengan panjang sesuai hash (SHA-1: 160 bit). HMAC-x (RFC 2104) adalah konstruksi yang lebih aman: dengan ipad = 0x36 dan opad = 0x5C. Teknik otentikasi berkunci lain: hash + enkripsi simetri, kunci publik, dan nilai rahasia .