Anda di halaman 1dari 19

Fungsi Hash dan Algoritma SHA-256

KEAMANAN KOMPUTER

Disusun oleh:
1. Aditya Gusti Tammam

(14.1.03.03.0052)

2. Dwi Bagus Kurniawan

(14.1.03.03.0019)

3. Hamim Arifunas

(14.1.03.03.0092)

4. Muh. Irfan Aziz

(14.1.03.03.0035)

5. Prista Avinda D.

(14.1.03.03.0017)

6. Rifai Dwi Cahyono

(14.1.03.03.0143)

KELAS : 2A

FAKULTAS TEKNIK
UNIVERSITAS NUSANTARA PGRI KEDIRI
KEDIRI
2016

Daftar Isi
BAB I : Fungsi Hash ............................................................................................. 3
1.1 Pengertian Fungsi Hash ............................................................................ 3
1.2 Sifat-sifat Fungsi Hash............................................................................... 3
1.3 Manfaat Fungsi Hash................................................................................. 3
1.4 Message Integrity ....................................................................................... 4
1.5 Message Fingerprint .................................................................................. 4
1.6 Macam-macam Algoritma Fungsi Hash ................................................. 4
BAB II : Algoritma SHA-256 ............................................................................... 5
2.1 Sejarah SHA-256 ......................................................................................... 5
2.2 Awal Perkembangan SHA-256................................................................. 5
2.3 Dasar Prinsip ............................................................................................... 5
2.4 Cara Kerja .................................................................................................... 6
2.5 Tahapan ....................................................................................................... 6
2.5.1 Contoh Kasus ....................................................................................... 8
2.6 Penerapan .................................................................................................. 14
2.7 Kelebihan dan Kekurangan .................................................................... 17
BAB III : Kesimpulan ......................................................................................... 18
3.1 Kesimpulan ............................................................................................... 18
Daftar Pustaka .................................................................................................... 19

BAB I
FUNGSI HASH
1.1 Pengertian Fungsi Hash
Fungsi hash adalah fungsi yang menerima masukan string yang
panjangnya sembarang dan mengkonversinya menjadi string keluaran yang
panjangnya tetap (fixed). Fungsi hash yang dihasilkan biasanya dituliskan dalam
notasi persamaan sebagai berikut :
= ()
Pada persamaan di atas, h merupakan nilai hash yang dihasilkan, H adalah
fungsi hash itu sendiri, dan M adalah message atau pesan yang akan diubah dan
dikonversikan menjadi nilai hash (hash value) [1].

1.2 Sifat-sifat Fungsi Hash [2]


1. Fungsi H dapat diterapkan pada blok data berukuran berapa saja.
2. H menghasilkan nilai (h) dengan panjang tetap (fixed-length ouput).
3. H(x) mudah dihitung untuk setiap nilai x yang diberikan.
4. Untuk setiap h yang dihasilkan, tidak mungkin dikembalikan nilai x
sedemikian hingga H(x) = h. Itulah sebabnya fungsi H dikatakan fungsi
hash satu-arah (one-way hash function).
5. Untuk setiap x yang diberikan, tidak mungkin mencari y x sedemikian
sehingga H(y) = H(x).
6. Tidak mungkin mencari pasangan x dan y sedemikian sehingga H(x) =
H(y).

1.3 Manfaat Fungsi Hash


Fungsi hash pada dasarnya telah banyak digunakan di dalam kehidupan
sehari-hari dalam berbagai aplikasi seperti autentifikasi password, autentifikasi
keaslian file, tanda tangan digital, dan sebagainya [1].

1.4 Message Integrity


Message Integrity adalah hal yang berkaitan dengan keutuhan pesan [2].
Hal ini juga metode yang memastikan bahwa sebuah pesan tidak rusak dan atau
berubah. Pendekatan paling umum biasanya adalah dengan menggunakan fungsi
hash satu arah yang mengkombinasikan semua byte dalam pesan dengan kunci
rahasia dan membuat pesan ringkas yang tidak mungkin untuk dikembalikan ke
semula [3].

1.5 Message Fingerprint


Message Fingerprint adalah sidik jari digital dari pesan yang terdiri dari
kode, dihitung atas dasar isi pesan, yang dapat dimanfaatkan untuk memeriksa
dan jaminan. Sama seperti sidik jari fisik memastikan bahwa pemiliknya
teridentifikasi secara tegas [4].

