• Tidak ada hasil yang ditemukan

LANDASAN TEOR

2.6 Fungsi Hash

Fungsi hash merupakan fungsi yang menerima masukan string yang panjangnya sembarang kemudian mentransformasikannya menjadi string keluaran yang panjangnya tetap (fixed). Umumnya berukuran jauh lebih kecil daripada ukuran string semula. Fungsi hash (dilambangkan dengan h(k)) bertugas untuk mengubah k (key) menjadi suatu nilai dalam interval [0....X], dimana "X" adalah jumlah maksimum dari record-record yang dapat ditampung dalam tabel. Jumlah maksimum ini bergantung pada ruang memori yang tersedia. Fungsi hash yang ideal adalah mudah dihitung dan bersifat acak, agar dapat menyebarkan semua key. Dengan key yang tersebar, berarti data dapat terdistribusi secara seragam tabrakan dapat dicegah. Sehingga kompleksitas waktu model hash dapat mencapai Θ(1), dimana kompleksitas tersebut tidak ditemukan pada struktur model lain.

Ada dua macam fungsi hash. Pertama adalah fungsi hash tanpa kunci, fungsi hash semacam ini dapat dihitung oleh siapa saja. Kedua adalah fungsi hash dengan kunci, hanya orang yang memiliki kunci saja yang dapat menghitung message digest yang dihasilkan (Menezes et al. 1996).

2.6.1 Fungsi hash SHA-1

SHA-1 merupakan algoritma hash standar yang digunakan pada DSA. Algoritma ini dirancang oleh NIST pada tahun 1993. Algoritma SHA-1 mampu menerima input pesan maksimal 264 bit dan menghasilkan message digest dengan panjang 160 bit. SHA-1 aman karena didesain untuk tidak memungkinkan mendapatkan pesan yang berhubungan dengan message digest, atau untuk menemukan dua pesan yang berbeda yang menghasilkan message digest yang sama (Menezes et. al 1996).

masing panjangnya adalah 512 bit. Akibat pembagian ini maka jumlah bit pada blok terakhir akan lebih kecil atau sama dengan 512 bit. Selanjutnya blok terakhir ini akan mengalami message padding. Proses pembentukan message padding:

1) Input pesan yang masuk dalam bentuk American Standard Code for Information Interchange (ASCII) diubah kedalam rangkaian bit, dan kemudian dihitung panjang rangkaian bit (K).

2) Selanjutnya rangkaian bit ini dibagi menjadi blok-blok dengan panjang masing-masing 512 bit. Blok terakhir panjangnya akan lebih kecil atau sama dengan 512 bit.

3) Pada blok terakhir pesan, dilakukan penambahan bit-bit isian (padding). Bit yang digunakan sebagai bit isian adalah bit “1” diikuti sejumlah bit “0” sehingga:

- Jika panjang blok terakhir pesan lebih kecil dari 448 bit, maka tambahkan bit “1” pada posisi bit paling akhir, diikuti dengan beberapa bit “0” sehingga total panjang bit setelah proses tersebut adalah 448 bit.

- Jika panjang blok terakhir pesan lebih besar atau sama dengan 448 bit, maka tambahkan bit “1” pada posisi bit paling akhir diikuti dengan beberapa bit “0” sehingga total panjang bit setelah proses tersebut adalah 512 bit. Kemudian buat 448 bit baru yang isinya bit “0”.

- Jika panjang blok terakhir pesan sama dengan 512 bit, maka buat blok baru untuk menampung proses message padding. Bit pertama dari blok baru diisi bit “1”, sedangkan bit-bit berikutnya diisi dengan bit “0” sampai dengan panjang bit 448.

Sebagai contoh misalkan isi pesan adalah “abc”, maka ubah pesan tersebut ke dalam kode ASCII-nya, yaitu: a=97, b=98, c=99. Kemudian ubah representasi desimal dari kode ASCII tersebut ke dalam representasi binernya, yaitu: 01100001 | 01100010 | 01100011, panjang pesan asli ini (K) adalah 24 bit. Karena panjang bit pesan asli kurang dari 448 bit, maka dilakukan proses

padding dengan menambahkan “1” pada posisi bit paling akhir, dan tambahkan “0” sehingga panjang total bit setelah proses padding ini adalah 448 bit. 2. Penambahan panjang bit

Setelah proses message padding, jumlah bit blok terakhir adalah 448 bit. Representasikan K ke dalam bilangan biner untuk memperoleh 64 bit terakhir, agar total panjang blok terakhir 512 bit. Urutan bit paling kanan dijadikan low order. Jika K > 264 maka hanya low order dari 64 bit saja yang akan digunakan. Misalkan panjang pesan asli (K) = 24 bit dan direpresentasikan ke dalam bilangan biner 16 bit adalah 00000000 | 00011000. Nilai ini dijadikan 64 bit sehingga: 00000000 | 00000000 | 00000000 | 00000000 | 00000000 | 00000000 | 00000000 | 00011000

