Implementasi Elliptic Curve ElGamal Public Key Cryptosystem Sebagai Pengaman Distribusi Kunci dan Block Cipher AES

(1)

IMPLEMENTASI ELLIPTIC CURVE ELGAMAL PUBLIC KEY

CRYPTOSYSTEM SEBAGAI PENGAMAN DISTRIBUSI

KUNCI DARI BLOCK CIPHER AES

SKRIPSI

MUHAMMAD REZA NASUTION

101401028

PROGRAM STUDI S1 ILMU KOMPUTER

FAKULTAS ILMU KOMPUTER DAN TEKNOLOGI INFORMASI

UNIVERSITAS SUMATERA UTARA

MEDAN

2015


(2)

IMPLEMENTASI ELLIPTIC CURVE ELGAMAL PUBLIC KEY CRYPTOSYSTEM SEBAGAI PENGAMAN DISTRIBUSI

KUNCI DARI BLOCK CIPHER AES SKRIPSI

Diajukan untuk melengkapi tugas akhir dan memenuhi syarat mencapai gelar Sarjana Komputer

MUHAMMAD REZA NASUTION 101401028

PROGRAM STUDI S1 ILMU KOMPUTER

FAKULTAS ILMU KOMPUTER DAN TEKNOLOGI INFORMASI UNIVERSITAS SUMATERA UTARA

MEDAN 2015


(3)

PERSETUJUAN

Judul : IMPLEMENTASI ELLIPTIC CURVE ELGAMAL

PUBLIC KEY CRYPTOSYSTEM SEBAGAI PENG-AMAN DISTRIBUSI KUNCI DARI BLOCK CIPHER AES

Kategori : SKRIPSI

Nama : MUHAMMAD REZA NASUTION

Nomor Induk Mahasiswa : 101401028

Program Studi : S1 ILMU KOMPUTER

Fakultas : ILMU KOMPUTER DAN TEKNOLOGI INFORMASI

UNIVERSITAS SUMATERA UTARA Diluluskan di

Medan, Juli 2015 Komisi Pembimbing :

Pembimbing 2 Pembimbing 1

Herriyance, ST., M.Kom M. Andri Budiman, ST., M.Comp.Sc., MEM NIP. 198010242010121002 NIP. 197510082008011011

Diketahui/disetujui oleh

Program Studi S1 Ilmu Komputer Ketua,

Dr. Poltak Sihombing, M.Kom NIP. 196203171991031001


(4)

PERNYATAAN

IMPLEMENTASI ELLIPTIC CURVE ELGAMAL PUBLIC KEY CRYPTOSYSTEM SEBAGAI PENGAMAN DISTRIBUSI

KUNCI DARI BLOCK CIPHER AES

SKRIPSI

Saya mengakui bahwa skripsi ini adalah hasil karya saya sendiri, kecuali beberapa kutipan dan ringkasan yang masing-masing telah disebutkan sumbernya.

Medan, Juli 2015

Muhammad Reza Nasution 101401028


(5)

PENGHARGAAN

Alhamdulillah. Puji dan syukur kehadirat Allah SWT yang dengan rahmat dan karunia-Nya penulis dapat menyelesaikan penyusunan skripsi ini, sebagai syarat untuk memperoleh gelar Sarjana Komputer pada Program Studi S1 Ilmu Komputer Fakultas Ilmu Komputer dan Teknologi Informasi Universitas Sumatera Utara.

Pada pengerjaan skripsi dengan judul Implementasi Elliptic Curve ElGamal

Public Key Cryptosystem sebagai Pengaman Distribusi Kunci dari Block Cipher AES, penulis menyadari bahwa banyak pihak-pihak yang turut membantu, baik dari keluarga, sahabat, dan orang-orang terkasihi yang memotivasi dalam proses pengerjaannya. Dalam kesempatan ini, penulis mengucapkan terima kasih kepada:

1. Bapak Prof. Subhilhar MA, Ph.D selaku Pejabat Rektor Universitas Sumatera Utara. 2. Bapak Prof. Dr. Muhammad Zarlis selaku Dekan Fakultas Ilmu Komputer dan

Teknologi Informasi Universitas Sumatera Utara.

3. Bapak Dr. Poltak Sihombing, M.Kom selaku Ketua Program Studi S1 Ilmu Komputer Fakultas Ilmu Komputer dan Teknologi Informasi Universitas Sumatera Utara dan Dosen Pembanding I.

4. Bapak M. Andri Budiman, ST., M.Comp.Sc., MEM selaku Dosen Pembimbing I yang telah banyak memberikan masukan dan saran kepada penulis dalam mendesain algoritma kriptografi yang diangkat menjadi judul skripsi ini.

5. Bapak Herriyance, ST., M.Kom selaku Dosen Pembimbing II yang telah banyak memberikan arahan, kritik dan saran kepada penulis dalam pengerjaan skripsi ini. 6. Ibu Maya Silvi Lydia B.Sc., M.Sc. selaku Dosen Pembanding II yang telah banyak

memberikan arahan dan masukan yang sangat berharga kepada penulis.

7. Ayahanda Darwin Nasution dan Ibunda Wini Astuti yang mana telah banyak memberikan kasih sayang, semangat, serta dorongan kepada penulis.

8. Seluruh tenaga pengajar dan pegawai di Fakultas Ilmu Komputer dan Teknologi Informasi USU, terutama kepada Ibu Dian Rachmawati, S.Si., M.Kom yang telah memberikan ide pemilihan judul skripsi ini.


(6)

9. Kekasih tercinta Indah Dwi Yanti Purba yang selalu memberikan dorongan motivasi dan semangat demi terselesainya skripsi ini.

10.Teman-teman seperjuangan, khususnya kepada Ahmad Rasyidi, Mego Suntoro, Dwi Rizky Ananda, Imam Matra, Irwansyah, Safriatullah, Andri Agasi, Arif Tri Hidayat, Arifin, Wahyu Eko Putra, serta seluruh Stambuk 2010 yang tidak dapat disebut satu-persatu, yang telah banyak membantu dalam selesainya pengerjaan skripsi ini.

11.Semua pihak yang terlibat langsung maupun tidak langsung yang tidak dapat penulis ucapkan satu demi satu yang telah membantu penyelesaian laporan ini.

Semoga Allah SWT melimpahkan berkah kepada kalian semua yang telah memberikan bantuan, perhatian, serta dukungan kepada penulis dalam menyelesaikan skripsi ini.

Medan, Juli 2015 Penulis,


(7)

ABSTRAK

Kriptografi kunci publik (asimetri) yang umum digunakan, seperti RSA dan ElGamal membutuhkan kunci privat minimal sebesar 1024 sampai dengan 3072 bit untuk bisa mengenkripsi pesan dengan aman (Paar, 2010). Dengan ukuran kunci sebesar ini, tentu tidak efisien jika komputasi diterapkan pada hardware dengan spesifikasi terbatas. Kriptografi kunci publik yang berdasarkan pada kurva eliptik, seperti kriptografi ElGamal Kurva Eliptik hadir dengan kelebihan ukuran kunci privat yang jauh lebih kecil, namun menghasilkan tingkat keamanan yang sama. Pesan rahasia yang dienkripsi menggunakan kriptografi kurva eliptik sebesar 160 bit setara keamanannya dengan kunci RSA sebesar 1024 bit, di mana perbandingannya sekitar 1:6 (Paar, 2010). Dengan kelebihan ini, implementasi algoritma kriptografi kurva eliptik dapat menghemat penggunaan resource dan waktu proses yang cukup besar, sehingga dapat dijalankan pada smartphone yang saat ini banyak digunakan oleh masyarakat. Di sisi lain, kriptografi asimetri memerlukan waktu enkripsi yang jauh lebih besar dibandingkan dengan kriptografi simetri. Namun saat pengiriman, pesan acak hasil enkripsi meng-gunakan kriptografi simetri harus dikirim beserta kuncinya (bersifat rahasia) agar dapat didekripsi kembali. Dengan menerapkan kombinasi dari kriptografi simetri yang unggul dalam kecepatan proses dan kriptografi asimetri yang unggul dalam tingkat keamanan akan menghasilkan sistem keamanan data yang handal, di mana pesan yang akan dikirim dienkripsi terlebih dahulu menggunakan algoritma kriptografi AES (Advanced Encryption Standard), kemudian kuncinya akan dienkripsi kembali menggunakan algoritma kriptografi ElGamal Kurva Eliptik, sehingga pesan acak dan kunci acak yang dihasilkan dapat dikirim dengan aman. Hasil pengujian sistem dengan pesan sebesar 3.2 MB yang dienkripsi menggunakan kunci sebesar 32 byte, dan persamaan kurva eliptik

= , = , dan � = , memerlukan

waktu sekitar 19 detik.

Kata kunci: Kriptografi Kurva Eliptik, ElGamal Kurva Eliptik, Rijndael, AES, Miller-Rabin.


(8)

IMPLEMENTATION OF ELLIPTIC CURVE ELGAMAL PUBLIC KEY CRYPTOSYSTEM AS KEY EXCHANGE OF AES (ADVANCED

ENCRYPTION STANDARD) BLOCK CIPHER

ABSTRACT

Public key cryptography (asymmetric) is commonly used, such as RSA and ElGamal requires a minimum private key of 1024 up to 3072 bits to be able encrypting messages securely (Paar 2010). With a key measure of this magnitude, certainly not efficient when applied to computing hardware with limited specifications. Public key cryptography based on elliptic curves, such as Elliptic Curve cryptography ElGamal comes with oversized private keys are much smaller, but it produces the same level of security. Secret message encrypted using elliptic curve cryptography equivalent of 160 bits of security with RSA keys of 1024 bits, in which the ratio of about 1: 6 (Paar 2010). With these advantages, the implementation of elliptic curve cryptography algorithms can save resource usage and processing time is quite large, so it can run on a smartphone that is currently widely used by the public. On the other hand, asymmetric cryptography encryption takes far greater than the symmetric cryptography. But when shipping, cipher encrypted using symmetric cryptography should be sent along with the key (confidential) that can be decrypted back. By applying a combination of symmetric cryptography is superior in asymmetric cryptographic processing speed and superior in security levels will produce reliable data security system, in which the messages to be sent encrypted first using a cryptographic algorithm AES (Advanced Encryption Standard), then the key will be encrypted re-use Elliptic Curve ElGamal cryptographic algorithm, so that the cipher and cipher-key can be sent securely. Results of testing the system with the message of 3.2 MB which is encrypted using a key of 32 bytes, and an

elliptic curve = , = , and = ,

takes about 19 seconds.

Keywords: Elliptic Curve Cryptography, Elliptic Curve ElGamal, Rijndael, Advanced Encryption Standard, Miller-Rabin.


(9)

DAFTAR ISI

Hal

PERSETUJUAN ... ii

PERNYATAAN ... iii

PENGHARGAAN ... iv

ABSTRAK ... vi

ABSTRACT ... vii

DAFTAR ISI ... viii

DAFTAR TABEL ... xi

DAFTAR GAMBAR ... xii

DAFTAR LAMPIRAN ... xiv

BAB 1: PENDAHULUAN 1.1. Latar Belakang ... 1

1.2. Rumusan Masalah ... 2

1.3. Ruang Lingkup Penelitian... 3

1.4. Tujuan Penelitian ... 3

1.5. Manfaat Penelitian ... 3

1.6. Metodologi Penelitian ... 4

1.7. Sistematika Penulisan ... 4

BAB 2: TINJAUAN PUSTAKA 2.1. Kriptografi... 6

2.1.1. Konsep acak (random) ... 7

2.1.2. Manajemen kunci ... 8

2.2. Matematika Dasar dalam Kriptografi ... 8

2.2.1. Keterbagian dan GCD (Greatest Common Divisors) ... 9