1.6 Macam-macam Algoritma Fungsi Hash

MD4

MD5

SHA-0

SHA-1

SHA-256

SHA-512

BAB II
ALGORITMA SHA-256
2.1 Sejarah SHA-256
Pada bulan Agustus 1991, NIST (The National Institute of Standard and
Technology) mengumumkan bakuan (standard) untuk tanda-tangan digital yang
dinamakan Digital Signature Standard (DSS). DSS terdiri dari dua komponen,
yang pertama adalah algoritma tanda-tangan digital yang disebut Digital
Signature Algorithm (DSA), dan yang kedua adalah fungsi hash standard yang
disebut Secure Hash Algorithm (SHA) [5].
SHA adalah fungsi hash satu-arah yang dibuat oleh NIST dan digunakan
bersama DSS (Digital Signature Standard). Oleh NSA, SHA dinyatakan sebagai
standard fungsi hash satu-arah. SHA didasarkan pada MD4 yang dibuat oleh
Ronald L. Rivest dari MIT [5].
Ada beberapa varian SHA disini, dan salah satunya adalah SHA-256 yang
akan dibahas lebih mendalam pada bab ini.

2.2 Awal Perkembangan SHA-256


Awal terbentuknya SHA-256 dimulai dari sejarah algoritma SHA, dimana
hingga saat ini ada lima algoritma SHA yaitu SHA-0, SHA-1, SHA-224, SHA256, SHA-256, SHA-384, dan SHA-512. Varian SHA-0 dikenal dengan SHA-0
pada tahun 1991, varian SHA-1 dikenal dengan SHA-1 pada tahun 1993, varian
SHA-224, SHA-256, SHA-384, dan SHA-512 dikenal dengan SHA-2 pada tahun
2000 [6] [7]. Dari seitulah SHA-256 muncul yang merupakan pecahan dari SHA2 yang mempunyai varian di dalamnya antara lain : varian SHA-224, SHA-256,
SHA-384, dan SHA-512.

2.3 Dasar Prinsip


Algoritma SHA-256 dapat digunakan untuk menghitung nilai message
digest dari sebuah pesan, dimana pesan tersebut memiliki panjang maksimum 264
bit. Algoritma ini menggunakan sebuah message schedule yang terdiri dari 64

element 32-bit word, delapan buah variabel 32-bit, dan variabel penyimpan nilai
hash 8 buah word 32-bit. Hasil akhir dari algoritma SHA-256 adalah sebuah
message digest sepanjang 256-bit [8].

2.4 Cara Kerja


SHA-256 mengubah pesan masukan ke dalam message digest 256 bit.
Berdasarkan Secure Hash Signature Standard, pesan masukan yang panjangnya
lebih pendek dari 264 bit, harus dioperasikan oleh 512 bit dalam kelompok dan
menjadi sebuah message diggest 256-bit [9].

2.5 Tahapan [9]


1. Message Padding : Pada tahap pertama, pesan yang berupa binary
disisipkan dengan angka 1 dan ditambahkan bit-bit pengganjal yakni
angka 0 hingga panjang pesan tersebut kongruen dengan 448 modulo 512.
Panjang pesan yang asli kemudian ditambahkan sebagai angka biner 64
bit. Setelah itu maka panjang pesan sekarang menjadi kelipatan 512 bit.
2. Parsing : Pesan yang sudah dipadding tadi kemudian dibagi menjadi N
buah blok 512 bit : M(1), M(2), ..., M(N).
3. Message Expansion : Masing-masing blok 512-bit tadi lalu dipecah
menjadi 16 buat word 32-bit : M0(i), M1(i), ..., M15(i) yang mana nantinya
diperluas menjadi 64 word yang diberi label W0, W1, ..., W63 dengan
aturan tertentu yang sudah ditentukan sebelumnya oleh standar SHA-2.
4. Message Compression : Masing-masing dari 64 word yang diberi label
W0, W1, ..., W63 tadi kemudian diproses dengan algoritma fungsi hash
SHA-256. Dalam proses tersebut, inti utama dari algoritma SHA-256
adalah membuat 8 variabel yang diberikan nilai untuk nilai awal dari H0(0)H7(0) di awal masing-masing fungsi hash. Nilai-nilai awal tersebut adalah
sebagai berikut :

