Fungsi Hash dan Algoritma SHA-256 PDF

Title Fungsi Hash dan Algoritma SHA-256
Author Gusti Tammam
Pages 19
File Size 1.1 MB
File Type PDF
Total Downloads 76
Total Views 886

Summary

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


Description

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. Rifa’i 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

2

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

3

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

4

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

5

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 :

6

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 :

7

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.

8



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 :

9



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

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


Similar Free PDFs