2.2.2. Aritmatika modular ... 12

2.2.3. Bilangan prima, faktorisasi prima, dan finite field... 15

2.3. AES (Advanced Encryption Standard) ... 16

2.3.1. Matematika pengantar ... 17


(10)

2.3.3. Enkripsi ... 21

2.3.4. Dekripsi ... 25

2.3.5. Key sechedule ... 28

2.4. Algoritma Percobaan Bilangan Prima Miller-Rabin ... 29

2.5. Elliptic Curve (Kurva Eliptik) ... 31

2.5.1. Kurva eliptik dalam finite field ... 36

2.5.2. Masalah logaritma diskrit kurva eliptik ... 38

2.6. Elliptic Curve ElGamal Public Key Cryptosystem ... 39

BAB 3: ANALISIS DAN PERANCANGAN SISTEM 3.1. Analisis Sistem... 41

3.1.1. Analisis masalah ... 41

3.1.2. Analisis kebutuhan ... 42

3.1.3. Analisis proses ... 42

3.2. Pemodelan Sistem ... 48

3.2.1. Use-case diagram ... 48

3.2.2. Activity diagram ... 55

3.2.3. Sequence diagram ... 56

3.3. Perancangan Sistem ... 56

3.3.1. Perancangan sistem pangkalan data (database) ... 56

3.3.2. Perancangan proses sistem... 57

3.3.3. Perancangan antar-muka sistem ... 58

BAB 4: IMPLEMENTASI DAN PENGUJIAN SISTEM 4.1. Implementasi Sistem ... 65

4.1.1. MainActivity ... 65

4.1.2. MessageFragment ... 66

4.1.3. FileActivity ... 67

4.1.4. MyTopSecretFragment ... 67

4.1.5. SettingActivity ... 68

4.1.6. FeedbackFragment ... 69

4.1.7. InputKeyDialog ... 69

4.2. Pengujian Sistem ... 70

4.2.1. Pengujian enkripsi teks (plain-text) dan file ... 70

4.2.2. Pengujian pembuatan parameter dan kunci publik ... 72


(11)

4.2.4. Pengujian dekripsi kunci acak (cipher-key) ... 76

4.2.5. Pengujian dekripsi naskah acak (cipher-text dan cipher-file) ... 76

4.3. Hasil Pengujian ... 78

4.3.1. Hasil pengujian algoritma kriptografi Rijndael ... 78

4.3.2. Hasil pengujian algoritma kriptografi ElGamal kurva eliptik ... 83

BAB 5: KESIMPULAN DAN SARAN 5.1. Kesimpulan ... 87

5.2. Saran ... 88


(12)

DAFTAR TABEL

Hal. Tabel 2.1. Penjumlahan dan perkalian dalam modulo 5 14

Tabel 2.2. Perkalian group of units modulo 24 14

Tabel 2.3. Contoh representasi state ( = ) dan cipher key ( = ) 21 Tabel 2.4. Jumlah putaran sebagai fungsi blok terhadap panjang kunci 21

Tabel 2.5. AES S-Box 22

Tabel 2.6. Besarnya pergeseran baris pada shiftRows terhadap panjang blok 22

Tabel 2.7. AES S- ′ 27

Tabel 3.1. Naratif Use-Case Enkripsi Pesan Rahasia dengan AES 49 Tabel 3.2. Naratif Use-Case Mengirim Pesan Acak (Cipher) dan Kunci Acak

(Cipher-key) 50

Tabel 3.3. Naratif Use-Case Membangkitkan Kunci Privat 51 Tabel 3.4. Naratif Use-Case Membangkitkan Kunci Publik 51 Tabel 3.5. Naratif Use-Case Membangkitkan Bilangan Prima dengan Metode

Miller-Rabin 52

Tabel 3.6. Naratif Use-Case Enkripsi Kunci dengan ElGamal Kurva Eliptik 52 Tabel 3.7. Naratif Use-Case Dekripsi Kunci Acak dengan ElGamal Kurva

Eliptik 53

Tabel 3.8. Naratif Use-Case Dekripsi Pesan Acak (Cipher) dengan AES 54

Tabel 4.1. Representasi blok dari kunci dan pesan 79

Tabel 4.2. Expanded key yang dihasilkan dari proses key schedule 79

Tabel 4.3. Proses enkripsi pada Blok 1 79

Tabel 4.4. Cipher yang dihasilkan proses enkripsi Rijndael 81 Tabel 4.5. Hasil pengujian kecepatan enkripsi/ dekripsi algoritma Rijndael 82 Tabel 4.6. Cipher dan yang dihasilkan proses enkripsi ElGamal kurva eliptik 83 Tabel 4.7. Hasil pengujian kecepatan enkripsi/ dekripsi algoritma ElGamal kurva

eliptik terhadap ukuran file 83

Tabel 4.8. Hasil pengujian kecepatan enkripsi/ dekripsi algoritma ElGamal kurva


(13)

DAFTAR GAMBAR

Hal.

Gambar 2.1. Flowchart algoritma enkripsi AES 25

Gambar 2.2. Flowchart algoritma dekripsi AES 26

Gambar 2.3. Dua contoh kurva eliptik 31

Gambar 2.4. Hukum penambahan pada kurva eliptik 31

Gambar 2.5. Penambahan titik dengan dirinya sendiri 33 Gambar 2.6. Garis vertikal yang melalui , dan ′ , − 34 Gambar 2.7. Sistem kriptografi kunci publik ElGamal kurva eliptik 40 Gambar 3.1. Diagram Ishikawa untuk menganalisis masalah 41 Gambar 3.2. Analisis proses terhadap input yang diterima dan output yang

dihasilkan 43

Gambar 3.3. Blok dari kunci "Muhammad_RezΔNst" 44

Gambar 3.4. Flowchart proses Rijndael 46

Gambar 3.5. Diagram use-case sistem keamanan data 49 Gambar 3.6. Diagram activity sistem keamanan data 55 Gambar 3.7. Diagram sequence sistem keamanan data 56 Gambar 3.8. Entity Relationship Diagram (ERD) sistem keamanan data 57

Gambar 3.9. Physical DFD sistem keamanan data 58

Gambar 3.10. Desain MainActivity 59

Gambar 3.11. Desain MessageFragment 60

Gambar 3.12. Desain FileActivity 61

Gambar 3.13. Desain MyTopSecretFragment 62

Gambar 3.14. Desain SettingActivity 63

Gambar 3.15. Desain FeedbackFragment 63

Gambar 3.16. Desain KeyInputDialog 64

Gambar 4.1. MainActivity yang memiliki navigation drawer dan option menu 66 Gambar 4.2. MessageFrament yang muncul saat memilih menu Message 66 Gambar 4.3. FileActivity yang menampilkan seluruh file 67 Gambar 4.4. MyTopSecretFragment yang menampilkan seluruh cipher-file 68 Gambar 4.5. SettingActivity untuk melakukan pengaturan 68 Gambar 4.6. FeedbackFragment untuk mengirim umpan-balik pengguna 69 Gambar 4.7. InputKeyDialog untuk menerima input kunci Rijndael 69 Gambar 4.8. Proses enkripsi teks (plain-text) pada MessageFragment 71 Gambar 4.9. Proses enkripsi file pada FileActivity 71 Gambar 4.10. Enkripsi file . menghasilkan cipher-file . 72 Gambar 4.11. Proses pengiriman permintaan parameter publik dari pengirim 73 Gambar 4.12. Pengiriman permintaan parameter publik melalui e-mail 73


(14)

Gambar 4.13. Pembangkitan parameter publik dengan tingkat keamanan Normal 74 Gambar 4.14. Pengiriman pesan acak (cipher-text) kepada penerima 75 Gambar 4.15. E-mail yang berisi pesan acak (cipher-text) dan kunci acak

(cipher-key) 75

Gambar 4.16. Hasil dekripsi pesan rahasia mendapatkan kembali pesan asli 76 Gambar 4.17. Proses dekripsi teks acak mendapatkan kembali teks asli 77 Gambar 4.18. Proses dekripsi file acak mendapatkan kembali file asli 78 Gambar 4.19. Grafik perbandingan kecepatan enkripsi dan dekripsi algoritma

kriptografi Rijndael terhadap ukuran file dan blok 83 Gambar 4.20. Grafik perbandingan kecepatan enkripsi dan dekripsi algoritma

kriptografi ElGamal kurva eliptik terhadap ukuran file 85 Gambar 4.21. Grafik perbandingan kecepatan enkripsi dan dekripsi algoritma


(15)

DAFTAR LAMPIRAN

Hal.

Source Codes 90


(16)

ABSTRAK

Kriptografi kunci publik (asimetri) yang umum digunakan, seperti RSA dan ElGamal membutuhkan kunci privat minimal sebesar 1024 sampai dengan 3072 bit untuk bisa mengenkripsi pesan dengan aman (Paar, 2010). Dengan ukuran kunci sebesar ini, tentu tidak efisien jika komputasi diterapkan pada hardware dengan spesifikasi terbatas. Kriptografi kunci publik yang berdasarkan pada kurva eliptik, seperti kriptografi ElGamal Kurva Eliptik hadir dengan kelebihan ukuran kunci privat yang jauh lebih kecil, namun menghasilkan tingkat keamanan yang sama. Pesan rahasia yang dienkripsi menggunakan kriptografi kurva eliptik sebesar 160 bit setara keamanannya dengan kunci RSA sebesar 1024 bit, di mana perbandingannya sekitar 1:6 (Paar, 2010). Dengan kelebihan ini, implementasi algoritma kriptografi kurva eliptik dapat menghemat penggunaan resource dan waktu proses yang cukup besar, sehingga dapat dijalankan pada smartphone yang saat ini banyak digunakan oleh masyarakat. Di sisi lain, kriptografi asimetri memerlukan waktu enkripsi yang jauh lebih besar dibandingkan dengan kriptografi simetri. Namun saat pengiriman, pesan acak hasil enkripsi meng-gunakan kriptografi simetri harus dikirim beserta kuncinya (bersifat rahasia) agar dapat didekripsi kembali. Dengan menerapkan kombinasi dari kriptografi simetri yang unggul dalam kecepatan proses dan kriptografi asimetri yang unggul dalam tingkat keamanan akan menghasilkan sistem keamanan data yang handal, di mana pesan yang akan dikirim dienkripsi terlebih dahulu menggunakan algoritma kriptografi AES (Advanced Encryption Standard), kemudian kuncinya akan dienkripsi kembali menggunakan algoritma kriptografi ElGamal Kurva Eliptik, sehingga pesan acak dan kunci acak yang dihasilkan dapat dikirim dengan aman. Hasil pengujian sistem dengan pesan sebesar 3.2 MB yang dienkripsi menggunakan kunci sebesar 32 byte, dan persamaan kurva eliptik

= , = , dan � = , memerlukan

waktu sekitar 19 detik.

Kata kunci: Kriptografi Kurva Eliptik, ElGamal Kurva Eliptik, Rijndael, AES, Miller-Rabin.


(17)

IMPLEMENTATION OF ELLIPTIC CURVE ELGAMAL PUBLIC KEY CRYPTOSYSTEM AS KEY EXCHANGE OF AES (ADVANCED

ENCRYPTION STANDARD) BLOCK CIPHER

ABSTRACT