5. Algoritma ini melakukan perhitungan sebanyak 64 kali putaran untuk


setiap perhitungan blok. Delapan variabel yang diberi label A, B, C, ..., H
tadi nilainya terus berganti selama perputaran sebanyak 64 kali putaran
sebagai berikut :

6. Setelah perputaran sebanyak 64 kali tadi, nilai hash H(i) kemudian dihitung
sebagai berikut :

7. Selanjutnya hasil akhir SHA-256 didapat dari penggabungan delapan


variabel yang tadi sudah dikomputasi.

2.5.1 Contoh Kasus


Berikut ini terdapat contoh kasus yaitu dengan membuat perhitungan
SHA-256 dari sebuah pesan asli yang berisi abc. Beriku ini tahap demi tahap
penyelesaiannya.

Kita asumsikan bahwa pesan asli disimpan dalam sebuah variabel M.


Maka M = abc.

Konversikan isi variabel M ke dalam bentuk binary sehingga akan menjadi


M = 011000010110001001100011.

Lakukan padding dengan langkah pertama menambahkan bit 1 pada


pesan asli sehingga akan menjadi M = 0110000101100010011000111.

Selanjutnya tambahkan bit 0 sebanyak nilai k, dimana k didapat dari


perhitungan rumus l + 1 + k 448 mod 512. Maka dalam contoh kasus
ini, nilai k = 423. Sehingga pesan yang sudah dipadding akan menjadi
seperti berikut :
01100001 01100010 01100011 10000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

Selanjutnya tambahkan lagi panjang pesan asli dalam bentuk biner 64 bit.
Panjang pesan M adalah 24 bit, dalam bentuk biner adalah 00011000.
Maka pesan yang dipadding akan menjadi seperti berikut ini :
01100001 01100010 01100011 10000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00011000

Kemudian pesan diparsing menjadi 16 buat word 32-bit untuk masingmasing blok pesan M. Sehingga menjadi seperti ini :

Langkah selanjutnya adalah set initial hash value, yakni nilai awal dari
hash.

Selanjutnya menyiapkan message schedule dari 16 buah word hasil


parsing tadi menggunakan rumus berikut :

Kemudian siapkan 8 working variabel yang nilainya diambil dari initial


hash value tadi.

10

Siapkan juga koefisien SHA-256 yang sudah ditetapkan pada standar


SHA-2. Ke-64 koefesien tersebut adalah sebagai berikut ini yang dibaca
urut dari kiri ke kanan :

Kini yang dibutuhkan dalam komputasi SHA-256 sudah siap semua,


saatnya melakukan komputasi SHA-256 dengan menggunakan rumus
berikut :

11

Hasil dari perhitungan setiap iterasinya akan menjadi seperti ini [10] :

12

Hasil dari iterasi terakhir nanti kemudian dijumlah dengan initial hash
valuenya tadi. Sehingga akan menghasilkan sebagai berikut :

13

Hasil penjumlahan antara iterasi terakhir dengan initial hash valuenya


inilah yang nantinya digabungkan dan menjadi hasil akhir dari SHA-256
dan terbentuklah sebuah message digest dari pesan M yang berisi abc.

Maka

nilai

hash

dari

pesan

adalah

ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.

