SHA – Algoritma Kriptografi HASH


Hash atau kadang disebut dengan digest adalah semacam tanda tangan untuk sebuah teks atau file data. Sebagai contoh SHA-1 menghasilkan 160 bit tanda tangan untuk sebuah teks.

Hash bukanlah enkripsi – tidak dapat didekripsi untuk mendapatkan teks asli (ia merupakan sebuah fungsi kriptografi satu arah yang memiliki ukuran panjang tertentu yang diperoleh dari teks sumber dengan panjang yang beragam)

Hash dapat digunakan oleh beberapa aplikasi untuk :

  1. validate a password (memvalidasi password); nilai hash dari password akan disimpan, kemudian ketika password diotentikasi, maka password yang dimasukkan oleh user akan dihitung hashnya dan jika hashnya sesuai maka password dinyatakan valid. Namun untuk mendapatkan password yang asli tidak dapat diperoleh dari hash yang telah disimpan.
  2. Challenge handshake authentication; untuk menghindari kesalahan pengiriman password dalam kondisi “clear”, client dapat mengirim nilai hash sebuah password melalui internet untuk divalidasi oleh server tanpa beresiko disadapnya password yang asli.
  3. anti-tamper ; untuk memastikan data tidak berubah selama ditransmisikan. Penerima akan menghitung nilai hash dan mencocokkan dengan hash yang dikirimkan, apabila nilainya sama berarti data yang dikirimkan tidak berubah.
  4. digital signatures; dilakukan dengan cara mengenkrip nilai hash sebuah dokumen dengan menggunakan private key, sehingga menghasilkan tanda tangan digital untuk dokumen tersebut. Orang lain dapat mengecek otentikasi dokumen tersebut dengan cara mendekrip tanda tangan tersebut menggunakan public key untuk mendapatkan nilai hash yang asli dan membandingkannya dengan nilai hash dari teks.

SHA-1 merupakan algoritma hash yang banyak digunakan dalam SSL (Secure Sockets Layer), PGP (Pretty Good Privacy), XML Signature, dan beberapa aplikasi lainnya.

Berikut merupakan pseudocode SHA-1 :

Initialize variables:

h0 := 0x67452301

h1 := 0xEFCDAB89

h2 := 0x98BADCFE

h3 := 0x10325476

h4 := 0xC3D2E1F0

Pre-processing:

append the bit ‘1’ to the message

append k bits ‘0’, where k is the minimum number >= 0 such that the resulting message

length (in bits) is congruent to 448 (mod 512)

append length of message (before pre-processing), in bits, as 64-bit big-endian integer

Process the message in successive 512-bit chunks:

break message into 512-bit chunks

for each chunk

break chunk into sixteen 32-bit big-endian words w[i], 0 ≤ i ≤ 15

Extend the sixteen 32-bit words into eighty 32-bit words:

for i from 16 to 79

w[i] := (w[i-3] xor w[i-8] xor w[i-14] xor w[i-16]) leftrotate 1

Initialize hash value for this chunk:

a := h0

b := h1

c := h2

d := h3

e := h4

Main loop:

for i from 0 to 79

if 0 ≤ i ≤ 19 then

f := (b and c) or ((not b) and d)

k := 0x5A827999

else if 20 ≤ i ≤ 39

f := b xor c xor d

k := 0x6ED9EBA1

else if 40 ≤ i ≤ 59

f := (b and c) or (b and d) or (c and d)

k := 0x8F1BBCDC

else if 60 ≤ i ≤ 79

f := b xor c xor d

k := 0xCA62C1D6

temp := (a leftrotate 5) + f + e + k + w[i]

e := d

d := c

c := b leftrotate 30

b := a

a := temp

Add this chunk’s hash to result so far:

h0 := h0 + a

h1 := h1 + b

h2 := h2 + c

h3 := h3 + d

h4 := h4 + e

Produce the final hash value (big-endian):

digest = hash = h0 append h1 append h2 append h3 append h4

 

 

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: