BAB II LANDASAN TEORI
2.1
Kriptografi Kriptografi (cryptography) berasal dari bahasa Yunani : “cryptos” artinya
“secret” (rahasia), sedangankan “graphein” artinya “writing” (tulisan). Jadi, kriptografi berarti “secret writing” (tulisan rahasia). Ada beberapa definisi kriptografi yang telah dikemukakan di dalam berbagai literatur. Definisi yang dipakai di dalam buku-buku yang lama (sebelum tahun 1980-an) menyatakan bahwa kriptografi adalah ilmu dan seni untuk menjaga kerahasiaan pesan dengan cara menyandikan ke dalam bentuk yang tidak dapat dimengerti lagi maknanya.. Kriptografi adalah ilmu dan seni untuk menjaga kemanan pesan (Munir, 2006). Namun saat ini kriptografi lebih dari sekadar privacy, tetapi juga untuk tujuan data integrity, authentication, dan non-repudiation. Kata “seni” di dalam definisi di atas berasal dari fakta sejarah bahwa pada masa-masa awal sejarah kriptografi, setiap orang mungkin punya cara yang unik untuk merahasiakan pesan. Cara-cara unik tersebut mungkin berbeda-beda pada setiap pelaku kriptografi sehingga setiap cara menulis pesan rahasia pesan mempunyai nilai estetika tersendiri sehingga kriptografi berkembang menjadi sebuah seni merahasiakan pesan (kata “graphy” didalam “cryptography” itu sendiri sudah menyiratkan sebuah seni).
Gambar 2.1 Proses Kriptografi Secara Umum
6 http://digilib.mercubuana.ac.id/
7
2.2
Sejarah Kriptografi Kriptografi mempunya sejarah yang sangat menarik dan panjang.
Kriptografi sudah digunakan 4000 tahun yang lalu, diperkenalkan oleh orang orang Mesir lewat hieroglyph. Jenis tulisan ini bukanlah standar untuk menulis pesan (Ariyus, 2008).
Gambar 2.2 Tulisan yang menggunakan Hieroglyph Sebagian besar sejarah kriptografi bagian dari kriptografi klasik, yaitu metode kriptografi yang menggunakan kertas dan pensil atau menggunakan alat bantu mekanik yang sederhana. Kriptografi klasik secara umum dapat dikelompokan menjadi dua kategori, yaitu algoritma transposisi (transposition cipher) dan algoritma subtitusi (substitution cipher). Algoritma transposisi adalah algoritma yang mengubah susunan-susunan huruf didalam pesan, sedangkan algoritma subtitusi yaitu mengganti setiap huruf atau kelompok huruf dengan sebuah huruf.-huruf lain. Penggunaan transposition cipher yaitu oleh tentara Sparta di Yunani pada permulaan tahun 400 SM. Mereka menggunakan apa yang dinamakan scytale (Gambar 2.3). Scytale terdiri dari sebuah kertas panjang dari daun papyrus yang dililitkan pada sebuah silinder dari diameter tertentu (diameter dari silinder merupakan kunci dari penyandian tersebut).Pesan ditulis baris per baris dan secara horizontal. Apabila pitadilepas, maka setiap huruf akan tersusun secara acak membentuk pesan rahasia (pesan yang tidak dapat dibaca). Agar pesan tersebut dapat dibaca, maka pesan tersebut kembali dililitkan kesilinder yang diameternya sama dengan diameter silinder pengirim.
http://digilib.mercubuana.ac.id/
8
Gambar 2.3 Scytale Contoh penggunaan substitution cipher adalah pada Zaman Romawi kuno, disaat Julius Caesar ingin mengirimkan sebuah pesan rahasia kepada seorang jendral di medan perang. Pesan tersebut akan dikirimkan melalui seorang kurir. Karena tingkat kerahasiaan pesan yang tinggi, maka Julius Caesar tidak mau mengambil resiko jika pesan tersebut sampai ketangan musuh. Maka Caesar mensubtitusi pesan tersebut dengan cara mengganti huruf-huruf alphabet a menjadi d, b menjadi e, c menjadi f, dan seterusnya. Sebelumnya kunci dari pesan tersebut telah diberitahukan oleh Julius Caesar kepada jendral yang akan menerima pesan tersebut. Dengan demikian, walaupun pesan tersebut jatuh ke pihak musuh, maka musuh tersebut tidak akan dapat membaca pesan tersebut. Pada abad ke-15, ditemukan kode roda (wheel cipher) oleh Leo Battista Alberti.Kode ini terus dikembangkan menjadi alat enkripsi dan dekripsi hingga saat ini. Metode ini dikembangkan pada awalnya oleh Thomas Jefferson yang kemudian diberi nama roda kode Jefferson. Kemudian kode ini dikembangkan lagi oleh Bazeries yang diberi nama silinder Bazeries. Alat ini lebih fleksibel, memungkinkan untuk dikembangkan secara terus menerus untuk menghindar kode breaking. Meskipun demikian metode ini dapat dipecahkan oleh De Viaris pada tahun 1892. Meskipun demikian metode ini tetap terus dikembangkan dan dianggap aman untuk kasus-kasus tertentu. Pada abad ke-20, kriptografi lebih banyak digunakan oleh kalangan militer.Pada perang dunia ke II, pemerintah Nazi Jerman membuat mesin enkripsi yang dinamakan enigma. Mesin ini menggunakan beberapa buah rotor (roda berputar), dan melakukan proses enkripsi yang sangat rumit. Jerman percaya akan dikirim melalui enigma tidak akan terpecahkan kode enkripsinya. Tetapi anggapan Jerman tersebut salah, setelah mempelajari mesin enigma bertahun-
http://digilib.mercubuana.ac.id/
9
tahun, sekutu berhasil memecahkan kode-kode tersebut. Setelah Jerman mengetahui kode-kode mereka telah terpecahkan, kemudian enigma mengalami beberapa kali perubahan. Enigma yang digunakan Jerman bisa mengenkripsi satu pesan dengan 15 milyar kemungkinan. Enigma termasuk kriptografi berbasis rotor. Mesin berbasis rotor ini dibangun dan dipatenkan oleh beberapa orang penemu dari negara-negara yang berbeda dari tahun 1917 sampai 1921, diantaranya oleh warga Amerika Edwad Hug Habern, warga Jerman Arthur Scherbuis, warga Belanda Alexsander Koch, dan warga Swedia Arvid Gerhard Damm. Milik Koch dikembangkan oleh Arthur Scherbuis yang dipatenkan diberi nama enigma.Angkatan laut jerman memperkenalkan mesin kode Scherbius.Tahun 1930,enigma untuk versi militer dibangun. Diperkirakan mesinenigma yang digunakan pada tahun 1935 sampai 1945 adalah 100.000 mesin. Mesin enigma pada Gambar 2.4.
Gambar 2.4 Mesin Enigma Perkembangan
peralatan
computer
digital
memicu
terbentuknya
kriptografi modern. Dengan computer digital, akan sangat mungkin untuk menghasilkan cipher yang lebih kompleks dan rumit. Kriptografi klasik pada umumnya dienkripsi karakter per karakter (menggunakan alphabet tradisional), sedangkan kriptografi modern beroperasi pada string biner cipher yang lebih kompleks.
http://digilib.mercubuana.ac.id/
10
Adapun tujuan kriptografi menurut (Munir, 2006 : 9) adalah sebgai berikut: Confidentiality (Kerahasiaan)
1.
Adalah layanan yang ditujukan untuk menjaga agar pesan tidak dapat dibaca. Authentiation (Otentikasi)
2.
Adalah
layanan
yang
berhubungan
dengan
identifikasi,
baik
mengidentifikasi kebenaran pihak-pihak yang berkomunikasi (user authentication atau entity authentication). Maupun mengidentifikasi kebenaran sumber pesan (Satria, 2008). Data Integrity (Integritas Data)
3.
Adalah layanan yang menjamin bahwa pesan masih asli atau belum pernah dimanipulasi selama pengiriman. Non - repudiation (Tanpa Penyangkalan)
4.
Adalah layanan untuk mencegah entitas yang berkomunikasi melakukan penyangkalan yaitu pengiriman atau penerima pesan menyangkal telah menerima pesan. 2.3
Algoritma Kriptografi Algoritma kriptografi disebut juga cipher yaitu aturan untuk enchipering
dan dechipering, atau fungsi matematika yang digunakan untuk enkripsi dan dekripsi (Nugraha, 2006). Beberapa cipher memerlukan algoritma yang berbeda untuk enchipering dan dechipering. Keamanan algoritma kriptografi sering dukur dari banyaknya kerja yang dibutuhkan untuk memecahkan cipherteks menjadi plainteks
tanpa mengetahui kunci yang digunakan. Apabila semakin banyak
proses yang diperlukan berarti juga semakin lama waktu yang dibutuhkan, maka semakin kuat algoritma tersebut dan semakin aman digunakan untuk menyandikan pesan. Algoritma kriptografi terdiri dari tiga fungsi dasar, yaitu: 1. Enkripsi, merupakan hal yang sangat penting dalam kriptografi, merupakan pengamanan data yang dikirmkan agar terjaga kerahasiaanya. Pesan asli
http://digilib.mercubuana.ac.id/
11
disebut plaintext, yang diubah menjadi kode-kode yang tidak dimengerti. Enkripsi bisa diartikan dengan cipher atau kode. 2. Dekripsi, merupakan kebalikan dari enkripsi. Pesan yang telah dienkripsi dikembalikan ke bentuk asalnya (teks-asli), disebut dengan dekripsi pesan. Algoritma yang digunakan untuk dekripsi tentu berbeda dengan algoritma enkripsi. 3. Kunci, yang dimaksud adalah kunci yang dipakai untuk melakukan enkripsi dan dekripsi. Kunci terbagi menjadi dua bagian, kunci rahasia (private key) dan kunci umum (public key). Konsep matematis yang mendasari kriptografi adalah relasi antara 2 (dua) buah himpunan yaitu himpunan yang berisi elemen-elemen plainteks dan himpunan yang berisi cipherteks. Enkripsi dan dekripsi merupakan fungsi yang memetakan eleme-elemen antara kedua himpunan tersebut. Misalkan P menyatakan plainteks dan C menyatakan cipherteks, maka fungsi enkripsi E memetakan P ke C,
E(P)=C dan fungsi dekripsi D memetakan C ke himpunan P.
D(C) = P Karena funsi proses dekripsi D mengembalikan himpunan C menjadi himpunan P asal, maka algoritma kriptografi harus memenuhi persamaan
D(E(P)) = P Tingkat keamanan suatu algoritma dalam kriptografi seringkali diukur dari kuantitas proses yang dilakukan dalam suatu fungsi, baik itu fungsi enkripsi maupun fungsi dekripsi. Proses tersebut juga dapat dihubungkan dengan sumber data yang dibutuhkan, menunjukkan semakin kuat algoritma kriptografi tersebut.
http://digilib.mercubuana.ac.id/
12
2.4
Sejarah (Advanced Encryption Standard) AES Algoritma AES diperoleh melalui kompetisi yang dilakukan pada tahun
1997 oleh NIST (National Institute of Standard and Technology) untuk mencari standar algoritma enkripsi yang dapat dipergunakan dalam berbagai aplikasi. Proses seleksi ini amat ketat dan membutuhkan waktu yang cukup lama. Pada akhirnya, tanggal 2 Oktober 2000 terpilihlah algoritma Rijndael yang dibuat oleh Rijmen dan Daemen dari Belgia sebagai standar algoritma enkripsi yang biasa disebut AES (Cormen, 1989). Meskipun masih baru, algoritma ini sudah dipergunakan pada berbagai aplikasi, salah satunya adalah untuk penyandian password. Penggunaan algoritma ini sudah sering dilihat pada perangkat lunak untuk kompresi data. Dalam perangkat lunak tersebut, salah satu metode yang digunakan untuk mengenkripsi password adalah dengan algoritma AES. 2.5
Panjang Kunci dan Ukuran Blok AES Rijndael mendukung panjang kunci 128 bit sampai 256 bit dengan step 32
bit. Panjang kunci dan ukuran blok dapat dipilih secara independen. Setiap blok dienkripsi dalam sejumlah putaran tertentu, sebagai mana halnya pada DES. Karena AES menetapkan panjang kunci adalah 128, 192, dan 256, maka dikenal AES-128, AES-192, dan AES-256 (Munir, 2004). Tabel 2.1 Tabel Panjang Kunci dan Ukuran Blok Rijndael Panjang Kunci
Ukuran Blok
Jumlah Putaran
(Nk word)
(Nb word)
(Nr)
AES-128
4
4
10
AES-192
6
4
12
AES-256
8
4
14
Catatan: 1 word = 32 bit
http://digilib.mercubuana.ac.id/
13
2.6
Algoritma Advanced Encryption Standard (AES) AES merupakan sistem penyandian blok yang bersifat non-Fiestel karena
AES menggunakan komponen yang selalu memiliki invers dengan panjang blok 128 bit (Sadikin, 2012). Garis besar Algoritma Rijndael yang beroperasi pada blok 128-bit dengan kunci 128-bit adalah sebagai berikut (diluar proses pembangkitan round key): 1. AddRoundKey, melakukan X-or antara state awal (plainteks) dengan chiper key. Tahap ini disebut juga initial round. 2. Putaran sebanyak Nr - 1 kali. Proses yang dilakukan pada setiap putaran adalah: a. SubBytes adalah substitusi byte dengan menggunakan tabel substitusi (SBox). b. ShiftRows adalah pergeseran baris-baris array state secara wrapping. c. MixColumns adalah mengacak data di masing-masing kolom array state. d. AddRoundKey adalah melakukan XOR antara state sekarang round key. 3. Final round, proses untuk putaran terakhir. a. SubBytes b. ShiftRows c. AddRoundKey Algoritma Rijndael mempunyai 3 parameter yaitu : 1. Plainteks adalah array yang berukuran 16 byte, yang berisi data masukan. 2. Cipherteks adalah array yang berukuran 16 byte, yang berisi hasil enkripsi. 3. Key adalah array yang berukuran 16 byte, yang berisi kunci ciphering (disebut juga cipher key).
http://digilib.mercubuana.ac.id/
14
Gambar 2.5 Blok Diagram Proses Enkripsi Rijndael mendukung panjang kunci 128 bit sampai 256 bit. Panjang kunci dan ukuran blok dapat dilihat secara independen, dan setiap blok dienkripsi sejumlah putaran tertentu. Jumlah putaran yang digunakan algoritma AES-128 dapat dilihat pada table 2.1. Sedangkan algoritma dekripsi teorema AES – 128 yang beroperasi pada blok 128-bit adalah sebagai berikut : 1. AddRoundKey : melakukan X-or antara state awal (cipherteks) dengan cipher key. Tahap ini disebut juga initial round. 2. Putaran sebanyak Nr – 1 kali. Proses yang dilakukan pada setiap putaran adalah: a. InvShiftRow : pergeseran baris-baris array state secara wrapping.
http://digilib.mercubuana.ac.id/
15
b. InvSubByte : substitusi byte dengan menggunakan tabel substitusi Inverse S-box. c. AddRoundKey : melakukan operasi X-or antara state sekarang dengan round key. d. InvMixColumn : mengacak data pada masing-masing kolom array state. 3. Final round : proses untuk putaran terakhir: a.
InvShiftRow.
b.
Inv SubByte.
c.
AddRoundKey
Blok diagram algoritma dekripsi AES – 128 dapat dilihat pada Gambar 2.6 Untuk selanjutnya akan dijelaskan setiap iterasi tahapan rounds dari algoritma enkripsi dan dekripsi AES – 128.
Gambar 2.6 Blok Diagram Dekripsi AES-128
http://digilib.mercubuana.ac.id/
16
2.6.1 Key Expansion Ekspansi cipher key digunakan untuk membentuk round key yang akan digunakan pada langkah-langkah enkripsi dan dekripsi. Ekspansi kunci ini memiliki tahapan khusus yang dikenal sebagai Rijndael’s key schedule.Iterasi tahapan AddRoundKey pada algoritma AES – 128 diulang sebanyak sebelas kali. Ilustrasi tahapan key schedule dapat dilihat pada Gambar 2.7 dan 2.8.
Gambar 2.7 Ilustrasi Prosedur rijndael key schedule Oleh karenanya, terdapat sepuluh kali round key yang dibutuhkan dalam satu kali enkripsi state. Melalui key schedule tersebut, key yang menjadi parameter masukan akan diekspansi menjadi beberapa round key.
http://digilib.mercubuana.ac.id/
17
2.6.2 Transformasi AddRoundKey Tahapan
AddRoundKey
pada
algoritma
enkripsi
AES
sesungguhnya hanyalah operasi X-or terhadap komponen byte plaintext dengan acuan cipher key (W) yang dihasilkan pada prosedur key schedule. Masing-masing komponen byte diubah ke dalam bentuk biner untuk kemudian dioperasikan masing – masing bit dengan fungsi logika X-or. Bilangan biner yang terbentuk kemudian dikonversi lagi menjadi komponen byte yang mewakili.
Gambar 2.8 Lanjutan Ilustrasi Prosedur rijndael key schedule
http://digilib.mercubuana.ac.id/
18
2.6.3 Transformasi SubBytes() Dalam operasi ini, setiap byte yang akan dienkripsi disubtitusikan dengan nilai byte lain dengan menggunakan S-box Table S-box yang dimaksud dapat dilihat pada gambar 2.9. AES merupakan algoritma simetri, yang berarti table subtitusi yang dibutuhkan untuk enkripsi berbeda dengan dekripsi. Table S-box inverse dapat dilihat pada gambar 2.10.
Gambar 2.9 S-box
http://digilib.mercubuana.ac.id/
19
Gambar 2.10 S-box invers 2.6.4
Transformasi ShiftRows() Pada operasi ini, byte-byte (128 bit) pada setiap baris digeser
secara memutar dengan pergeseran yang berbeda dari tiap-tiap baris sesuai aturan. Baris ke-satu tidak akan mengalami proses pergeseran, sedangkan untuk baris ke-dua di geser satu kali ke kiri. Baris ketiga digeser ke kiri sebanyak dua kali dan baris ke-empat digeser ke kiri sebanyak tiga kali. Untuk lebih jelasnya, proses tersebut dapat dilihat pada Gambar 2.11.
Gambar 2.11 Operasi ShiftRows Pada Blok 128-bit
http://digilib.mercubuana.ac.id/
20
2.6.5 Transformasi MixColumns Transformasi ini mengoperasikan blok pada masing-masing kolomnya. Setiap kolom akan dilakukan perkalian dengan matriks sesuai persamaan
[ [
]
]
[
]
Dengan c adalah letak kolom, sehingga hasilnya adalah sebagai berikut: = ({02} ●
) ⊕ ({03} ●
=
⊕ ({02} ●
=
⊕
= ({03} ●
) ⊕
) ⊕ ({03} ●
⊕ )⊕
⊕ ({02} ●
) ⊕ ({03} ●
)⊕
⊕ ({02} ●
⊕
) )
Jika hasil perkalian memiliki lebih dari 8 bit, bit yang lebih tidak begitu saja dibuang. Hasil tersebut dilakukan operasi X-or dengan 100011011. Sebagai contoh, perkalian 11001010 dengan 11 dengan GF( berlangsung sebagai berikut : 11001010 11 -------------- * 11001010 11001010 ---------------- xor 101011110 100011011 ---------------- xor 1000101
http://digilib.mercubuana.ac.id/
) akan
21
Nilai 1000101 merupakan hasil dari perkalian tersebut. Ilustrasi pencampuran kolom dapat dilihat pada Gambar 2.12.
Gambar 2.12 Ilustrasi Transformasi Mixcolumns 2.7
Microsoft Visual C Sharp Microsoft Visual Studio merupakan sebuah perangkat lunak lengkap
(suite) yang dapat digunakan untuk melakukan pengembangan aplikasi, baik itu aplikasi bisnis, aplikasi personal, ataupun komponen aplikasinya, dalam bentuk aplikasi console, aplikasi Windows, ataupun aplikasi Web. Visual Studio mencakup kompiler, SDK, Integrated Development Environment (IDE), dan dokumentasi (umumnya berupa MSDN Library). Kompiler yang dimasukkan ke dalam paket Visual Studio antara lain Visual C++, Visual C#, Visual Basic, Visual Basic .NET, Visual InterDev, Visual J++, Visual J#, Visual FoxPro, dan Visual SourceSafe 2.7.1
Visual C Sharp (C#) Microsoft Visual C Sharp atau yang lebih dikenal dengan Visual
C# adalah sebuah bahasa yang tidak diragukan dalam proses pengembangan aplikasi berbasis .NET Framework, di mana C# bebas dari masalah kompatibilitas dilengkapi dengan berbagai fitur yang sebagian besar merupakan fitur baru, menarik dan tentu saja menjanjikan. Visual C# dibuat
berdasarkan
pemrograman
C#
yang
merupakan
bahasa
pemrograman berorientasi objek dan mempunyai banyak kesamaan
http://digilib.mercubuana.ac.id/
22
dengan C++, kesederhanaan pemrograman Java, dan penyederhanaan dari pemrograman Visual Basic (Probawati, 2011). 2.8
Metode Waterfall Waterfall adalah metode klasik yang bersifat sistematis, berurutan dalam
membangun software (Roger, 2001). Dalam pengembangannya metode waterfall memiliki beberapa tahapan yaitu analisa (requirement), desain sistem (system design), Coding & Testing, penerapan program, dan pemeliharaan diantaranya: 1. Analisa Proses menganalisis dan pengumpulan kebutuhan sistem yang sesuai dengan domain tingkah laku, unjuk kerja, dan antar muka (interface) yang diperlukan. 2. Desain Sistem Proses
design
akan
menterjemahkan
syarat
kebutuhan
kesebuah
perancangan perangkat lunak yang dapat diperkirakan sebelum dibuat koding. Proses ini berfokus pada struktur data, arsitektur perangkat lunak, representasi interface, dan detail (algoritma) prosedural. Tahapan ini akan menghasilkan dokumen yang disebut software requirement. 3. Coding & Testing Coding merupakan penerjemahan design dalam bahasa yang bisa dikenali oleh komputer. Tahapan inilah yang merupakan tahapan secara nyata dalam mengerjakan
suatu
sistem.Dalam
artian
penggunaan
computer
akan
dimaksimalkan dalam tahapan ini. Setelah pengkodean selesai maka akan dilakukan testing terhadap sistem yang telah dibuat tadi. Tujuan testing adalah menemukan kesalahan-kesalahan terhadap system tersebut dan kemudian bisa diperbaiki. 4. Penerapan / Pengujian Program Tahapan ini bisa dikatakan final dalam pembuatan sebuah sistem. Setelah melakukan analisa, design dan pengkodean maka sistem yang sudah jadikan digunakan oleh user. 5. Pemeliharaan / Maintance
http://digilib.mercubuana.ac.id/
23
Dalam masa oprasional sehari-hari, suatu perangkat lunak mungkin saja mengalamin kesalahan atau kegagalan dalam menjalankan fungsi-fungsi. Atau, pemilik bisa saja meminta peningkat kemampuan perangkat lunak pada pengembangannya. Dapat dilihat pada 2.13 sistem metode waterfall
Gambar 2.13 Metode Waterfall
2.9
Bagan Alir Sistem (flowchart) Bagan alir sistem (system flowchart) merupakan bagan yang menunjukkan
arus pekerjaan secara keseluruhan dari sistem. Bagan ini menjelaskan urutan dari prosedur-prosedur yang ada di dalam sistem. Bagan alir sistem menunjukkan apa yang dikerjakan dalam sistem. Bagan alir sistem digambarkan dengan menggunakan simbol-simbol yang telah ditentukan (Krismiaji, 2010)
http://digilib.mercubuana.ac.id/
24
Gambar 2.14 Daftar simbol flowchart
http://digilib.mercubuana.ac.id/