Teknik Pemecahan Kunci Algoritma Rivest Shamir Adleman (RSA) Dengan Menggunakan Metode Kraitchik

(1)

TEKNIK PEMECAHAN KUNCI ALGORITMA RIVEST SHAMIR ADLEMAN

(RSA) DENGAN METODE KRAITCHIK

SKRIPSI

BUDI SATRIA MUCHLIS 091401046

PROGRAM STUDI S1 ILMU KOMPUTER

FAKULTAS ILMU KOMPUTER DAN TEKNOLOGI INFORMASI UNIVERSITAS SUMATERA UTARA

MEDAN 2014


(2)

TEKNIK PEMECAHAN KUNCI ALGORITMA RIVEST SHAMIR ADLEMAN

(RSA) DENGAN METODE KRAITCHIK SKRIPSI

Diajukan untuk melengkapi tugas dan memenuhi syarat memperoleh ijazah Sarjana Ilmu Komputer

BUDI SATRIA MUCHLIS 091401046

PROGRAM STUDI S1 ILMU KOMPUTER

FAKULTAS ILMU KOMPUTER DAN TEKNOLOGI INFORMASI UNIVERSITAS SUMATERA UTARA

MEDAN 2014


(3)

ii

PERSETUJUAN

Judul : TEKNIK PEMECAHAN KUNCI ALGORITMA

RIVEST SHAMIR ADLEMAN (RSA) DENGAN MENGGUNAKAN METODE KRAITCHIK

Kategori : SKRIPSI

Nama : BUDI SATRIA MUCHLIS

Nomor Induk Mahasiswa : 091401046

Program Studi : SARJANA (S1) ILMU KOMPUTER

Fakultas : ILMU KOMPUTER DAN TEKNOLOGI

INFORMASI Diluluskan di

Medan, 17 April 2014 Komisi Pembimbing :

Pembimbing 2 Pembimbing 1

Dian Rachmawati, S.Si, M.Kom M.Andri Budiman, ST, M.Comp.Sc, MEM NIP. 19830723 200912 2 004 NIP. 19751008 200801 1 011

Diketahui/Disetujui oleh

Program Studi S1 Ilmu Komputer Ketua,

Dr. Poltak Sihombing, M.Kom NIP. 19620317 199103 1 001


(4)

PERNYATAAN

TEKNIK HACKING KUNCI ALGORITMA RIVEST SHAMIR ADLEMAN (RSA) DENGAN METODE KRAITCHIK

SKRIPSI

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

Medan, 17 April 2014

Budi Satria Muchlis 091401046


(5)