Public key cryptography (asymmetric) is commonly used, such as RSA and ElGamal requires a minimum private key of 1024 up to 3072 bits to be able encrypting messages securely (Paar 2010). With a key measure of this magnitude, certainly not efficient when applied to computing hardware with limited specifications. Public key cryptography based on elliptic curves, such as Elliptic Curve cryptography ElGamal comes with oversized private keys are much smaller, but it produces the same level of security. Secret message encrypted using elliptic curve cryptography equivalent of 160 bits of security with RSA keys of 1024 bits, in which the ratio of about 1: 6 (Paar 2010). With these advantages, the implementation of elliptic curve cryptography algorithms can save resource usage and processing time is quite large, so it can run on a smartphone that is currently widely used by the public. On the other hand, asymmetric cryptography encryption takes far greater than the symmetric cryptography. But when shipping, cipher encrypted using symmetric cryptography should be sent along with the key (confidential) that can be decrypted back. By applying a combination of symmetric cryptography is superior in asymmetric cryptographic processing speed and superior in security levels will produce reliable data security system, in which the messages to be sent encrypted first using a cryptographic algorithm AES (Advanced Encryption Standard), then the key will be encrypted re-use Elliptic Curve ElGamal cryptographic algorithm, so that the cipher and cipher-key can be sent securely. Results of testing the system with the message of 3.2 MB which is encrypted using a key of 32 bytes, and an

elliptic curve = , = , and = ,

takes about 19 seconds.

Keywords: Elliptic Curve Cryptography, Elliptic Curve ElGamal, Rijndael, Advanced Encryption Standard, Miller-Rabin.


(18)

BAB 1 PENDAHULUAN

1.1. Latar Belakang

Banyak sekali transaksi-transaksi elektronik yang terjadi setiap detiknya di seluruh dunia, terutama melalui media internet yang dapat diakses kapanpun dan dari manapun. Transaksi-transaksi ini tentu melibatkan data yang merupakan kunci dari perputaran roda informasi yang terus berlangsung setiap saat. Data inilah yang akan dikirim dan diterima untuk selanjutnya menjadi basis dari suatu informasi yang diperlukan. Namun, tidak semua data dapat diakses secara bebas. Ada kalanya data menjadi sangat sensitif, sehingga hanya pihak-pihak tertentu saja yang diizinkan mengetahuinya dan dijaga kerahasiaannya dari pihak-pihak yang tidak diinginkan. Kata sandi dari suatu akun media sosial atau e-mail adalah data yang sangat sensitif. Jika data ini diketahui oleh pihak lain, tentu akan mengakibatkan kerugian bagi pemiliknya.

Internet sebagai media perpindahan data tidak mengenal apakah data itu bersifat rahasia atau tidak. Semua data akan bebas "berlalu-lintas" dan dapat diakses bahkan tanpa sepengetahuan pengirim/ pemilik data. Jika data tersebut bersifat rahasia, tentu hal ini bisa menjadi sebuah kerugian yang besar jika diakses oleh pihak lain tanpa sepengetahuan pemilik data. Pihak-pihak yang menggunakan internet sebagai media perpindahan data harus menerapkan suatu sistem keamanan data di dalamnya untuk melindungi data yang bersifat rahasia ini, dan kriptografi menyediakan banyak metode untuk menciptakan sistem keamanan data.

Kriptografi merupakan seni menyembunyikan pesan rahasia (plain-text) menjadi sekumpulan teks baru yang tidak memiliki makna sama sekali (cipher-text). Pada era modern sekarang ini, kriptografi telah sampai pada sistem kriptografi kunci publik (kriptografi asimetri) yang menghasilkan dua kunci yang berbeda, yaitu kunci publik dan privat. Dibandingkan dengan sistem kriptografi yang lama (kriptografi simetri), kriptografi kunci publik memiliki tingkat keamanan yang lebih tinggi. Namun dari segi kecepatan, kriptografi simetri masih lebih unggul.


(19)

Beberapa aplikasi dari kriptografi kunci publik yang sering digunakan adalah

Key-exchange (pertukaran kunci) dan Digital signature (tanda tangan digital). Dengan mengoptimalkan kelebihan dari kriptografi simetri yang unggul dalam kecepatan prosesnya dan kriptografi asimetri yang memiliki tingkat keamanan yang tinggi, maka akan tercipta sebuah sistem keamanan data yang handal, di mana pesan rahasia akan dienkripsi terlebih dahulu menggunakan kriptografi simetri, kemudian kunci dari kriptografi simetri ini akan dienkripsi menggunakan kriptografi asimetri. Selanjutnya pesan acak (cipher-text) dan kuncinya yang sudah dienkripsi (cipher-key) inilah yang akan dikirim melalui internet atau media pengiriman lain yang tidak aman sekalipun.

Kriptografi kunci publik (asimetri) yang umum digunakan, seperti RSA dan ElGamal membutuhkan kunci privat minimal 1024 sampai dengan 3072 bit untuk bisa mengenkripsi pesan dengan aman (Paar, 2010). Dengan ukuran kunci sebesar ini, tentu tidak efisien jika komputasi diterapkan pada hardware dengan spesifikasi terbatas.

Kriptografi kunci publik yang berdasarkan pada kurva eliptik, seperti kriptografi

Elliptic Curve ElGamal hadir dengan kelebihan ukuran kunci privat yang jauh lebih kecil, namun menghasilkan tingkat keamanan yang sama. Pesan rahasia yang dienkripsi menggunakan Elliptic Curve Cryptography sebesar 160 bit setara keamanannya dengan kunci RSA sebesar 1024 bit, di mana perbandingannya sekitar 1:6 (Paar, 2010). Dengan kelebihan ini, implementasi algoritma kriptografi kurva eliptik dapat menghemat penggunaan resource dan waktu proses yang cukup besar, sehingga dapat dijalankan pada smartphone yang saat ini banyak digunakan oleh masyarakat.

1.2. Rumusan Masalah

Adapun rumusan masalah dalam penelitian ini adalah melindungi pesan rahasia berupa teks atau file menggunakan algoritma kriptografi simetri yang akan dikirim melalui internet atau media pengiriman lainnya dan mengamankan distribusi pesan rahasia tersebut beserta kuncinya yang telah terenkripsi menggunakan algoritma kriptografi asimetri berbasis kurva eliptik.


(20)

1.3. Ruang Lingkup Penelitian

Adapun batasan masalah dalam perancangan kombinasi sistem kriptografi asimetri dan simetri ini adalah:

1. Algoritma asimetri yang digunakan adalah Elliptic Curve ElGamal dan algoritma simetri yang digunakan adalah AES (Advanced Encryption Standard).

2. Menggunakan persamaan kurva eliptik dalam finite field� , dengan maksimal 20 digit.

3. Sistem akan mengenkripsi pesan berupa plain-text, text file (*.txt), pdf file

(*.pdf), dan beberapa file dokumen Microsoft (*.doc, *.docx, *.xls, *.xlsx, *.ppt, *.pptx).

4. Pembangkit bilangan prima menggunakan metode Miller-Rabin.

5. Menggunakan bahasa pemrograman Java yang diimplementasikan pada platform

Android dengan minimum SDK API 14: Android 4.0 (IceCreamSandwich) dan menggunakan database SQLite.

1.4. Tujuan Penelitian

Menciptakan sistem keamanan data dengan kombinasi algoritma kriptografi asimetri

Elliptic Curve ElGamal sebagai pengaman distribusi kunci dan kriptografi simetri AES (Advanced Encryption Standard) sebagai pengaman pesan rahasia.

1.5. Manfaat Penelitian

Bagi penulis, penelitian ini dapat menambah pengetahuan tentang algoritma kriptografi kunci publik ElGamal kurva eliptik dan algoritma Advanced Encryption Standard. Dan memahami penerapan salah satu aplikasi dari kriptografi kunci publik, yaitu sebagai pengaman distribusi kunci. Di mana algoritma kunci publik ElGamal kurva eliptik akan mengenkripsi kunci dari block cipher AES.

Bagi pengguna, produk hasil dari penelitian ini dapat melindungi pesan yang akan dikirim melalui media internet atau media pengiriman lain yang tidak aman sekalipun, hingga sampai ke penerima tanpa diketahui makna dari isi pesan tersebut oleh pihak lain.


(21)

1.6. Metodologi Penelitian

Metodologi penelitian yang dilakukan dalam penelitian ini adalah: 1. Studi Pustaka

Pada tahap ini dilakukan peninjauan terhadap beberapa buku, jurnal, dan artikel tentang algoritma Elliptic Curve ElGamal Public Key Cryptosystem dan Advanced Encryption Standard.

2. Analisis dan Perancangan

Melakukan analisis terhadap batasan masalah yang ada, kinerja, dan cara kerja sistem disertai pembuatan flowchart, dan Unified Modeling Language (UML). 3. Implementasi

Algoritma kriptografi kunci publik ElGamal kurva eliptik diimplementasi untuk mengenkripsi kunci dari block cipher AES (Advanced Encryption Standard). 4. Pengujian

Sistem keamanan data yang telah diimplementasi diuji apakah algoritma Elliptic Curve ElGamal Public Key Cryptosystem dapat mengenkripsi dan mendekripsi kunci dari block cipher AES (Advanced Encryption Standard) dan menguji apakah algoritma AES dapat mengenkripsi pesan rahasia dan mendekripsi pesan acak kembali menjadi pesan asli.

5. Dokumentasi

Membuat Unified Modeling Language (UML) dan skripsi sebagai laporan dari hasil penelitian.

1.7. Sistematika Penulisan

Adapun sistematika penulisan skripsi ini adalah sebagai berikut: BAB 1: PENDAHULUAN

Menguraikan latar belakang, rumusan masalah, batasan masalah, tujuan, manfaat dan metodologi penelitian.


(22)

BAB 2: TINJAUAN PUSTAKA

Berisi rangkuman informasi yang dihimpun dari pustaka yang relevan dengan topik yang menjadi objek kajian untuk memperluas basis informasi dalam melakukan kajian dan/atau akan digunakan sebagai basis argumentasi di dalam mengemukakan pandangan.

BAB 3: ANALISIS DAN PERANCANGAN SISTEM

Menguraikan proses yang dilaksanakan dalam kajian untuk menyelesaikan persoalan yang dipertanyakan dan bagaimana pelaksanaan kajian tersebut. BAB 4: IMPLEMENTASI DAN PENGUJIAN SISTEM

Menguraikan analisis dan hasil yang diperoleh di akhir pelaksanaan Skripsi dan pokok-pokok kesimpulan yang dapat dikemukakan sehubungan dengan pencapaian hasil kajian implementasi algoritma kriptografi ElGamal kurva eliptik dalam mengamankan kunci dari block cipher AES.

BAB 5: KESIMPULAN DAN SARAN

Menguraikan kesimpulan yang didapat dari hasil kajian dan hal-hal apa saja yang selayaknya dilakukan agar kajian yang diperoleh lebih sempurna, atau agar dapat dilakukan pengayaan dari pengetahuan yang diperoleh dari kajian.


(23)

BAB 2

TINJAUAN PUSTAKA

2.1. Kriptografi

Kriptografi adalah ilmu mengenai teknik enkripsi, di mana naskah asli diacak meng-gunakan suatu kunci enkripsi menjadi sesuatu yang sulit dibaca oleh seseorang yang tidak memiliki kunci dekripsi. Dekripsi menggunakan kunci dekripsi mendapatkan kembali naskah asli (Kromodimoeljo, 2010). Proses enkripsi dilakukan menggunakan suatu algoritma dengan beberapa parameter. Biasanya algoritma tidak dirahasiakan, bahkan enkripsi yang mengandalkan kerahasiaan algoritma dianggap sesuatu yang tidak baik. Rahasia terletak di beberapa parameter yang digunakan. Jadi, kunci ditentukan oleh parameter. Parameter penentu kunci dekripsi inilah yang harus dirahasiakan.

Dalam kriptografi klasik, teknik enkripsi yang digunakan adalah enkripsi simetris, di mana kunci dekripsi sama dengan kunci enkripsi. Untuk teknik enkripsi asimetris atau biasa disebut public key cryptography, kunci dekripsi tidak sama dengan kunci enkripsi. Enkripsi, dekripsi, dan pembuatan kunci dalam kriptografi asimetris memerlukan komputasi yang lebih intensif dibandingkan dengan enkripsi simetris, karena enkripsi asimetris menggunakan bilangan-bilangan yang sangat besar. Namun, walaupun enkripsi asimetris lebih "mahal" dibandingkan enkripsi simetris, public key cryptography sangat bermanfaat untuk key management dan digital signature.