Nilai di atas ditambahkan pada langkah (1), sehingga total panjang bit adalah 512 bit. Berdasarkan contoh pada langkah 1 dan 2, didapatkan banyaknya blok pada pesan adalah satu.

3. Inisialisasi buffer

Untuk menyimpan nilai inisialisasi awal digunakan buffer H0, H1, H2, H3, H4, sedangkan untuk menyimpan nilai proses sementara digunakan buffer A, B, C, D, E. Nilai H0, H1, H2, H3, H4 sebagai inisialisasi awal adalah:

H0 = 67 45 23 01 H1 = EF CD AB 89 H2 = 98 BA DC FE H3 = 10 32 54 76 H4 = C3 D2 E1 F0

Nilai inisialisasi awal untuk H0, H1, H2, H3, H4 ini merupakan standar untuk implementasi algoritma SHA-1.

4. Memproses tiap blok (512) bit dari pesan

Langkah ini terdiri dari empat round, masing-masing round terdiri dari 20 operasi sehingga untuk setiap satu blok akan dilakukan operasi sebanyak 80 kali. Berdasarkan contoh sebelumnya (pesan terdiri dari 1 blok), maka operasi dibawah ini akan dilakukan sebanyak 80 kali.

menjadi 80 subblok 32 bit (W0 sampai W79) menggunakan langkah berikut:

Wt = Mt untuk t = 0-15

Wt = ROTL1 (Wt-3 XOR Wt-8 XOR Wt-14 XOR Wt-16) untuk t=16 sampai t=79, dengan ROTLn (x) adalah operasi geser kiri putar melingkar dari x sebanyak n posisi.

- Variable kerja untuk menyimpan nilai hash ke i-l:

A = H0(i-l), B = H1(i-l), C = H2(i-l), D = H3(i-l), E = H4 E = H4(i-l) - Untuk setiap round didefenisikan fungsi ft:

ft(B,C,D) = (B AND C) XOR ((NOT B) AND D), untuk operasi t=0-19

ft(B,C,D) = B XOR C XOR D, untuk operasi t=20-39

ft(B,C,D) = (B AND C) XOR (B AND D) XOR (C AND D), untuk operasi t=40-59

ft(B,C,D) = B XOR C XOR D, untuk operasi t=60-79 - Diperlukan deret konstanta K(0), K(1),…K(79)

Kt = 5A827999, untuk operasi t = 0-19 Kt = 6ED9EBA1, untuk operasi t = 20-39 Kt = 8F1BBCDC, untuk operasi t = 40-59 Kt = CA62C1D6, untuk operasi t = 60-79

Nilai konstanta untuk K(0), K(1),…,K(79) merupakan standar untuk implementasi algoritma SHA-1

- Untuk setiap satu langkah operasi pada SHA-1, t=0 sampai t=79 dilakukan:

TEMP = ROTL5 (A) + ft (A, B, C) + E + Wt + Kt E=D; D=C; C=ROTL30(B); B=A; A=TEMP;

- Hasil akhir adalah: H0 = A + H0(i-l), H1 = B + H1(i-l), H2 = C + H2(i-l), H3 = C + H3(i-l), H4 = D + H4(i-l)

5. Output

Setelah semua blok 512 bit dari pesan selesai diproses maka akan dihasilkan output. Blok terakhir menghasilkan message digest dari pesan yang dimasukkan

yaitu buffer H0, H1, H2, H3, H4. Panjang message digest yang dihasilkan adalah 160 bit dan masing-masing buffer terdiri dari delapan digit heksadesimal.

2.6.2 Fungsi hash SHA-2

Algoritma SHA-2 merupakan pengembangan dari algoritma SHA-1 yang memuat banyak perubahan. Algoritma ini didesain oleh National Security Agency (NSA) of United States dan dipublikasikan pada tahun 2001 oleh NIST sebagai standar bagi pemrosesan informasi federal bagi Amerika Serikat atau yang biasa disebut Federal Information Processing Standard (FIPS).

Algoritma SHA-2 ini terdiri dari beberapa algoritma berdasarkan panjang bit yang digunakan/dihasilkan sebagai nilainya yaitu SHA-224, SHA-256, SHA-384, SHA-512. Algoritma SHA-2 ini menggunakan beberapa operasi dasar dalam teknik kriptografi, yaitu operasi AND, OR, XOR, SHIFT (right), dan ROTATE (right). SHA-2 ini mengacu pada SHA-256.

SHA-256 adalah salah satu algoritma fungsi hash yang relatif masih baru. Algoritma ini dirancang oleh The National Institute of Standards and Technology (NIST) pada tahun 2002. SHA-256 menghasilkan message digest dengan panjang 256 bit.

Dokumen terkait