` ivi

PENGHARGAAN

Alhamdulillah wa syukurillah, puji syukur kehadirat Allah SWT yang selalu melimpahkan rahmat dan karunia-Nya kepada setiap manusia mulai dari ruhiyah, fikriyah dan jasmaniyah, mulai dari yang disadari atau tanpa disadari. Semuanya hanya karena keridhoan-Nya lah semua terjadi dan atas izin-Nya pula 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.

Ucapan terima kasih penulis sampaikan kepada:

1. Bapak Prof. Dr. dr. Syahril Pasaribu, DTM&H, MSc(CTM). Sp.A(K) selaku 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 Universitas Sumatera Utara.

4. Ibu Maya Silvi Lydia, B.Sc, M.Sc selaku Sekretaris Program Studi S1 Ilmu Komputer Universitas Sumatera Utara dan Dosen Pembimbing Akademik. 5. Bapak M. Andri Budiman, ST, M.CompSc, MEM dan Ibu Dian Rachmawati, S.Si,

M.Kom Selaku Dosen Pembimbing.

6. Bapak Prof. Dr. Opim Salim Sitompul, M.Sc dan Bapak Handrizal, S.Si. M.Comp.Sc selaku Dosen Pembanding.

7. Para dosen dan pegawai di Departemen Ilmu Komputer Fasilkom-TI USU.

8. Orang tua tercinta, Ayahanda Muchlis Sy. Lodde dan ibunda Melly Efyanti, yang selalu memberikan kasih sayang dan dukungannya tiada kenal pamrih, bersusah payah hanya demi anaknya. Semoga selalu dalam lindungan dan keridhoan Allah sepanjang masa dan selalu bahagia dunia-akhirat.

9. Mbak Shinta Melany dan Bang Hendra Halius (juga untuk Keysha) yang sudah memberikan dukungan moril dan materil selama 5 tahun hidup bersama, hanya Allah SWT. yang dapat membalas semua kebaikan yang telah diberikan. Serta kepada Kak Rival Maulana, Bang David Hayatullah, Mas Angga Perwira yang


(6)

selalu memotivasi penulis untuk menjadi yang terbaik. Semoga selalu dalam lindungan Allah SWT.

10.Saudara-saudara seperjuangan khususnya: Mahadi Z., Mhd. Arisandy Pratama, Zuwarbi Wiranda Hsb, Anton Gumala Putra, Basrah Nasution, Wahyu Ramadhan, Saipul Anwar, Affandi, Syukri Jundi dan Ganda Wijaya serta Vanji, Maulana, Aditya dan lainnya yang selalu mengingatkan penulis dalam suka dan dukanya. Semoga hati kita selalu dipersatukan Allah SWT. dalam naungan cinta-Nya. 11.Saudara-saudara senior khususnya: abangda Akmal Ahmad, Arie Yudha Nugraha

A.Md., Suharsono S.Kom, Zainuddin Siregar S.Kom., Eko Verdianto S.Kom, Azizah Endarstati S.Kom dan yang lainya yang selalu memberikan semangat dan dorongan dan motivasi kepada penulis selama menyelesaikan skripsi ini.

12.Saudara-saudara UKMI Al-Khuwarizmi, UKMI Al-Falak FMIPA, KAM Rabbani, UKMI Ad-Dakwah, FSLDK Sumut, IMILKOM, para pejuang Ilkom Stambuk 2009 dan lainnya yang tidak bisa disebutkan satu persatu, yang selalu memberikan semangat dan dorongan kepada penulis selama menyelesaikan skripsi ini.

Semoga Allah SWT melimpahkan berkah dan kebahagiaan dunia dan akhirat kepada semua pihak yang telah memberikan bantuan, perhatian, serta dukungan baik moril maupun materil kepada penulis dalam menyelesaikan skripsi ini. “Bekerjalah seakan-akan engkau hidup selamanya, Beribadahlah seakan-akan engkau mati esok

hari”.

Medan, 17 April 2014 Penulis


(7)

vi

ABSTRAK

Penelitian ini bertujuan memecahkan kunci privat algoritma RSA dengan memfaktorkan kunci publik n menggunakan metode Kraitchik dan melihat efisiensi waktu pemfaktorannya. Kriptanalisis dengan pemfaktoran (factoring) menggunakan kunci publik n yaitu n = p . q yang tidak dirahasiakan untuk memecahkan kunci privat RSA. Jika kunci publik n berhasil difaktorkan menjadi p dan q maka ɸ(n) = (p – 1)(q – 1) dapat dihitung dan dengan menggunakan kunci publik e, kunci privat d pun akan dapat terpecahkan. Metode Kraitchik yang mengawali munculnya algoritma pemfaktoran yang paling modern menyatakan bahwa untuk menemukan faktor x dan y dari bilangan bulat n

sedemikian rupa sehingga x2 ≡ y2 (mod n). Hasil penelitian memperlihatkan bahwa efisiensi waktu pemfaktoran kunci publik n metode Kraitchik sangat dipengaruhi oleh selisih faktor kunci (pq) yaitu semakin besar selisih antara p dan q maka semakin lama waktu pemfaktorannya. Pemfaktoran panjang kunci publik n sebesar 19 digit atau 152 bit dengan selisih faktor kunci (p – q) = 22641980 membutuhkan waktu selama 93,6002 ms

lebih cepat jika dibandingkan dengan panjang kunci sebesar 15 digit atau 120 bit dengan selisih faktor kunci (p – q) = 23396206 yang membutuhkan waktu selama 5850,0103 ms. Faktor lainnya yang mempengaruhi efisiensi waktu pemfaktoran metode Kraitchik adalah

Gcd (p – 1,q – 1), panjang kunci dan faktor prima (p – 1),(q – 1).

Kata Kunci: RSA, Kriptanalisis, Pemfaktoran (Factoring), Metode Kraitchik


(8)

An RSA Key Factoring Technique Using Kraitchik‟s Method

ABSTRACT

This study aims to discover the private key of RSA by factoring public key n using

Kraitchik‟s method and to observed the time efficiency. Kraitchik‟method factoring

the RSA private key using the public key n (n = p.q) that is not kept secret. When public key n is successfully factored into p and q then ɸ(n) = (p – 1)(q – 1) can be calculated and by using public key e, private key d will be discovered. Kraitchik method that started the rise of most modern factoring algorithm aims to find the factors x and y of an integer n such that x2≡ y2 (mod n). The results showed that the time efficiency of Kraitchik‟s method to factor the public key n is highly influenced by the difference of key factors (pq), that is, the greater the difference between p

and q then the longer the time to factor n. The public key n of 19 digits or 152 bits with difference (pq) takes time 93,6002 ms that is faster than a key of 15 digits or 120 bits with difference (pq) = 23396206 which takes time for 5850.0103 ms. Other factors that effect the efficiency time of Kraitchik‟s method is gcd (p – 1, q – 1), the key length and the prime factors (p– 1), (q– 1).

Keyword: RSA, Cryptanalysis, Factoring, Kraitchik‟s method


(9)

viii

DAFTAR ISI

Hal.

Persetujuan ii

Pernyataan iii

Penghargaan iv

Abstrak vi

Abstract vii

Daftar Isi viii

Daftar Tabel x

Daftar Gambar xi

Daftar Lampiran xii

Bab I Pendahuluan

1.1Latar Belakang 1

1.2Rumusan Masalah 2

1.3Tujuan Penelitian 3

1.4Batasan Penelitian 3

1.5Manfaat Penelitian 3

1.6Metode Penelitian 4

1.7Sistematika Penulisan 4

Bab II Landasan Teori

2.1. Keamanan Informasi 6

2.2. Kriptografi 8

2.2.1. Definisi dan Terminologi 8

2.2.2. Tujuan Kriptografi 10

2.3. Sistem Kriptografi (Cryptosystem) 11

2.4. Rivest Shamir Adleman (RSA) 13

2.4.1. Pembangkitan Kunci 13

2.4.2. Proses Enkripsi 15

2.4.3. Proses Dekripsi 16

2.5. Kriptanalisis (Cryptanalysis) 16

2.6. Metode Kriptanalisis RSA 18

2.6.1. Pemfaktoran (Factoring) 18

2.6.2. Serangan Fungsi RSA 18

2.6.3. Implementation Attacks 19

2.7. Pemfaktoran Metode Kraitchik 19

2.8. Invers Modulo (Extended Euclidean) 20

2.9. Uji Bilangan Prima Algoritma Lehmann 22


(10)

Bab III Analisis dan Perancangan Sistem 24

3.1. Analisis Sistem 24

3.1.1. Analisis Masalah (Cause and Effect Diagram) 24

3.1.2. Analisis Kebutuhan 25

3.2. Perancangan Sistem 27

3.2.1. Use Case Diagram 27

3.2.2. Activity Diagram 29

3.3. Flowchart 31

3.3.1. Flowchart Pemecahan Kunci RSA Metode Kraitchik 32 3.3.2. Flowchart Menghitung Kunci Publik dan Kunci Privat 33

3.3.3. Flowchart Dekripsi RSA 34

3.4. Pseudocode 35

3.4.1. Pseudocode Pemecahan Kunci RSA

(Metode Kraitchik) 35

3.4.2. Pseudocode Menghitung Kunci Publik e 36 3.4.3. Pseudocode Menghitung Kunci Privat d 37

3.4.4. Pseudocode Dekripsi RSA 38

3.5. Perancangan Antarmuka Sistem (System Interface) 39

3.5.1. Form Halaman Utama 39

3.5.2. Form Pemecahan Kunci RSA 40

3.5.3. Form Dekripsi RSA 41

3.5.4. Form Bantuan 42

3.5.5. Form Tentang 42

Bab IV Implementasi dan Pengujian 43

4.1. Implementasi Sistem 43

4.1.1. Spesifikasi Kebutuhan Perangkat keras 43 4.1.2. Spesifikasi Kebutuhan Perangkat Lunak 43

4.1.3. Implementasi Aplikasi 44

4.2. Pengujian Sistem 48

4.2.1. Pengujian Proses Pemecahan Kunci RSA dan Dekripsi RSA 48 4.2.2. Pengujian Panjang dan Nilai Kunci Publik n 50

4.2.3. Selisih Kunci (pq) 52

4.2.4. Gcd (p– 1, q– 1) 53

4.2.5. Faktor Prima (p– 1) dan (q– 1) 54

Bab V Kesimpulan dan Saran 55

5.1 Kesimpulan 55

5.2. Saran 56

Daftar Pustaka 57


(11)

x

DAFTAR TABEL

Hal. Tabel 3.1 Kebutuhan Fungsional Sistem Pemecahan Kunci RSA

Metode Kraitchik 25

Tabel 3.2 Kebutuhan Nonfungsional Sistem Pemecahan Kunci RSA

Metode Kraitchik 26

Tabel 3.3 Narasi Use Case Pemecahan Kunci RSA 28

Tabel 3.4 Narasi Use Case Dekripsi RSA 29

Tabel 4.1 Kunci Publik n Terhadap Waktu Pemfaktoran 51 Tabel 4.2 Kunci Publik n dan Selisih Kunci (pq) Terhadap Waktu Pemfaktoran 52 Tabel 4.3 Kunci Publik n dan Gcd(p –1, q –1)Terhadap Waktu Pemfaktoran 53 Tabel 4.4 Kunci Publik n dan Faktor Prima (p –1), (q –1)

Terhadap Waktu Pemfaktoran 54


(12)

DAFTAR GAMBAR

Hal.

Gambar 2.1 Proses enkripsi dan dekripsi 10

Gambar 2.2 Skema symmetric cryptosystem 12

Gambar 2.3 Skema public-key cryptosystem 13

Gambar 2.4 Skema komunikasi kriptografi 17

Gambar 2.5 Skema komunikasi kriptografi kunci-publik 18 Gambar 3.1 Analisis masalah Sistem Pemecahan Kunci RSA Metode Kraitchik 24 Gambar 3.2 Use case diagram Sistem Pemecahan Kunci RSA Metode Kraitchik 27 Gambar 3.3 Activity diagram untuk use case Pemecahan Kunci RSA 30 Gambar 3.4 Activity diagram untuk use case Dekripsi RSA 31 Gambar 3.5 Flowchart pemfaktoran metode Kraitchik 32 Gambar 3.6 Flowchart menghitung kunci publik dan kunci privat 33

Gambar 3.7 Flowchart proses dekripsi RSA 34

Gambar 3.8 Pseudocode pemecahan kunci RSA (metode Kraitchik) 35

Gambar 3.9 Pseudocode menghitung kunci publik e 36

Gambar 3.10 Pseudocode menghitung kunci privat d 37

Gambar 3.11 Pseudocode Dekripsi RSA 38

Gambar 3.12 Form „Halaman Utama‟ 40

Gambar 3.13 Form „Pemecahan Kunci RSA‟ 40

Gambar 3.14 Form „Dekripsi RSA‟ 41

Gambar 3.15 Form „Bantuan‟ 42

Gambar 3.16 Form „Tentang‟ 42

Gambar 4.1 Form‟Halaman Utama‟ 44

Gambar 4.2 Form‟Pemecahan Kunci RSA‟ 45

Gambar 4.3 Form‟Dekripsi RSA‟ 46

Gambar 4.4 Form‟Bantuan‟ 47

Gambar 4.5 Form‟Tentang‟ 47

Gambar 4.6 Aplikasi RSA yang diuji 48

Gambar 4.7 Proses pemecahan kunci RSA 49

Gambar 4.8 Proses dekripsi RSA 49

Gambar 4.9 (a) ciphertext atau file terenkripsi (Encrypted.txt) 50 (b) plaintext atau file hasil dekripsi (tanda-tanda hati yang mati.txt) 50


(13)

xii

DAFTAR LAMPIRAN

Hal.

A. Listing Program A-1

B. Curriculum Vitae (CV) B-1


(14)

ABSTRAK

Penelitian ini bertujuan memecahkan kunci privat algoritma RSA dengan memfaktorkan kunci publik n menggunakan metode Kraitchik dan melihat efisiensi waktu pemfaktorannya. Kriptanalisis dengan pemfaktoran (factoring) menggunakan kunci publik n yaitu n = p . q yang tidak dirahasiakan untuk memecahkan kunci privat RSA. Jika kunci publik n berhasil difaktorkan menjadi p dan q maka ɸ(n) = (p – 1)(q – 1) dapat dihitung dan dengan menggunakan kunci publik e, kunci privat d pun akan dapat terpecahkan. Metode Kraitchik yang mengawali munculnya algoritma pemfaktoran yang paling modern menyatakan bahwa untuk menemukan faktor x dan y dari bilangan bulat n

sedemikian rupa sehingga x2 ≡ y2 (mod n). Hasil penelitian memperlihatkan bahwa efisiensi waktu pemfaktoran kunci publik n metode Kraitchik sangat dipengaruhi oleh selisih faktor kunci (pq) yaitu semakin besar selisih antara p dan q maka semakin lama waktu pemfaktorannya. Pemfaktoran panjang kunci publik n sebesar 19 digit atau 152 bit dengan selisih faktor kunci (p – q) = 22641980 membutuhkan waktu selama 93,6002 ms

lebih cepat jika dibandingkan dengan panjang kunci sebesar 15 digit atau 120 bit dengan selisih faktor kunci (p – q) = 23396206 yang membutuhkan waktu selama 5850,0103 ms. Faktor lainnya yang mempengaruhi efisiensi waktu pemfaktoran metode Kraitchik adalah

Gcd (p – 1,q – 1), panjang kunci dan faktor prima (p – 1),(q – 1).

Kata Kunci: RSA, Kriptanalisis, Pemfaktoran (Factoring), Metode Kraitchik


(15)

vii

An RSA Key Factoring Technique Using Kraitchik‟s Method

ABSTRACT

This study aims to discover the private key of RSA by factoring public key n using

Kraitchik‟s method and to observed the time efficiency. Kraitchik‟method factoring

the RSA private key using the public key n (n = p.q) that is not kept secret. When public key n is successfully factored into p and q then ɸ(n) = (p – 1)(q – 1) can be calculated and by using public key e, private key d will be discovered. Kraitchik method that started the rise of most modern factoring algorithm aims to find the factors x and y of an integer n such that x2≡ y2 (mod n). The results showed that the time efficiency of Kraitchik‟s method to factor the public key n is highly influenced by the difference of key factors (pq), that is, the greater the difference between p

and q then the longer the time to factor n. The public key n of 19 digits or 152 bits with difference (pq) takes time 93,6002 ms that is faster than a key of 15 digits or 120 bits with difference (pq) = 23396206 which takes time for 5850.0103 ms. Other factors that effect the efficiency time of Kraitchik‟s method is gcd (p – 1, q – 1), the key length and the prime factors (p– 1), (q– 1).

Keyword: RSA, Cryptanalysis, Factoring, Kraitchik‟s method


(16)

BAB 1 PENDAHULUAN

1.1. Latar Belakang

Perkembangan di bidang telekomunikasi dan komputer memungkinkan setiap orang berkomunikasi dan bertukar informasi secara bebas, kapan saja dan di mana saja, mulai dari transaksi di bank, transaksi dengan kartu kredit, percakapan dan berkirim pesan dengan telepon genggam, mengakses internet sampai berkirim dokumenmelalui

e-mail yangberisi informasi penting seperti kontrak resmi, transaksi keuangan, record

penjualan dan lain-lain. Semua hal tersebut dapat dilakukan dengan secara cepat, efisien dan relatif murah.

Namun di sisi lain, media komunikasi umum yang digunakan secara bebas oleh siapapun sangat rawan penyadapan informasi oleh pihak-pihak yang tidak absah. Misalnya, informasi mengenai nomor kartu kredit, bila informasi ini jatuh kepada orang-orang yang jahat maka akan terjadi kenaikan tagihan kartu kredit secara tiba-tiba. Oleh karena itu diperlukan ilmu berhubungan dengan aspek keamanan informasi itu yang disebut dengan kriptografi.

Kriptografi ditujukan untuk memberi layanan keamanan, salah satunya dalam aspek kerahasiaan (confidentiality). Kerahasiaan (confidentiality) adalah layanan yang ditujukan untuk menjaga agar pesan tidak dapat dibaca oleh pihak-pihak yang tidak berhak dengan cara menyandikan plaintext (pesan asli) menjadi ciphertext

(pesan sandi) yang disebut enkripsi. Sedangkan proses pengembalian ciphertext

menjadi plaintext disebut dekripsi. Proses enkripsi dan dekripsi tersebut menggunakan algoritma kriptografi atau disebut juga cipher.

Rivest Shamir Adleman (RSA) adalah salah satu algoritma kriptografi asimetris (kriptografi kunci-publik) yaitu menggunakan dua kunci yang berbeda (private key


(17)

2

dan public key). Kekuatan algoritma RSA tidak hanya terletak pada panjang kuncinya (semakin panjang kunci, maka semakin lama waktu kerja) dan penggunaan kunci-publik dan kunci privat pada umumnya. Kekuatan utama dari algoritma RSA didasarkan pada sulitnya memfaktorkan bilangan besar menjadi faktor-faktor primanya: faktorkan n menjadi dua faktor primanya, p dan q, sedemikian sehingga n =

p ∙ q.

Walaupun demikian, RSA yang populer sampai saat ini dan masih sulit untuk dipecahkan memiliki celah keamanan dengan hanya mengetahui ciphertext dan kunci publiknya. Salah satu teknik serangan pada RSA adalah dengan memanfaatkan celah

pada „keunggulannya‟ yaitu dengan memfaktorkan kunci publik n. Kelemahan inilah yang dimanfaatkan untuk melakukan serangan atau hacking untuk menguji keamanan algoritma RSA dalam dalam merahasiakan pesan dan mengetahui kelemahan-kelemahannya. Beberapa penelitian yang menerapkan teknik pemfaktoran adalah

penelitian dari Mahadi Z. berjudul “Teknik Hacking Algoritma Rivest Shamir Adleman (RSA) 512-Bit Dengan Menggunakan Metode Difference of Squares” dan Zeni Fera Bhakti berjudul “Kriptanalisis RSA Dengan Kurva Eliptik (Cryptanalysis of RSA with Elliptic Curves)”. Kedua penelitian tersebut menjadi inspirasi penulis untuk membuat

penelitian mengenai teknik pemecahan kunci RSA untuk memfaktorkan kunci publik

n dengan metode yang berbeda yaitu pemfaktoran metode Kraitchik dengan judul

“Teknik Pemecahan Kunci Algoritma Rivest Shamir Adleman (RSA) Dengan

Metode Kraitchik. Besar harapan penulis dengan mengetahui kelebihan dan kekurangan algoritma RSA maupun metode Kraitchik dari penelitian ini akan menjadi perbaikan dan pengembangan penelitian-penelitian sebelumnya bahkan dapat menambah literatur dan wawasan dunia kriptanalisis.

1.2. Rumusan Masalah

Berdasarkan latar belakang di atas, maka dapat dirumuskan masalah yang akan diselesaikan dalam penelitian ini adalah apakah kunci privat algoritma RSA dapat dipecahkan secara efisien dengan memfaktorkan kunci publik n menggunakan metode

Kraitchik ditinjau dari parameter waktu.


(18)

1.3. Tujuan Penelitian

Sesuai dengan rumusan masalah di atas, tujuan dari penelitian ini adalah:

1. Memecahkan kunci privat algoritma RSA dengan memfaktorkan kunci publik n

menggunakan metode Kraitchik.

2. Melihat efisiensi waktu pemfaktoran kunci publik n dengan metode Kraitchik.

1.4. Batasan Penelitian

Adapun batasan-batasan penelitian agar tidak menyimpang dari rumusan masalah adalah:

1. Ada dua proses utama pada sistem, yaitu:

a. Pemfaktoran kunci publik n untuk menemukan nilai p dan q sehingga mendapat kunci privatnya dengan metode Kraitchik.

b. Proses dekripsi ciphertext menjadi plaintext dengan menggunakan kunci privat yang telah dipecahkan.

2. Algoritma kriptografi yang diuji adalah RSA dengan panjang kunci maksimum 512 bit dan menggunakan uji bilangan prima Fermat‟s Little Theorem.

3. Parameter efisiensi pemecahan kunci dihitung dari lamanya running time program dalam satuan milisekon (ms).

4. Ciphertext berupa numerik (angka) dan plaintext-nya diubah menjadi karakter ASCII.

1.5. Manfaat Penelitian

Manfaat dari penelitian ini antara lain:

1. Mengetahui efisiensi metode Kraitchik dalam memecahkan kunci algoritma RSA sebagai acuan untuk mengembangkan metode kriptanalisis yang lebih efisien. 2. Mengetahui kemampuan algoritma RSA untuk bertahan dari serangan sebagai

bahan evaluasi untuk memperbaiki dan mengembangkan tingkat keamanan algoritma RSA.


(19)

4

1.6. Metode Penelitian

Tahapan yang dilakukan dalam penelitian ini adalah: 1. Studi Literatur

Tahap ini dilakukan dengan mengumpulkan informasi dan mempelajari literatur pada sejumlah buku, artikel, paper, jurnal, makalah, maupun situs internet khususnya berkaitan dengan konsep kriptografi, algoritma RSA, teknik-teknik kriptanalisis RSA, serta landasan matematika yang berkaitan seperti teori bilangan dan pemfaktoran bilangan bulat metode Kraitchik.

2. Analisis dan Perancangan Sistem

Tahap ini akan dilakukan analisis masalah yang dihadapi dengan mengidentifikasi masalah, memodelkan masalah secara konseptual dengan UML, flowchart, tujuan, dan kandidat solusi yang ditawarkan. Kemudian dilakukan perancangan interface

aplikasi berisikan tahapan-tahapan operasi dalam proses pengolahan data dan prosedur untuk mendukung aplikasi tersebut.

3. Implementasi Sistem

Tahap ini akan menerapkan hasil konseptual analisis dan perancangan sistem dengan pengkodean (coding) program.

4. Pengujian Sistem

Tahap ini akan dilakukan pengujian terhadap sistem dengan tujuan untuk melihat semua kesalahan dan kekurangan yang ada pada sistem serta semua data mengenai efisiensi waktu sistem. Pengujian yang dilakukan dengan menjalankan sistem dan memasukkan berbagai input pada tiap-tiap fungsi dan fasilitas yang dimiliki sistem dan melihat hasil output-nya.

5. Dokumentasi

Tahap ini akan dilakukan penyusunan laporan dari hasil analisis, perancangan, implementasi hingga pengujian sistem dalam format penulisan penelitian.

1.7. Sistematika Penulisan

Sistematika penulisan penelitian ini dibuat dalam lima bab, yaitu :


(20)

Bab 1 Pendahuluan

Berisi latar belakang, rumusan masalah, tujuan penelitian, batasan penelitian, manfaat penelitian dan sistematika penulisan.

Bab 2 Landasan Teori

Berisi tentang penjelasan singkat mengenai konsep kriptografi, algoritma RSA, kriptanalisis RSA, serta landasan matematika yang berkaitan seperti teori bilangan dan pemfaktoran bilangan bulat metode

Kraitchik.

Bab 3 Analisis dan Perancangan Sistem

Berisi tentang analisis sistem secara konseptual, analisis proses kerja algoritma RSA dan pemecahan kunci algoritma RSA, serta perancangan interface aplikasi.

Bab 4 Implementasi dan Pengujian Sistem

Berisi tentang penerapan dari analisis dan perancangan sistem menjadi kode pemrograman, serta pengujian aplikasi pemecahan kunci algoritma RSA untuk memperoleh output dari sistem tersebut sebagai hasil penelitian yang selanjutnya akan dianalisis untuk menghasilkan suatu kesimpulan.

Bab 5 Kesimpulan dan Saran

Berisi tentang pemaparan apa yang diperoleh dari hasil penelitian dan saran-saran kepada pembaca terkait perbaikan penelitian untuk memperoleh hasil yang lebih baik.


(21)

BAB 2

LANDASAN TEORI

2.1. Keamanan Informasi

Kriptografi sangat berkaitan dengan isu keamanan informasi. Sebelum mengenal kriptografi diperlukan pemahaman tentang isu-isu yang terkait dengan keamanan informasi secara umum. Seiring berkembangnya kemajuan teknologi dan komunikasi, banyak perubahan yang mengubah sudut pandang kita terhadap keamanan informasi. Menurut Stallings (2006), setidaknya ada dua perubahan besar dalam beberapa dekade terakhir, yaitu:

1. Keamanan komputer (computer security)

Dahulu keamanan informasi dirasakan berharga terutama secara fisik dan administrasi, misalnya penggunaan lemari arsip keras dengan kunci kombinasi untuk menyimpan dokumen rahasia. Dengan diperkenalkannya komputer, kebutuhan akan perangkat untuk melindungi berkas dan informasi yang tersimpan pada komputer menjadi penting terutama pada sistem bersama (shared system).

2. Keamanan internet (Internet security)

Perubahan besar yang kedua berkaitan dengan pengenalan sistem terdistribusi dan penggunaan jaringan serta fasilitas komunikasi untuk membawa data antara pengguna komputer yang satu dengan komputer yang lain membentuk jaringan-jaringan yang disebut internet.

Terlepas dari siapa yang terlibat, atau tingkatannya, semua pihak harus memastikan bahwa transaksi yang dilakukan memenuhi aspek keamanan. Berikut ini adalah aspek-aspek keamanan informasi:


(22)

1. Kerahasiaan (Privacy or confidentiality): Menjaga kerahasiaan informasi dari semua pihak yang tidak memiliki otoritas.

2. Integritas data (Data integrity): Memastikan keaslian informasi tidak diubah oleh pihak yang tidak berotoritas dan tidak dikenal.

3. Identifikasi (Entity authentication/identification): Membuktikan kebenaran dari identitas suatu entitas (misalnya orang, terminal computer, kartu kredit, dll.). 4. Otentikasi Pesan (Message authentication): membuktikan kebenaran dari

sumber informasi, dikenal juga sebagai otentikasi asal data.

5. Tanda tangan (Signature): sarana untuk mengikat informasi suatu entitas. 6. Kewenangan (Authorization): penyampaian persetujuan resmi untuk melakukan

atau menjadi sesuatu.

7. Validasi (Validation): sarana untuk memberikan ketepatan waktu kewenangan untuk menggunakan atau memanipulasi informasi atau sumber.

8. Kontrol akses (Access control): membatasi akses ke sumber daya bagi entitas khusus.

9. Sertifikasi (Certification): Pengesahan suatu informasi entitas yang terpercaya. 10. Rekaman waktu (Timestamping): mencatat waktu pembuatan atau keberadaan

informasi.

11. Kesaksian (Witnessing): verifikasi pembuatan atau keberadaan informasi oleh suatu entitas yang bukan pembuatnya.

12. Tanda terima (Receipt): pengakuan bahwa informasi telah diterima. 13. Konfirmasi (Confirmation): pengakuan bahwa layanan telah diberikan.

14. Kepemilikan (Ownership): sarana untuk menyediakan hak hukum untuk menggunakan sumber daya atau mengirimnya kepada orang lain.

15. Penyembunyian identitas (Anonymity): menyembunyikan identitas sebuah entitas yang terlibat dalam suatu proses.

16. Penyangkalan (Non-repudiation): mencegah bantahan/penyangkalan terhadap komitmen dan perjanjian dari tindakan sebelumnya.

17. Pencabutan wewenang (Revocation): pencabutan sertifikasi atau kewenangan (authorization).

(Menezes, et al. 2001)


(23)

8

Oleh karena itu, informasi yang sebagian besar disimpan dan dikirim dalam bentuk elektronik atau bahkan melalui cloud computing membutuhkan sarana untuk menjamin tercapainya aspek-aspek keamanan informasi, walaupun tidak ada jaminan bahwa semua aspek-aspek keamanan tersebut dapat tercapai. Hal inilah yang menjadi fokus kriptografi dalam pelayanan keamanan.

2.2. Kriptografi

2.2.1. Definisi dan terminologi

Menurut bahasa kata kriptografi terdiri dari kata ”crypto” dan “graphy”. Kata “crypt”

berasal dari Yunani yaitu κρυ ε oζ atau Kruptos yaitu tersembunyi (hidden). Sedangkan "graphy" mengacu pada “graphein” yaitu tulisan (writing). Jadi, kata

cryptography” berarti tulisan tersembunyi (hidden writing) dan umumnya mengacu pada bagian enkripsi yang membentuk sistem transmisi rahasia (Batten, 2013).

The Concise Oxford Dictionary (2006) mendefinisikan kriptografi sebagai seni menulis atau memecahkan kode. Definisi ini tidak sesuai dengan hakikat dari kriptografi modern. Pertama, hanya berfokus pada masalah komunikasi rahasia hanya sebatas sebuah kode. Kedua, definisi tersebut mengacu pada kriptografi sebagai bentuk seni. Memang benar sampai abad 20 (dan bisa dibilang sampai di akhir abad itu), kriptografi adalah sebuah seni. Membangun kode yang baik, atau memecahkannya kode yang ada, bergantung pada kreativitas dan keterampilan pribadi. Ada sangat sedikit teori yang bisa diandalkan dan bahkan tidak ada gagasan yang mendefinisikan mengenai kode yang baik. Namun, pada akhir abad ke-20 hingga sekarang, banyaknya teori yang bermunculan menjadikan kriptografi sebagai bidang keilmuan (Katz & Lindell, 2007).

Kriptografi sekarang digunakan di berbagai tempat yang terintegrasi dengan sistem komputer. Ruang lingkupnya meliputi lebih dari komunikasi rahasia, namun termasuk otentikasi pesan, tanda tangan digital, protokol untuk bertukar kunci rahasia, pelelangan dan pemilihan umum secara elektronik serta uang tunai digital bahkan masalah-masalah yang mungkin timbul dalam komputasi terdistribusi baik serangan internal atau eksternal.

Beberapa buku mendefinisikan istilah kriptografi sebagai berikut:

i. Kriptografi adalah teknik-teknik studi ilmiah untuk mengamankan informasi digital, transaksi dan komputasi terdistribusi (Katz & Lindell 2007).


(24)

ii. Kriptografi adalah ilmu dan seni untuk menjaga keamanan pesan (Schneier, 1996).

iii. Kriptografi adalah ilmu yang mempelajari teknik-teknik matematika yang berhubungan dengan aspek keamanan informasi seperti kerhasiaan, integrasi data, otentikasi entitas dan otentikasi asal usul data (Menezes, et al. 2001). Jadi, kriptografi adalah bidang ilmu yang mempelajari teknik-teknik pengamanan dalam melakukan transaksi informasi dan komputasi terdistribusi untuk memenuhi aspek keamanan informasi.

Terminologi

Berikut ini adalah beberapa istilah atau terminologi dasar yang penting untuk diketahui:

1. Pesan (M), Plaintext (P) dan Ciphertext (C)

Pesan (message) adalah data atau informasi yang dapat dibaca atau dimengerti maknanya. Nama lain untuk pesan adalah plaintext (plaintext) atau teks-jelas (cleartext). Bentuk pesan yang tersandi disebut cipherteks (ciphertext) atau kriptogram (cryptogram). Ciphertext harus dapat ditransformasikan kembali menjadi plaintext semula agar pesan yang diterima bisa dibaca.

2. Pengirim dan Penerima

Komunikasi data melibatkan pertukaran pesan antara dua entitas. Pengirim (sender) adalah entitas yang mengirim pesan kepada entitas lainnya. Penerima (receiver) adalah entitas yang menerima pesan. Entitas di sini dapat berupa orang, mesin (komputer), kartu kredit dan sebagainya.

3. Enkripsi (E) dan Dekripsi (D)

Proses menyandikan plaintext menjadi ciphertext disebut enkripsi (encryption) atau enciphering (standar nama ISO 7498-2). Sedangkan proses mengeminvers ciphertext menjadi plaintext dinamakan dekripsi (decryption) atau deciphering (standar nama ISO 7498-2). Enkripsi dan dekripsi dapat diterapkan baik pada pesan yang dikirim (encryption of data in motion) maupun pesan yang tersimpan (encryption of data at rest).

4. Cipher dan Kunci

Cipher (disebut juga algoritma kriptografi) adalah aturan untuk enciphering

dan deciphering, atau fungsi matematika yang digunakan untuk enkripsi dan dekripsi. Perkembangan kriptografi memunculkan masalah pada sebuah cipher


(25)

10

yaitu algoritma atau cipher tidak selamanya dapat dirahasiakan. Kriptografi modern mengatasi masalah tersebut dengan menggunakan kunci (key) yang untuk transformasi enciphering dan deciphering, biasanya berupa string atau deretan bilangan. Dengan menggunakan kunci K maka fungsi enkripsi dan dekripsi dapat ditulis sebagai EK (P) = C dan DK(C) = P.

Enkripsi EK (P) = C Enkripsi EK (P) = C

Dekripsi DK(C) = P Dekripsi DK(C) = P

Kunci K Kunci K

Plainteks (P)

Cipherteks(C)

Plainteks (P)

Gambar 2.1. Proses enkripsi dan dekripsi 5. Penyadap

Penyadap (eavesdropper) adalah orang yang mencoba menangkap pesan selama ditransmisikan. Tujuan penyadap adalah untuk mendapatkan informasi sebanyak-banyaknya mengenai sistem kriptografi yang digunakan untuk berkomunikasi dengan maksud untuk memecahkan ciphertext.

6. Kriptologi

Kriptologi adalah bidang ilmu yang mempelajari kriptografi dan kriptanalisis serta interaksi keduanya yaitu mencakup pembentukan metode enkripsi (kriptografi) sekaligus menganalisis suatu cipher untuk memcahkannya tanpa memiliki kunci (kriptanalisis).

(Schneier, 1996)

2.2.2. Tujuan kriptografi

Dari paparan pada bagian 8.1, kita dapat merangkum bahwa kriptografi bertujuan untuk memberi layanan keamanan (mencapai tujuan keamanan informasi) sebagai berikut:

1. Kerahasiaan (Confidentiality), adalah layanan yang ditujukan untuk menjaga agar pesan tidak dapat dibaca oleh pihak-pihak yang tidak berhak. Istilah lainnya adalah secrecy dan privacy. Banyak pendekatan untuk menghadirkan kerahasiaan, mulai dari perlindungan secara fisik sampai perlindungan melalui algoritma matematika yang menerjemahkan data sehingga sulit dipahami.


(26)

2. Integritas Data (Data Integrity), adalah layanan yang menjamin bahwa pesan masih asli/utuh atau belum pernah dimanipulasi selama pengiriman. Manipulasi data dapat berupa menyisipkan, menghapus dan menukar data tersebut.

3. Otentikasi (Authentication), adalah layanan yang berhubungan dengan identifikasi baik mengidentifikasi kebenaran pihak-pihak yang berkomunikasi (entity authentication) maupun mengidentifikasi asal usul pesan (data origin authentication). Dua pihak yang saling berkomunikasi harus dapat mengotentikasi satu sama lain sehingga ia dapat memastikan asal usul pesan. Otentikasi asal usul pesan secara implisit juga memberikan kepastian integritas data, sebab jika pesan telah dimodifikasi berarti asal usul pesan sudah tidak benar.

4. Penyangkalan (Non-Repudiation), adalah layanan untuk mencegah entitas yang berkomunikasi melakukan penyangkalan yaitu pengirim pesan telah menyangkal melakukan pengiriman atau penerima pesan menyangkal telah menerima pesan. (Menezes, et al. 2001) (Schneier, 1996)

2.3. Sistem Kriptografi (Cryptosystem)

Sistem kriptografi (cryptosystem) sering disebut juga dengan sistem cipher (cipher system) adalah sistem yang terdiri dari algoritma enkripsi, algoritma dekripsi dan tiga komponen teks (plaintext, ciphertext dan kunci) (Tilborg, et al., 2011). Secara umum ada dua jenis sistem kriptografi berbasis kunci:

1. Sistem kriptografi simetris (Symmetric Cryptosystem), sering disebut algoritma konvensional, adalah algoritma di mana kunci enkripsi dapat dihitung dari kunci dekripsi dan sebaliknya, artinya kunci enkripsi sama dengan kunci dekripsi. Algoritma ini (disebut juga algoritma secret-key, algoritma kunci tunggal, atau algoritma satu kunci) mengharuskan pengirim dan penerima menyepakati kunci yang sama sebelum mereka dapat berkomunikasi secara aman. Keamanan algoritma simetris terletak pada kunci, kebocoran kunci berarti siapa pun bisa mengenkripsi dan mendekripsi pesan. Algoritma simetris dapat dibagi menjadi dua kategori, pertama, beroperasi pada plaintext satu bit (atau kadang-kadang byte) pada suatu waktu yang disebut algoritma aliran atau stream cipher. Beberapa lagi beroperasi pada plaintext dalam kelompok bit.


(27)

12

kelompok bit yang disebut blok dan algoritmanya disebut algoritma blok atau

block cipher. Contoh sistem ini adalah DES, Blowfish, RC5, GOST, dsb.

Enkripsi EK (P) = C

Enkripsi EK (P) = C

Dekripsi DK(C) = P

Dekripsi DK(C) = P

Kunci privat K Kunci Privat K

Plainteks (P)

Cipherteks(C)

Plainteks (P)

Gambar 2.2 Skema symmetric cryptosystem

2. Sistem kriptografi kunci-publik (Public-key Cryptosystem), sering disebut algoritma asimetris (asymmetric cryptosystem), adalah algoritma di mana kunci yang digunakan untuk enkripsi berbeda dengan kunci yang digunakan untuk dekripsi. Selain itu, kunci dekripsi tidak dapat (setidaknya dalam jumlah waktu yang wajar) dihitung dari suatu kunci enkripsi. Algoritma ini disebut “kunci

-publik” karena kunci enkripsi dapat dibuat publik yaitu pihak luar dapat

menggunakan kunci enkripsi untuk mengenkripsi pesan, tetapi hanya orang tertentu dengan kunci dekripsi yang sesuai dapat mendekripsi pesan. Dalam sistem ini, kunci enkripsi disebut kunci publik, dan kunci dekripsi disebut kunci privat. Ada dua masalah matematika yang sering dijadikan dasar pembangkitan sepasang kunci pada algortima kunci-publik, yaitu:

a. Pemfaktoran

Diberikan bilangan bulat n. faktorkan n menjadi faktor primanya. Semakin besar n, semakin sulit memfaktorkannya (butuh waktu sangat lama). Algoritma yang menggunakan prinsip ini adalah RSA.

b. Logaritma diskrit

Temukan x sedemikian sehingga sulit dihitung. Semakin besar a, b dan n semakin sulit memfaktorkannya. Algoritma yang menggunakan prinsip ini adalah ElGamal dan DSA.(Munir, 2006)


(28)

Enkripsi EK1 (P) = C

Enkripsi EK1 (P) = C

Dekripsi DK2(C) = P

Dekripsi DK2(C) = P

Kunci Publik K1 Kunci Privat K2

Plainteks (P)

Cipherteks(C)

Plainteks (P)

Gambar 2.3 Skema public-key cryptosystem

2.4. Rivest Shamir Adleman (RSA)

RSA adalah salah satu dari sistem kriptografi kunci-publik (public-key criptosystem). Tahun 1978, Len Adleman, Ron Rivest dan Adi Shamir mempublikasikan sistem RSA. Semula sistem ini dipatenkan di Amerika Serikat dan seharusnya masa paten habis tahun 2003, akan tetapi RSA Security melepaskan hak paten setelah 20 September 2000. RSA menjadi sistem kriptografi RSA kunci-publik yang terpopuler karena merupakan sistem pertama yang sekaligus dapat digunakan untuk

confidentiality, key distribution dan digital signature. Boleh dikatakan semua standar sistem kriptografi memperbolehkan penggunaan RSA, termasuk SSL/TLS (untuk pengamanan http) dan SSH (secure shell) (Kromodimoeljo, 2009). Algoritma RSA memiliki besaran-besaran sebagai berikut:

1. p dan q bilangan prima (rahasia)

2. n = p. q (tidak rahasia) 3. ɸ(n) = (p– 1)(q– 1) (rahasia)

4. e (kunci enkripsi) (tidak rahasia) 5. d (kunci dekripsi) (rahasia) 6. m (plaintext) (rahasia) 7. c (ciphertext) (tidak rahasia)

2.4.1. Pembangkitan kunci

Dalam membuat suatu sandi, RSA mempunyai cara kerja dalam membuat kunci publik dan kunci privat adalah sebagai berikut:

1. Pilih dua bilangan prima sembarang, p dan q.

2. Hitung n = p. q (sebaiknya p ≠ q, sebab jika p = q maka n = p2 sehingga p dapat diperoleh dengan menarik akar pangkat dua dari n).


(29)

14

3. Hitung ɸ(n) = (p– 1)(q– 1).

4. Pilih kunci publik e, yang relatif prima terhadap ɸ(n) yaitu 1 < e < ɸ(n) dan

gcd(e, ɸ(n)) = 1.

5. Bangkitkan kunci privat dengan menggunakan persamaan

e. d≡ 1(modɸ(n)). ………….………..(1)

(0 ≤ dn)

Sehingga hasil dari algoritma di atas adalah: a. Kunci publik adalah pasangan (e, n) b. Kunci privat adalah pasangan (d, n)

Contoh: Misalkan A akan membangkitkan kunci publik dan kunci privat miliknya. A memilih p = 47 dan q = 71 (keduanya prima). Selanjutnya A menghitung :

n = p. q = 3337 dan ɸ(n) = (p– 1) (q– 1) = 3220

A memilih kunci publik e = 79 karena relatif prima dengan 3320. A mengumumkan nilai e dan n. Selanjutnya A menghitung kunci dekripsi d, sehingga dituliskan berdasarkan persamaan:

79. d≡ 1(mod 3220)

Dengan mencoba nilai-nilai d= 1, 2, 3, …, diperoleh nilai d memenuhi persamaan (1) yaitu 1019.

d = 1 (79.1) mod 3220 = 79

d = 2 (79.2) mod 3220 = 158

d = 3 (79.3) mod 3220 = 237

d = 1019 (79.1019) mod 3220 = 1

Kunci privat digunakan untuk mendekripsi pesan dan harus dirahasiakan A. Jadi, perhitungan kunci ini menghasilkan pasangan kunci:

a. Kunci publik (e = 79, n = 3337) b. Kunci privat (d = 1019, n = 3337)

Pada RSA hanya diberikan kunci publik, yaitu modulus n dan e. Sedangkan kunci privat d dirahasiakan. Oleh sebab itu, keamanan algoritma RSA terletak pada tingkat kesulitan dalam memfaktorkan bilangan non prima n menjadi faktor primanya,


(30)

dalam hal ini n = p. q. Sekali n berhasil difaktorkan menjadi p dan q, maka ɸ(n) = (p

1)(q – 1) dapat dihitung. Selanjutnya, karena kunci enkrispi e diumumkan (tidak rahasia), maka kunci dekripsi d dapat dihitung dari persamaan (1) kemudian dilakukan dekripsi ciphertextc menjadi plaintextm menggunakan persamaan (2).

Untuk menjaga keamanan tersebut, ada beberapa hal yang perlu diperhatikan dalam memilih p dan q:

1. Nilai p harus cukup jauh dari nilai q. Sebaiknya panjang dari p harus berbeda beberapa digit dari q.

2. Sebaiknya gcd(p – 1, q – 1) tidak terlalu besar.

3. Sebaiknya (p– 1) dan (q– 1) mempunyai faktor prima yang besar. (Kromodimoeljo, 2009)

2.4.2. Proses enkripsi

Proses enkripsi pesan sebagai berikut:

1. Ambil kunci publik penerima pesan e dan modulus n.

2. Nyatakan plaintext m menjadi blok-blok m1, m2, ..., sedemikian sehingga setiap blok merepresentasikan nilai di dalam selang [0, n– 1].

3. Setiap blok mi dienkripsi menjadi blok ci dengan rumus

ci= miemod n………..(2)

Contoh: Misalkan B mengirim pesan kepada A. Pesan (plaintext) yang akan dikirim ke A adalah

m = BUDI

B mengubah m ke dalam desimal pengkodean ASCII dan sistem akan memecah m

menjadi blok yang lebih kecil dengan menyeragamkan masing-masing blok menjadi 3 digit dengan menambahkan digit semu (biasanya 0) karena kode ASCII memiliki panjang digit maksimal sebesar 3 digit:

m1= 066 m2 = 085 m3 = 068 m4= 073

Nilai-nilai mi ini masih terletak di dalam selang [0, 3337-1] agar transformasi

menjadi satu-ke-satu. B mengetahui kunci publik A adalah e = 79 dan n = 3337. B dapat mengenkripsi setiap blok plaintext sebagai berikut:

c1 = 6679 mod 3337 = 795 c2= 85 79mod 3337 = 3048

c3 = 6879 mod 3337 = 2753 c4= 7379mod 3337 = 725


(31)

16

Dalam penerapannya, untuk memudahkan sistem membagi ciphertext menjadi blok-blok yang mewakili tiap karakter maka ditambahkan digit semu (biasanya 0) pada blok cipher sehingga tiap blok memiliki panjang yang sama sesuai ketetapan (dalam hal ini panjangnya 4 digit). Jadi, ciphertext yang dihasilkan adalah

c = 0795 3048 2753 0725

2.4.3. Proses dekripsi

Proses dekripsi pesan sebagai berikut:

1. Ambil kunci privat penerima pesan d, dan modulus n.

Nyatakan plaintextc menjadi blok-blok c1, c2, ..., sedemikian sehingga setiap blok merepresentasikan nilai di dalam selang [0, ].

2. Setiap blok mi dienkripsi menjadi blok ci dengan rumus:

mi = cid mod n……….(3)

Contoh: Dengan kunci privat d = 1019, chiperteks yang telah dibagi menjadi blok-blok cipher yang sama panjang, c = 0795 3048 2753 0725, kembali diubah ke dalam

plaintext: BUDI

m1= 7951019mod 3337 = 66 m2= 30481019mod 3337 = 85

m3 = 27531019 mod 3337 = 68 m4 = 7351019 mod 3337 = 73 Sehingga plaintext yang dihasilkan m = BUDI

2.5. Kriptanalisis (Cryptanalysis)

Kriptografi berkembang sedemikian rupa sehingga melahirkan bidang yang berlawanan yaitu kriptanalisis. Kriptanalisis adalah bidang ilmu yang memecahkan

ciphertext tanpa memiliki secara sah kunci yang digunakan, biasanya mendapatkan beberapa atau keseluruhan plaintext bahkan kuncinya (Tilborg, et al., 2011). Sedangkan pelakunya disebut kriptanalis (cryptanalyst).

Dalam membahas serangan terhadap kriptografi, kita selalu mengasumsikan kriptanalis mengetahui algoritma kriptografi yang digunakan, sehingga satu-satunya keamanan sistem kriptografi sepenuhnya pada kunci. Hal ini didasarkan pada Prinsip Kerckhoff (1883):

“Algoritma kriptografi tidak harus rahasia bahkan dapat diasumsikan jatuh ke tangan musuh tanpa menimbulkan masalah. Namun, kunci yang digunakan dalam algoritma

tersebut harus dianggap rahasia”


(32)

Dengan kata lain, skema algoritma enkripsi dan dekripsi itu tidak harus dirahasiakan, dan hanya kunci yang dirahasiakan oleh pihak yang berkomunikasi. Kerckhoff bermaksud algoritma kriptografi harus dirancang sedemikian rupa agar aman bahkan jika musuh tahu rincian dari semua komponen algoritma, asalkan musuh tidak mengetahui kunci yang digunakan (mengandalkan kerahasiaan kunci). Alasan pertama, jauh lebih mudah bagi para pihak untuk menjaga kerahasiaan kunci yang dibangkitkan secara acak daripada menjaga kerahasiaan dari suatu algoritma. Kedua, apabila kunci terbongkar maka lebih mudah pihak yang terkait untuk mengubah kuncinya dibandingkan mengubah algoritma (Katz & Lindell, 2007).

Gambar 2.4 menjelaskan skema bahwa seorang penyadap dapat memperoleh cipher teks atau kunci karena pihak yang berkomunikasi akan berbagi kunci melalui jalur publik. Hal inilah yang menjadi celah bagi kriptanalis untuk membongkar

ciphertext menjadi plaintext. Gambar 2.5 menjelaskan skema penyadap pada kriptografi kunci-publik.

Penyadap

Penyadap

Enkripsi

Ee (m) = c

Enkripsi

Ee (m) = c

Sumber Plainteks

Sumber Plainteks

Dekripsi

Dd(c) = m

Dekripsi

Dd(c) = m

Tujuan

Tujuan Jalur publik (tidak

aman)

c

m m

Alice Bob

Gambar 2.4. Skema komunikasi kriptografi


(33)

18

Penyadap

Penyadap

Enkripsi

Ee (m) = c

Enkripsi

Ee (m) = c

Sumber Plainteks

Sumber Plainteks

Dekripsi

Dd(c) = m

Dekripsi

Dd(c) = m

Tujuan

Tujuan

Jalur publik (tidak aman)

c

m m

Alice Bob

Sumber Kunci

Sumber Kunci

d

Jalur publik (tidak aman)

e

Gambar 2.5 Skema komunikasi kriptografi kunci-publik

2.6. Metode Kriptanalisis RSA

Berbagai serangan telah dibahas dalam banyak literatur. Secara garis besar dapat dikelompokkan menjadi tiga, yaitu Pemfaktoran (Factoring), Serangan Fungsi RSA (Attacks on the RSA Function) dan Implementation Attack (Cid, 2003).

2.6.1. Pemfaktoran (factoring)

Penyerangan ini bertujuan untuk memfaktorkan nilai n menjadi dua buah faktor primanya yaitu p dan q. Jika p dan q berhasil difaktorkan, fungsi euler

akan dapat dihitung dengan mudah dan kemudian kunci privat

dapat segera dihitung. Beberapa metodenya adalah metode Fermat‟s

Difference of Squares, metode Euler‟s Factoring, metode Kraitchik, Quadratic Sieve, Metode Pollard‟s ρ-1 and ρ dan Continued Fractions Algorithm.

2.6.2. Serangan fungsi RSA

Serangan ini mengambil keuntungan dari sifat khusus dari fungsi RSA. Biasanya memanfaatkan kesalahan sistem, misalnya kesalahan dalam pemilihan eksponen privat d atau eksponen publik e, dan lain-lain. Banyak serangan ini menggunakan teknik matematika canggih. Beberapa metodenya adalah Low Private Exponent Attack, Partial Key Exposure Attack, Broadcast and Related Message Attacks dan

Short Pad Attack.

2.6.3. Implementation attacks


(34)

Serangan ini (disebut juga Side-channel attacks) ditujukan pada rincian implementasinya. Dalam kasus ini, penyerang biasanya menggunakan beberapa informasi tambahan yang bocor dari implementasi fungsi RSA atau memanfaatkan kesalahan implementasi. Serangan biasanya diterapkan terhadap smart card dan token keamanan, dan lebih efektif ketika penyerang memiliki modul kriptografi. Pertahanan terhadap serangan sangat sulit, biasanya mengurangi jumlah informasi yang bocor atau membuatnya tidak berkaitan. Beberapa metodenya adalah Timing Attack, Power Analysis, Fault Analysis dan Failure Analysis.

2.7. Pemfaktoran Metode Kraitchik

Metode Kraitchik merupakan salah satu metode kriptanalisis dengan cara pemfaktoran (factoring) yaitu memfaktorkan nilai n menjadi dua buah faktor primanya. Pada tahun 1945, berdasarkan metode dasar Fermat, Maurice Kraitchik menemukan metode untuk memfaktorkan n menjadi x dan y sedemikian rupa sehingga . Dia mengamati bahwa merupakan kelipatan n. Jadi, untuk menghitung faktor dari n Kraitchik menggunakan persamaan

kn = x2–y2………(4)

Untuk k adalah bilangan bulat positif (diasumsikan x > y). Metode Kraitchik ini menjadi dasar dari metode Quadratic Sieve, salah satu yang paling efisien yang masih digunakan sampai sekarang.

Contoh: Faktorkan 899 menggunakan metode Kraitchik dengan k adalah sebuah prima ganjil.

1. Hitung x0 dengan mengakarkan n = 899

xo = √n = √899 = 29,98… = 29

2. Tentukan k = 3 dan hitung y2 dengan persamaan (4) (m= 1, 2, 3,…)μ x2–k. n = y2 (xo + m)2–k. n = y2

(29 + 1)2– 3 * 899 = -1736

Karena hasilnya negatif dan tidak bisa diakarkan, hitung y2 dengan menaikkan nilai m sampai memberikan hasil positif dan akar sempurna:

(29 + 23)2– 3 * 899 = 7 (29 + 24)2– 3 * 899 = 112


(35)

20

(29 + 25)2– 3 * 899 = 219 (29 + 26)2– 3 * 899 = 328 (29 + 27)2– 3 * 899 = 439 (29 + 28)2– 3 * 899 = 552 (29 + 29)2– 3 * 899 = 667 (29 + 30)2– 3 * 899 = 784 = 282

Sehingga 3 * 899 = (59 – 28)(59 +28) = 331 * 87. Jadi, n = 31 * (87/3) = 31 * 29. (Batten, 2013)

2.8. Invers Modulo (Extended Euclidean)

Jika a dan m relatif prima dan m > 1, maka kita dapat menemukan invers dari a

modulo m adalah bilangan bulat a sedemikian sehingga

aa-1≡ 1 (mod m)

Bukti: Dua buah bilangan bulat a dan m dikatakan relatif prima jika Gcd(a, m) = 1, dan jika a dan m relatif prima, maka terdapat bilangan bulat p dan q sedemikian sehingga

pa + qm = 1 yang mengimplikasikan bahwa

pa + qm ≡ 1 (mod m) Karena qm ≡ 0 (mod m), maka

pa ≡ 1 (mod m).

Kekongruenan yang terakhir ini berarti bahwa p adalah invers dari a modulo m. Pembuktian di atas juga menceritakan bahwa untuk mencari invers dari a modulo m, kita harus membuat kombinasi lanjar dari a dan m sama dengan 1. Koefisien a dari kombinasi lanjar tersebut merupakan invers dari a modulo m.

Contoh: Tentukan invers dari 4 mod 9 dan 17 mod 7.

1. Karena Gcd(4, 9) = 1, maka invers dari 4 (mod 9) ada. Dari algoritma Euclidean diperoleh bahwa

9 = 2 . 4 + 1 Susun persamaan di atas menjadi

–2 . 4 + 1 . 9 = 1


(36)

Dari persamaan terakhir ini kita peroleh –2 adalah invers dari 4 modulo 9. Periksalah bahwa

–2 . 4 ≡ 1 (mod 9)

(9 habis membagi –2 . 4 – 1 = –9)

2. Karena Gcd(17, 7) = 1, maka invers dari 17 (mod 7) ada. Dari algoritma Euclidean diperoleh rangkaian pembagian berikut:

17 = 2 . 7 + 3 (i) 7 = 2 . 3 + 1 (ii) 3 = 3 . 1 + 0 (iii) (yang berarti: Gcd(17, 7) = 1) Susun (ii) menjadi:

1 = 7 – 2 . 3 (iv) Susun (i) menjadi

3 = 17 – 2 . 7 (v) Sulihkan (v) ke dalam (iv):

1 = 7 – 2 . (17 – 2 . 7) = 1 . 7 – 2 . 17 + 4 . 7 = 5 . 7 – 2 . 17 atau

–2 . 17 + 5 . 7 = 1

Dari persamaan terakhir ini kita peroleh –2 adalah invers dari 17 modulo 7.

–2 . 17 ≡ 1 (mod 7)

(7 habis membagi –2 . 17 – 1 = –35) (Munir, 2006)

2.9. Uji Bilangan Prima Algoritma Lehmann

Sebagaimana diketahui bahwa bilangan prima tidak mengikuti pola yang jelas dan untuk mengetahui bahwa suatu bilangan prima atau tidak bukanlah tugas yang mudah. Bilangan n disebut prima, jika tidak boleh ada pembagi n berada antara 2 dan √n. Jika nilai bilangan n kecil maka pengujian sangat mudah dihitung, tetapi kesulitannya meningkat jika nilai n semakin besar. Salah satu metode yang cukup cepat untuk menguji keprimaan suatu bilangan n adalah algoritma Lehmann.

Algoritma Lehmann:


(37)

22

1. Bangkitkan bilangan acak a, 1 ≤ ap (p adalah bilangan yang diuji keprimaannya)

2. Hitung a(p– 1)/2modp

3. Jika a(p– 1)/2 ≡/ 1 atau – 1 (mod p), maka p tidak prima

4. Jika a(p– 1)/2 ≡ 1 atau – 1 (modp), maka peluang p bukan prima adalah 50%. 5. Ulangi pengujian di atas sebanyak t kali (dengan nilai a yang berbeda). Jika hasil

perhitungan langkah 2 sama dengan 1 atau – 1, tetapi tidak selalu sama dengan 1, maka peluang p adalah bilangan prima mempunyai kesalahan tidak lebih dari 1/2t.

Contoh 1: Ujilah keprimaan bilangan p = 7 dengan algoritma Lehmann

Hitung a(7 – 1)/2 mod 7 dengan mencoba nilai-nilai a (1 ≤ a≤ 7)

a = 1 1(7 – 1)/2 mod 7 ≡ 1(mod 7)

a = 2 2(7 – 1)/2 mod 7 ≡ 1(mod 7)

a = 3 3(7 – 1)/2 mod 7 ≡/ 1(mod 7)

a = 4 4(7 – 1)/2 mod 7 ≡ 1(mod 7)

a = 5 5(7 – 1)/2 mod 7 ≡/ 1(mod 7)

a = 6 6(7 – 1)/2 mod 7 ≡/ 1(mod 7)

a = 7 7(7 – 1)/2 mod 7 ≡/ 1(mod 7)

Jadi, 7 adalah Bilangan Prima karena memenuhi syarat a(p– 1)/2 ≡ 1 atau – 1 (modp)

sebanyak tiga kali yaitu sama dengan ½ dari banyaknya penghitungan (1 ≤ a7)

sebanyak 7/2 = 3,5 = 3 dengan tingkat kesalahan sebesar 1/27 = 0,78125% atau tingkat kebenarannya mencapai 99, 21875%.

Contoh 2: Ujilah keprimaan bilangan p = 9 dengan algoritma Lehmann

Hitung a(9 – 1)/2 mod 9 dengan mencoba nilai-nilai a ( )

a = 1 1(9 – 1)/2 mod 9 ≡ 1(mod 9)

a = 2 2(9 – 1)/2 mod 9 ≡/ 1(mod 9)

a = 3 3(9 – 1)/2 mod 9 ≡/ 1(mod 9)

a = 4 4(9 – 1)/2 mod 9 ≡/ 1(mod 9)

a = 5 5(9 – 1)/2 mod 9 ≡/ 1(mod 9)

a = 6 6(9 – 1)/2 mod 9 ≡/ 1(mod 9)

a = 7 7(9 – 1)/2 mod 9 ≡/ 1(mod 9)


(38)

a = 8 8(9 – 1)/2 mod 9 ≡ 1(mod 9)

a = 9 9(9 – 1)/2 mod 9 ≡/ 1(mod 9)

Jadi, 9 adalah Bukan Bilangan Prima karena banyaknya penghitungan a(1 ≤ a ≤ 9) yang memenuhi syarat atau hanya sebanyak dua kali yaitu

tidak mencapai ½ dari banyaknya penghitungan a ( ) sebanyak 9/2 = 4,5 = 4.(Lehmann, 1982) (Munir, 2006)

Berikut ini adalah perbandingan uji keprimaan metode Lehmann dengan beberapa metode keprimaan lainnya:

1. Metode Trial-Division: mudah diterapkan dan akurat (tidak ada bilangan yang akan terlewati hanya bergantung pada definisi keprimaannya) tetapi akan melambat karena mencoba setiap angka hingga √ndan memeriksanya satu per satu.

2. Tes keprimaan Fermat: sangat mudah dan cepat, tetapi tidak terlalu akurat (Adanya bilangan Carmichael yaitu angka komposit akan dilaporkan sebagai bilangan prima).

3. Tes Solovay-Strassen dan tes Miller-Rabin: cepat dan akurat , tapi tidak mudah untuk menerapkan karena mengharuskan memahami Simbol Legendre dan Jacobi (konsep-konsep matematika rahasia) dan membutuhkan algoritma faktorisasi yang efisien. Kemungkinan error tes Solovay-Strassen adalah (1/2)t, sedangkan kemungkinan error tes Miller-Rabin adalah terbatas di atas oleh (1/4)t.

(Menezes, et al. 2001)


(39)

BAB 3

ANALISIS DAN PERANCANGAN SISTEM

3.1. Analisis Sistem

Analisis sistem diperlukan untuk mengidentifikasikan dan mengevaluasi permasalahan, kesempatan, hambatan yang terjadi dan kebutuhan yang diharapkan untuk membuat rancangan sistem baru yang akan dibuat. Analisis sistem terdiri dari analisis masalah dan analisis kebutuhan yang harus dipenuhi oleh sistem.

3.1.1. Analisis masalah (Cause and Effect Diagram)

Cause and Effect Diagram (sering disebut Fishbone diagram atau Ishikawa Diagram) merupakan salah satu dari tujuh alat pengendali kualitas QC 7 Tools yang dipergunakan untuk mengidentifikasi akar penyebab dari suatu permasalahan dan mendapatkan ide-ide yang dapat memberikan solusi untuk pemecahan suatu masalah.

Machine/Tools Machine/Tools Material Material Method Method Man Man

Kondisi keamanan RSA yang sulit dipecahkan Selisih faktor kunci (p,q) besar

Kesalahan dalam requirement, design dan coding

Keterbatasan pengalaman Kinerja lambat &not responding

Spesifikasi rendah

Keterbatasan kemampuan

Ekstensi file tidak sesuai ketentuan Ukuran file besar

Ketidaksesuaian format file Spesifikasi OS tidak compatible dengan

Bahasa pemrograman

Efisiensi Waktu Pemecahan Kunci Privat Algoritma Rsa Dengan Memfaktorkan Kunci Publiknya Menggunakan Metode Kraitchik. Efisiensi Waktu Pemecahan Kunci Privat Algoritma Rsa Dengan Memfaktorkan

Kunci Publiknya Menggunakan Metode

Kraitchik.

Kelemahan bahasa pemrograman Memori tidak sesuai

Overheating

ErrorHandler tidak ada Kegunaan terbatas

Algoritma tidak tepat Kesalahan analisis

Gcd(p-1, q-1) tidak terlalu besar

faktor prima p-1 dan q-1 besar

Kunci privat & faktornya bersifat acak (mempengaruhi waktu pemecahan)

Kondisi keamanan RSA yang sulit dipecahkan

Gambar 3.1 Analisis masalah Sistem Pemecahan Kunci RSA Metode Kraitchik Cause and Effect Diagram pada Gambar 3.1 menunjukkan akar permasalahan yang paling mempengaruhi efisiensi waktu pemfaktoran kunci publik dalam


(40)

pemecahan kunci privat RSA adalah selisih faktor kunci (pq), Gcd(p - 1, q - 1) dan faktor prima (p– 1), (q - 1).

3.1.2. Analisis kebutuhan

Kebutuhan sistem bisa diartikan tentang apa yang harus dikerjakan oleh sistem dan tentang karakteristik apa yang harus dimiliki sistem. Ada dua tipe kebutuhan yang akan dianalisis, yaitu:

1. Kebutuhan Fungsional

Kebutuhan fungsional adalah jenis kebutuhan yang berisi proses-proses yang harus dilakukan oleh sistem dan informasi-informasi yang harus ada di dalam sistem. Adapun kebutuhan fungsional yang harus dimiliki sistem sebagaimana terlihat pada Tabel 3.1.

Tabel 3.1 Kebutuhan Fungsional Sistem Pemecahan Kunci RSA Metode Kraitchik

No. Kebutuhan

1. Sistem akan melakukan dua proses, yaitu pemecahan kunci privat RSA dan dekripsi ciphertext menjadi plaintext

2.

Pada proses pemecahan kunci privat RSA, pengguna meng-input kunci publik

n bertipe data BigInteger -263(-9,223,372,036,854,775,808) sampai dengan 264(18,446,744,073,709,551,616) untuk difaktorkan menjadi faktor kunci (p,q)menggunakan metode Kraitchik. Output berupa kunci privat d

menggunakan faktor kunci (p,q) dengan inversmodulo (Extended Euclidean) 3. Pada proses dekripsi, pengguna meng-input pasangan kunci privat (d, n) dan

ciphertext dengan ouput berupa plaintext

4.

Ciphertext dan plaintext adalah file berekstensi *.doc dan *.txt dengan

ciphertext berupa numerik (angka) dan plaintext-nya diubah menjadi karakter ASCII

5. Sistem dilengkapi fungsi timer untuk menghitung waktu proses kerja sistem 6. Sistem dapat menyimpan file hasil dekripsi (plaintext) pada direktori

penyimpanan


(41)

26

2. Kebutuhan Nonfungsional

Kebutuhan nonfungsional adalah jenis kebutuhan yang berisi hal-hal atau fitur-fitur lain untuk menunjang fungsionalitas dan utilitas sistem. Analisis kebutuhan nonfungsional meliputi performance (kinerja), information (informasi), control

(kontrol atau keamanan), dan service (pelayanan). Kebutuhan nonfungsional yang akan dibuat sebagaimana terlihat pada Tabel 3.2.

Tabel 3.2 Kebutuhan Nonfungsional Sistem Pemecahan Kunci RSA Metode

Kraitchik

No. Kebutuhan Penjelasan

1. Performance (Kinerja) 1. Menggunakan algoritma yang efektif dan efisien

2. Membatasi panjang kunci maksimal yang masih dalam jangkauan kinerja sistem

3. Tidak terlalu banyak informasi

4. Kontrol atau pengendalian tidak berlebihan 2. Information (Informasi) 1. Menampilkan informasi mengenai proses atau

situasi yang sedang berjalan, proses yang telah selesai dan langkah-langkah selanjutnya 2. Menampilkan informasi prosedur atau

langkah langkah sistem

3. Control (Kontrol) Menangani masalah di luar kondisi normal, misalnya jika input tidak sesuai dengan kriteria sistem, salah melakukan prosedur dan lain-lain.

4. Service (Pelayanan) 1. Akurasi dalam pengolahan data

2. Kehandalan terhadap konsistensi dalam pengolahan input dan output-nya serta kehandalan dalam menangani pengecualian 3. Sistem user friendly dalam penggunaan dan

interface


(42)

3.2. Perancangan Sistem

Tahap perancangan sistem dilakukan untuk memberikan gambaran yang jelas dan rancang bangun yang lengkap, menggambarkan bagaimana suatu sistem dibentuk dan merupakan penggambaran, perencanaan dan pembuatan sketsa atau pengaturan dari beberapa elemen yang terpisah ke dalam satu kesatuan yang utuh dan berfungsi.

Sistem akan dikembangkan menggunakan teknologi Ms. Visual C# yang menerapkan paradigma pengembangan sistem berorientasi objek, oleh karena itu dalam proses perancangan ini akan digunakan Unified Modelling Language (UML). Diagram UML yang digunakan adalah use case diagram dan activity diagram.

3.2.1. Use case diagram

Use case diagram menggambarkan interaksi antara sistem dan pengguna atau sistem lain di luar sistem tersebut yaitu siapa pengguna sistem itu dan dengan cara bagaimana pengguna berharap berinteraksi dengan sistem.

Pemecahan Kunci RSA

Sistem Pemecahan Kunci RSA Metode Kraitchik

Dekripsi Ciphertext RSA Pengguna

Menghitung Kunci Privat (d) Pemfaktoran (n) Metode Kraitchik «extends» «uses»

Periksa Kunci Publik (e,n)

Dekripsi ciphertext-->plaintext Simpan plaintext

«uses» Ambil ciphertext direktori penyimpanan «uses»

«uses»

Periksa ciphertext && (n,d) «uses»

«uses» «uses»

Gambar 3.2 Use case diagram Sistem Pemecahan Kunci RSA Metode Kraitchik

Gambar 3.2 menunjukkan interaksi antara pengguna dan Sistem Pemecahan Kunci RSA. Ada dua proses yang dilakukan sistem yaitu pemecahan kunci RSA dan dekripsi


(43)

28

RSA. Deskripsi lengkap diuraikan pada tabel narasi use case Pemecahan Tabel 3.3 dan Tabel 3.4.

Tabel 3.3 Narasi Use Case Pemecahan Kunci RSA Use case name Pemecahan kunci RSA

Scenario Memecahkan kunci privat d

Brief description

Pengguna meng-input pasangan kunci publik (e,n). Sistem akan melakukan pemfaktoran untuk mendapatkan faktor kunci publik

n dan dihitung secara matematis yang menghasilkan output

berupa kunci privat d

Actors Pengguna

Precondition Pengguna telah memperoleh pasangan kunci publik (e,n) Postcondition Kunci privat d terpecahkan dan ditampilkan

Flow of events Actors System

1. Pengguna

meng-input pasangan kunci publik (e,n)

2. Sistem memeriksa input

pasangan kunci publik (e, n) 3. Sistem memfaktorkan kunci

publik n menjadi faktor-faktornya (p,q) menggunakan metode Kraitchik

4. Sistem menghitung kunci privat

d menggunakan faktor-faktornya (p,q)

Exception condition

1. Jika pasangan kunci publik (e, n) belum di-input: Tanyakan kepada pengguna

2. Jika pasangan kunci publik (e, n) tidak berformat BigInteger: Tanyakan kepada pengguna


(44)

Tabel 3.4 Narasi Use Case Dekripsi RSA Use case name Dekripsi RSA

Scenario Dekripsi ciphertext menjadi plaintext

Brief description

Pengguna meng-input pasangan kunci privat (d, n) dan ciphertext

format *.doc dan *.txt, kemudian sistem melakukan dekripsi dengan kunci privat tersebut terhadap ciphertext menjadi plaintext

Actors Pengguna

Precondition Pengguna telah memperoleh pasangan kunci privat (d, n) Postcondition Memperoleh plaintext format *.doc dan *.txt

Flow of events Actors System

1. Pengguna

meng-input ciphertext

format *.doc dan *.txt dari direktori penyimpanan

2. Sistem meng-input pasangan kunci privat (d, n)

3. Sistem memeriksa input

pasangan kunci privat (d, n) dan

ciphertext format *.doc dan *.txt 4. Sistem melakukan dekripsi terhadap ciphertext format *.doc dan *.txt dengan pasangan kunci privat (d, n)

5. Sistem menyimpan plaintext

pada direktori penyimpanan dengan format *.doc dan *.txt Exception

condition

1. Jika pasangan kunci publik (e, n) dan ciphertext belum

di-input: Tanyakan kepada pengguna

2. Jika pasangan kunci publik (e, n) tidak berformat BigInteger: Tanyakan kepada pengguna

3. Jika ciphertext tidak berformat *.doc dan *.txt: Tanyakan kepada pengguna

3.2.2. Activity diagram

Activity diagram berfungsi untuk menjelaskan lebih detil use case, menjelaskan

bussiness rule yang kompleks dan menjelaskan algoritma yang kompleks. Activity


(45)

30

diagram untuk use case Pemecahan Kunci RSA dan use case Dekripsi RSA ditunjukkan pada Gambar 3.3 dan Gambar 3.4.

Halaman Utama

Input kunci publik (n)

Periksa (n) pada textbox Tekan tombol "Faktorkan"

Tampilkan dialog, Minta input Pemfaktoran (n) metode Kraitchik

Tampilkan (p,q) & Waktu pemfaktoran Hitung kunci privat (d)

Tampilkan kunci publik(n,e) & kunci privat(n,d) Buka aplikasi

Pengguna Sistem

Tidak ada Ada

Pilih opsi "Pemecahan Kunci RSA" Tampilkan window 'Pemecahan Kunci RSA'

Tekan tombol "Hitung!"

Gambar 3.3Activity diagram untuk use case Pemecahan Kunci RSA


(46)

Halaman Utama

Input kunci publik (n)

Periksa (d,n,ciphertext) Tekan tombol "Dekripsi & Simpan"

Tampilkan dialog, Minta input Proses dekripsi Buka aplikasi

Pengguna Sistem

Tidak ada Ada

Pilih opsi "Dekripsi RSA" Tampilkan window 'Dekripsi RSA'

Input kunci privat (d) Input file ciphertext Tampilkan "Open File Dialog"

Ambil file *.txt atau *.doc

Simpan file plaintext *.txt atau *.doc

Gambar 3.4Activity diagram untuk use case Dekripsi RSA

3.3. Flowchart

Flowchart (diagram alir) adalah simbol-simbol yang digunakan untuk menggambarkan sebuah pernyataan logika pemrograman serta aliran logika suatu prosedur dan proses dari pemecahan masalah yang ditunjukkan dengan arah panah (Zarlis & Handrizal 2010). Berikut ini akan dijelaskan beberapa flowchart dari proses yang berjalan pada Sistem Pemecahan Kunci RSA Metode Kraitchik.


(47)

32

3.3.1. Flowchart pemecahan kunci RSA metode Kraitchik Start

Start

Input: kunci

publik n

Input: kunci

publik n

Inisialisasi k = 1 Hitung x = sqrt(n)

Inisialisasi k = 1 Hitung x = sqrt(n)

x = x + 1

x = x + 1

Apakah (x^2 – k*n = akar sempurna) AND (x^2

– k*n ≠ 0

Apakah

(x^2 – k*n = akar

sempurna) AND (x^2

– k*n ≠ 0

No

Apakah (x + y) - k * n ≠ 0 AND

(x- y) - k * n ≠ 0

Apakah

(x + y) - k * n ≠ 0 AND

(x- y) - k * n ≠ 0

Hitung y = Sqrt(x^2 - k * N)

Hitung y = Sqrt(x^2 - k * N)

Yes

k = k + 1

k = k + 1

No

Hitung p = (x + y)/k

q = x - y

Hitung p = (x + y)/k

q = x - y

Yes

Apakah (0 < p < n) AND (0 < q < n)

Apakah (0 < p < n) AND (0 < q < n)

End

End

Output:

Faktor kunci (p,q) Output:

Faktor kunci

(p,q)

Yes

No

Gambar 3.5Flowchart pemfaktoran metode Kraitchik


(48)

Keterangan:

Gambar 3.5 menunjukkan gambaran proses pemecahan kunci RSA dengan pemfaktoran metode Kraitchik dan persamaan (1). Adapun proses yang bekerja antara lain:

1. Input kunci publik n.

2. Hitung nilai x yang merupakan akar n, kemudian tentukan nilai k = 1.

3. Lakukan pengulangan dengan meningkatkan nilai x (x = x + 1) hingga x2 – k.n

adalah akar sempurna dan x2–k.n≠ 0.

4. Hitunglah y = √(x2 – k.n) dan lakukan pengulangan dengan meningkatkan nilai k

(k = k + 1) hingga (x + y) –k.n≠ 0 dan (x – y) –k.n≠ 0.

5. Output proses ini adalah nilai p dan q dengan menghitung p = (p + q)/k dan q = pq jika memenuhi syarat (0 < p < n) dan (0 < q < n). Jika tidak memenuhi syarat ulangi langkah 4.

3.3.2. Flowchart menghitung kunci publik dan kunci privat

Start

Start

End

End

Input: Bilangan prima (p,q)

Input: Bilangan prima (p,q)

Inisialisasi e = 2 Hitung n = p.q

φ(n) = ( p-1) ( q-1 )

Inisialisasi e = 2 Hitung n = p.q

φ(n) = ( p-1) ( q-1 )

Cek apakah GCD (e,φ(n)) = 1

Cek apakah GCD (e,φ(n)) = 1

Inisialisasi d = 1

Inisialisasi d = 1

Hitung d = e-1(mod φ(n))

Hitung

d = e-1(mod φ(n))

Output:

Publik Key =(e,n) Privat Key (d,n)

Output: Publik Key =(e,n)

Privat Key (d,n)

Yes

A

A

A

A

e = e+1

e = e+1

No

Gambar 3.6 Flowchart menghitung kunci publik dan kunci privat


(1)

using System.Data; using System.Drawing; using System.Linq; using System.Numerics; using System.Text;

using System.Threading.Tasks; using System.Threading;

using System.Windows.Forms; using System.Diagnostics; namespace MetodeKraitchik {

public partial class PemecahanForm : Form {

DateTime start, finish;

BigInteger D, E, p, q;

BigInteger[] hasil = new BigInteger[2]; public PemecahanForm()

{

InitializeComponent(); }

public static bool IsSquare(BigInteger X) {

BigInteger sqr = AkarkanBigInteger.SRO(X); if (sqr * sqr == X)

{

return true; }

return false; }

public static BigInteger[] Kraitchik(BigInteger N) {

BigInteger[] hasil = new BigInteger[2]; bool found = false;

BigInteger x = AkarkanBigInteger.SRO(N); BigInteger k = 1;

while (!found) {

if (IsSquare(x * x - k * N) && x * x - k * N != 0) {

BigInteger y = AkarBigInteger.SRO(x * x - k * N); if ((x + y) - k * N != 0 && (x - y) - k * N != 0) {

hasil[0] = (x + y) / k; hasil[1] = x - y;

if (0 < hasil[0] && hasil[0] < N && 0 < hasil[1] && hasil[1] < N)

found = true; }

k++; }

x++; }

return hasil; }


(2)

public static BigInteger GCD(BigInteger m, BigInteger n) {

BigInteger r = n % m; while (r != 0)

{

r = m % n; m = n; n = r; }

return m; }

public static BigInteger nilaiE(BigInteger totienK, BigInteger nK)

{

BigInteger E = 2;

while (GCD(totienK, E) != 1) {

E++; }

return E; }

public static BigInteger nilaiD(BigInteger EK, BigInteger totienK)

//modular Inverse Extended Euclidean GCD {

BigInteger x = 1, y = 0, xLast = 0, yLast = 1; BigInteger a = EK, b = totienK;

BigInteger c, d, q, r; while (a != 1)

{

q = b / a; r = b % a;

c = xLast - q * x; d = yLast - q * y; xLast = x; yLast = y; x = c; y = d;

b = a; a = r; }

x = (x + totienK) % totienK; return x;

}

public static BigInteger faktorPrima(BigInteger n) {

BigInteger k = 2; while (k * k <= n) {

if (n % k == 0) {

n /= k; }

else {

++k; }


(3)

}

return n; }

private void button1_Click(object sender, EventArgs e) {

try {

if (textBox1.Text.Length <= 64) {

textBox3.Text = ""; textBox4.Text = ""; start = DateTime.Now; timer1.Enabled = true;

hasil =

Kraitchik(BigInteger.Parse(textBox1.Text)); finish = DateTime.Now;

} else {

MessageBox.Show("Panjang Kunci maksimal 64 digit!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);

} } catch {

MessageBox.Show("Silakan Input Kunci Publik (n)", "Missing data", MessageBoxButtons.OK,

MessageBoxIcon.Error); }

}

private void timer1_Tick(object sender, EventArgs e) {

TimeSpan selisih = finish.Subtract(start); textBox3.Text += hasil[0].ToString() + "\n"; textBox4.Text += hasil[1].ToString();

textBox2.Text = selisih.TotalMilliseconds + " ms"; timer1.Enabled = false;

MessageBox.Show("Pemfaktoran Kunci Publik (n) Berhasil", "Success", MessageBoxButtons.OK,

MessageBoxIcon.Information); }

private void button2_Click(object sender, EventArgs e) {

textBox1.Text = ""; textBox2.Text = ""; textBox3.Text = ""; textBox4.Text = ""; richTextBox3.Text = ""; }

private void button3_Click(object sender, EventArgs e) {


(4)

form.ShowDialog(); }

private void button4_Click(object sender, EventArgs e) {

try {

richTextBox3.Text = "";

p = BigInteger.Parse(textBox3.Text); q = BigInteger.Parse(textBox4.Text); BigInteger n = BigInteger.Multiply(p, q);

BigInteger totien = BigInteger.Multiply(p - 1, q - 1);

E = nilaiE(totien, n);

richTextBox3.Text += "Kunci Publik " + "(" + "e =" + E.ToString() + ", " + "n =" + n.ToString() + ")" + "\n\n";

d = nilaiD(E, totien);

richTextBox3.Text += "Kunci Privat " + "(" + "d =" + d.ToString() + ", " + "n =" + n.ToString() + ")" + "\n\n";

richTextBox3.Text += "Panjang Kunci Publik (n) = " + textBox1.Text.Length + "\n\n";

richTextBox3.Text += "Totien (n) = " + totien.ToString() + "\n\n";

BigInteger S = p - q;

richTextBox3.Text += "Selisih Faktor Kunci (p-q) = " + S.ToString() + "\n\n";

BigInteger G = GCD(p - 1, q - 1);

richTextBox3.Text += "GCD (p-1, q-1) = " + G.ToString() + "\n\n";

BigInteger Fp = faktorPrima(p - 1);

richTextBox3.Text += "Faktor Prima p-1 = " + Fp.ToString() + "\n\n";

BigInteger Fq = faktorPrima(q - 1);

richTextBox3.Text += "Faktor Prima q-1 = " + Fq.ToString() ;

} catch {

MessageBox.Show("Silakan Input Kunci Publik (n)", "Missing data", MessageBoxButtons.OK,

MessageBoxIcon.Error); }

} } }

Form „Dekripsi RSA‟

using System;


(5)

using System.Collections.Generic; using System.ComponentModel; using System.Data;

using System.Drawing; using System.Linq; using System.Text;

using System.Windows.Forms; using System.Numerics; using System.IO;

namespace MetodeKraitchik {

public partial class dekripsiForm : Form {

string[] baris = null; public dekripsiForm() {

InitializeComponent(); }

private void bantuanButton_Click(object sender, EventArgs e) {

bantuanForm form = new bantuanForm(); form.ShowDialog();

}

public int[] dekripsiRSA(BigInteger[] a) {

BigInteger n = BigInteger.Parse(textBox1.Text); BigInteger d = BigInteger.Parse(textBox2.Text); int[] p = new int[a.Length];

for (int i = 0; i < a.Length; i++) {

p[i] = (int)BigInteger.ModPow(a[i], d, n); }

return p; }

public static string convertAscii(int[] p) {

string temp = "";

for (int i = 0; i < p.Length; i++) {

char a=(char)p[i]; temp += a.ToString(); }

return temp; }

private void button1_Click(object sender, EventArgs e) {

OpenFileDialog openFileDialog = new OpenFileDialog(); if (openFileDialog1.ShowDialog() == DialogResult.OK) {

baris =


(6)

string gabung = "";

foreach (string line in baris) {

gabung += line + ""; }

textBox3.Text = openFileDialog1.FileName; }

}

private void button2_Click(object sender, EventArgs e) {

try {

BigInteger[] daftar = new BigInteger[baris.Length]; int i = 0;

foreach (string line in baris) {

daftar[i] = BigInteger.Parse(line); i++;

}

int[] hasildekrip = dekripsiRSA(daftar); string hasilx = convertAscii(hasildekrip);

if (saveFileDialog1.ShowDialog() == DialogResult.OK) {

File.WriteAllText(@saveFileDialog1.FileName,hasil x);

MessageBox.Show("Dekripsi Berhasil", "Sukses", MessageBoxButtons.OK,MessageBoxIcon.Information); MessageBox.Show(hasilx);

textBox4.Text = saveFileDialog1.FileName; }

} catch {

MessageBox.Show("Input kunci privat (n,d) atau Input File terenkripsi", "Error Input",

MessageBoxButtons.OK, MessageBoxIcon.Error); }

}

private void button3_Click(object sender, EventArgs e) {

textBox1.Text = ""; textBox2.Text = ""; textBox3.Text = ""; textBox4.Text = ""; }

} }