Secara garis besar, proses enkripsi adalah proses pengacakan "naskah asli" (plain-text) menjadi "naskah acak" (cipher-text) yang "sulit untuk dibaca" oleh seseorang yang tidak memiliki kunci dekripsi. Yang dimaksud dengan "sulit untuk dibaca" di sini adalah, probabilitas mendapat kembali naskah asli oleh seseorang yang tidak memiliki kunci dekripsi dalam waktu yang tidak terlalu lama adalah sangat kecil. Jadi, suatu proses enkripsi yang baik menghasilkan naskah acak yang memerlukan waktu yang lama (contohnya satu juta tahun) untuk didekripsi oleh seseorang yang tidak memiliki kunci dekripsi. Satu cara untuk mendapatkan kembali naskah asli tentunya dengan menerka kunci dekripsi. Jadi, proses menerka kunci dekripsi harus menjadi


(24)

sesuatu yang sulit. Tentunya naskah acak harus dapat didekripsi oleh seseorang yang memiliki kunci dekripsi untuk mendapatkan kembali naskah asli. Walaupun awalnya kriptografi digunakan untuk merahasiakan naskah teks, kini kriptografi digunakan untuk data apa saja yang berbentuk digital (Kromodimoeljo, 2010).

2.1.1. Konsep acak (random)

Sifat acak dalam kriptografi adalah sifat bebas dari kecenderungan sehingga tidak mudah untuk diterka. Dari segi matematika jika suatu variabel dianggap bersifat acak, maka teori probabilitas dapat digunakan untuk memrediksi "kelakuan" dari variabel tersebut, antara lain variabel akan memenuhi beberapa kriteria statistik. Metode statistika dapat digunakan berdasarkan apa yang sudah terjadi untuk menilai apakah variabel memenuhi kriteria statistik untuk variabel acak. Akan tetapi, jika kriteria statistik terpenuhi, belum tentu variabel benar acak, karena sesuatu yang deterministik seperti pseudo-random number generator dapat memenuhi kriteria statistik untuk variabel acak. Jadi, kriteria statistik bukan merupakan definisi untuk variabel acak.

Sifat acak memang tidak dapat didefinisikan secara matematis, sebab sesuatu yang memiliki definisi matematis sudah pasti tidak bersifat acak. Apalagi jika definisi berupa rumus yang dapat digunakan untuk kalkulasi. Yang didefinisikan bukan saja mudah diterka, tetapi tidak perlu diterka.

Sifat acak dapat dikaitkan dengan urutan events, dimana event berikutnya dalam suatu urutan tidak mudah untuk diterka berdasarkan apa yang sudah berlalu. Sifat ini diperlukan dalam pembuatan kunci (key generation), agar kunci dekripsi tidak mudah untuk diterka.

Sifat acak juga dikaitkan dengan tidak adanya korelasi (atau korelasi yang mendekati nol). Dalam kriptografi, tidak diinginkan adanya korelasi antara naskah asli dengan naskah acak atau kunci dengan naskah acak. Ini untuk mempersulit analisa seperti analisa frekuensi (frequency analysis) atau analisa yang lebih canggih, seperti

linear cryptanalysis atau differential cryptanalysis. Meskipun tidak sebenarnya acak, sesuatu yang pseudo-random bermanfaat dan digunakan dalam kriptografi, tetapi harus dikombinasikan dengan sesuatu yang benar acak. Sebagai contoh, pseudo-random number generator dikombinasikan dengan sumber entropi yang benar acak sebagai

seed, untuk mendapatkan sesuatu yang praktis bersifat random number generator


(25)

2.1.2. Manajemen kunci

Aspek manajemen kunci sangat penting dalam aplikasi kriptografi. Proses pembuatan kunci sangat penting dan sebaiknya dilakukan dengan acak. Sumber acak dapat diambil dari berbagai kejadian (events) yang muncul secara acak. Sistem operasi seperti unix

menggunakan kombinasi system events termasuk interrupts sebagai sumber entropi yang kemudian dikombinasikan dengan algoritma pseudo-random number generator

menjadi random number generator. Aplikasi kriptografi dapat menggunakan random number generator yang disediakan sistem operasi untuk pembuatan kunci, akan tetapi sebaiknya ini dilakukan hanya jika random number generator cukup acak.

Distribusi kunci secara aman juga penting untuk keperluan pengamanan komunikasi. Sebagai contoh, untuk komunikasi yang diamankan dengan enkripsi simetris, tentunya kedua mitra dalam komunikasi harus menggunakan kunci yang sama. Kunci ini dapat dibuat oleh satu pihak dan dikirim secara aman ke mitra komunikasi. Pengiriman kunci dapat dilakukan out-of-band, yaitu menggunakan jalur khusus di luar jalur normal komunikasi, atau dilakukan in-band melalui jalur normal menggunakan sarana kriptografi kunci publik. Alternatif dari pengiriman kunci adalah key agreement, di mana kedua mitra berpartisipasi membuat kunci tanpa dapat diketahui oleh pihak ketiga. Key agreement juga menggunakan kriptografi kunci publik.

Penyimpanan kunci jelas sangat penting untuk pengamanan sistem enkripsi secara menyeluruh. Kunci yang disimpan secara sembrono akan mudah untuk "dicuri" oleh pihak yang tidak diinginkan. Solusi untuk penyimpanan kunci beraneka ragam. Mulai dari penggunaan hardware khusus, di mana kunci dekripsi disimpan dan tidak dapat keluar dari hardware tersebut, sampai dengan penyimpanan dalam file yang dienkripsi menggunakan password atau passphrase (Kromodimoeljo, 2010).

2.2. Matematika Dasar dalam Kriptografi

Aritmatika modular sangat berperan dalam kriptografi karena banyak digunakan dalam algoritma enkripsi, baik untuk kriptografi simetris maupun kriptografi kunci publik. Dalam aritmatika modular, konsep GCD (Greatest Common Divisors) digunakan antara lain untuk operasi invers yang dapat dikalkulasi secara efisien menggunakan algoritma

Euclidean, algoritma sangat penting yang telah berusia lebih dari 2000 tahun. Sebelum mempelajari kriptografi lebih mendalam, akan dibahas terlebih dahulu studi tentang teori bilangan.


(26)

2.2.1. Keterbagian dan GCD (Greatest Common Divisors)

Sebagian besar kriptografi modern dibangun atas dasar-dasar aljabar dan teori bilangan. Pada tingkat yang paling dasar, teori bilangan adalah studi tentang bilangan asli

, , , , , …, atau lebih tepatnya, studi tentang bilangan bulat … , − , − , , , , ….

Himpunan bilangan bulat dilambangkan dengan simbol ℤ. Jika dan adalah bilangan bulat, maka kedua bilangan bulat tersebut dapat ditambahkan + , dikurangi

− , dikalikan ∙ , dan memenuhi semua aturan umum aritmatika (hukum komutatif, asosiatif, distributif, dan lain-lain). Tetapi, suatu bilangan bulat tidak selalu bisa dibagi dengan bilangan bulat yang lain. Sebagai contoh, tidak bisa dibagi dengan , karena tidak ada bilangan bulat . Hal inilah yang menjadi konsep dasar keterbagian. Definisi 2.1. Misalkan dan adalah bilangan bulat, dengan ≠ . Maka dapat dikatakan membagi , atau habis dibagi dengan , jika ada bilangan bulat sedemikian rupa sehingga = . Untuk menunjukkan bahwa habis dibagi dengan , dapat dilambangkan dengan | . Jika tidak dapat membagi , maka dapat dilambangkan dengan ∤ (Hoffstein, et al. 2008).

Contohnya | . , karena . = ∙ . Contoh lainnya,

∤ , karena ketika mencoba untuk membagi dengan , didapatkan sisa . Lebih tepatnya = ∙ + . Jadi, bukan kelipatan .

Semua bilangan bulat habis dibagi dengan . Bilangan bulat yang habis dibagi adalah bilangan bulat genap, dan bilangan bulat yang tidak habis dibagi adalah bilangan bulat ganjil. Dan berikut adalah sifat-sifat dari keterbagian.

Misalkan , , ∈ ℤ, maka: a) Jika | dan | , maka | . b) Jika | dan | , maka = ± .

c) Jika | dan | , maka | + dan | − (Hoffstein, et al. 2008). Definisi 2.2. Faktor persekutuan terbesar dari dan adalah bilangan bulat positif terbesar, sehingga | dan | . Faktor persekutuan terbesar dari dan dinotasikan dengan gcd , (dalam bahasa Indonesia disebut FPB). Jika kedua nilai

dan adalah , maka gcd , tidak terdefinisi (Hoffstein, et al. 2008).

Contoh 2.1. FPB dari dan adalah , karena | dan | dan tidak ada nilai lain yang lebih besar dari . Jadi, gcd , = .


(27)

Algoritma yang efisien untuk menghitung FPB adalah division with remainder

atau biasa disebut dengan metode pembagian panjang. Jika dan adalah bilangan bulat positif dan dibagi dengan b, maka akan diperoleh hasil bagi dan sisanya , di mana sisa lebih kecil dari . Sebagai contoh, dibagi dengan memberikan hasil bagi dengan sisa . Atau dapat ditulis sebagai = ∙ + , di mana sisanya 9 lebih kecil dari pembagi .

Definisi 2.3 (Algoritma Pembagian). Misalkan dan adalah bilangan bulat positif. Kemudian dibagi dengan b memiliki hasil bagi dan sisanya , berarti bahwa

= ∙ + dengan < .

Jika adalah pembagi untuk dan , maka jelas dari persamaan bahwa juga pembagi untuk . Demikian pula, jika adalah pembagi untuk dan , maka juga pembagi untuk . Dengan kata lain, pembagi dan adalah sama dengan pembagi untuk dan , karenanya gcd , = gcd , (Hoffstein, et al. 2008).

Dengan proses yang sama, membagi dengan untuk mendapatkan hasil bagi dan sisa lainnya, maka = ∙ ′+ ′ dengan ′< . Dan gcd , = gcd , ′ . Jika proses ini terus berlanjut, maka sisanya akan terus menjadi lebih kecil sampai akhirnya mendapatkan sisa , di mana nilai akhir dari gcd , = adalah sama dengan FPB dari dan .

Melanjutkan Contoh 2.1 untuk mengetahui FPB dari dan dengan menggunakan algoritma division with remainder,

= ∙ +

= ∙ +

= ∙ +

= ∙ +

= ∙ +

Teorema 2.1 (Algoritma Euclidean). Misalkan dan adalah bilangan bulat positif dengan . Berikut adalah algoritma untuk menghitung gcd , :

1) Misalkan = dan = . 2) = .

3) Bagi �− dengan untuk mendapatkan hasil bagi dan sisa �+ ,

�− = � ∙ � + �+ dengan �+ < �.

4) Jika sisa �+ = , maka = gcd , dan algoritma berakhir. 5) Jika tidak, �+ > , sehingga = + dan lanjut ke Langkah 3.


(28)

Pembagian pada Langkah dilakukan sebanyak + kali.

Teorema 2.2 (Algoritma Extended Euclidean). Misal dan adalah bilangan bulat positif. Maka persamaan + = gcd , selalu memiliki solusi dalam bilangan bulat dan . Jika , adalah salah satu solusinya, maka setiap solusi memiliki bentuk:

= +gcd ,

= +gcd ,

Definisi 2.4. Misalkan dan adalah bilangan bulat. Dikatakan bahwa dan adalah relatif prima atau koprima, jika gcd , = . Secara umum, persamaan +