2.6 Penerapan
Berikut ini adalah penerapan SHA-256 pada bahasa pemrograman Python
[11] :
#!/usr/bin/python
__author__ = 'Thomas Dixon'
__license__ = 'MIT'
import copy, struct, sys
def new(m=None):
return sha256(m)
class sha256(object):
_k = (0x428a2f98L,
0x3956c25bL,
0xd807aa98L,
0x72be5d74L,
0xe49b69c1L,
0x2de92c6fL,
0x983e5152L,
0xc6e00bf3L,
0x27b70a85L,
0x650a7354L,
0xa2bfe8a1L,
0xd192e819L,
0x19a4c116L,
0x391c0cb3L,
0x748f82eeL,
0x90befffaL,
_h = (0x6a09e667L,
0x510e527fL,
_output_size = 8

0x71374491L,
0x59f111f1L,
0x12835b01L,
0x80deb1feL,
0xefbe4786L,
0x4a7484aaL,
0xa831c66dL,
0xd5a79147L,
0x2e1b2138L,
0x766a0abbL,
0xa81a664bL,
0xd6990624L,
0x1e376c08L,
0x4ed8aa4aL,
0x78a5636fL,
0xa4506cebL,
0xbb67ae85L,
0x9b05688cL,

0xb5c0fbcfL,
0x923f82a4L,
0x243185beL,
0x9bdc06a7L,
0x0fc19dc6L,
0x5cb0a9dcL,
0xb00327c8L,
0x06ca6351L,
0x4d2c6dfcL,
0x81c2c92eL,
0xc24b8b70L,
0xf40e3585L,
0x2748774cL,
0x5b9cca4fL,
0x84c87814L,
0xbef9a3f7L,
0x3c6ef372L,
0x1f83d9abL,

0xe9b5dba5L,
0xab1c5ed5L,
0x550c7dc3L,
0xc19bf174L,
0x240ca1ccL,
0x76f988daL,
0xbf597fc7L,
0x14292967L,
0x53380d13L,
0x92722c85L,
0xc76c51a3L,
0x106aa070L,
0x34b0bcb5L,
0x682e6ff3L,
0x8cc70208L,
0xc67178f2L)
0xa54ff53aL,
0x5be0cd19L)

blocksize = 1
block_size = 64
digest_size = 32
def __init__(self, m=None):
self._buffer = ''
self._counter = 0

14

if m is not None:
if type(m) is not str:
raise TypeError, '%s() argument 1 must be string,
not %s' % (self.__class__.__name__, type(m).__name__)
self.update(m)
def _rotr(self, x, y):
return ((x >> y) | (x << (32-y))) & 0xFFFFFFFFL
def _sha256_process(self, c):
w = [0]*64
w[0:16] = struct.unpack('!16L', c)
for i in
s0 =
(w[i-15] >> 3)
s1 =
(w[i-2] >> 10)
w[i]

range(16, 64):
self._rotr(w[i-15], 7) ^ self._rotr(w[i-15], 18) ^
self._rotr(w[i-2], 17) ^ self._rotr(w[i-2], 19) ^
= (w[i-16] + s0 + w[i-7] + s1) & 0xFFFFFFFFL

a,b,c,d,e,f,g,h = self._h
for i in range(64):
s0 = self._rotr(a, 2) ^ self._rotr(a, 13) ^
self._rotr(a, 22)
maj = (a & b) ^ (a & c) ^ (b & c)
t2 = s0 + maj
s1 = self._rotr(e, 6) ^ self._rotr(e, 11) ^
self._rotr(e, 25)
ch = (e & f) ^ ((~e) & g)
t1 = h + s1 + ch + self._k[i] + w[i]
h
g
f
e
d
c
b
a

=
=
=
=
=
=
=
=

g
f
e
(d + t1) & 0xFFFFFFFFL
c
b
a
(t1 + t2) & 0xFFFFFFFFL

self._h = [(x+y) & 0xFFFFFFFFL for x,y in zip(self._h,


[a,b,c,d,e,f,g,h])]
def update(self, m):
if not m:
return
if type(m) is not str:
raise TypeError, '%s() argument 1 must be string, not
%s' % (sys._getframe().f_code.co_name, type(m).__name__)
self._buffer += m
self._counter += len(m)
while len(self._buffer) >= 64:
self._sha256_process(self._buffer[:64])
self._buffer = self._buffer[64:]

15

def digest(self):
mdi = self._counter & 0x3F
length = struct.pack('!Q', self._counter<<3)
if mdi < 56:
padlen = 55-mdi
else:
padlen = 119-mdi
r = self.copy()
r.update('\x80'+('\x00'*padlen)+length)
return ''.join([struct.pack('!L', i) for i in
r._h[:self._output_size]])
def hexdigest(self):
return self.digest().encode('hex')
def copy(self):
return copy.deepcopy(self)

Melalui script diatas kita dapat membuktikan perhitungan pada contoh


kasus diatas hasilnya telah sesuai dengan ekspektasi :

Nilai hash dari abc yang dihitung melalui script python diatas
hasilnya
ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad

16

2.7 Kelebihan dan Kekurangan


