BAB II LANDASAN TEORI
2.10 OpenSSL
OpenSSL adalah implementasi protocol SSL dan TSL bersifat open source, sehingga diperlukanproses compile untuk digunakan. Inti library nya ditulis dalam bahasa pemrograman C, dengan library tersebut OpenSSL dapat menerapkan fungsi kriptografi dan terdapat berbagai fungsi yang dapat digunakan.
Wrapper pada OpenSSL dapat membuat library OpenSSL pada berbagai jenis bahasa computer[9].
OpenSSL dapat diunduh dihttp://www.openssl.org/source/.
23 2.11. Compile dan Install OpenSSL Pada Windows XP
Untuk mengcompile OpenSSL dilakukan langkah-langkah sebagai berikut:
1. Buat Folder baru “C:\openssl-1.0.1b-dev” (tergantung versi yang diunduh, dalam hal ini openssl-1.0.1b).
2. Unduh source OpenSSL. Penulis menggunakan “openssl-1.0.1b.tar.gz”.
3. Ekstrak hasil unduh ke dalam folder “C:\openssl-1.0.1b-dev”.
4. Unduh dan Install ActiveState Perl. Dapat dilihat subbab 2.7.
5. Pastikan “C:\perl\bin\” berada dalam sistem.
6. Buat folder baru “C:\openssl-1.0.1b” berfungsi sebagai tempat penyimpanan semua library yang telah di built (biarkan kosong untuk sementara).
7. Buka command prompt windows (cmd).
8. Pindahkan dan jalankan “C:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools>vsvars32.bat”.
24 Gambar 2.3Command Prompt Windows
9. Dari command prompt pindahkan path ke “C:\openssl-1.0.1b-dev”.
10. Setelah pindah ke “C:\openssl-1.0.1b-dev”, jalankan“perl Configure VC-WIN32 no-asm --prefix=C:\openssl-1.0.1b”(huruf besar-kecil berpengaruh / case sensitive).
11. Jalankan “ms\do_ms” pada tahap ini agar bahasa-bahasa seteah ini dikenali.
12. Jalankan “nmake –f ms\ntdll.mak” pada tahap ini seharusnya berjalan proses compile.
13. Jalankan “nmake –f ms\ntdll.mak test” dilakukan pengetesan fungsi-fungsi OpenSSL yang telah decompile.
14. Jalankan “nmake –f ms\ntdll.mak install” untuk menyelesaikan proses-proses yang dijalankan diatas dilakukan penginstallan, dalam hal ini copy ke dalam foder “C:\openssl-1.0.1b”.
25 Setelah prose-proses diatas dilakukan maka OpenSSL siap digunakan.
2.12. Penggunaan OpenSSL Pada Visual Studio
Karena library yang telah dibahas bersifat dinamis, maka library harus diikutsertakan dalam source code.
Selain itu harus dilakukan pengaturan pada compiler Visual Studio Express ini. Langkah-langkah pengaturan mengikutsertakan library OpenSSL sebagai berikut:
1. Buat source code yang ingin dibuat (penulis menganggap source code sudah dibuat).
2. Pada setiap project (bukan setiap lembar kode). Pilih menu Project ->
Properties
Gambar 2.4. Sub Menu Poject 3. Setelah terlihat property pages, pastikan
26 a) C/C++ -> General -> Additional Include Directories
Bernilai: C:\openssl-1.0.1b\include\
b) Linker -> General -> Additional Library Directories Bernilai: C:\openssl-1.0.1b\lib\
c) Linker -> Input -> Additional Dependencies
4. Copy library LIBEAY32.DLL dan SSLEAY32.DLL dari “C:\openssl-1.0.1b\bin\” ke dalam folder debug dari proyek yang telah dibuild tersebut.
27
BAB III
METODOLOGI PENELITIAN
Pada bab ini akan dibahas cara kerja Secure Hash Algorithm-256 (SHA-256) dan instalasi OpenSSL pada Visual Studio C++ 2008 Express Edition dengan Platform OS (Operating System) Windows XP.
3.1. Secure Hash Algorithm
Secure Hash Algorithm adalah sejenis algoritma kriptografi hash yang dibuat oleh National Security Agency (NSA) dan diterbitkan oleh Nastional Institute of Standard and Technology (NIST). Berikut perkembangan SHA[10]:
SHA-0 : merupakan retronim (nama lain untuk versi baru yang merupakan turunannya) untuk versi asli dari fungsi hash 160-bit, diterbitkan pada tahun 1993 dengan sama “SHA”. Algoritma ini ditarik sesaat setelah diterbitkan karena “significant flaw” yang dirahasiakan dan kemudian mengalami sedikit direvisi menjadi SHA-1.
SHA-1 : sebuah fungsi hash 160-bit yang menyerupai MD5. Didesain oleh NSA sebagai bagian untuk algoritma Digital Signature. Kelemahan SHA-1 ditemukan dan kemudian tidak lagi diakui sebagai standar untuk kriptografi setelah tahun 2010.
28
SHA-2 : algoritma yang dijadikan standar dan memiliki kesamaan fungsi hash, dengan ukuran blok berbeda dikenal dengan SHA-256 dan SHA-512.
SHA-256 menggunakan 32-bit words dan SHA-512 menggunakan 64-bit words. Namun ada algoritma potongan dari masing-masing standar, dikenal dengan SHA-224 32-bit dan 384 64-bit.
SHA-3 : fungsi hash yang sebelumnya bernama Keccak, terpilih sebagai pemenang pada kompetisi yang diadakan oleh NIST tahun 2012. Fungsi keccak memiliki struktur yang sangat berbeda dari keluarga SHA lainnya.
3.2. SHA-256
SHA-256 dalam satu kali iterasi memiliki alur sebagai berikut[10]:
Gambar 3.1 Satu iterasi dalam keluarga SHA-2 Komponen berwarna biru melakukan operasi sebagai berikut:
Ch(x, y, z)= (x ∧ y) ⊕ (¬x ∧ z)
Maj (x, y, z)= (x ∧ y) ⊕ (x ∧ z) ⊕ (y ∧ z)
∑{ }( ) ( ) ⊕ ( ) ⊕ ( )
29
∑{ }( ) ( ) ⊕ ( ) ⊕ ( )
SHA-256
Ukuran Output : 256 bit Ukuran Blok : 512 bit Maksimal Message : 264 – 1 bit
Ukuran Word : 32 bit (masing-masing potongan dari 1 blok 512)
Round : 64
Operasi Perhitungan : +, and, or, xor, shr, rot
Ditemukan Collision : Tidak ditemukan nilai yang beririsan
3.3. Pembangkitan Konstanta dan Nilai Hash Awal SHA-256
Agar didapatkan nilai Hash awal H00, H10, H20, H30, H40, H50, H60, H70 dilakukan langkah-langkah sebagai berikut[11]:
1. Akar kuadratkan masing-masing 8 bilangan prima pertama 2 ... 19.
2. Ambil bagian bilangan pecahannya saja dari hasil akar bilangan prima diatas.
3. Bilangan pecahan tersebut dikalikan dengan 232 (untuk algortima sha-256).
4. Ambil bagian cacahnya dari bilangan.
5. Hasilnya dijadikan bilangan heksadesimal.
30
Lakukan langkah diatas untuk masing-masing bilangan prima selanjutnya 3 hingga 19.
Hampir sama seperti langkah-langkah membangkitan nilai hash.
Untuk diperoleh nilai-nilai konstanta dilakukan langkah sebagai berikut[11]:
31
Ambil bilangan pecahannya saja dari hasil akar bilangan prima diatas.
2. Bilangan pecahan tersebut dikalikan dengan 232 (untuk algortima sha-256).
3. Ambil bagian cacahnya dari bilangan.
4. Hasilnya dijadikan bilangan heksadesimal.
Contoh :
Lakukan langkah diatas untuk masing-masing bilangan prima selanjutnya 3 hingga 311.
32 3.4. Message Digest SHA-256
Tahap pembentukan nilai hash ( message digest ) dengan SHA-256 melakukan 2 (dua) tahap utama, yaitu[1]:
1. Preprocessing
Tahapan ini terdiri dari tiga tahap, yaitu padding the message M, partisi message M menjadi beberapa blok, inisialisasi nilai hash awal.
a) Message Padding
Tujuan dari message padding ini adalah agar pesan yang sudah dipadding/ditambah merupakan kelipatan dari 512 bit. Penyisipan padding bisa dilakukan sebelum perhitungan hash SHA dimulai atau kapan-pun selama isi bagian blok message yang telah dipadding dipanggil oleh fungsi komputasi hash.
Untuk melakukan padding pesan dibagi menjadi blok-blok message yang panjangnya 512 bit. Akibat pembagian ini maka jumlah blok terakhir akan kurang dari atau sama dengan 512 bit. Sehingga blok terakhir harus dilakukan message padding agar blok terakhir memiliki panjang 512 bit. Langkah-langkah melakukan message padding adalah sebagai berikut[1]:
33
Input pesan, yaitu berupa karakter yang termasuk dalam ASCII dan kemudian dilakukan pengkonversian ke dalam bentuk biner berupa rangkaian bit.
Rangkaian bit tersebut kemudian dibagi menjadi blok-blok dengan panjang masing-masing 512 bit. Hal ini menyebabkan blok terakhir memiliki panjang kurang dari atau sama dengan dengan 512 bit.
Lakukan penambahan bit-bit isian pada blok terakhir pesan.
Tambahkan bit ‘1’ kemudian diikuti dengan k bit ‘0’ sesuai dengan ketentuan berikut:
1. Apabila panjang bit blok terakhir kurang dari 448 bit maka ditambahkan bit ‘1’ kemudian tambahkan sebanyak k bit
‘0’ sehingga jumlah bit blok terakhir menjadi 448 bit.
2. Apabila panjang bit blok terakhir lebih dari atau sama dengan 448 bit maka tambahkan bit ‘1’ kemudian tambahkan bit ‘0’ sehingga panjang bit blok terakhir menjadi 512 bit. Kemudian dibuat blok bit baru berisikan bit ‘0’ sepanjang 448 bit.
3. Apabila panjang bit blok terakhir sama dengan 512 bit maka harus dibuat blok baru sepanjang 448 bit yang berisi
34 bit ‘1’ pada bit pertama diikuti dengan bit ‘0’ sebanyak 447 bit sehingga panjang bit pada blok terakhir 448 bit.
⏟ ⏟ ⏟ ⏞ ⏟
⏞
Misalkan panjang pesan M dalam bit adalah , dengan pesan
“abc”. Diperoleh , karena terdapat 3 huruf dengan masing-masing huruf bernilai 8 bit. Kemudian dibagi menjadi blok-blok yang masing-masing panjangnya 512 bit.
Karena panjang bit pesan hanya 24 bit maka hanya didapatkan 1 blok.
⏟ ⏟ ⏟
Kemudian tambahkan bit “1” pada akhir pesan dalam hal ini setelah nilai bit “abc” dan diikuti penambahan bit “0”
sejumlah k, dimana k adalah solusi terkecil non-negative dari solusi persamaan .
⏞
Kemudian tambahkan 64 bit yang bernilai sebesar nilai yang ditulis dalambentuk 64 bit.
35 ⏟
⏞
b) Partisi Message
Blok message dan hasil paddingnya dipartisi/dibagi menghasilkan sejumlah N blok masing-masing berukuran 512 bit, M(1), M(2), …, M(n). Kemudian masing-masing blok 512 bit dipartisi menjadi blok-blok baru yang lebih kecih berukuran 32 bit. Blok 32 bit pertama dari blok message ke-i dinotasikan dengan ( ), blok 32 bit kedua dinotasikan dengan ( ), hingga bernilai ( ).
Contoh
Pada contoh sebelumnya dengan pesan ‘abc’
c) Inisialisasi Hash awal SHA-256
Algoritma SHA menggunakan heksadesimal 32 bit sebagai buffer, dengan nilai buffer Hash pada hasil message padding 512 pertama H0, 512 bit berikutnya H1, 512 bit berikutnya H2 (bersifat rekursif karena untuk didapatkan H1 diperlukan H0) dan seterusnya hingga semua hasil message padding diproses.
Dengan nilai Hash awal yang telah didapat pada pembangkitan nilai Hash SHA-256 sebagai berikut:
36
Pada tahap perhitungan hash SHA-256 digunakan fungsi, operasi yang terdapat di bab 2 dan konstanta di bab 3. Operasi penjumlahan (+) dikerjakan dengan operasi modulo 232.
Setiap blok pesan, M(1), M(2), ..., M(N), dengan nilai N merupakan jumlah bol hasil message padding.
Untuk tiap blok pesan M(i) akan diproses sebagai berikut:
For i=1 sampai N:
a) Persiapkan penjadwalan pesan {Wt}
Pada proses ini, penjadwalan pesan dihitung terlebih dahulu agar lebih mudah. Karena sebenarnya nilai Wt dipakai saat perhitungan nilai T1
yang akan dihitung nanti.
37 {
( )
{ }( ) { }( )
Fungsi { } { } telah dibahas pada subbab 2.6 b) Inisialisasi delapan variabel berjalan
Isi delapan variabel a, b, c, d, e, f, g, dan h awal dengan nilai hash ke (i-1), H(i-1). Isi delapan variabel sebagai berikut:
( )
c) Lakukan iterasi dalam iterasi, For t = 0 sampai 63 ∑{ }( ) ( ) { }
38 Fungsi ∑{ } , ∑{ } , Ch, Maj, telah dituliskan pada subbab 2.6.
Proses ini dilakukan 0 ≤ t ≤ 79 dengan menggunakan variabel a, b, c, d, e, f, g, dan h awal pada proses b menghasilkan variabel a, b, c, d, e, f, g, dan h baru yang akan digunakan untuk proses perhitungan hash intermediate.
d) Menghitung hash intermediate ke-i H(i), untuk setiap i pada blok pesan M(i)
Hasil enkripsi dari proses SHA-256 akan diperoleh setelah semua blok M N yang masing-masing panjangnya 512 bit diproses. Setelah dilakukan semua langkah komputasi sebanyak N, maka diperoleh 256 bit message digest dari pesan M.
‖ ‖ ‖ ‖ ‖ ‖ ‖
39
BAB IV
HASIL DAN IMPLEMENTASI
4.1. Hasil Implementasi Hash SHA-256
Pada hasil SHA-256 ini diambil message sebagai contoh adalah “abc”.
Sesuai dengan algoritma SHA-256 yang telah diterangkan pada bab sebelumnya, Untuk diperoleh message digest “abc” dikonversi bentuk binary sesuai dengan ASCII.
Message : a b c
Heksadesimal : 61 62 63
Binary : 01100001 01100010 01100011
Sebelum melakukan dua tahap utama, akan dibangkitkan setiap nilai konstanta 64 bit, { } { } { }. Nilai K akan bernilai tetap untuk proses apapun. Dengan nilai { } { } { }dapat dilihat pada subbab 2.6.
Kemudian akan dibangkitkan nilai Hash awal,8 baris 32 bit H0, H1,
…, H7. Dengan nilai H0, H1, …, H7 dapat dilihat pada subbab 2.6.
40 Setelah nilai konstanta dan Hash awal didapatkan, langkah selanjutnya dua langkah utama dalam pembentukan message digest.
1) Preprocessing
a) Padding
Message “abc” memiliki panjang message . Gunakan persamaan untuk mencari nilai k (k adalah banyaknya bilangan nol selain dari bilangan 128 bit terakhir dari message. Untuk ketentuan lebih jelasnya dapat dilihat subbab 3.4.
Pada contoh kali ini hanya terdapat 1 blok message 512 bit M(1). Yaitu :
41
a) Persiapkan penjadwalan pesan {Wt}
{
42
43
c) Lakukan iterasi dalam iterasi, For t = 0 sampai 63 {
Saat t = 0
∑{ } { }
∑{ }
∑{ }
∑{ }
∑{ }
∑{ }
44
45 Lakukan langkah subbab c ini hingga t = 79. Perhitungan pada langkah subbab 2.c memang banyak, dikarenakan langkah 2.a, langkah 2.b dilakukan hanya untuk mendukung langkah subbab 2.c.
46 3) Hasil Message Digest
‖ ‖ ‖ ‖ ‖ ‖ ‖
ba7816bf 8f01cfea 414140de 5dae2223 b00361a3 96177a9c b410ff61 f20015ad
4.2. Hasil Implementasi Dengan OpenSSL
Subbab ini akan digunakan fungsi OpenSSL yang banyak digunakan komputer server. Fungsi yang digunakan kali ini adalah SHA-256 untuk menghitung nilai dari SHA-256, sekalgius melihat dan membandingkan hasil perhitungan manual dengan hasil dari fungsi OpenSSL.
Agar OpenSSL dapat berjalan lakukan langkah-langkah yang telah dijelaskan pada subbab 2.7 sampai dengan 2.11. Karena subbab kali ini akan lebih dipaparkan dari subbab 2.12.
Setelah semua persiapan dilakukan, akan dilakukan langkah-langkah selanjutnya hingga tampil dalam bentuk Win32 console. Dengan langkah-langkah sebagai berikut:
1) Buat project baru dengan nama “SHA256”
2) Buat page baru dengan nama “sha-256.cpp”. source code sebaggai berikut:
22
#include <stdio.h>
#include <string.h>
#include <openssl/sha.h>
47 int main() {
unsigned char digest[SHA256_DIGEST_LENGTH];
const char* string = "hello world";
SHA256_CTX ctx;
SHA256_Init(&ctx);
SHA256_Update(&ctx, string, strlen(string));
SHA256_Final(digest, &ctx);
char mdString[SHA256_DIGEST_LENGTH*2+1];
for (int i = 0; i < SHA256_DIGEST_LENGTH; i++)
sprintf(&mdString[i*2], "%02x", (unsigned int)digest[i]);
printf("SHA256 digest: %s\n", mdString);
return 0;
}
Simpan source code diatas (Ctrl+s).
3) Klik kanan properties pada project SHA256, seperti gambar berikut:
Gambar 4.1. Project SHA 256
48 4) Setelah terlihat property pages, pastikan
a) C/C++ -> General -> Additional Include Directories
Bernilai: C:\openssl-1.0.1b\include\
b) Linker -> General -> Additional Library Directories
Bernilai: C:\openssl-1.0.1b\lib\
c) Linker -> Input -> Additional Dependencies
Bernilai: libeay32.lib ssleay32.lib
49
BAB V
KESIMPULAN DAN SARAN
5.1. Kesimpulan
Data yang diamankan memakai kriptografi SHA-256 menunjukkan bahwa tahapan message padding, penjadwalan pesan dan output memiliki waktu eksekusi yang konstan pada masing-masing algoritmanya,
5.2. Saran
Karena ilmu pengetahuan selalu berkembang maka untuk selanjutnya dapat dilakukan penelitian terhadap SHA yang lebih baru, atau dapat meneliti algoritma hash selain SHA-256.
50
REFERENSI
[1] Nirwanto, Taufik Budi. Perbandingan Kinerja 1, 256 DAN SHA-512. 2013
[2] http://en.wikipedia.org/wiki/ASCII
[3] http://webopedia.com/TERM/A/ASCII_file.html
[4] Munir, Renaldi. Kriptografi. Bandung: Penerbit Informatika. 2005.
[5] Arius, Dony. Pengantar ilmu kriptografi: Teori, Analisis, dan Implementasi.
Yogyakarta: Andi Offset. 2005.
[6] NIST. 2012. FIPS 180-4
[7] http://en.wikipedia.org/wiki/perl
[8] http://www.microsoft.com/visualstudio/eng/downloads.
[9] http://mailing.openssl.users.narkive.com/5GUySfzd/compiling-openssl-dev-c
[10] http://en.wikipedia.org/wiki/SHA-2
[11] J-_-L _ snippets _ 17 _ sha-256.rb.htm