fungsi hash & algoritma sha-256

19
Fungsi Hash dan Algoritma SHA-256 KEAMANAN KOMPUTER Disusun oleh: KELAS : 2A FAKULTAS TEKNIK UNIVERSITAS NUSANTARA PGRI KEDIRI KEDIRI 2016 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. Rifa’i Dwi Cahyono (14.1.03.03.0143)

Upload: gusti-tammam

Post on 02-Aug-2016

257 views

Category:

Documents


12 download

DESCRIPTION

Makalah ini merupakan tugas kelompok dari mata kuliah "Keamanan Komputer". Di dalamnya dibahas mengenai apa pengertian dari fungsi hash, bagaimana sifat-sifat dan apa saja manfaatnya. Kemudian dilanjutkan dengan membahas lebih dalam mengenai salah satu fungsi hash yaitu SHA-256.

TRANSCRIPT

Page 1: Fungsi Hash & Algoritma SHA-256

Fungsi Hash dan Algoritma SHA-256

KEAMANAN KOMPUTER

Disusun oleh:

KELAS : 2A

FAKULTAS TEKNIK

UNIVERSITAS NUSANTARA PGRI KEDIRI

KEDIRI

2016

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. Rifa’i Dwi Cahyono (14.1.03.03.0143)

Page 2: Fungsi Hash & Algoritma SHA-256

2

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

Page 3: Fungsi Hash & Algoritma SHA-256

3

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].

Page 4: Fungsi Hash & Algoritma SHA-256

4

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

Page 5: Fungsi Hash & Algoritma SHA-256

5

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, SHA-

256, 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 SHA-

2 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

Page 6: Fungsi Hash & Algoritma SHA-256

6

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 :

Page 7: Fungsi Hash & Algoritma SHA-256

7

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 :

Page 8: Fungsi Hash & Algoritma SHA-256

8

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.

Page 9: Fungsi Hash & Algoritma SHA-256

9

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 :

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 :

Kemudian pesan diparsing menjadi 16 buat word 32-bit untuk masing-

masing blok pesan M. Sehingga menjadi seperti 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

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

Page 10: Fungsi Hash & Algoritma SHA-256

10

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.

Page 11: Fungsi Hash & Algoritma SHA-256

11

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 :

Page 12: Fungsi Hash & Algoritma SHA-256

12

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

Page 13: Fungsi Hash & Algoritma SHA-256

13

Hasil dari iterasi terakhir nanti kemudian dijumlah dengan initial hash

valuenya tadi. Sehingga akan menghasilkan sebagai berikut :

Page 14: Fungsi Hash & Algoritma SHA-256

14

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 M 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, 0x71374491L, 0xb5c0fbcfL, 0xe9b5dba5L,

0x3956c25bL, 0x59f111f1L, 0x923f82a4L, 0xab1c5ed5L,

0xd807aa98L, 0x12835b01L, 0x243185beL, 0x550c7dc3L,

0x72be5d74L, 0x80deb1feL, 0x9bdc06a7L, 0xc19bf174L,

0xe49b69c1L, 0xefbe4786L, 0x0fc19dc6L, 0x240ca1ccL,

0x2de92c6fL, 0x4a7484aaL, 0x5cb0a9dcL, 0x76f988daL,

0x983e5152L, 0xa831c66dL, 0xb00327c8L, 0xbf597fc7L,

0xc6e00bf3L, 0xd5a79147L, 0x06ca6351L, 0x14292967L,

0x27b70a85L, 0x2e1b2138L, 0x4d2c6dfcL, 0x53380d13L,

0x650a7354L, 0x766a0abbL, 0x81c2c92eL, 0x92722c85L,

0xa2bfe8a1L, 0xa81a664bL, 0xc24b8b70L, 0xc76c51a3L,

0xd192e819L, 0xd6990624L, 0xf40e3585L, 0x106aa070L,

0x19a4c116L, 0x1e376c08L, 0x2748774cL, 0x34b0bcb5L,

0x391c0cb3L, 0x4ed8aa4aL, 0x5b9cca4fL, 0x682e6ff3L,

0x748f82eeL, 0x78a5636fL, 0x84c87814L, 0x8cc70208L,

0x90befffaL, 0xa4506cebL, 0xbef9a3f7L, 0xc67178f2L)

_h = (0x6a09e667L, 0xbb67ae85L, 0x3c6ef372L, 0xa54ff53aL,

0x510e527fL, 0x9b05688cL, 0x1f83d9abL, 0x5be0cd19L)

_output_size = 8

blocksize = 1

block_size = 64

digest_size = 32

def __init__(self, m=None):

self._buffer = ''

self._counter = 0

Page 15: Fungsi Hash & Algoritma SHA-256

15

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 range(16, 64):

s0 = self._rotr(w[i-15], 7) ^ self._rotr(w[i-15], 18) ^

(w[i-15] >> 3)

s1 = self._rotr(w[i-2], 17) ^ self._rotr(w[i-2], 19) ^

(w[i-2] >> 10)

w[i] = (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

g = f

f = e

e = (d + t1) & 0xFFFFFFFFL

d = c

c = b

b = a

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:]

Page 16: Fungsi Hash & Algoritma SHA-256

16

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”

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)

Page 17: Fungsi Hash & Algoritma SHA-256

17

2.7 Kelebihan dan Kekurangan

Untuk mengetahui kelebihan dan kekurangan suatu objek maka diperlukan

objek pembanding lainnya. Disini MD5 akan dijadikan sebagai pembanding SHA-

256. 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 SHA-256 Skor MD5 Skor

Ketahanan

terhadapa

brute force

attack

Message digest dengan

panjang 256 bit diyakini

mampu menahan

serangan brute-force

lebih kuat

1 Message digest dengan

panjang 128 bit

cenderung lebih mudah

diserang brute force

0

Kerentanan

terhadap

serangan

cryptanalysis

Tidak Rentan 1 Rentan 0

Kecepatan

komputasi

Lebih lambat 0 Lebih cepat 1

Kemudahan

Implementasi

Mudah 1 Mudah 1

Total Skor 3 2

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

Page 18: Fungsi Hash & Algoritma SHA-256

18

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 seseorang untuk

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.

Page 19: Fungsi Hash & Algoritma SHA-256

19

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.