= gcd , dapat dijadikan relatif prima dengan membagi kedua sisi dengan

gcd , , sehingga

gcd , + gcd , =

di mana = /gcd , dan = /gcd , adalah relatif prima dan memenuhi

+ = (Hoffstein, et al. 2008).

Berdasarkan Contoh 2.1, gcd , = dan memenuhi − ∙ +

∙ = . Agar menjadi relatif prima, kedua sisi dibagi dengan . Sehingga persamaan sebelumnya menjadi − ∙ + ∙ = , dengan = − dan = adalah koefisien kombinasi linear dari dan yang sama dengan . Contoh selanjutnya menjelaskan bagaimana menyubstitusi nilai-nilai dari algoritma Euclidean

untuk menyelesaikan + = gcd , , serta menghitung dan jika dan relatif prima. Misalkan = dan = . Dengan menggunakan algoritma Euclidean

diperoleh hasil sebagai berikut:

= ∙ +

= ∙ +

= ∙ +

= ∙ + .

Berdasarkan hasil bagi , , dan , tercipta sebuah algoritma seperti berikut:

2 1 11 2

0 1 a c e g 1 0 b d f h


(29)

2 1 11 2

0 1 2 c e g = ∙ + =

1 0 1 d f h = ∙ + =

2 1 11 2

0 1 2 3 e g = ∙ + =

1 0 1 1 f h = ∙ + =

2 1 11 2

0 1 2 3 35 g = ∙ + =

1 0 1 1 12 h = ∙ + =

2 1 11 2

0 1 2 3 35 73 = ∙ + =

1 0 1 1 12 25 ℎ = ∙ + =

Terlihat bahwa kolom terakhir adalah masing-masing nilai untuk dan . Dan kolom di samping kolom terakhir adalah nilai dan . Jadi, dari contoh ini ditemukan bahwa ∙ − ∙ = (Hoffstein, et al. 2008).

Secara umum, jika dan relatif prima dan jika , , … , adalah sederetan hasil bagi dari penerapan algoritm Euclidean terhadap dan , maka

… −

0 1 … a

1 0 … b

Nilai-nilai pada kotak dihitung dengan terlebih dahulu melakukan inisialisasi sebagai berikut:

= , = , = ∙ + , = ∙

lalu, selama > , hitung = �− + �− dan = �− + �− .

Empat nilai dari dua kolom terakhir memenuhi ∙ − ∙ = − . Dengan mengalikan kedua sisi dengan − memberikan penyelesaian:

= − − , = − + −

ke dalam persamaan + = (Hoffstein, et al. 2008).

2.2.2. Aritmatika modular

Setiap orang pasti pernah membaca jam, di mana terdapat perhitungan yang aneh. Misalnya, + = atau − = . Tetapi tidak ada yang salah dalam perhitungan


(30)

waktu tersebut, karena jam : adalah jam sebelum jam : . Jadi, yang pertama sekali dilakukan adalah menghitung − = − , lalu menambahkannya dengan . Demikian pula, jam setelah jam : adalah jam : , karena + − = . Teori kongruen adalah metode paling tepat dalam perhitungan yang didasarkan pada gagasan sederhana jam aritmatika.

Definisi 2.5: Misalkan bilangan bulat , maka bilangan bulat dan disebut kongruen modulo jika selisih keduanya habis dibagi . Sehingga dapat ditulis , dan nilai disebut modulus (Hoffstein, et al. 2008).

Contoh jam sebelumnya dapat ditulis sebagai kongruen menggunakan modulus

= , + = dan − = − . Angka-angka

yang memenuhi adalah angka yang habis dibagi dengan , yaitu kelipatan .

Teorema 2.3: Misalkan bilangan bulat ,

a) Jika dan , maka ± ±

dan ∙ ∙ .

b) Misalkan bilangan bulat , kemudian ∙ untuk suatu bilangan bulat jika dan hanya jika gcd , = . Jika bilangan bulat ada, maka dapat dikatakan bahwa adalah invers dari modulo (Hoffstein, et al. 2008).

Teorema 2.3(b) mengatakan bahwa jika gcd , = , maka ada invers dari modulo . Misalkan = dan = , jelas gcd , = , sehingga ada invers untuk modulo . Dan inversnya adalah , karena ∙ . Jadi, −

. Demikian pula, gcd , = sehingga − ada dalam modulo . Dan karena ∙ , maka adalah invers dalam modulo .

Permasalahan modulo dalam pecahan / dapat diselesaikan selama penyebut adalah relatif prima terhadap . Sebagai contoh / modulo , dengan

terlebih dahulu mengamati bahwa ∙ , maka − .

Selanjutnya:

= ∙ −

Selanjutnya jika dibagi dengan memiliki hasil bagi dan sisa bagi , dapat ditulis sebagai = ∙ + dengan < . Hal ini menunjukkan bahwa


(31)

menghitung bilangan bulat modulo , cukup menggunakan bilangan < . Dan definisi selanjutnya adalah:

ℤ/ ℤ = { , , , … , − }

di mana ℤ/ ℤ disebut ring bilangan bulat modulo . Perhatikan bahwa setiap kali dilakukan penambahan atau perkalian dalam ℤ/ ℤ, hasilnya selalu dibagi dengan dan mengambil sisanya untuk mendapatkan sebuah elemen dalam ℤ/ ℤ.

Tabel 2.1 memperlihatkan ring ℤ/ ℤ dengan tabel penjumlahan dan perkalian dalam modulo secara lengkap.

+ 0 1 2 3 4 ∙ 0 1 2 3 4

0 0 1 2 3 4 0 0 0 0 0 0

1 1 2 3 4 0 1 0 1 2 3 4

2 2 3 4 0 1 2 0 2 4 1 3

3 3 4 0 1 2 3 0 3 1 4 2

4 4 0 1 2 3 4 0 4 3 2 1

Tabel 2.1: Penjumlahan dan perkalian dalam modulo .

Definisi 2.6: Teorema 2.3(b) menjelaskan bahwa memiliki invers modulo jika dan hanya jika gcd , = . Bilangan-bilangan yang memiliki invers disebut

unit. Himpunan semua unit dinotasikan sebagai

ℤ/ ℤ ∗= { ∈ ℤ/ ℤ ∶ gcd , = }

= { ∈ ℤ/ ℤ ∶ memiliki invers modulo },

himpunan ℤ/ ℤ ∗ disebut kumpulan unit (group of units) modulo .

Perhatikan bahwa jika dan adalah unit modulo , hasilnya adalah . Jadi, ketika dua unit dikalikan, hasilnya selalu unit. Sedangkan jika dua unit ditambahkan, hasilnya belum tentu adalah unit.

Group of units modulo adalah ℤ/ ℤ ∗ = { , , , , , , , }. Tabel perkalian untuk ℤ/ ℤ ∗ seperti ditunjukkan pada Tabel 2.2:

Tabel 2.2: Perkalian group of units modulo .

∙ 1 5 7 11 13 17 19 23

1 1 5 7 11 13 17 19 23

5 5 1 11 7 17 13 23 19

7 7 11 1 5 19 23 13 17

11 11 7 5 1 23 19 17 13

13 13 17 19 23 1 5 7 11

17 17 13 23 19 5 1 11 7

19 19 23 13 17 7 11 1 5


(32)

Definisi 2.7: Fungsi phi Euler (sering juga disebut sebagai fungsi totient Euler) adalah fungsi � didefinisikan oleh aturan

� = # ℤ/ ℤ ∗ = #{ < ∶ gcd , = }.

Berdasarkan contoh sebelumnya, � = .

Dengan kata lain hasil dari fungsi � adalah banyaknya bilangan bulat non-negatif dan lebih kecil dari yang relatif prima dengan . Jadi, � = dan untuk bilangan prima , � = − , karena , , , … , − semua relatif prima terhadap

, sedangkan gcd , = ≠ . Untuk bilangan prima ,

� = − − (Hoffstein, et al. 2008).

2.2.3. Bilangan prima, faktorisasi prima, dan finite field

Di bagian sebelumnya telah dipelajari aritmatika modular dalam operasi penambahan, pengurangan, dan perkalian bilangan bulat modulo . Sedangkan pembagian, dapat menjadi masalah karena bilangan bulat dapat dibagi dengan dalam ℤ/ ℤ hanya jika

gcd , = . Jika bilangan bulat adalah prima, maka dapat dibagi dengan setiap

elemen ℤ/ ℤ yang bukan nol. Maka, selanjutnya akan dipelajari ring ℤ/ ℤ dengan bilangan prima .

Definisi 2.8: Bilangan bulat disebut prima jika dan bilangan bulat positif yang bisa membagi hanya dan (Hoffstein, et al. 2008).

Teorema 2.4 (Teorema Dasar Aritmatika). Misalkan bilangan bulat , Maka dapat difaktorkan sebagai hasil dari bilangan prima (Hoffstein, et al. 2008)

= × × × … × �

Definisi 2.9. Teorema dasar aritmatika mengatakan bahwa dalam faktorisasi bilangan bulat positif ke bilangan prima , setiap memiliki pangkat tertentu. Pangkat ini dinotasikan dengan . Untuk semua bilangan prima, = (Hoffstein, et al. 2008).

Contoh, faktorisasi adalah = ∙ , sehingga = ,

= , dan = untuk semua bilangan prima .

Jika adalah prima, maka setiap bilangan bukan nol modulo memiliki invers perkalian modulo . Ini berarti bahwa operasi aritmatika modulo , tidak hanya bisa menambah, mengurangi, mengalikan, tetapi juga bisa membagi dengan bilangan bukan nol, sama seperti operasi pada bilangan real.


(33)

Misalkan adalah bilangan prima. Maka setiap anggota dalam ℤ/ ℤ yang bukan nol memiliki invers perkalian, yaitu yang memenuhi . Nilai dinotasikan dengan − .

Definisi 2.10. Jika adalah bilangan prima, maka himpunan bilangan bulat

ℤ/ ℤ modulo dengan aturan penambahan, pengurangan, perkalian, dan pembagian-nya adalah contoh dari sebuah field yang merupakan nama umum untuk (komutatif)

ring, di mana setiap anggota bukan nol-nya memiliki invers perkalian. Beberapa contoh di antaranya adalah field untuk bilangan real ℝ, field untuk bilangan rasional (pecahan)

ℚ, dan field untuk bilangan kompleks ℂ.

Fieldℤ/ ℤ dari bilangan bulat modulo hanya memiliki jumlah anggota yang berhingga yang disebut sebagai finite field yang dilambangkan dengan � . Jadi, � dan

ℤ/ ℤ adalah dua notasi yang berbeda untuk objek yang sama. Demikian pula, anggota dari group of units ℤ/ ℤ ∗ dilambangkan dengan �∗. Finite field adalah aspek dasar yang paling penting dalam seluruh kriptografi (Hoffstein, et al. 2008).

Meskipun ℤ/ ℤ dan � digunakan untuk menotasikan konsep yang sama, namun kesetaraan elemen di antaranya dinyatakan agak berbeda dalam dua aturan. Untuk , ∈ � , kesetaraan dan dilambangkan dengan = . Sedangkan untuk

, ∈ ℤ/ ℤ, kesetaraan dan dinotasikan dengan .

2.3. Advanced Encryption Standard (AES)

AES (Advanced Encryption Standard) adalah teknik enkripsi yang dijadikan standar FIPS oleh NIST pada tahun 2001. AES dimaksudkan secara bertahap akan mengganti-kan DES (Data Encryption Standard) sebagai standar enkripsi di Amerika Serikat untuk abad ke-21 (DES sebagai standard FIPS telah dicabut, Mei 2005). AES menjadi standar melalui proses seleksi. Dari beberapa teknik enkripsi yang dicalonkan untuk menjadi AES, yang terpilih adalah enkripsi Rijndael. Jadi, algoritma AES dikenal juga dengan algoritma Rijndael. Teknik enkripsi ini termasuk jenis block cipher seperti halnya dengan DES. Perbedaan utama antara teknik enkripsi DES dengan AES adalah dalam transformasi subBytes (menggunakan S-boxes). AES melakukan transformasi secara langsung terhadap naskah, sedangkan DES menggunakan substitusi S-box hanya dalam fungsi cipher f, yang hasilnya kemudian dioperasikan terhadap naskah menggunakan

