PROGRAM PEMBANGKITAN KONSTAN, PENDEFINISIAN OPERATOR DAN FUNGSI-FUNGSI UNTUK SHA-256 DENGAN MENGGUNAKAN MAPLE PROGRAM FOR GENERATING CONSTANT, DEFINING OPERATORS AND FUNCTIONS IN SHA-256 USING MAPLE
Samsu Alam, Loeky Haryanto, Amir Kamal Amir Jurusan Matematika, Fakultas MIPA, Universitas Hasanuddin
Alamat korespondensi: Samsu Alam Jurusan Matematika Fakultas MIPA Universitas Hasanuddin Makassar, 90245 HP : 085242759479 Email :
[email protected]
Abstrak Secure Hash Algorithm (SHA) merupakan salah satu metode yang digunakan untuk mengamankan suatu data dan memiliki banyak varian diantaranya SHA 1, SHA 2 yang terdiri atas SHA 128, SHA 224, SHA 256, SHA 384 dan SHA 512 kemudian SHA 3 (Keccak). Penelitian ini bertujuan untuk membahas tentang cara kerja metode SHA 256 mengenai cara membangkitkan dan mendefinisikan konstanta, operator dan fungsi-fungsi yang digunakan secara algoritmik atau berdasarkan kaidah-kaidah komputasi yang efisien dan mengimplementasikan algoritma yang diperoleh ke dalam pemrograman komputer. Metode yang digunakan dalam penelitian ini adalah: kajian literatur, pembuatan program menggunakan Maple, pemberian contoh-contoh simulasi fungsi yang digunakan dalam SHA 256 dan dilanjutkan dengan penulisan hasil akhir berdasarkan program yang dihasilkan. Hasil penelitian yang diperoleh adalah mengetahui cara membangkitkan konstanta, mampu menjabarkan fungsifungsi yang digunakan, mengetahui cara kerja operator-operator logika yang digunakan, mampu mengimplementasikan kedalam program komputer dan pemberian contoh-contoh simulasi fungsi yang digunakan dalam SHA 256 Kata Kunci: Secure Hash Algorithm, Konstan, Fungsi-fungsi SHA 256, Operator logika
Abstract Secure Hash Algorithm (SHA) is one of method used to secure the data and has many variants including SHA 1, SHA 2 consisting of SHA 128, SHA 224, SHA 256, SHA 384 and SHA 512 then SHA 3 (Keccak). The purpose of this study is to: (1) discuss the system of SHA 256 method in generating and defining constants, operators, and functions used algorithmically or based on efficient computation rules; and (2) implement the obtained algorithms in computer programming. This study was started with a review of the literature, followed by program development with Maple. Several examples of function simulations used in SHA 256 were then given. The last stage was the writing of the final result based on the resulted program. The analysis is able to describe how to generate a constant. It also describes the functions and the logical operators. In addition, this study implements of the obtained algorithms in a computer program, and gives some examples of simulation functions used in SHA 256. Keywords: Secure Hash Algorithm, Constant, Operators, SHA 256 Functions, Logical operators
PENDAHULUAN Menurut Hartono (1999), Sistem bilangan (number system) adalah suatu cara untuk mewakili besaran dari suatu item fisik. Sistem bilangan yang banyak dipergunakan oleh manusia adalah sistem bilangan desimal, yaitu sistem bilangan yang menggunakan 10 macam simbol untuk mewakili suatu besaran. Sistem ini banyak digunakan karena manusia mempunyai sepuluh jari untuk dapat membantu perhitungan. Lain halnya dengan komputer, logika di komputer diwakili oleh bentuk elemen dua keadaan yaitu off (tidak ada arus) dan on (ada arus). Bilangan seperti 0, 1, 2, 3 sampai dengan 9 adalah bilangan yang semua masyarakat saat ini sudah mengenalnya. Bilangan ini digunakan sehari-hari dan di mana-mana dan digunakan untuk menghitung (Sterling, 2008). Selain sistem bilangan biner, komputer juga menggunakan sistem bilangan oktal (Octal number system) dan sistem bilangan hexadecimal (hexadecimal number system). Fungsi Hash adalah sebuah algoritma yang memetakan data dengan panjang sembarang menjadi data dengan panjang tetap (Stallings, 2011). Menurut Mironov (2005), Fungsi Hash merupakan sebuah algoritma yang mengubah teks atau message menjadi nilai hash berupa sederetan karakter acak yang memiliki jumlah karakter yang sama. Data yang diperoleh dengan panjang tetap dinamakan nilai hash. Fungsi hash juga biasa disebut dengan fungsi satu arah (one way hash function) karena memiliki fungsi searah dimana nilai hash yang diperoleh tidak dapat dikembalikan ke data semula (Preneel, 2003). Dalam hal ini, nilai hash hanya sebagai identitas suatu data. Fungsi hash idealnya memiliki beberapa sifat-sifat dasar yaitu (Menezes, 1996), untuk setiap input data (pesan), nilai fungsi Hash mudah dihitung. Nilai fungsi hash yang telah diperoleh tidak dapat dikembalikan (infeasible) ke pesan semula. Inilah sebabnya fungsi hash dinamakan juga dengan fungsi hash satu arah (one way hash function). Kemudian mampu mendeteksi perubahan yang terjadi pada pesan asli. Selanjutnya dari input pesan yang berbeda, tidak mungkin diperoleh nilai fungsi hash yang sama dan sebaliknya dari suatu input dan output (nilai hash), tidak bisa diperoleh nilai hash yang sama dari input yang berbeda (1-1 function). Secara umum, algoritma fungsi SHA dapat dideskripsikan dan dibagi menjadi tiga bagian (Lalitha, 2010), yaitu: Preprocessing. Sebelum proses perhitungan dilakukan, terlebih dahulu membagi pesan menjadi blok-blok dengan panjang tertentu, penambahan bit pengganjal serta mengatur nilai awal untuk digunakan pada perhitungan nilai hash. Kemudian dilakukan proses pembangkitan message schedule (wt ) dari pesan yang telah diblok-blok
dengan panjang tertentu, Selanjutnya menentukan message schedules (wt) bersama dengan fungsi-fungsi lainnya serta konstanta-konstanta yang telah terdefinisi, digunakan secara iteratif untuk membangkitkan nilai hash akhir. Dalam FIPS (2002), Fungsi SHA memiliki perbedaan pada ukuran pesan, ukuran blok, dan ukuran word data yang digunakan selama proses komputasi. Perbedaan fungsi SHA secara lengkap dapat dilihat pada (Tabel 1). National Institute of Standards and Technology di Amerika Serikat melakukan standardisasi dalam fungsi hash untuk meningkatkan keamanan dalam pertukaran data. Dalam dokumen Federal Information Processing Standards (FIPS) Pub 180-3, ditetapkan lima jenis fungsi hash, yaitu SHA 1, SHA 224, SHA 256, SHA 384, dan SHA 512, yang masing-masing didefinisikan dan dijelaskan aturan-aturannya dalam dokumen tersebut (FIPS, 2008). Message schedules (wt) bersama dengan fungsi-fungsi lainnya serta konstanta-konstanta yang telah terdefinisi, digunakan secara iteratif untuk membangkitkan nilai hash akhir. Perlu diketahui bahwa dalam proses komputasinya, SHA-256 menggunakan operatoroperator dan enam fungsi lojik, dimana setiap fungsi beroperasi menggunakan tiga buah variabel 32-bit (x, y dan z), dan keluarannya berupa sebuah untaian biner 32-bit yang baru. Berikut ini adalah fungsi-fungsi yang digunakan dalam SHA-256 (Matusiewicz, 2007). Ch x, y , z x y x z Maj x, y , z x y x z y z x x 256
0
256
1
ROTR 2 x ROTR13 x ROTR 22 x ROTR 6 x ROTR11 x ROTR 25 x
0256 x ROTR 7 x ROTR18 x SHR 3 x 1256 x ROTR17 x ROTR19 x SHR10 x
Menurut Stallings (2011), ada beberapa hal yang berhubungan dengan masalah keamanan suatu data diantaranya: Confidentiality yaitu menjamin bahwa data-data tersebut hanya bisa diakses oleh pihak-pihak tertentu saja. Kemudian otentikasi data berhubungan dengan identifikasi/pengenalan, baik secara kesatuan sistem maupun informasi itu sendiri dan integritas data berhubungan dengan penjagaan dari perubahan data secara tidak sah. Tujuan penelitian ini adalah membahas tentang metode SHA 256 tentang cara membangkitkan dan mendefinisikan konstanta, operator dan fungsi-fungsi yang digunakan secara
algoritmik
atau
berdasarkan
kaidah-kaidah
komputasi
yang
efisien
dan
mengimplementasikan algoritma yang diperoleh ke dalam pemrograman komputer dengan menggunakan maple.
METODE PENELITIAN Lokasi dan Rancangan Penelitian Penelitian ini bertempat di Jurusan Matematika FMIPA Universitas Hasanuddin. Rancangan penelitian ini berbentuk penelitian kualitatif dengan melakukan studi kepustakaan, dengan mengumpulkan bahan penelitian melalui penelusuran jurnal, literatur dan penelitian terkait masalah Secure Hash Algorithm 256 (SHA 256). Analisis Data Penelitian dilakukan dengan melalui studi literatur mengenai susunan algoritma untuk proses kompresi SHA 256). Menentukan cara pembangkitan konstan, pendefinisian operator dan fungsi-fungsi yang digunakan pada SHA 256, jika perlu dengan simulasi dalam bentuk program dengan menggunakan Maple.
HASIL PENELITIAN Pembangkitan 64 konstanta K0{256}, `K1{256}, …, K63{256}. Setiap konstan Ki{256} adalah bagian pecahan dari akar pangkat 3 ke-64 bilangan prima pertama: 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311. Untuk membangkitkan 64 konstanta, dilakukan langkah-langkah sebagai berikut. Setiap bilangan prima Prim[i] dipangkatkan 1/3, hasilnya adalah billangan-bilangan (Prim[1])1/3, (Prim[2] )1/3, (Prim[3])1/3, Prim[4] )1/3 dan seterusnya. Perhatikan, ketika Prim[i] {2, 3, 5, 7} berlaku 13 = 1 < Prim[1] = 2 < Prim[2] = 3 < Prim[3] = 5 < Prim[4] = 7 < 8 = 2^3. Selanjutnya menentukan bagian pecah (sisa setelah bagian bulat dibuang) dari (Prim[i])1/3 dan diberi nama R[i]. Jadi R[i] = floor(Prim[i])1/3) = 0.ri1ri2ri3… . Bagian pecah dari (Prim[1])1/3, (Prim[2] )1/3, (Prim[3])1/3, Prim[4] )1/3, … (yaitu bagian-bagian pecah dari 21/3, 31/3, 51/3, 71/3, …) adalah 0.259921050…, 0.442249570…, 0.709975947…, 0.912931183… , dan seterusnya. Selanjutnya setiap bilangan pecah R[i] yang diperoleh dari langkah sebelumnya dikali 232. Di dalam Maple, hasilnya diberi nama KReal[i]. Jadi KReal[i] = 232R[i]. Kemudian menyatakan konstanta-konstanta K0{256}, `K1{256}, …, K63{256} dalam basis 10 (atau dalam
notasi desimal), konstanta ke-i adalah bagian bulat dari KReal[i] dan dinyatakan dengan nama KBulat[i]. Jadi KBulat[i] = floor(KReal[i]), sehingga dengan mengadopsi notasi pada langkah sebelumnya, KBulat[1] = r1,1 r1,2 r1,3 … r1,31 r1,32, KBulat[2] = r2,1 r2,2 r2,3 … r2,31 r2,32, KBulat[3] = r3,1 r3,2 r3,3 … r3,31 r3,32, KBulat[4] = r4,1 r4,2 r4,3 … r4,31 r4,32, …, dan seterusnya. Langkah terakhir adalah mengkonversi format bilangan KBulat K0{256}, `K1{256}, …, K63{256} dari basis 10 (atau dalam notasi desimal) menjadi bilangan dalam basis 16 (atau dalam notasi hexadesimal). Dalam Maple, langkah konversi secara individual satu bilangan bulat x dilakukan dengan lebih dulu mendefinisikan fungsi, PecahBin := x-> BulatKeBin(KBulat[x], 2*n); dan fungsi Fungsi:= x -> PecahBin(x): Lima langkah-langkah di atas diimplementasikan melalui prosedur KBiner dengan input 16, 64 dan 1/3. Secara umum, dengan input n, N dan q diperoleh N konstanta dari N bilangan prima pertama yang dipangkatkan q, kemudian dikali 22n dan akhirnya bagian bulatnya disajikan sebagai bilangan 2n-bit. Pembangkitan 8 Nilai Hash Awal (H(0)) Pembangkitan 8 nilai hash awal hampir sama dengan pembangkitan konstanta, letak perbedaannya hanya pada langkah pertama yaitu bilangan prima Prim[i] dipangkatkan 1/2. Langkah selanjutnya sama dengan pembangkitan 64 konstanta. Kontruksi Fungsi Hash Sebelum melakukan proses perhitungan, terlebih dahulu melakukan beberapa proses persiapan. Adapun persiapan tersebut terdiri atas tiga langkah yaitu, Konversi Input Pesan teks ke bentuk biner. Kemudian melakukan Padding Pesan (M). Tujuan melakukan padding pesan ini adalah mengetahui ukuran padding yang sesuai dengan jenis fungsi hash. Pada Metode SHA 256, pembagian padding pesan berdasarkan persamaan berikut: l+1+k ≡ 448 mod 512. Keterangan: l = panjang bit masukan k = bit pengganjal. Proses penambahan bit pengganjal adalah pertama tambahkan bit “1” pada akhir pesan, diikuti dengan bit “0” sejumlah k. Kemudian tambahkan 64-bit yang menyatakan panjang
pesan semula (l) dalam representasi biner. Selanjutnya, pesan yang telah dinyatakan dalam bentuk biner di padding berdasarkan rumus diatas. Terakhir melakukan partisi pesan (M) yaitu: M(0), M(1), M(2) .. , M(15). Langkah selanjutnya, masing-masing padding pesan dipartisi menjadi 16 bagian yang sama. Proses ini dilakukan untuk mendapatkan nilai message schedules (wt) dimana,
i M Wt t 256 W 256 W W W 1 t 2 t 7 0 t 15 t 16
0 t 15 16 t 63
Untuk nilai W0, .. , W15 diperoleh dari partisi langsung dari pesan M. Sedangkan W16, .. , W63 menggunakan rumus kedua diatas. Menentukan Nilai T1 dan T2 Dalam iterasi SHA 256, Setiap padding pesan akan dilakukan 64 kali iterasi dimana t=0 sampai t=63. Jadi semakin banyak padding pesan yang terbentuk, maka proses yang dibutuhkan untuk mendapatkan nilai hash akan membutuhkan waktu yang cukup lama juga. Untuk t = 0 sampai t = 63, maka
T1 h
T2
256 1
e Ch e, f , g
K t256 Wt
a Maj(a, b, c) 256
0
a T1 T2 , b a , c b , d c e d T1 , f e , g f , h g Nilai T1 diperoleh dengan menggunakan rumus berikut:
T1 h
Dimana
256 1
256 1
256 1
e Ch e, f , g
K t256 Wt
(e) dan Ch(e,f,g) dapat dijabarkan sebagai berikut;
(e) ROTR 6 e ROTR 11 e ROTR 25 e
Ch e, f , g e f ¬e g Nilai T2 diperoleh dengan menggunakan rumus berikut:
T2
a Maj a, b, c
Dimana
256
0
a 256
0
256 0
(a) dan Maj (a, b,c) dapat dijabarkan sebagai berikut;
ROTR 2 a ROTR13 a ROTR 22 a
Maj a, b, c a b a c b c . Dari T1 dan T2 yang diperoleh, maka dapat ditentukan nilai iterasi berikutnya dari t=0 sampai dengan t = 63 untuk satu padding pesan. Setelah dilakukan proses iterasi t=0..63, maka akan diperoleh hasil akhir variabel a, b, c, d, e, f, g, dan h yang baru. Langkah selanjutnya perhitungan nilai hash dilakukan dengan menggunakan, i
H 0i a H 0i 1 , H1
b H1i1 , H 2i c H 2i1 , H 3i d H 3i 1
H 4i e H 4i1 , H 5i f H 5i 1 , H 6i g H 6i 1 , H 7i h H 7i 1 Setelah proses perulangan semuanya selesai dengan N waktu (setelah proses M(N)), hasil 256bit pesan M adalah: H 0 N H 1 N H 2 N H 3 N H 4 N H 5 N H 6 N H 7 N .
PEMBAHASAN Dalam pelaksanaan penelitian ini, dilakukan proses pembangkitan 64 konstanta dan 8 nilai awal. Proses pembangkitan kedua jenis nilai tersebut hampir sama. Letak perbedaannya hanya pada (Prim[i]n). Untuk 64 konstanta dibangkitkan dengan menggunakan n=1/3 sedangkan untuk pembangkitan nilai awal digunakan n=1/2. Dalam implementasinya dalam bentuk program Maple terdapat beberapa Kendala. Salah satu kendalanya adalah penentuan message schedule (wt) pada iterasi 16 keatas, dimana terdapat peralihan nilai wt dari iterasi ke 15 ke iterasi 16. Hal ini terjadi karena dalam program maple melakukan proses sorting bilangan dari nilai terbesar ke terkecil (ascending).
KESIMPULAN DAN SARAN Berdasarkan hasil dan pembahasan dapat disimpulkan bahwa algoritma proses pembangkitan nilai-nilai konstan K(0), K(1), …, K(63) menggunakan bilangan prima yang dipangkatkan 1/3, kemudian dikalikan dengan 232 dan hasilnya dibulatkan kebawah (panjang/banyak bit dibatasi sampai dengan 32 bit). Algoritma proses pembangkitan nilai awal H(0), H(1), …, H(8) menggunakan bilangan prima yang dipangkatkan 1/2. Kemudian dikalikan dengan 232 dan hasilnya dibulatkan kebawah (panjang/banyak bit dibatasi sampai dengan 32-bit). Setelah nilai konstan dan nilai awal diperoleh selanjutnya dikonversi ke bilangan hexadecimal. Operator-operator yang digunakan dalam algoritma SHA 256 menggunakan operator logika seperti AND, NOT, XOR, SHR, dan ROTR. Fungsi-fungsi yang digunakan dalam SHA 256 menghasilkan bilangan-bilangan biner dalam modulo 232 dan telah diimplementasikan dalam program maple.
Untuk pengembangan selanjutnya disarankan agar mempelajari algoritma SHA yang lain dan untuk penyempurnaan program, disarankan mencari fungsi kompresi yang lain (selain SHA 256) tetapi masih menggunakan konstanta yang sama.
UCAPAN TERIMA KASIH Penulis menyampaikan terimakasih kepada Komisi Penasehat Dr. Loeky Haryanto, MS, M.Sc, MA dan Prof. Dr. Amir Kamal Amir, M.Sc yang telah memberikan pengarahan dan petunjuk dalam menyelesaikan jurnal ilmiah ini, serta kepada semua pihak yang telah memberikan bantuan dan fasilitas dalam penulisan jurnal ilmiah ini.
DAFTAR PUSTAKA Federal Information Processing Standards Publication 180-2(FIPS). (2002). Secure Hash Standard. USA: National Institute of Standards and Technology Federal Information Processing Standards Publication 180-3 (FIPS). (2008). Secure Hash Standard. USA: National Institute of Standards and Technology Hartono J. (1999). Pengenalan Komputer. Yogyakarta: Penerbit Andi Yogyakarta. Lalitha T, Umarani R. (2010). Analyzing and Comparing the Cryptographic Hash Algorithms. India. Matusiewicz, K. (2007). Analysis of Modern Dedicated Cryptographic Hash Functions. Macquarie University. Menezes J, Alfred., et al. (1996). Handbook of Applied Cryptography. Canada: University of Waterloo Mironov I. (2005). Hash Function: Theory, attacks, and applications. Preneel, B. (2003). Analisis and Design of Cryptographic Hash functions. Katholieke Universiteit Leuven Stallings W. (2011). Cryptography and Network Security, Fifth Edition. Sterling J. (2008). Hash Functions In Cryptography. Universitet I Bergen.
Lampiran
Tabel 1. Perbedaan Karakteristik Varian fungsi SHA Fungsi
Ukuran Ukuran Ukuran Pesan (bit) Blok (bit) Word (bit)
Ukuran Nilai Hash (bit)
SHA-1
<264
512
32
160
SHA-256
<264
512
32
256
SHA-224
<264
512
32
224
SHA-384
<2128
1024
64
384
SHA-512
<2128
1024
64
512
Sumber: NIST, Secure Hash Standard. Fips 180-2.pdf, August 2002, p.3