Back to IF4020 Kriptografi

SHA-1 dan Konstruksi Merkle-Damgard

Questions/Cues

  • Apa itu SHA dan siapa yang menetapkannya sebagai standar?
  • Apa saja empat langkah pembuatan message digest SHA-1?
  • Bagaimana padding dan penambahan panjang pesan dilakukan?
  • Apa isi buffer awal dan bagaimana operasi pada tiap putaran dari 80 putaran?
  • Bagaimana SHA-1 dipecahkan (kolisi SHAttered 2017)?

Reference Points

  • IF4020 Kriptografi — Beberapa Fungsi Hash (Slides 2-19)

Secure Hash Algorithm (SHA)

SHA adalah fungsi hash satu-arah yang dipakai satu paket dengan DSS (Digital Signature Standard); NIST menetapkannya sebagai standar. SHA dikembangkan dari MD4 karya Ronald L. Rivest (MIT). SHA menerima masukan maksimum bit (2.147.483.648 gigabyte) dan menghasilkan digest 160 bit (lebih panjang dari MD5, 128 bit).

Keluarga SHA memiliki enam varian: SHA-0, SHA-1, SHA-224, SHA-256, SHA-384, SHA-512 (SHA-0 sering diacu sebagai “SHA” saja). Detailnya ada di RFC 3174. Kerangka umum fungsi hash iteratif seperti ini disebut konstruksi Merkle-Damgård:

Parameter Keluarga SHA

Tabel pada slide 5-6 membandingkan parameter tiap varian (semua ukuran dalam bit):

SHA-1SHA-224SHA-256SHA-384SHA-512
Ukuran digest160224256384512
Internal state160256256512512
Ukuran blok51251251210241024
Ukuran pesan maksimum
Ukuran word3232326464
Jumlah putaran8064648080
Operasi, and, or, xor, rot, and, or, xor, shr, rotidemidemidem
Kolisi ditemukan?YaTidakTidakTidakTidak

SHA-0 juga tercantum dengan kolisi Ya. SHA-224/256 dan SHA-384/512 dikelompokkan sebagai SHA-2.

Empat Langkah SHA-1

Arsitektur SHA-1 mirip MD5, hanya berbeda pada jumlah variabel buffer (5) dan komputasi di tiap blok 512 bit.

1. Padding. Pesan ditambah bit pengganjal sehingga panjangnya . Panjang pengganjal 1 sampai 512 bit: satu bit 1 diikuti bit 0. Contoh: bit; , dan ✓ (192 bit pengganjal).

2. Tambah panjang pesan. Tambahkan 64 bit yang menyatakan panjang pesan semula. Contoh: ditulis sebagai 64 bit (nol di kiri). Kini panjang total kelipatan 512 bit.

3. Inisialisasi buffer MD. Lima variabel 32 bit ( bit):

ABCDE
67452301EFCDAB8998BADCFE10325476C3D2E1F0

4. Pemrosesan blok 512 bit. Tiap blok melalui 80 putaran, memakai konstanta penambah :

Putaran
0-195A827999
20-396ED9EBA1
40-598F1BBCDC
60-79CA62C1D6

Operasi dasar tiap putaran (CLS = circular left shift bit, = penjumlahan mod ):

e <- d
d <- c
c <- CLS30(b)
b <- a
a <- CLS5(a) + f_t(b, c, d) + e + W_t + K_t

berasal dari 16 word (32 bit) pada blok yang diproses; berikutnya diperoleh dari (pada standar SHA-1, hasilnya diputar kiri 1 bit, CLS). Setelah 80 putaran, hasil dijumlahkan ke buffer sebelumnya sebagai input blok berikutnya; digest akhir = gabungan A, B, C, D, E (160 bit).

Contoh digest SHA-1: sha1("halo") = 33b1eac210971fb02a3b90afce9dbff758be794d; sha1("The quick brown fox jumps over the lazy dog") = 2fd4e1c67a2d28fced849ee1bb76e7391b93eb12.

Tambahan dari slide:

  • Gambar slide 12: setelah 80 putaran, keluaran dijumlahkan (per word, modulo ) dengan nilai (buffer sebelum blok itu) menghasilkan ; inilah masukan blok berikutnya. Setelah blok terakhir, menjadi digest 160 bit.

  • Demo daring (slide 14-15): alat emn178.github.io/online-tools/sha1.html menghitung SHA-1 untuk masukan UTF-8 Libur lebaran sudah usai, yuk kuliah lagi gaesss... menjadi f0ff7687efc93dc9e49ee36ccbec8e8b3e7893a3 (kuverifikasi dengan hashlib). Situs sha1-online.com juga menyediakan fungsi hash lain, mis. GOST (fungsi hash standar Rusia) untuk Balik kampung hari raya ini kah?.

  • Catatan: nilai sha1("halo, apa kabar teman?") pada slide, 03d17abd2962dbed1037d1230f012037cd25fe91, cocok bila kalimatnya ditulis tanpa spasi di akhir; satu spasi tambahan menghasilkan digest yang sama sekali berbeda (contoh efek longsor).

Kriptanalisis SHA-1

Pada 23 Februari 2017 kolisi pertama SHA-1 diumumkan (Google dan CWI, serangan SHAttered): dua berkas PDF berbeda (shattered-1.pdf dan shattered-2.pdf) memiliki SHA-1 yang sama. Rizki Wicaksono (alumni Informatika ITB angkatan 1999) juga mendemonstrasikan pembuatan dua berkas berbeda berdigest SHA-1 sama. Dengan itu SHA-1 dianggap tidak aman untuk tanda tangan digital dan sertifikat.

Rincian dari slide 17-19:

  • Pengumuman dan analisis: blog keamanan Google (Announcing the first SHA1 collision, 23 Februari 2017) dan shattered.io. Tim: Marc Stevens dan Pierre Karpman (CWI) bersama Elie Bursztein, Ange Albertini, dan Yarik Markov (Google).
  • Bukti: kedua berkas shattered-1.pdf dan shattered-2.pdf (isi berbeda) dimasukkan ke alat SHA1 File Checksum, dan keduanya menghasilkan SHA-1 yang sama, 38762cf7f55934b34d179ae6a4c80cadccbb7f0a.
  • Rizki Wicaksono menulis panduannya pada 21 Maret 2017 di ilmuhacking.com dengan judul “Membuat file dengan SHA1 collision”: sejumlah ilmuwan dengan dukungan komputasi Google menciptakan dua file PDF dengan SHA1 identik walaupun isinya berbeda.

Summary

SHA adalah fungsi hash satu-arah standar NIST (paket DSS), dikembangkan dari MD4, menerima masukan hingga bit dan menghasilkan digest 160 bit. SHA-1 bekerja dengan konstruksi Merkle-Damgård dalam empat langkah: (1) padding (bit 1 lalu 0) hingga panjang , (2) tambah 64 bit panjang pesan, (3) inisialisasi 5 buffer 32-bit ( = 67452301, …, = C3D2E1F0), (4) proses blok 512 bit dalam 80 putaran dengan dan fungsi logika yang berganti tiap 20 putaran: . Pada 2017, kolisi pertama SHA-1 (SHAttered) diumumkan sehingga SHA-1 tidak lagi aman.