exclusive OR. AES juga menggunakan kunci enkripsi yang lebih besar yaitu 128 bit, 192 bit, atau 256 bit (Kromodimoeljo, 2010).


(34)

Secara umum, transformasi dalam algoritma Rijndael terdiri dari: subBytes,

shiftRows, mixColumns, dan AddRoundKey. Algoritma Rijndael beroperasi terhadap

state dari naskah yang dipandang sebagai matriks berukuran × . Setiap kolom dari

state merepresentasikan 1 word, dengan .� sebagai most significant byte untuk kolom ke-i. Beberapa operasi pada algoritma Rijndael didefinisikan pada tingkat byte yang mewakili anggota dalam polynomial field . Operasi lainnya didefinisikan dalam istilah 4-byte word (Daemen & Rijmen, 2002).

2.3.1. Matematika pengantar

Polinomial field

Setiap anggota dalam finite field dapat direpresentasikan dalam beberapa cara yang berbeda. Untuk setiap pangkat bilangan prima ada sebuah finite field yang karenanya semua representasi dari adalah isomorfik. Representasi dalam persamaan ini memiliki dampak pada kompleksitas implementasi. Sebuah byte , terdiri dari serangkaian bit yang dianggap sebagai polinomial dengan koefisien dalam { , } (Daemen & Rijmen, 2002):

+ + + + + + + .

Contoh, byte dengan dengan nilai heksadesimal (biner: ) bersesuaian dengan polinomial: + + + + .

Penambahan

Dalam representasi polinomial, jumlah dari dua elemen adalah polinomial dengan koefisien yang diberikan oleh penjumlahan dalam modulo 2 (yaitu, + = ) terhadap koefisien-koefisiennya. Contoh: + = , atau dengan notasi polinomial:

+ + + + + + + = + + + .

Dalam notasi biner: + = . Operasi penambahan

sesuai dengan bitwise XOR (dilambangkan dengan ) pada tingkat byte. Semua kondisi yang harus terpenuhi dalam kelompok Abelian adalah: internal, asosiatif, elemen netral ( ), elemen inverse dan komutatif (Daemen & Rijmen, 2002).

Perkalian

Dalam representasi polinomial, perkalian dalam bersesuaian dengan perkalian polinomial modulo suatu irreducible binary polynomial berderajat . Dalam Rijndael,


(35)

atau dalam representasi heksadesimal. Contoh: ∙ = , atau:

+ + + + ∙ + +

= + + + + + + + + + + + + + +

= + + + + + + + +

+ + + + + +

Jelas, hasilnya akan menjadi polinomial biner berderajat di bawah . Tidak seperti penambahan, tidak ada penyederhanaan operasi perkalian pada tingkat byte. Perkalian seperti yang telah didefinisikan sebelumnya adalah asosiatif dan ada elemen netral ( ). Untuk setiap polinomial biner berderajat di bawah , algoritma

extended Euclidean digunakan untuk menghitung polinomial , sedemikian rupa sehingga

∙ + ∙ = ,

oleh karena itu, ∙ atau − .

Selain itu, dapat dinyatakan bahwa ∙ + = ∙ +

∙ . Ini memungkinkan himpunan byte sebesar dengan XOR sebagai penambahan dan perkalian yang didefinisikan seperti pada struktur finite field

(Daemen & Rijmen, 2002).

Perkalian dengan

Jika dikalikan dengan polinomial , hasilnya: + + + +

+ + + dalam modulo . Jika = , penyederhanaan ini disebut operasi identitas, jika = , maka harus dikurangi (dengan operasi XOR). Oleh karena itu, perkalian dengan (heksadesimal ) dapat diimplementasikan pada tingkat byte sebagai pergeseran ke kiri dan dengan kondisi tertentu di-XOR-kan dengan . Operasi ini dilambangkan dengan = .

Dalam kondisi tertentu, xtime hanya membutuhkan 4 kali XOR. Perkalian dengan pangkat yang lebih tinggi dari dapat diimplementasikan dengan xtime

berulang kali. Dengan penambahan terpisah, perkalian dengan konstanta apapun dapat diimplementasikan dengan mudah (Daemen & Rijmen, 2002). Contoh: ∙ = .

∙ = =

∙ = =

∙ = =

∙ = =


(36)

Polinomial dengan koefisien dalam

Polinomial dapat didefinisikan dengan koefisien dalam . Dengan cara ini, vektor 4-byte bersesuai dengan polinomial berderajat di bawah .

Polinomial dapat ditambahkan dengan hanya menambahkan koefisien yang sesuai. Sebagaimana penambahan dalam adalah operasi XOR, penambahan dua vektor juga menggunakan operasi XOR. Anggaplah dua polinomial dalam ,

yaitu: = + + + dan = + + + .

Hasilnya adalah = ∙

= + + + + + +

di mana, = ∙ = ∙ ∙ ∙

= ∙ ∙ = ∙ ∙

= ∙ ∙ ∙ = ∙

= ∙ ∙ ∙ ∙

Jelas, tidak dapat lagi diwakili oleh vektor 4-byte. Dengan menjadikan dalam modulo polinomial berderajat 4 hasilnya dapat disederhanakan menjadi polinomial berderajat di bawah . Pada algoritma Rijndael, hal ini dilakukan dengan polinomial

= + . Karena � + = � adalah hasil modular dari dan

, dapat dinotasikan dengan = = + + + .

Di mana, = ⋅ ⋅ ⋅ ⋅

= ⋅ ⋅ ⋅ ⋅

= ⋅ ⋅ ⋅ ⋅

= ⋅ ⋅ ⋅ ⋅

Operasi perkalian dengan polinomial tetap dapat ditulis sebagai perkalian matriks sebagai berikut:

[ ] = [ ] [ ]

+ bukan merupakan irreducible polynomial dalam , ini dikarenakan perkalian dengan polinomial tetap belum tentu memiliki invers. Dalam cipher Rijndael, harus menggunakan polinomial tetap yang memiliki invers (Daemen & Rijmen, 2002).


(37)

Perkalian dengan

Jika dikalikan dengan , maka hasilnya adalah + + + . Hasil diperoleh dengan mereduksi hasil di atas dengan modulo + . Sehingga

menjadi + + + .

Perkalian dengan setara dengan perkalian dengan matriks seperti di atas di mana semua = kecuali = . Misalkan = , maka:

[ ] = [ ] [ ]

Oleh karena itu, perkalian dengan atau pemangkatan dengan , sesuai dengan pergeseran siklik byte di dalam vektor (Daemen & Rijmen, 2002).

2.3.2. State, cipher key dan jumlah putaran

Rijndael menghasilkan blok yang diacak berulang kali berdasarkan variabel panjang blok dan kunci yang masing-masing dapat berukuran 128, 192 atau 256 bit. Naskah asli atau naskah acak (cipher) yang belum selesai ditransformasi disebut state. Suatu state digambarkan sebagai array dua dimensi dalam byte. Array ini memiliki empat baris dan jumlah kolom dilambangkan dengan yang sama dengan panjang blok dibagi dengan 32. Cipher key juga digambarkan sebagai array dua dimensi dengan empat baris dan jumlah kolom dilambangkan dengan yang sama dengan panjang kunci dibagi dengan 32.

Dalam beberapa kasus, blok ini juga dianggap sebagai array satu dimensi dari vektor 4-byte, di mana setiap vektor terdiri dari kolom yang sesuai dalam representasi

array dua dimensi. Array ini memiliki panjang masing-masing 4, 6, atau 8, dan indeks dalam rentang . . , . . , atau . . . Vektor 4-byte ini disebut dengan word.

Input yang diproses dan output yang dihasilkan oleh Rijndael adalah array satu dimensi berukuran × − byte atau setara dengan 16, 24 atau 32 byte dan indeks dalam rentang . . , . . atau . . . Setiap input dalam satuan byte dipetakan ke dalam state dengan urutan , , , , , , , , , , , , , , , , … , ,� , begitu juga dengan cipher key yang dipetakan dengan urutan , , , , , , , , , , , , , , , ,

… , ,��− . Di akhir operasi, output diekstrak kembali dari state dengan urutan yang


(38)

, , , , , , , , , ,

, , , , , , , , , ,

, , , , , , , , , ,

, , , , , , , , , ,

Tabel 2.3: Contoh representasi state ( = ) dan cipher key ( = ).

Jika indeks array satu dimensi dalam byte suatu blok adalah dan indeks array

dua dimensi adalah , , maka:

= , = / , = +

Nilai adalah jumlah vektor 4-byte atau word, sedangkan menunjukkan indeks vektor atau word dalam blok. Banyaknya jumlah putaran bergantung pada panjang blok dan kunci (Daemen & Rijmen, 2002), seperti ditunjukkan pada Tabel 2.3.

� = = =

= 10 12 14

= 12 12 14

= 14 14 14

Tabel 2.4: Jumlah putaran sebagai fungsi blok terhadap panjang kunci.

2.3.3. Enkripsi

Pada proses enkripsi AES dilakukan transformasi subBytes, shiftRows, mixColumns, dan addRoundKey berulang kali hingga − . Di putaran ke- , transformasi yang dilakukan tetap sama, tetapi tanpa transformasi mixColumns. Berikut pseudocode

enkripsi AES:

Round(state, roundKey) 1. subBytes(state); 2. shiftRows(state); 3. mixColumns(state);

4. addRoundKey(state, roundKey);  Transformasi subBytes

Transformasi subBytes adalah substitusi byte non-linear, yang beroperasi pada setiap

byte pada state secara independen. Tabel substitusi (S-box) dapat diinvers dan dibuat dengan dua transformasi. Pertama, menggunakan invers perkalian dalam , kemudian menerapkan transformasi affine dalam (Daemen & Rijmen, 2002) yang didefinisikan sebagai berikut:


(39)

Contoh: = , = (Paar, 2010).

0 1 2 3 4 5 6 7 8 9 A B C D E F

0 63 7C 77 7B F2 6B 6F C5 30 01 67 2B FE D7 AB 76

1 CA 82 C9 7D FA 59 47 F0 AD D4 A2 AF 9C A4 72 C0

2 B7 FD 93 26 36 3F F7 CC 34 A5 E5 F1 71 D8 31 15

3 04 C7 23 C3 18 96 05 9A 07 12 80 E2 EB 27 B2 75

4 09 83 2C 1A 1B 6E 5A A0 52 3B D6 B3 29 E3 2F 84

5 53 D1 00 ED 20 FC B1 5B 6A CB BE 39 4A 4C 58 CF

6 D0 EF AA FB 43 4D 33 85 45 F9 02 7F 50 3C 9F A8

7 51 A3 40 8F 92 9D 38 F5 BC B6 DA 21 10 FF F3 D2

8 CD 0C 13 EC 5F 97 44 17 C4 A7 7E 3D 64 5D 19 73

9 60 81 4F DC 22 2A 90 88 46 EE B8 14 DE 5E 0B DB

A E0 32 3A 0A 49 06 24 5C C2 D3 AC 62 91 95 E4 79

B E7 C8 37 6D 8D D5 4E A9 6C 56 F4 EA 65 7A AE 08

C BA 78 25 2E 1C A6 B4 C6 E8 DD 74 1F 4B BD 8B 8A

D 70 3E B5 66 48 03 F6 0E 61 35 57 B9 86 C1 1D 9E

