Anda di halaman 1dari 3

SHA (Secure Hash Algorithm)

A. Pendahuluan
Hash atau hasing adalah proses keamanan suatu data dengan merubah menjadi
data lain dengan panjang tertentu. SHA (Secure Hash Algorithm) adalah algoritma yang
dispesifikasikan dalam Secure Hash Standard (SHS) oleh FIPS 180 (Federal Information
Processing Standard). SHA dikembangkan pertama kali oleh NIST (National Institute of
Standards and Technology). Fungsi hash SHA (Secure Hash Algorithm), antara lain
SHA-1, SHA-224, SHA-256, SHA-384 dan SHA-512 adalah lima fungsi hash
kriptografi yang dibuat oleh National Security Agency (NSA) dan dinyatakan sebagai
standar keamananan pemerintah USA.
Tabel 1 Beberapa fungsi hash
Algoritma

Ukuran message digest (bit)

Ukuran blok pesan

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/384

1024

Tidak

WHIRLPOOL

512

512

Tidak

Keluarga SHA yang paling banyak digunakan adalah SHA-1. SHA-1


memetakan inputan string dengan panjang sembarang menjadi suatu nilai hash dengan
panjang tetap yaitu 160 bit. Ukuran internal state pada SHA-1 adalah 160 bit, sedangkan
ukuran bloknya adalah 64 bytes. SHA-1 merupakan hasil rekonstruksi dari MD4 dan

memperbaiki kekurangann yang ada di MD4 itu sendiri. SHA-1 merupakan algoritma
hash yang banyak diaplikasikan dalam keamanan protokol menggunakan SSL (Secure
Sockets Layer), PGP (Pretty Good Privacy), XML Signature, dan beberapa aplikasi
lainnya.
B. Contoh Fungsi SHA-1
Temukan nilai SHA-1 dari plain text: tes1
1.
2.
3.

4.

5.

6.