Untuk mengetahui kelebihan dan kekurangan suatu objek maka diperlukan
objek pembanding lainnya. Disini MD5 akan dijadikan sebagai pembanding SHA256. Perbandingan didasarkan atas 4 parameter yaitu : Ketahanan terhadap
serangan brute force, ketahanan terhadap serangan kripanalisis, kecepatan
komputasi, dan juga kemudahan implementasi. Hasil perbandingan tersebut dapat
dilihat melalui tabel berikut ini [12] :
Parameter
Ketahanan
terhadapa
brute
force
attack
Kerentanan
terhadap
serangan
cryptanalysis
Kecepatan
komputasi
Kemudahan
Implementasi
Total Skor

SHA-256
Message digest dengan
panjang 256 bit diyakini
mampu
menahan
serangan
brute-force
lebih kuat
Tidak Rentan

Skor
1

MD5
Message digest dengan
panjang
128
bit
cenderung lebih mudah
diserang brute force

Skor
0

Rentan

Lebih lambat

Lebih cepat

Mudah

Mudah

Tampak pada tabel diatas bahwa SHA-256 lebih unggul dari MD5.

17

BAB III
KESIMPULAN
3.1 Kesimpulan

Fungsi hash memiliki algoritma yang iterative dan searah, yang dapat
memproses pesan yang diberikan untuk menghasilkan representasi yang
lebih pendek yang disebut message digest.

Fungsi hash dapat digunakan untuk berbagai kebutuhan yang berkaitan


dengan autentifikasi dan tanda tangan digital.

Fungsi hash haruslah tidak memungkinkan


mengembalikan nilai hash menjadi pesan semula.

Secara umum tahapan SHA-256 terdiri dari Preprocessing dan Hash


Computation.

Algoritma SHA-256 menghasilkan pesan ringkas dengan panjang 256-bit.

Algoritma SHA-256 termasuk dalam algoritma satu-arah yang cukup kuat


dan aman dibanding dengan algoritma-algoritma sebelumnya.

Belum ditemukan collision pada SHA-256.

seseorang

untuk

18

Daftar Pustaka
[1] Angga, Christian. 2011. Analisis Cara Kerja Beragam Fungsi Hash yang Ada.
Bandung: Institut Teknologi Bandung.
[2] Munir, Rinaldi. 2004. Fungsi Hash Satu-Arah dan Algoritma MD5. Bandung:
Institut Teknologi Bandung.
[3] PC Magazine Encyclopedia. Definition of : Message Integrity. Didapat dari :
http://www.pcmag.com/encyclopedia/term/46823/message-integrity.
Diakses pada : 18 April 2016.
[4] Ferilli, Stefano. 2011. Automatic Digital Document Processing and
Management : Problems, Algorithms, and Techniques. London: Springer.
[5] Munir, Rinaldi. 2004. Digital Signature Standard (DSS). Bandung: Institut
Teknologi Bandung.
[6] Insani, Agus Yoga. 2008. Proteksi Akses File Executable Menggunakan
Sistem Keamanan Teknologi USB Flash Disk. Bandung: Universitas
Komputer Indonesia.
[7] Rodriguez-Henriquez, Francisco. 2006. Cryptographic Algorithms on
Reconfigurable Hardware. New York: Springer.
[8] Sebastian, Amudi. 2007. Implementasi dan Perbandingan Performa Algoritma
Hash SHA-1, SHA-256, dan SHA-512. Bandung: Institut Teknologi
Bandung.
[9] Mankar, R.V dan Nipanikar, S. I. 2013. C Implementation of SHA-256
Algorithm. Pune: Pune University.
[10] Anonim. Descriptions of SHA-256, SHA-384, and SHA-512. Didapat dari :
http://www.iwar.org.uk/comsec/resources/cipher/sha256-384-512.pdf.
Diakses pada 19 April 2016.
[11]

Dixon,
Thomas.
PySHA2.
Didapat
dari
https://github.com/thomdixon/pysha2. Diakses pada : 19 April 2016.

[12] Lee, Chang-Hsing. Applied Cryptography Chapter 9. Didapat dari :


http://people.chu.edu.tw/~chlee/Crypto/Crypto9_1p.pdf. Diakses pada :
19 April 2016.

19

Anda mungkin juga menyukai