E E1 F8 98 11 69 D9 8E 94 9B 1E 87 E9 CE 55 28 DF

F 8C A1 89 0D BF E6 42 68 41 99 2D 0F B0 54 BB 16

Tabel 2.5: AES S-Box.

Transformasi shiftRows

Pada transformasi shiftRows, deretan baris pada state digeser ke kiri sebanyak kali. Untuk < , baris pertama tidak bergeser, baris kedua digeser sekali ke kiri, baris ketiga digeser dua kali ke kiri, dan baris keempat digeser sebanyak tiga kali ke kiri atau digeser sekali ke kanan. Pergeseran ini dinotasikan dengan , , dan tergantung pada panjang blok (Daemen & Rijmen, 2002) seperti pada Tabel 2.5:

1 2 3

1 2 3

1 3 4

Tabel 2.6: Besarnya pergeseran baris pada shiftRows terhadap panjang blok.

[ ] [ ][ ]

+ [ ]


(40)

mixColumns(state, Nb) 1. C = { 0, 1, 2, 3 }; 2. if(Nb > 6)

3. C = { 0, 1, 2, 4 };

4. for (i ← 0; i < Nb; i ← i + 1) 5. for (j ← 0; j < 4; j ← j + 1)

6. block[i][j] = state[(i + C[j]) % Nb][j];

7. return block;

Transformasi mixColumns

Pada transformasi mixColumns, setiap kolom pada state dapat dipandang sebagai polinomial dalam dan dikalikan dengan polinomial tetap modulo + , yaitu:

= + + + . Polinomial ini adalah relatif prima untuk + dan memiliki invers (Daemen & Rijmen, 2002). Misalkan = , maka perkalian matriksnya adalah:

[ ] = [ ] [ ]

Contoh: Misalkan state seperti berikut, dan akan dilakukan transformasi mixColumns,

= ⋅ ⋅ ⋅ ⋅ =

= ⋅ ⋅ ⋅ ⋅ =

= ⋅ ⋅ ⋅ ⋅ =

= ⋅ ⋅ ⋅ ⋅ =

= ⋅ ⋅ ⋅ ⋅ =

D4 E0 B8 1E BF B4 41 27 5D 52 11 98 30 AE F1 E5

02 03 01 01 01 02 03 01 01 01 02 03 03 01 01 02

.

04 E0 48 28 66 CB F8 06 81 19 D3 26 E5 9A 7A 4C

=

Tidak digeser Digeser kali Digeser kali Digeser kali


(41)

Transformasi addRoundKey

Transformasi ini cukup sederhana, yaitu dengan melakukan operasi XOR terhadap

cipher key dengan state. Cipher key diperoleh melalui proses key schedule, sebagian menyebut proses ini dengan ekspansi kunci. Panjang cipher key bervariasi tergantung dengan panjang kuncinya (Daemen & Rijmen, 2002).

Untuk AES 128-bit dengan state sebesar 4 word, diperlukan cipher key dengan panjang 44 word. Hal ini dikarenakan jumlah putarannya sebanyak 10 kali, dengan setiap putaran diperlukan sebesar 4 word untuk dilakukan XOR terhadap state

dengan besar yang sama ( = word). Dengan demikian, total panjang kunci adalah

word = word ditambah dengan addRoundKey yang pertama kali, sehingga

word + word = word. Hal yang sama untuk AES 192-bit dan AES 256-bit, panjang cipher key yang diperlukan masing-masing 52 word dan 60 word.

Panjang state harus sama dengan panjang kunci , seperti berikut: 04 E0 48 28

66 CB F8 06 81 19 D3 26 E5 9A 7A 4C

A0 88 23 2A FA 54 A3 6C FE 2C 39 76 17 B1 39 05

A4 68 6B 02 9C 9F 5B 6A 7F 35 EA 50 F2 2B 43 49

=


(42)

Start

Nr, key, message

cipher

cipherKey = keySchedule(key)

addRoundKey(message, key)

i = 0

i < Nr - 1 True subBytes(state, cipherKey[i])

shiftRows(state, cipherKey[i])

mixColumns(state, cipherKey[i])

addRoundKey(state, cipherKey[i])

i = i + 1 subBytes(state, cipherKey[i]) False

shiftRows(state, cipherKey[i])

addRoundKey(state, cipherKey[i])

End

Gambar 2.1: Flowchart algoritma enkripsi AES.

2.3.4. Dekripsi

Algoritma dekripsi AES adalah kebalikan dari algoritma enkripsi AES. Jumlah putaran tetap sama, hanya saja pada putaran pertama transformasi yang dilakukan adalah

addRoundKey, shiftRows, dan subBytes yang sama dengan kebalikan dari transformasi pada proses enkripsi AES di putaran terakhir. Sisa putaran selanjutnya dilakukan transformasi dengan urutan sebagai berikut: addRoundKey, mixColumns, shiftRows, dan subBytes.


(43)

Start

Nr, key, cipher

cipherKey = keySchedule(key)

addRoundKey(cipher, cipherKey[Nr - 1])

shiftRows(state, cipherKey[Nr - 1])

subBytes(state, cipherKey[Nr - 1])

i = Nr - 2

i > - 1 True addRoundKey(state, cipherKey[i])

mixColumns(state, cipherKey[i])

shiftRows(state, cipherKey[i])

subBytes(state, cipherKey[i]) i = i - 1

addRoundKey(state, key) False

cipher

End

Gambar 2.2: Flowchart algoritma dekripsi AES.

Transformasi subBytes invers

Sama seperti proses enkripsi, hanya saja transformasi subBytes invers pada proses dekripsi menggunakan tabel S-box invers yang diperoleh dari invers pemetaan affine, diikuti perkalikan invers dalam . Tabel 2.6 adalah tabel S- ′.


(44)

0 1 2 3 4 5 6 7 8 9 A B C D E F

0 52 09 6A D5 30 36 A5 38 BF 40 A3 9E 81 F3 D7 FB

1 7C E3 39 82 9B 2F FF 87 34 8E 43 44 C4 DE E9 CB

2 54 7B 94 32 A6 C2 23 3D EE 4C 95 0B 42 FA C3 4E

3 08 2E A1 66 28 D9 24 B2 76 5B A2 49 6D 8B D1 25

4 72 F8 F6 64 86 68 98 16 D4 A4 5C CC 5D 65 B6 92

5 6C 70 48 50 FD ED B9 DA 5E 15 46 57 A7 8D 9D 84

6 90 D8 AB 00 8C BC D3 0A F7 E4 58 05 B8 B3 45 06

7 D0 2C 1E 8F CA 3F 0F 02 C1 AF BD 03 01 13 8A 6B

8 3A 91 11 41 4F 67 DC EA 97 F2 CF CE F0 B4 E6 73

9 96 AC 74 22 E7 AD 35 85 E2 F9 37 E8 1C 75 DF 6E

A 47 F1 1A 71 1D 29 C5 89 6F B7 62 0E AA 18 BE 1B

B FC 56 3E 4B C6 D2 79 20 9A DB C0 FE 78 CD 5A F4

C 1F DD A8 33 88 07 C7 31 B1 12 10 59 27 80 EC 5F

D 60 51 7F A9 19 B5 4A 0D 2D E5 7A 9F 93 C9 C9 EF

E A0 E0 3B 4D AE 2A F5 B0 C8 EB BB 3C 83 53 99 61

F 17 2B 04 7E BA 77 D6 26 E1 69 14 63 55 21 0C 7D

Tabel 2.7: AES S- ′.

Transformasi shiftRows invers

Pada dekripsi, shiftRows invers ditransformasikan dengan arah yang berlawanan dengan

shiftRows pada proses enkripsi. Jadi, arah pergeserannya adalah ke kanan.

Transformasi mixColumns invers

Transformasi mixColumns invers pada dekripsi sama seperti mixColumns pada proses enkripsi, hanya saja setiap kolom state ditransformasikan dengan perkalian terhadap polinomial + + + . Yang memenuhi hukum invers:

+ + + + + + = ,

sehingga perkalian matriksnya adalah:


(45)

2.3.5. Key sechedule

Round key berasal dari Cipher key dengan menggunakan proses Key schedule yang nantinya diperlukan pada transformasi addRoundKey, di mana dilakukan proses XOR terhadap state dengan round key. Proses ini terdiri dari dua tahap, yaitu ekspansi kunci dan pemilihan round key. Prinsip dasarnya adalah sebagai berikut:

 Jumlah round key dalam bit adalah sama dengan panjang blok dikalikan dengan jumlah putaran ditambah satu. (Misalnya, untuk panjang blok 128 bit dan 10 putaran, jumlah round key yang diperlukan sebesar 1408 bit).

Cipher key yang sudah diperbesar disebut Expanded key.

Round key diambil dari expanded key dengan cara berikut: round key yang pertama diambil dari word pertama, round key yang kedua diambil dari word

berikutnya, dan begitu seterusnya.

Expanded key adalah array sebesar 4-byte word dan dilambangkan dengan

[ ∗ + ]. word pertama berisi cipher key, sementara word lainnya didefinisikan secara rekursif dalam word dengan indeks yang lebih kecil. Fungsi ekspansi kunci tergantung pada nilai .

Dalam uraian ini, adalah fungsi yang mengembalikan 4-byte word, di mana setiap byte adalah hasil dari penerapan Rijndael S-box terhadap byte yang posisinya sesuai dengan word masukan. Fungsi mengembalikan sebuah

word di mana suatu word masukan , , , menghasilkan word keluaran , , , . Pada pertama diisi dengan cipher key. Setiap word berikutnya [ ] adalah sama dengan XOR dengan word sebelumnya [ − ] dan word diposisikan dengan

[ − ]. Untuk word dalam posisi yang merupakan kelipatan , transformasi dengan operasi XOR diterapkan terlebih dahulu terhadap [ − ] dengan dan konstanta putaran.

Konstanta putaran ini didefinisikan dengan: [ ] = [ [ ] ], di mana [ ] mewakili elemen dalam dengan nilai �− . Round key ke- sama dengan word [ ∗ ] sampai [ ∗ + ] (Daemen & Rijmen, 2002).


(46)

2.4. Algoritma Percobaan Bilangan Prima Miller-Rabin

Teorema kecil Fermat menjelaskan bahwa jika adalah bilangan prima, maka berlaku:

,

untuk setiap bilangan bulat dan ∤ . Jika kedua sisi dikalikan dengan , maka teorema Fermat akan menjadi

.

Selanjutnya dikatakan bahwa adalah witness terhadap jika .

Witness terhadap dikombinasikan dengan teorema Fermat cukup untuk membuktikan tanpa keraguan bahwa adalah komposit. Sedangkan cara untuk menilai kemungkinan bahwa adalah prima, dengan mencoba berbagai nilai , , dan seterusnya. Jika salah satunya adalah witness terhadap , maka disimpulkan bahwa adalah komposit. Akan tetapi jika di antaranya tidak ada witness terhadap , maka diduga adalah prima. Diketahui sebuah bilangan komposit = ∙ ∙ , dan tentu saja bilangan ini memiliki witness. Dan ternyata setelah diteliti, bilangan tersebut tidak memiliki

witness. Dengan kata lain , untuk setiap bilangan bulat . Dialah R.D. Carmichael yang pada tahun 1910 telah menemukan bilangan komposit yang tidak memiliki witness ini, dan dia menyebutnya dengan bilangan Carmichael. Dan pada tahun 1984, Alford, Granville, dan Pomerance telah menemukan ada tak berhingga bilangan Carmichael. Jadi, teorema Fermat tidak lagi dapat mengungkap apakah adalah (mungkin) prima atau komposit. Berikut adalah aturan-aturan dalam bilangan prima yang akan diformulasikan menjadi pengecekan bilangan prima Miller-Rabin dengan menyetujui bahwa setiap bilangan komposit memiliki sejumlah besar witness.