Pesan: tes1
Konversi setiap 4 byte kedalam word:
tes1 ---> 74657331
Mengolah final bits, menambahkan padding bit 1 kemudian sisanya bit 0
Panjang pesan = 4
Panjang Pesan % 4 = 0, Karena panjang teks adalah kelipatan 4 (4 byte padding) --> 80000000
Konstanta awal:
H0 = 0x67452301
H1 = 0xEFCDAB89
H2 = 0x98BADCFE
H3 = 0x10325476H4 = 0xC3D2E1F0
Menambahkan padding bit ke 448 bit ((mod 512 bit) = 14 word (mod 16 word) dalam decimal
1952805681,2147483648
1952805681,2147483648,0
1952805681,2147483648,0,0
1952805681,2147483648,0,0,0
1952805681,2147483648,0,0,0,0
1952805681,2147483648,0,0,0,0,0
1952805681,2147483648,0,0,0,0,0,0
1952805681,2147483648,0,0,0,0,0,0,0
1952805681,2147483648,0,0,0,0,0,0,0,0
1952805681,2147483648,0,0,0,0,0,0,0,0,0
1952805681,2147483648,0,0,0,0,0,0,0,0,0,0
1952805681,2147483648,0,0,0,0,0,0,0,0,0,0,0
1952805681,2147483648,0,0,0,0,0,0,0,0,0,0,0,0
1952805681,2147483648,0,0,0,0,0,0,0,0,0,0,0,0,0
1952805681,2147483648,0,0,0,0,0,0,0,0,0,0,0,0,0,32
Masukkan setiap nilainya kedalam array,konversi kembali jadi hexa:
psn[0]=74657331
psn[1]=80000000
psn[2]=00000000
psn[3]=00000000
psn[4]=00000000
psn[5]=00000000
psn[6]=00000000
psn[7]=00000000
psn[8]=00000000
psn[9]=00000000
psn[10]=00000000
psn[11]=00000000
psn[12]=00000000
psn[13]=00000000
psn[14]=00000000
psn[15]=00000020
Process setiap blok 16-word
Permulaan blok pada word 0
Membuat entry dalam array W:
Untuk i = 16 sampai 79, W[i] = rotate_left(W[i-3] ^ W[i-8] ^ W[i-14] ^ W[i-16], 1), fungsi rotate_left = ( n<<s ) | (n>>>(32-s))
W[0]=74657331
W[1]=80000000
W[2]=00000000
|
W[79]=a9e956e8

7.

8.

Untuk A = H0, B = H1, C = H2, D = H3, E = H4,


Nilai round awal:
A=67452301 B=efcdab89 C=98badcfe D=10325476 E=c3d2e1f0
Update variabel state dari index i = 0 sampai i = 19, lakukan pergeseran nilai sbb:
E=D
D=C
C = (B<<30 ) | (B>>>(32-30))
B=A
A = (((A<<5 ) | (A>>>(32-5))) + ((B&C) | (~B&D)) + E + W[i] + 0x5A827999) & 0x0ffffffff
i=0 A=141a0be4 B=67452301 C=7bf36ae2 D=98badcfe E=10325476
i=1 A=69f2498f B=141a0be4 C=59d148c0 D=7bf36ae2 E=98badcfe
|
i=19 A=b6d852ea B=41a5b116 C=fe2c74e6 D=257eb18b E=1eadbf8e
Update variabel state dari index i = 20 sampai i = 39, lakukan pergeseran nilai sbb:
E=D
D=C
C = (B<<30 ) | (B>>>(32-30))
B=A
A = (((A<<5 ) | (A>>>(32-5))) + (B ^ C ^ D) + E + W[i] + 0x6ED9EBA1) & 0x0ffffffff
i=20 A=03897d02 B=b6d852ea C=90696c45 D=fe2c74e6 E=257eb18b
|
i=39 A=ffd15081 B=580e4210 C=067efe31 D=66ed8f46 E=6d423135
Update variabel state dari index i = 40 sampai i = 59, lakukan pergeseran nilai sbb:
E=D
D=C
C = (B<<30 ) | (B>>>(32-30))
B=A
A = (((A<<5 ) | (A>>>(32-5))) + ((B&C) | (B&D) | (C&D)) + E + W[i] + 0x8F1BBCDC) & 0x0ffffffff
i=40 A=c9a81e5f B=ffd15081 C=16039084 D=067efe31 E=66ed8f46
|
i=59 A=8e9603c2 B=234e53d2 C=4021fa25 D=70e8b476 E=ede37a0f
Update variabel state dari index i = 60 sampai i = 79, lakukan pergeseran nilai sbb:
E=D
D=C
C = (B<<30 ) | (B>>>(32-30))
B=A
A = (((A<<5 ) | (A>>>(32-5))) + (B ^ C ^ D) + E + W[i] + 0xCA62C1D6) & 0x0ffffffff;
i=60 A=b900a9bd B=8e9603c2 C=88d394f4 D=4021fa25 E=70e8b476
|
i=79 A=b4590a3b B=293dc875 C=c73f819c D=9cda41d6 E=791c30e1
H0 = (H0 + A) & 0x0ffffffff; = 463351100, Konversi ke hex --> 1b9e2d3c
H1 = (H1 + B) & 0x0ffffffff; = 420180990, Konversi ke hex --> 190b73fe
H2 = (H2 + C) & 0x0ffffffff; = 1610243738, Konversi ke hex --> 5ffa5e9a
H3 = (H3 + D) & 0x0ffffffff; = -1391684020, Konversi ke hex --> ad0c964c
H4 = (H4 + E) & 0x0ffffffff; = 1022300881, Konversi ke hex --> 3cef12d1

Nilai SHA-1 Hash dari tes1 = H0 + H1 + H2 + H3 + H4 =


1b9e2d3c190b73fe5ffa5e9aad0c964c3cef12d1

C. Pustaka:
Kaufman, C., Perlman, R., and Speciner, M., 2002, Network Security: Private
Communication in a Public World (2nd Edition), Prentice Hall: USA
Munir, R. 2006. Kriptografi. Informatika, Bandung
Maryanto, Budi. 2008. Penggunaan Fungsi Hash Satu Arah Untuk Enkripsi Data. Jurnal
Informatika, STMIK LIKMI, Bandung

Anda mungkin juga menyukai