Misalkan adalah sebuah bilangan prima, maka

− = , adalah bilangan ganjil. Misalkan adalah bilangan bulat apapun yang tidak bisa dibagi dengan , maka satu dari dua kondisi berikut adalah benar:

 .

 Salah satu dari , , , …, �− adalah kongruen − modulo .

Definisi 2.12. Misalkan adalah sebuah bilangan ganjil, maka − = . Bilangan bulat yang memenuhi , = disebut witness Miller-Rabin terhadap


(1)

for(int i = 0; i < M.length; i++) {

k = Math.abs(new java.util.Random().nextLong());

C[i] = new ECPoint[] { P.sum(BigInteger.valueOf(k), E), M[i].sum(Q.sum(BigInteger.valueOf(k), E), E) };

}

return C; }

private ECPoint[] decrypt(ECPoint[][] C, BigInteger n) { ECPoint[] M = new ECPoint[C.length];

for(int i = 0; i < C.length; i++)

M[i] = C[i][1].sub(C[i][0].sum(n, E), E);

return M; }

6)

com.zain.key.CryptoService.java

public final static int REQUEST_CODE_NOTIFICATION = 2805;

private final Charset DEFAULT_CHARSET = Charset.forName("ISO-8859-1");

private NotificationCompat.Builder notif;

private String _redelivery = "redelivery";

private boolean isEncryption;

public CryptoService() { super("CryptoService"); }

public int onStartCommand(Intent intent, int flags, int startId) { isEncryption = intent.getBooleanExtra(getString(R.string.

_encryption_service), false);

if(flags == START_FLAG_REDELIVERY) intent.putExtra(_redelivery, true);

super.onStartCommand(intent, flags, startId);

return START_REDELIVER_INTENT; }

protected void onHandleIntent(Intent intent) {

String publicDir = android.os.Environment.getExternalStorageDirectory() .getAbsolutePath() + "/" + getString(R.string.dir_ciphers);

File f = new File(intent.getStringExtra(getString(R.string._desc))); NotificationManager notifMgr = (NotificationManager)

getSystemService(android.content.Context.NOTIFICATION_SERVICE); notif = new NotificationCompat.Builder(this)

.setSmallIcon(R.drawable.ic_ongoing)

.setContentTitle(getString(isEncryption? R.string.encrypting_file : R.string.decrypting_file)).setContentText(f.getName())

.setTicker(getString(isEncryption? R.string.encrypting_file : R.string.decrypting_file) + ": " + f.getName()).setOngoing(true) .setWhen(0);

if(isEncryption)

encrypt(notifMgr, intent, f, new File(publicDir + "/" + com.zain.util.File.divide(f.getName())[0] +


(2)

else decrypt(notifMgr, intent, f, getOriginalExtension(f)); notifMgr.cancel(1);

notif = notif.setProgress(0, 0,

false).setSmallIcon(R.drawable.ic_done).setContentTitle(getString(isEn cryption? R.string.encryption_was_successful : R.string

.decryption_was_successful)).setContentInfo(null).setTicker(null) .setOngoing(false).setVibrate(new long[] { 0, 500 })

.setAutoCancel(true);

notifMgr.notify(0, notif.build());

if(intent.getBooleanExtra(_redelivery, false)) { intent.putExtra(_redelivery, false);

stopSelf(); }

}

public void onTaskRemoved(Intent rootIntent) {

android.widget.Toast.makeText(this, isEncryption?

R.string.encryption_is_restarting : R.string.decryption_is_restarting, android.widget.Toast.LENGTH_SHORT).show();

}

private void encrypt(NotificationManager notifMgr, Intent intent, File source, File target) {

int j = 0, i = getResources().getInteger(R.integer.default_char_length);

int[][][] blocks;

char[] chars = new char[i];

long size = source.length() / i;

Rijndael aes = new Rijndael(intent.getStringExtra(getString( R.string._key)));

if(!intent.getBooleanExtra(_redelivery, false)) save(source.getAbsolutePath());

try {

InputStreamReader reader = new InputStreamReader(new

FileInputStream(source), DEFAULT_CHARSET);

OutputStreamWriter writer = new OutputStreamWriter(new

FileOutputStream(target), DEFAULT_CHARSET); aes.setShift(new int[] { 0, 1, 3, 4 });

for(target = null; j < size; j++) { reader.read(chars);

blocks = fillBlocks(chars, 8);

for(i = 0; i < blocks.length; i++) blocks[i] = aes.encrypt(blocks[i]); writer.write(unBlocked(blocks));

notifMgr.notify(1, notif.setProgress((int) size, j, false) .setContentInfo((int) ((Double.valueOf(j) / size) * 100) + "%").build());

}

if((size = source.length() % chars.length) > 0) {

reader.read(chars = new char[(int) (size - (size % 32))]); blocks = fillBlocks(chars, 8);

for(source = null, i = 0; i < blocks.length; i++) blocks[i] = aes.encrypt(blocks[i]);


(3)

writer.write(unBlocked(blocks));

if((size %= 32) > 0) {

i = size <= 16? 4 : size > 16 && size <= 24? 6 : 8;

if(i <= 6) {

aes.setShift(new int[] { 0, 1, 2, 3 }); aes.setBlockLength(i);

}

reader.read(chars = new char[(int) size]);

int[][] block = fillBlock(chars, i);

if((size = (4 * i) - size) > 0)

block[i - 1][3] = (char) Rijndael.Util .TAIL_MAP[(int) (size - 1)];

writer.write(unBlocked(aes.encrypt(block))); }

}

reader.close(); writer.close();

} catch(IOException e) { Log.e(getString(R.string.log_io_error), e.getMessage()); }

android.support.v4.app.TaskStackBuilder stackBuilder = android.support.v4.app.TaskStackBuilder.create(this); intent = new Intent(this, MainActivity.class);

intent.putExtra(getString(R.string._launch_from_notif), true); stackBuilder.addParentStack(MainActivity.class);

stackBuilder.addNextIntent(intent);

notif = notif.setContentIntent(stackBuilder.

getPendingIntent(CryptoService.REQUEST_CODE_NOTIFICATION, android.app.PendingIntent.FLAG_UPDATE_CURRENT));

}

private void decrypt(NotificationManager notifMgr, Intent intent, File source, File target) {

int i = 2, j = 0;

int[][][] blocks;

String[] tmp = com.zain.util.File.divide(target.getName());

for(; target.exists(); )

target = new File(target.getParent() + "/" + tmp[0] + " (" + i++ + ")" + tmp[1]);

tmp = new String[] { null, null };

char[] chars = new char[i =

getResources().getInteger(R.integer.default_char_length)];

long size = source.length() / i;

Rijndael aes = new Rijndael(intent.getStringExtra( getString(R.string._key)));

try {

InputStreamReader reader = new InputStreamReader(new

FileInputStream(source), DEFAULT_CHARSET);

OutputStreamWriter writer = new OutputStreamWriter(new

FileOutputStream(target), DEFAULT_CHARSET); aes.setShift(new int[] { 0, 1, 3, 4 });


(4)

reader.read(chars);

blocks = fillBlocks(chars, 8);

for(i = 0; i < blocks.length; i++) blocks[i] = aes.decrypt(blocks[i]); writer.write(unBlocked(blocks));

notifMgr.notify(1, notif.setProgress((int) size, j, false). setContentInfo((int) ((Double.valueOf(j) / size) * 100) + "%").build());

}

if((size = source.length() % chars.length) > 0) {

if((i = (int) (size % 32)) == 0) i = 32;

reader.read(chars = new char[(int) (size - i)]);

for(source = null, blocks = fillBlocks(chars, 8), i = 0; i < blocks.length; blocks[i] = aes.decrypt(blocks[i++])); writer.write(unBlocked(blocks));

if((i = (size %= 32) == 16? 4 : size == 24? 6 : 8) <= 6) { aes.setShift(new int[] { 0, 1, 2, 3 });

aes.setBlockLength(i); }

reader.read(chars = new char[4 * i]);

int[][] block = aes.decrypt(fillBlock(chars, i));

boolean found = false; size = block[i - 1][3];

for(i = 0; i < Rijndael.Util.TAIL_MAP.length; i++)

if(size == Rijndael.Util.TAIL_MAP[i]) { found = true; i++; break;

}

tmp[0] = new String(unBlocked(block));

writer.write(found? tmp[0].substring(0, tmp[0].length() - i) : tmp[0]);

}

reader.close(); writer.close();

} catch(IOException e) { Log.e(getString(R.string.log_io_error), e.getMessage()); }

}

private File getOriginalExtension(File zainFile) { File f = null;

String[] columns = { History.FILENAME };

TopSecretOpenHelper dbHelper = new TopSecretOpenHelper(this); android.database.Cursor c = dbHelper.getReadableDatabase()

.query(History.TABLE_NAME, columns, columns[0] + " LIKE ?", new

String[] { "%" + com.zain.util.File.divide(zainFile.getName())[0] + "%" }, null, null, null);

if(c.moveToFirst())

f = new File(c.getString(c.getColumnIndex(columns[0]))); c.close(); dbHelper.close();

return f; }


(5)

private void save(String filename) {

ContentValues values = new ContentValues(); values.put(History.FILENAME, filename); values.put(History.DATE,

java.text.DateFormat.getDateTimeInstance().format(new Date())); values.put(History.STATUS, true);

TopSecretOpenHelper dbHelper = new TopSecretOpenHelper(this);

dbHelper.getWritableDatabase().insert(History.TABLE_NAME, null, values); dbHelper.close();

}

private int[][][] fillBlocks(char[] chars, int Nb) {

int[][][] blocks = new int[chars.length / (4 * Nb)][Nb][4];

for(int i = 0, j, k, n = 0; i < blocks.length; i++)

for(j = 0; j < Nb; j++)

for(k = 0; k < 4; blocks[i][j][k++] = chars[n++]);

return blocks; }

private int[][] fillBlock(char[] chars, int Nb) {

int[][] block = new int[Nb][4];

for(int i = 0, j = -1; i < chars.length; i++) block[i % 4 == 0? ++j : j][i % 4] = chars[i];

return block; }

private char[] unBlocked(int[][][] blocks) {

char[] chars = new char[blocks.length * blocks[0].length * 4];

for(int i = 0, j, k, n = 0; i < blocks.length; i++)

for(j = 0; j < blocks[i].length; j++)

for(k = 0; k < 4; chars[n++] = (char) blocks[i][j][k++]);

return chars; }

private String unBlocked(int[][] block) { String chars = new String();

for(int i = 0, j; i < block.length; i++)

for(j = 0; j < 4; chars += (char) block[i][j++]);

return chars; }


(6)

CURRICULUM VITAE

Data Pribadi

Nama

: Muhammad Reza Nasution

Tempat, Tanggal Lahir

: Galang, 3 Februari 1992

Tinggi/ Berat Badan

: 170 cm/ 60 kg

Agama

: Islam

Kewarganegaraan

: Indonesia

Alamat Sekarang

: Jl. Petumbukan No. 76 Jaharun B Dusun 1, Galang

Alamat Orang Tua

: Jl. Petumbukan No. 76 Jaharun B Dusun 1, Galang

No. Telepon

: 082274668329

E-mail

: murez.nasution@gmail.com

Riwayat Pendidikan

[

]

: S1 Ilmu Komputer Universitas Sumatera Utara, Medan

[

]

: SMA Negeri 1 Lubuk Pakam

[

]

: SMP Negeri 2 Lubuk Pakam

[

]

: SD Negeri 104283 Galang

Keahlian

Bahasa

: Indonesia, Inggris

Pemrograman

: Java, C#, C++, PHP

Development

:

Web

,

Desktop Apps

,

Android Apps

Pengalaman Organisasi