Skripsi Komputer 2

Sunday, March 18, 2012

PERANCANGAN PERANGKAT LUNAK PEMBELAJARAN METODA KRIPTOGRAFI IDEA
(INTERNATIONAL DATA ENCRYPTION ALGORITHM)


A. Latar Belakang Pemilihan Judul
Data (informasi) yang bersifat rahasia harus diamankan terlebih dahulu dengan menggunakan metoda kriptografi sebelum dikirimkan untuk mencegah agar data (informasi) diketahui oleh orang lain yang tidak berkepentingan. Metoda yang digunakan untuk mengamankan data ada bermacam – macam. Masing – masing metoda memiliki kelebihan dan kekurangan. Salah satu metoda kriptografi yang dianggap sebagai algoritma block cipher yang terbaik dan teraman yang tersedia untuk publik sampai saat ini adalah metoda kriptografi IDEA (International Data Encryption Algorithm).
Metoda IDEA diperkenalkan pertama kali oleh Xuejia Lai dan James Massey pada tahun 1990 dengan nama PES (Proposed Encryption Standard). Tahun berikutnya, setelah Biham dan Shamir mendemonstrasikan cryptanalysis yang berbeda, sang penemu memperkuat algoritma mereka dari serangan dan algoritma hasil pengubahan tersebut diberi nama IPES (Improved Proposed Encryption Algorithm). Kemudian pada tahun 1992, IPES diganti namanya menjadi IDEA (International Data Encryption Algorithm). Metoda IDEA ini menggunakan beberapa operasi dasar, seperti operasi logika XOR (Exclusive – OR), operasi perkalian mod 216 + 1 (multiplication modulo 216 + 1) dan operasi penambahan mod 216 (addition modulo 216). Metoda ini terdiri dari 8 putaran (round) dan menggunakan 64 bit plaintext dengan panjang kunci sebesar 128 bit.
Berdasarkan uraian di atas, penulis bermaksud untuk mengambil tugas akhir (skripsi) dengan judul “Perancangan Perangkat Lunak Pembelajaran Metoda Kriptografi IDEA (International Data Encryption Algorithm)”.

B. Perumusan Masalah

            Yang menjadi permasalahan dalam menyusun tugas akhir (skripsi) ini adalah bagaimana merancang perangkat lunak pembelajaran metoda kriptografi IDEA.

C. Tujuan dan Manfaat
            Tujuan penyusunan tugas akhir (skripsi) ini adalah untuk merancang suatu perangkat lunak pembelajaran untuk membantu pemahaman metoda kriptografi IDEA.
            Manfaat dari penyusunan tugas akhir (skripsi) ini yaitu untuk membantu pembelajaran metoda kriptografi IDEA dan perangkat lunak dapat digunakan sebagai fasilitas pendukung dalam proses belajar mengajar.



D. Pembatasan Masalah
Pembatasan permasalahan dalam merancang perangkat lunak ini adalah :
  1. Perangkat lunak akan menampilkan tahap – tahap perhitungan dalam bentuk bilangan biner.
  2. Input data berupa bilangan biner, desimal, heksadesimal dan karakter (string).
  3. Perangkat lunak tidak menampilkan tahap – tahap konversi bilangan ke dalam bilangan biner.
  4. Perangkat lunak menyediakan teori – teori dasar dari metoda IDEA.
  5. Perangkat lunak akan menampilkan tahapan – tahapan pembentukan kunci, enkripsi dan dekripsi.

E. Metodologi Penyelesaian
            Langkah – langkah pembuatan perangkat lunak ini antara lain :
  1. Membaca dan mempelajari buku – buku kriptografi yang berhubungan dengan metoda kriptografi IDEA.
  2. Membaca dan mempelajari buku – buku pemrograman dasar dengan menggunakan Microsoft Visual Basic 6.0.
  3. Mempelajari cara kerja dari metoda kriptografi IDEA.
  4. Merancang perangkat lunak pembelajaran metoda kriptografi IDEA dengan menggunakan bahasa pemrograman Visual Basic 6.0.
  5. Melakukan proses pengujian dan pengecekan kesalahan (error) terhadap perangkat lunak yang telah dirancang.

BAB I

PENDAHULUAN

1.1       Latar Belakang
Metode kriptografi digunakan untuk mengamankan data yang bersifat rahasia agar tidak diketahui oleh orang lain. Metode kriptografi yang dapat digunakan untuk mengamankan data ada bermacam-macam. Setiap metode memiliki kelebihan dan kekurangannya masing-masing. Namun, masalah utamanya adalah bagaimana mengetahui dan memahami cara kerja atau algoritma dari metoda kriptografi tersebut. Penulis memilih pembelajaran metode kriptografi IDEA karena menurut Bruce Schneier metode IDEA ini merupakan algoritma block cipher yang terbaik dan teraman yang disediakan untuk publik.
Metode IDEA ini menggunakan confusion dan diffusion. Berbeda dari metode block cipher lainnya, IDEA menggunakan operasi aljabar yang tidak kompatibel yaitu XOR, penambahan modulo 216, perkalian modulo 216 + 1. Operasi perkalian modulo 216 + 1 ini menggantikan Substitution Box (S-Box).
Berdasarkan uraian di atas, penulis bermaksud untuk mengambil tugas akhir (skripsi) dengan judul “Perancangan Perangkat Lunak Pembelajaran Metoda Kriptografi IDEA (International Data Encryption Algorithm)”.



1.2       Perumusan Masalah
            Yang menjadi permasalahan dalam menyusun tugas akhir (skripsi) ini adalah bagaimana menjelaskan proses pembentukan kunci, enkripsi dan dekripsi dari metode kriptografi IDEA dalam bentuk perangkat lunak pembelajaran.

1.3       Tujuan dan Manfaat Penulisan
            Tujuan penyusunan tugas akhir (skripsi) ini adalah untuk merancang suatu perangkat lunak pembelajaran untuk membantu pemahaman metoda kriptografi IDEA.
            Manfaat dari penyusunan tugas akhir (skripsi) ini yaitu perangkat lunak dapat digunakan sebagai fasilitas pendukung dalam proses belajar mengajar.

1.4       Pembatasan Masalah
Pembatasan permasalahan dalam merancang perangkat lunak ini adalah :
  1. Perangkat lunak akan mengolah tahap – tahap perhitungan dalam bentuk bilangan biner dan heksadesimal.
  2. Input data berupa karakter (string).
  3. Perangkat lunak tidak dapat mengolah input berupa gambar.
  4. Perangkat lunak tidak menampilkan tahap – tahap konversi bilangan ke dalam bilangan biner.

1.5       Metodologi Penyelesaian Masalah
            Langkah – langkah pembuatan perangkat lunak ini antara lain :
  1. Membaca dan mempelajari buku – buku kriptografi yang berhubungan dengan metoda kriptografi IDEA.
  2. Membaca dan mempelajari buku – buku pemrograman dasar dengan menggunakan Microsoft Visual Basic 6.0.
  3. Merancang perangkat lunak pembelajaran metoda kriptografi IDEA dengan menggunakan bahasa pemrograman Visual Basic 6.0.
  4. Melakukan proses pengujian dan pengecekan kesalahan (error) terhadap perangkat lunak yang telah dirancang.
BAB II

LANDASAN TEORI

2.1              Latar Belakang Kriptografi
2.1.1        Sejarah Kriptografi
            Sejarah kriptografi dimulai pertama sekali dengan menggunakan metode pertukaran posisi untuk mengenkripsi suatu pesan. Dalam sejarah perkembangannya, Julius Caesar dalam mengirimkan pesan yang dibawa oleh hulubalangnya, sengaja mengacak pesan tersebut sebelum diberikan kepada kurir. Hal ini dilakukan untuk menjaga kerahasiaan pesan baik bagi kurir maupun bagi musuh jika kurir tertangkap di tengah jalan oleh musuh. Ada orang yang mengatakan bahwa apa yang dilakukan oleh Julius Caesar dianggap sebagai awal dari kriptografi.
            Dalam sebuah buku yang berjudul The Codebreaker yang dikarang oleh David Kahn pada tahun 1963, disebutkan bahwa kriptografi digunakan pertama sekali oleh bangsa Mesir 4000 tahun yang lalu sampai saat sekarang ini. Sejak munculnya buku tersebut maka kriptografi pun mulai diperbincangkan secara luas. Peminat dari buku tersebut ialah peminat yang berhubungan dengan kemiliteran, layanan diplomatik dan pemerintahan. Kriptografi digunakan sebagai suatu alat untuk melindungi rahasia dan strategi – strategi negara.
            Sampai pada akhir Perang Dunia I, kriptografi merupakan disiplin ilmu matematika yang spesial. Penelitian dalam bidang ini tidak pernah sampai kepada umum sehingga tidaklah mengherankan kalau banyak orang tidak mengetahui keberadaan ataupun manfaat darinya. Kemudian pada Perang Dunia II, pihak militer pun mulai menyadari akan manfaat dari penggunaan kriptografi maupun kriptanalisis. Kriptografi memungkinkan untuk berkomunikasi dalam saluran yang aman (misalnya komunikasi melalui radio gelombang panjang) dengan cara membuatnya menjadi tidak dapat dimengerti oleh musuh. Kriptografi mencapai kemajuan yang pesat pada akhir Perang Dunia II. Akan tetapi kriptografi masih merupakan sesuatu yang sangat rahasia karena kriptografi telah menjadi bagian yang penting dalam komunikasi militer.
            Perkembangan komputer dan sistem komunikasi pada tahun 1960-an mengakibatkan munculnya kebutuhan pihak swasta akan alat untuk melindungi informasi dalam bentuk digital dan untuk menyediakan layanan keamanan informasi. Kriptografi digital dimulai pada tahun 1970 atas usaha Feistel dari IBM dan memuncak pada tahun 1977 dengan diadopsinya sistem kriptografi DES (Data Encryption Standard) oleh U.S. Federal Information Processing Standard untuk mengenkripsi informasi rahasia. DES merupakan mekanisme kriptografi yang paling terkenal dalam sejarah dan tetap menjadi standar pengamanan data elektronik komersial pada kebanyakan institusi keuangan di seluruh dunia.
            Perkembangan yang paling pesat dan berpengaruh dalam sejarah kriptografi ialah pada tahun 1976 dimana Whitfield Diffie dan Martin Hellman mempublikasikan sebuah tesis berjudul New Direction in Cryptography. Dalam tesis ini diperkenalkan konsep kunci publik kriptografi yang paling revolusioner dan juga menyediakan metode baru dalam pertukaran kunci, yaitu keamanan yang didasarkan atas logaritma diskrit. Walaupun penulis tesis tersebut tidak mempunyai praktek yang nyata akan bentuk skema enkripsi kunci publik pada saat itu akan tetapi ide tersebut memicu minat dan aktivitas yang besar dalam komunitas kriptografi. Pada tahun 1978, Rivest, Shamir, dan Adleman menemukan enkripsi kunci publik yang pertama dan sekarang ini dikenal dengan nama RSA (Rivest, Shamir, and Adleman). Skema RSA didasarkan pada permasalahan matematika sulit yang terdiri dari pemfaktoran terhadap bilangan yang besar nilainya. Karena adanya permasalahan matematika tersebut maka muncul usaha – usaha untuk mencari cara yang paling efisien dalam pemfaktoran bilangan. Skema kunci publik lainnya yang kuat dan praktis ditemukan oleh ElGamal. Skema ini juga berdasarkan masalah logaritma diskrit.
            Salah satu sumbangan yang paling penting dari kriptografi kunci publik ialah tanda tangan digital. Pada tahun 1991, standar internasional yang pertama untuk tanda tangan digital yang dipergunakan ialah berdasarkan pada skema kunci publik RSA. Pada tahun 1994 pemerintah Amerika Serikat mengadopsi standar tanda tangan digital yang didasarkan pada mekanisme skema kunci publik ElGamal.
            Pencarian terhadap skema kunci publik yang baru dengan pengembangan dari mekanisme kriptografi yang sudah ada dan pembuktian keamanan berlangsung dengan cepat. Berbagai standar dan infrastruktur yang berhubungan dengan kriptografi sedang dibangun. Produk – produk keamanan sedang dikembangkan untuk memenuhi kebutuhan akan keamanan informasi pada masyarakat.  
2.1.2        Definisi Kriptografi
            Kriptografi berasal dari bahasa Yunani yakni kriptos yang artinya tersembunyi dan graphia yang artinya sesuatu yang tertulis, sehingga kriptografi dapat disebut sebagai sesuatu yang tertulis secara rahasia.
            Kriptografi merupakan suatu bidang ilmu yang mempelajari tentang bagaimana merahasiakan suatu informasi penting ke dalam suatu bentuk yang tidak dapat dibaca oleh siapapun serta mengembalikannya kembali menjadi informasi semula dengan menggunakan berbagai macam teknik yang telah ada sehingga informasi tersebut tidak dapat diketahui oleh pihak manapun yang bukan pemilik atau yang tidak berkepentingan. Sisi lain dari kriptografi ialah kriptanalisis (Cryptanalysis) yang merupakan studi tentang bagaimana memecahkan mekanisme kriptografi.
            Bagi kebanyakan orang, kriptografi lebih diutamakan dalam menjaga komunikasi tetap rahasia dan khusus. Seperti yang telah diketahui dan disetujui bahwa perlindungan (proteksi) terhadap komunikasi yang sensitif telah menjadi penekanan kriptografi selama ini. Akan tetapi hal tersebut hanyalah sebagian dari penerapan kriptografi dewasa ini.

2.1.3        Tujuan Kriptografi
            Kriptografi sesungguhnya merupakan studi terhadap teknik matematis yang terkait dengan 4 aspek keamanan dari suatu informasi yakni kerahasiaan (confidentiality), integritas data (data integrity), otentikasi (authentication), dan ketiadaan penyangkalan (non-repudiation). Keempat aspek tersebut merupakan tujuan utama dari suatu sistem kriptografi yang dapat dijelaskan sebagai berikut,
1.      Kerahasiaan (confidentiality)
Kerahasiaan  bertujuan untuk melindungi suatu informasi dari semua pihak yang tidak berhak atas informasi tersebut. Terdapat beberapa cara yang dapat digunakan untuk menjaga kerahasiaan suatu informasi, mulai dari penjagaan secara fisik misalnya menyimpan data pada suatu tempat khusus sampai dengan penggunaan algoritma matematika untuk mengubah bentuk informasi menjadi tidak terbaca. 
2.      Integritas data (data integrity)
Integritas data bertujuan untuk mencegah terjadinya pengubahan informasi oleh pihak-pihak yang tidak berhak atas informasi tersebut. Untuk menjamin integritas data ini kita harus mempunyai kemampuan untuk mendeteksi terjadinya manipulasi data oleh pihak-pihak yang tidak berkepentingan. Manipulasi data yang dimaksud di sini meliputi penyisipan, penghapusan, maupun penggantian data.
3.      Otentikasi (authentication)
Otentikasi merupakan identifikasi yang dilakukan oleh  masing – masing pihak yang saling berkomunikasi, maksudnya beberapa pihak yang berkomunikasi harus mengidentifikasi satu sama lainnya. Informasi yang didapat oleh suatu pihak dari pihak lain harus diidentifikasi untuk memastikan keaslian dari informasi yang diterima. Identifikasi terhadap suatu informasi dapat berupa tanggal pembuatan informasi, isi informasi, waktu kirim dan hal-hal lainnya yang berhubungan dengan informasi tersebut.
4.      Non-repudiation
Non-repudiation berfungsi untuk mencegah terjadinya penyangkalan terhadap suatu aksi yang telah dilakukan oleh pelaku aksi itu sendiri. Jika terjadi penyangkalan maka diperlukan suatu prosedur yang melibatkan pihak ketiga untuk menyelesaikan masalah tersebut.

2.2              Aplikasi Kriptografi
            Kriptografi telah banyak digunakan di dalam aplikasi-aplikasi khususnya aplikasi pengamanan data pada saat sekarang ini. Aplikasi khas dari kriptografi adalah sistem yang dikembangkan dengan teknik dasar. Sistem seperti ini, dapat memiliki tingkat kompleksitas yang beraneka ragam. Beberapa aplikasi yang lebih sederhana antara lain , komunikasi yang aman, identifikasi, otentikasi, dan secret sharing. Aplikasi yang lebih rumit seperti sistem untuk electronic commerce (e-commerce), sertifikasi, electronic mail yang aman, penemuan kunci dan akses komputer yang aman. Secara umum, makin sederhana aplikasi makin cepat menjadi realita.  

2.2.1        Komunikasi Aman (Secure Communication)
            Komunikasi aman merupakan penggunaan kriptografi yang paling sederhana. Dua pihak dapat berkomunikasi secara aman dengan cara mengenkripsi pesan-pesan yang mereka kirimkan di antara mereka. Hal ini dapat dicapai sedemikian rupa sehingga pihak ketiga yang mendapat bocoran (menyadap) pembicaraan antar kedua pihak tadi mungkin tidak pernah mengembalikan pesan dalam bentuk acak ke dalam bentuk yang berarti.

2.2.2        Identifikasi dan Otentikasi (Identification and Authentication)
            Identifikasi dan otentikasi merupakan dua aplikasi kriptografi yang sangat banyak digunakan saat ini. Identifikasi adalah proses verifikasi identitas seseorang atau sesuatu. Sebagai contoh, ketika menarik uang dari bank dengan menggunakan kartu Automatic Teller Machine (ATM) dilengkapi dengan satu Personal Identification Number (PIN) yang rahasia yang memadukan pemilik kartu dengan kartu tersebut demikian juga dengan rekening yang bersangkutan. Ketika kartu dimasukkan ke dalam mesin ATM, mesin tersebut akan meminta pengguna kartu untuk memasukkan PIN. Jika PIN yang dimasukkan benar, mesin akan mengidentifikasikan orang tersebut benar sebagai pemilik kartu sehingga kepada orang tersebut akan diberikan akses. Aplikasi penting lainnya dari kriptografi adalah otentikasi. Otentikasi mirip dengan indetifikasi, dimana keduanya memberikan kesempatan untuk akses ke dalam sumber daya tertentu misalnya Internet Account, tetapi otentikasi memiliki cakupan lebih luas karena tidak perlu mengidentifikasikan orang atau entity.

2.2.3        Secret Sharing
            Secret Sharing merupakan salah satu aplikasi dari kriptografi yang memungkinkan pendistribusian satu rahasia di antara sekumpulan orang yang saling percaya. Sebagai contoh, dalam (k; n)-threshold scheme, informasi tentang rahasia adalah didistribusikan sedemikian rupa sehingga sembarang k dari n orang  (k £ n) memiliki informasi yang cukup untuk menentukan (mengetahui) rahasia tersebut, tetapi sembarang set  k - 1 orang tidak dapat melakukannya. Dalam sembarang secret sharing scheme, terdapat kumpulan orang yang terpilih yang informasi kumulatif mereka cukup untuk memecahkan rahasia. Dalam beberapa implementasi secret sharing schemes, setiap partisipan menerima rahasia setelah rahasia dimaksud dihasilkan.. Dalam implementasi lain, rahasia sebenarnya tidak pernah dibuat kelihatan kepada partisipan, walaupun akses diberikan untuk mendapatkan rahasia tersebut diberikan (misalnya akses ke dalam ruangan atau izin untuk melakukan proses).

2.2.4        Sertifikasi (Certification)
            Sertifikasi merupakan salah satu aplikasi lainnya dari kriptografi. Sertifikasi adalah sebuah skema dimana pihak yang dipercayai seperti penguasa atau pihak yang berwenang mengeluarkan sertifikat untuk pihak lain. Pihak yang dipercayai mengeluarkan kupon (vouchers) yang disebut sertifikat yang memiliki sejumlah arti yang mendalam, misalnya nomor ijazah. Teknologi sertifikasi dikembangkan untuk identifikasi dan otentikasi dimungkinkan dalam skala besar.

2.2.5        Penemuan Kunci (Key Recovery)
            Penemuan kunci adalah suatu teknologi yang memungkinkan sebuah kunci ditemukan dalam kondisi tertentu tanpa pemilik memberitahukan. Ini perlu untuk dua alasan, pertama, jika pemilik kunci menghilangkan atau secara tidak sengaja menghapus kuncinya, penemuan kunci dapat menghindarkan malapetaka. Kedua, jika aparat penegakan hukum ingin mengetahui suatu tindak kriminal tanpa sepengetahuan tersangka, aparat tersebut harus mampu mendapatkan kunci yang diinginkan. Teknik penemuan kunci sudah banyak digunakan saat ini, akan tetapi, penggunaan teknik ini dalam hal penegakan hukum telah menimbulkan kontroversi.

2.3              Jenis Sistem Kriptografi
            Berdasarkan pemakaian kunci maka sistem kriptografi (cryptosystems) dapat digolongkan atas atas 2 jenis sistem yakni sistem kriptografi kunci publik (public key cryptography) dan sistem kriptografi kunci rahasia (secret key cryptography). Dalam sistem kriptografi kunci rahasia yang dikenal juga dengan symmetric cryptosystems, pihak pengirim dan penerima bersama-sama menyepakati sebuah kunci rahasia yang akan digunakan dalam proses enkripsi dan dekripsi tanpa diketahui oleh pihak lain. Sedangkan dalam sistem kriptografi kunci publik atau dikenal dengan assymmetric cryptosystem, pihak pengirim maupun pihak penerima mendapatkan sepasang kunci yakni kunci publik (public key) dan kunci rahasia (private key) dimana kunci publik dipublikasikan dan kunci rahasia tetap dirahasiakan. Enkripsi dilakukan dengan menggunakan kunci publik sedangkan dekripsi dilakukan dengan menggunakan kunci rahasia.

2.3.1        Kriptografi Kunci Rahasia (Secret Key Cryptography)
            Kriptografi kunci rahasia merupakan bentuk kriptografi yang lebih tradisional, dimana kunci tunggal dapat digunakan untuk enkripsi dan dekripsi suatu pesan. Kriptografi kunci rahasia tidak hanya digunakan untuk enkripsi, tetapi juga untuk otentikasi. Salah satu teknik untuk pekerjaan ini disebut message authentication codes (MAC).
            Masalah utama dengan kriptografi kunci rahasia membuat pengirim dan penerima pesan setuju atas kunci rahasia yang digunakan tanpa orang lain mampu mendapatkan dan mengetahuinya. Atau dengan kata lain bagaimana memilih kunci rahasia yang benar-benar aman. Hal ini membutuhkan suatu metode dimana kedua pihak dapat berkomunikasi tanpa kekhawatiran akan tercecernya kunci tersebut. Akan tetapi, keuntungan dari kriptografi kunci rahasia adalah biasanya lebih cepat dibandingkan dengan kriptografi kunci publik. Metode yang paling umum untuk kriptografi kunci rahasia adalah block ciphers, stream ciphers, dan message authentication codes (MAC).
gambar2
Gambar 2.1 Ilustrasi kriptografi kunci rahasia

2.3.1.1  Block Cipher
            Block cipher adalah bentuk algoritma enkripsi kunci simetri yang mentransformasikan satu blok data tertentu dari plaintext ke dalam satu blok data  ciphertext dengan panjang blok yang sama. Transformasi ini berlangsung melalui penggunaan kunci rahasia yang disediakan oleh pemakai (user). Dekripsi dilakukan dengan menggunakan transformasi kebalikan terhadap blok ciphertext menjadi satu blok plaintext dengan kunci dan panjang blok yang sama. Panjang blok tertentu disebut ukuran blok (block size) dimana ukuran blok tersebut bervariasi misalnya 16 bit, 32 bit, 64 bit, 128 bit atau 256 bit tergantung dari teknik yang digunakan dan perkembangan kemampuan mikroprosesor selanjutnya.
            Karena blok plaintext yang berbeda dipetakan ke blok ciphertext yang berbeda (untuk memungkinkan dekripsi yang unik), suatu block cipher secara efektif menyediakan satu permutasi (korespondensi satu ke banyak) dari set pesan yang mungkin. Permutasi berpengaruh pada saat enkripsi tertentu yang sudah pasti rahasia, karena permutasi tersebut adalah fungsi dari kunci rahasia. Jika kita menggunakan satu block cipher untuk mengenkrip satu pesan dengan panjang sembarang, kita menggunakan teknik yang dikenal sebagai modus operasi untuk block cipher tersebut. Agar dapat berguna, satu modus operasi setidak-tidaknya seefisien dan seaman cipher fundamental. Teknik enkripsi mungkin memiliki sifat-sifat tambahan terhadap sifat-sifat dasar yang dimiliki teknik biasa. Teknik standard DES telah dipublikasi dalam berbagai publikasi. Versi standard yang lebih umum menggabungkan 4 modus operasi dari DES untuk dapat diaplikasikan terhadap block cipher dengan ukuran blok sembarang. Standard tersebut adalah Electronic Code Book, Cipher Block Chaining, Cipher Feedback, dan Output Feedback. Berikut ini adalah bentuk umum dari block cipher,
1.      Iterated Block Cipher (Block Cipher dengan Iterasi)
Iterated Block Cipher melakukan enkripsi terhadap suatu blok plaintext dengan suatu proses yang memiliki beberapa putaran (round). Dalam setiap putaran transformasi yang sama (juga dikenal dengan round function) diaplikasikan terhadap data dengan menggunakan subkunci. Himpunan subkunci biasanya diturunkan/ diperoleh dari kunci yang disediakan pemilik dengan suatu fungsi khusus. Himpunan subkunci disebut key schedule. Jumlah putaran dalam iterasi tergantung pada tingkat keamanan yang diinginkan dan konsekuensi adanya hubungan dengan efisiensi waktu. Secara umum, peningkatan jumlah putaran akan meningkatkan keamanan, tetapi untuk beberapa teknik jumlah putaran dibutuhkan untuk mencapai tingkat keamanan yang cukup akan terlalu sulit untuk membuatnya menjadi praktis atau diwujudkan sesuai dengan keinginan.
Feistel Cipher adalah bentuk khusus dari Iterated Block Cipher dimana ciphertext diperoleh dari plaintext dengan penggunaan berulang-ulang transformasi atau fungsi putaran yang sama. Feistel Cipher sering disebut dengan DES-like ciphers. Dalam Feistel cipher, teks yang sedang dienkrip dipecah menjadi 2 bagian yang sama panjang yaitu Left dan Right. Fungsi Round f diaplikasikan terhadap salah satu potongan dengan menggunakan suatu subkunci dan hasilnya di-XOR-kan dengan potongan yang lainnya. Kemudian kedua potongan kiri dan kanan dipertukarkan. Setiap putaran mengikuti pola yang sama, kecuali putaran terakhir dimana tidak ada lagi pertukaran data.

 
㿷ᛇǀ
Gambar  2.2 Feistel Cipher
Salah satu sifat yang baik dari suatu Feistel cipher adalah bahwa enkripsi dan dekripsi secara struktur adalah identik, walaupun subkunci yang digunakan selama proses enkripsi pada setiap putaran digunakan dengan urutan terbalik sewaktu proses dekripsi.
Untuk lebih spesifik dapat dikatakan input dalam proses dekripsi adalah pasangan (Rr, Lr) bukan pasangan (L0, R0) seperti pada saat enkripsi (notasi seperti terlihat pada Gambar 2.3), dan subkunci ke-i adalah kr-i+1 bukan ki. Ini berarti kita akan memperoleh pasangan (Rr-i; Lr-i) jadi bukanlah pasangan (Li; Ri) setelah putaran ke-i. Sebagai contoh, R1 diganti dengan,
Rr Å F(kr; Lr) = Rr Å F(kr; Rr-1) = Rr Å (Rr Å Lr-1) = Lr-1;
sehingga diperoleh,
Li = Ri-1 dan
Ri = Li-1 Å F(Ri-1,Ki); Å  adalah operator XOR.
Tentu saja dapat dirancang iterative ciphers yang bukan merupakan Feistel ciphers, tetapi proses enkripsi dan dekripsinya (setelah melakukan pengaturan ulang atau perhitungan ulang terhadap variabel-variabel yang terlibat) secara struktur adalah sama.
2.      Electronic Code Book (ECB) Mode
Dalam mode ECB (Gambar 2.4), setiap blok plaintext dienkripsi secara independen dengan blok cipher.
Mode ECB memiliki tingkat keamanan sama seperti block cipher. Akan tetapi, pola plaintext tidak diberitahukan. Setiap blok plaintext yang indentik menghasilkan blok ciphertext yang identik. Plaintext dapat dengan mudah dimanipulasi dengan menghilangkan, mengulang atau saling mempertukarkan blok. Kecepatan masing-masing operasi enkripsi identik dengan kecepatan block cipher. ECB dapat dengan mudah melakukan proses paralel untuk menghasilkan performansi yang lebih tinggi. Akan tetapi, sangat disayangkan tidak ada proses sebelum sebuah blok dibaca (kecuali untuk pembentukan kunci).
㿷ᛇǀ
Gambar 2.3 Electronic Code Book Mode
3.      Cipher Block Chaining (CBC) Mode
Dalam mode CBC, setiap blok plaintext di-XOR-kan dengan blok ciphertext sebelumnya dan kemudian dienkripsi. Vektor inisialisasi C0 digunakan sebagai bibit (seed) untuk proses enkripsi.
Mode CBC memiliki tingkat keamanan yang setara dengan block cipher terhadap serangan standard. Sebagai tambahan, pola sembarang dalam plaintext disembunyikan dengan melakukan operasi XOR terhadap blok ciphertext sebelumnya dengan blok plaintext. Satu hal yang perlu dicatat bahwa plaintext tidak dapat dimanipulasi secara langsung dengan menghilangkan blok dari awal atau akhir dari ciphertext. Vektor inisialisasi harus berbeda untuk dua sembarang pesan yang di-enkrip dengan kunci sama dan lebih baik jika dipilih secara acak. Tidak ada keharusan untuk melakukan enkripsi dan dapat ditransmisikan dengan ciphertext.
㿷ᛇǀ
Ci = Ek(Ci-1 Å Mi) ; Mi = Ci-1 Å Dk(Ci)
Gambar 2.4 Cipher Block Chaining Encryption Mode
Akan tetapi, perhatikan juga kelemahan yang dimiliki seperti kecepatan enkripsi sama dengan block cipher, tetapi proses enkripsi sulit untuk diparalelkan, walaupun proses dekripsi dapat diparalelkan..
Mode PCBC adalah variasi pada mode CBC dimana operasi dirancang untuk memperbesar atau menyebarkan satu bit error dalam ciphertext. Cara ini memungkinkan kesalahan dalam transmisi dapat ditangkap dan plaintext yang dihasilkan akan ditolak. Metode enkripsi dituliskan sebagai berikut ,
Ci = Ek (Ci-1 Å Mi-1 Å Mi)
Dan dekripsi dicapai dengan menghitung ,
            Mi = Ci-1 Å Mi-1 Å Dk (Ci)                                                      (2.1)
Terdapat kesalahan/kelemahan dalam PCBC, yang mungkin dimaksudkan sebagai suatu contoh arahan (pengujian) dalam cryptanalysis tentang block cipher. Jika dua blok ciphertext Ci-2 dan Ci-1 dipertukarkan, maka hasil dari langkah ke-i dalam proses dekripsi masih menghasilkan blok plaintext yang benar. Untuk lebih jelasnya, dengan persamaan (2.1) kita mendapatkan,
Mi = Dk (Ci Å (Ci-1 Å Dk (Ci-1)) Å Dk (Ci-2)) Å Ci-3 Å Mi-3                 (2.2)
Sebagai konsekuensinya, mempertukarkan dua blok berdekatan dari ciphertext (atau, lebih umum mengacak k blok berurutan dari ciphertext) tidak mempengaruhi apapun kecuali bahwa proses dekripsi blok plaintext yang bersangkutan. Walaupun konsekuensi praktis dari kesalahan tersebut tidak nampak dengan jelas, PCBC digantikan dengan mode CBC dalam Kerberos versi 5. Dalam kenyataannya, mode ini belum dipublikasikan secara formal sebagai suatu standar federal atau standar nasional (USA).
4.      Cipher Feedback (CFB) Mode
Dalam mode Cipher Feedback (CFB) blok ciphertext sebelumnya dienkripsi dan outputnya digabungkan dengan blok plaintext dengan menggunakan XOR untuk menghasilkan blok ciphertext sekarang. Kita dapat mendefinisikan mode tersebut sedemikian hingga mode tersebut menggunakan feedback yang lebih kecil dari 1 blok penuh data. Sebuah vektor inisialisasi C0 digunakan sebagai sebuah “seed” untuk  prosesnya, seperti terlihat pada Gambar 2.6.
㿷ᛇǀ
Ci = Ek (Ci-1)  Å Mi ; Mi = Ek (Ci-1)  Å  Ci
Gambar 2.5 Cipher Feedback Mode
CFB mode memiliki tingkat keaamanan yang setara dengan cipher yang ada dan pola plaintext disembunyikan dalam ciphertext dengan menggunakan operasi XOR. Plaintext tidak dapat dimanipulasi secara langsung kecuali dengan menghilangkan blok dari awal atau akhir dari ciphertext. Dengan mode CFB dan full feedback, jika dua blok ciphertext adalah identik, output dari operasi blok cipher pada tahap berikutnya juga adalah identik. Hal ini memungkinkan informasi tentang blok plaintext bocor. Konsiderasi keamanan untuk vektor inisialisasi pada mode CFB sama seperti pada mode CBC, kecuali attack tidak berlaku. Akan tetapi blok terakhir dari blok ciphertext dapat diserang (attacked).
Dengan menggunakan umpan balik penuh (full feedback), kecepatan proses enkripsi sama seperti yang dimiliki metode block cipher yang lain, tetapi proses enkripsi sulit untuk dibuat paralel.

5.      Output Feedback (OFB) Mode
Mode Output Feedback mirip dengan mode CFB kecuali bahwa jumlah operasi XOR dengan setiap blok plaintext dihasilkan secara independen dari plaintext maupun ciphertext. Sebuah vektor inisialisasi  C0 digunakan sebagai suatu “seed” untuk sebarisan blok data Si, dan setiap blok data Si diperoleh dari proses enkripsi terhadap blok data Si-1 sebelumnya. Proses enkripsi blok plaintext diperoleh dengan melakukan operasi XOR antara blok plaintext dengan blok data yang relevan.
Lebar umpan balik lebih kecil dari blok penuh tidak direkomendasikan untuk alasan  keamananan. Mode OFB memiliki kelebihan dibandingkan dengan mode CFB dimana setiap bit error yang mungkin terjadi selama transmisi tidak ikut dikirimkan untuk mempengaruhi proses dekripsi blok berurutan. Konsiderasi keamanan untuk vektor inisialisasi  sama seperti pada mode CFB. Satu masalah dengan mode OFB adalah bahwa plaintext dapat dimanipulasi. Yakni, seorang attacker yang mengetahui satu blok plaintext Mi dapat menggantikannya dengan plaintext x yang salah atau dengan melakukan x XOR Mi terhadap blok ciphertext  Ci yang terkait.
㿷ᛇȸ
Ci = Mi Å Si;  Mi = Ci  Å Si;  Si = Ek (Si-1)
Gambar 2.6 Output Feedback Mode
Terdapat serangan yang mirip terhadap mode CBC dan CFB, tetapi serangan tersebut beberapa blok plaintext akan dimodifikasi dalam suatu cara yang tidak dapat diprediksi oleh penyerang. Tetapi blok ciphertext paling depan (vektor inisialisasi) dalam mode CBC dan blok terakhir ciphertext dalam CFB sangat lemah terhadap serangan seperti blok dalam mode OFB. Serangan jenis ini dapat dicegah dengan menggunakan misalnya skema tanda tangan digital (digital signature scheme) atau skema MAC.
Kecepatan proses enkripsi  sama seperti yang dimiliki oleh block cipher yang lain. Namun proses tidak dapat diparalelkan, waktu bisa dihemat dengan menghasilkan aliran kunci (keystream) sebelum data ada untuk proses enkripsi. Untuk mengatasi kelemahan yang dimiliki mode OFB, Diffie telah mengusulkan penambahan mode operasi, yang disebut dengan mode counter. Mode ini berbeda dengan mode OFB dalam cara blok data yang berkelanjutan dihasilkan untuk enkripsi berturut-turut. Dengan tidak menurunkan satu blok data sebagaimana enkripsi untuk blok data sebelumnya, Diffie mengusulkan mengenkripsi jumlah i + IV mod 264 untuk blok data ke-i, dimana IV adalah Vektor Inisialisasi (Initial Vector).

2.3.1.2  Stream Cipher
            Stream cipher adalah jenis algoritma enkripsi simetri yang mentransformasikan data secara karakter per karakter. Stream ciphers dapat dibuat sangat cepat sekali, jauh lebih cepat dibandingkan dengan algoritma block cipher yang manapun. Sementara algoritma block cipher secara umum digunakan untuk unit plaintext yang berukuran besar sedangkan stream cipher digunakan untuk blok data yang lebih kecil, biasanya ukuran bit. Proses enkripsi terhadap plaintext tertentu dengan algoritma block cipher akan menghasilkan ciphertext yang sama jika kunci yang sama digunakan. Dengan stream cipher, transformasi dari unit plaintext yang lebih kecil ini berbeda antara satu dengan lainnya, tergantung pada kapan unit tersebut ditemukan selama proses enkripsi.
            Suatu stream cipher akan menghasilkan apa yang disebut suatu keystream yaitu suatu barisan bit yang digunakan sebagai kunci. Proses enkripsi dicapai dengan menggabungkan keystream dengan plaintext biasanya dengan operasi bitwise XOR. Pembentukan keystream dapat dibuat independen terhadap plaintext dan ciphertext, menghasilkan apa disebut dengan synchronous stream cipher, atau dapat dibuat tergantung pada data dan enkripsinya, dalam hal mana stream cipher disebut sebagai self-synchronizing. Kebanyakan bentuk stream cipher adalah synchronous stream ciphers.
            Konsentrasi dalam stream ciphers pada umumnya berkaitan dengan sifat-sifat teoritis yang menarik dari one-time pad. Suatu one-time pad, kadang-kadang disebut Vernam cipher, menggunakan sebuah string dari bit yang dihasilkan murni secara acak. Keystream memiliki panjang sama dengan pesan plaintext; string acak digabungkan dengan menggunakan bitwise XOR dengan plaintext untuk menghasilkan ciphertext. Karena keystream seluruhnya adalah acak, walaupun dengan sumber daya komputasi tak terbatas seseorang hanya dapat menduga plaintext jika dia melihat ciphertext. Metode cipher seperti ini disebut memberikan kerahasiaan yang sempurna (perfect secrecy), dan analisis terhadap one-time pad dipandang sebagai salah satu landasan kriptografi modern. Sementara one-time pad yang digunakan semasa perang melalui saluran diplomatik membutuhkan tingkat keamanan yang sangat tinggi, fakta bahwa kunci rahasia (yang hanya dapat digunakan satu kali) dianggap rahasia sepanjang pesan memperkenalkan masalah manajemen kunci yang strict. Sedangkan keamanan sempurna, one-time pad secara umum adalah tidak praktis.
            Stream ciphers dikembangkan sebagai satu aproksimasi terhadap tindakan dari one-time pad. Sementara stream cipher modern tidak mampu menyediakan tingkat keamanan one-time pad yang memadai secara teori, tetapi setidaknya praktis. Sampai saat ini belum ada stream cipher sebagai standard secara de facto. Metode stream cipher yang umum digunakan adalah RC4. Satu hal yang menarik bahwa mode operasi tertentu dari suatu block cipher dapat mentransformasikan secara efektif hasil operasi tersebut ke dalam satu keystream generator dan dalam hal ini, block cipher apa saja dapat digunakan sebagai suatu stream cipher; seperti dalam DES, CFB atau OFB. Akan tetapi, stream ciphers dengan desain khusus biasanya jauh lebih cepat. Berikut ini adalah jenis – jenis dari stream cipher,
1.      Linear Feedback Shift Register
            Suatu Linear Feedback Shift Register (LFSR) adalah suatu mekanisme untuk menghasilkan sekuens bit biner. Register (Gambar 2.7) memiliki sebarisan sel yang ditentukan oleh vektor inisialisasi yakni, biasanya, menjadi kunci rahasia. Tingkah laku register diatur oleh sebuah counter (clock). Pada setiap saat isi sel dari register digeser (shift) ke kanan sejauh satu posisi, dan hasil operasi XOR terhadap subset dari isi sel ditempatkan pada sel paling kiri. Satu bit dari output biasanya diturunkan selama prosedur update ini.
㿷ᛇȸ
Gambar 2.7 Linear Feedback Shift Register (LFSR)
            LFSR cepat dan mudah untuk diimplementasikan baik secara hardware maupun secara software. Dengan pemilihan yang cermat terhadap alat kontrol (pad) feedback (bit tertentu yang digunakan, dalam Gambar 2.7 di atas tap adalah bit pertama dan bit kelima) sekuens yang dihasilkan dapat memiliki performansi yang baik secara statistik.. Akan tetapi, sekuens yang dihasilkan oleh LFSR tunggal tidak cukup aman karena sebuah kerangka matematik yang kuat telah dikembangkan selama bertahun-tahun yang memungkinkan analisis yang mudah terhadap hasil tersebut. Namun demikian, LFSR sangat berguna sebagai blok bangunan dalam sistem yang lebih aman.
            Suatu shift register cascade merupakan sebuah set dari LFSR yang dihubungkan bersama-sama dengan cara tertentu sedemikian hingga perlakuan dari LFSR sebelumnya dalam bentuk aliran yang menyerupai air terjun. Sifat dan tingkah laku yang saling tergantung ini biasanya ditempuh dengan menggunakan satu LFSR untuk mengontrol LFSR berikutnya. Sebagai contoh, satu register mungkin melangkah lebih dulu satu fase jika output register di depannya adalah 1 dan maju dua langkah jika hasil = 0. Beberapa konfigurasi yang berbeda mungkin dan pemilihan parameter tertentu nampaknya menawarkan tingkat keamanan yang baik.    The shrinking generator dikembangkan oleh Coppersmith, Krawczyk, and Mansour. Ini adalah suatu stream cipher yang didasarkan pada interaksi sederhana antara output dari dua LFSR. Bit-bit dari satu output digunakan untuk menentukan apakah bit yang terkait dengan output register kedua akan digunakan sebagai bagian dari keystream secara keseluruhan. The shrinking generator adalah sederhana dan dapat diukur, dan memiliki sifat-sifat keamanan yang baik. Salah satu kelemahan dari the shrinking generator adalah bahwa tingkat output keystream tidak akan konstan lain hal jika proteksi dilakukan. Salah satu varian dari shrinking generator adalah the self-shrinking generator, dimana dalam proses kerjanya ia tidak menggunakan satu output dari salah satu LFSR melainkan ia melakukan penyusutan output dari register yang satunya (seperti pada the shrinking generator), output dari LFSR tunggal digunakan untuk mengekstraksi bit-bit dari output yang sama. Belum ditemukan hasil kriptanalisis terhadap kedua teknik.
2.      Non Linear Feedback Shift Register (NLFSR)
            Mudah untuk membayangkan suatu rangkaian umpan balik (feedback) yang lebih rumit daripada yang digunakan LFSRs atau FCSRs. Masalahnya adalah tidak terdapat suatu teori matematika untuk menganalisanya. Secara khusus, beberapa masalah dengan rangkaian umpan balik shift register nonlinear adalah ,
a.       Mungkin terdapat prasangka (bias), seperti terdapat lebih banyak 1 daripada 0 atau lebih sedikit langkah daripada yang diharapkan pada keluaran.
b.      Periode maksimum dari rangkaian mungkin jauh lebih rendah daripada yang diharapkan.
c.       Periode rangkaian dapat berbeda untuk nilai awal yang berbeda.
d.      Rangkaian dapat muncul secara acak untuk sesaat, tetapi kemudian terjadi “dead end” pada suatu nilai tunggal. Ini dapat diselesaikan dengan meng-XOR-kan fungsi nonlinear dengan bit paling kanan.
            Sebaliknya, jika tidak ada teori untuk menganalisis sisi keamanan umpan balik nonliniear shift register, terdapat sedikit perangkat (tool) kriptanalisis stream cipher yang didasarkan padanya. Kita dapat menggunakan umpan balik nonlinear shift register pada rancangan stream cipher, tetapi kita harus berhati-hati.
            Dalam sebuah umpan balik nonlinear shift register, fungsi umpan balik dapat berupa apa saja yang diinginkan yang terlihat pada Gambar 2.9 berikut ini.
㿷ᛇత
Gambar 2.8 A nonlinear-feedback shift register

2.3.1.3  Desain Cipher
Terdapat dua prinsip dasar untuk menghasilkan cipher yang aman, yaitu confusion dan diffusion. Tanpa memperhatikan hal ini, cipher kita mungkin akan sangat mudah dipecahkan sandinya.
Confusion berarti mengaburkan hubungan antara plaintext dan ciphertext. Ini akan membuat frustasi usaha untuk mencari keteraturan dan pola statistik antara plaintext dan ciphertext. Cara paling mudah untuk melakukan hal ini adalah dengan substitusi. Substitusi modern menggunakan cara yang sangat komplek. Namun cara ini belum cukup. Cipher Jerman, Enigma, yang menggunakan algoritma substitusi yang komplek dipecahkan oleh Sekutu dalam perang dunia kedua.
Diffusion berarti menghilangkan redundansi plaintext dengan menyebarkan masukan ke seluruh ciphertext. Diperlukan waktu yang lebih lama untuk memecahkan sandi rahasia ini, bila diffusion digunakan. Cara paling mudah untuk melakukan diffusion adalah transposisi atau permutasi.
Dalam dunia kriptografi modern, confusion dan diffusion ini dilakukan secara sangat intensif dengan bantuan komputer.

2.3.2        Kriptografi Kunci Publik (Public Key Cryptography)
            Kriptografi kunci publik diperkenalkan oleh Whitfield Diffie dan Martin Hellman pada tahun 1976. Kriptografi kunci publik memiliki dua penggunaan utama, yakni enkripsi dan tanda tangan digital (encryption and digital signatures). Dalam sistem kriptografi kunci publik, masing-masing pihak mendapat sepasang kunci, satu disebut kunci publik (public key) dan satu lagi disebut kunci rahasia (private key). Kunci publik dipublikasikan, sementara kunci rahasia tetap dirahasiakan. Keharusan penggunaan kunci secara bersama antara pengirim dan penerima pesan rahasia dihilangkan, semua komunikasi hanya melibatkan kunci publik, dan tidak ada kunci rahasia yang ditransmisikan atau digunakan bersama. Dalam sistem ini, tidak ada lagi kecurigaan terhadap keamanan dari sistem komunikasi. Satu-satunya kebutuhan bahwa kunci publik dikaitkan dengan penggunanya dalam lingkup yang saling mempercayai (contoh dalam suatu trusted directory). Seseorang dapat mengirimkan pesan rahasia dengan hanya menggunakan informasi yang umum (kunci publik), tetapi pesan tersebut hanya mungkin didekrip dengan menggunakan kunci rahasia, dimana satu-satunya yang memiliki kunci rahasia tersebut hanyalah orang yang diharapkan menerima pesan tersebut. Kriptografi kunci publik tidak hanya digunakan untuk merahasiakan pesan, tetapi juga untuk otentikasi (tanda tangan digital) dan teknik lainnya.
            Dalam kriptografi kunci publik, kunci rahasia selalu berhubungan secara matematis terhadap kunci publik. Oleh karena itu, selalu dimungkinkan untuk menembus (menyerang) sistem kunci publik dengan menurunkan kunci rahasia dari kunci publik. Biasanya, cara untuk menangkal kemungkinan tersebut adalah membuat sesulit mungkin untuk menghasilkan kunci privat dari kunci publik. Sebagai contoh, beberapa kriptosistem kunci publik dibuat sedemikian hingga penurunan kunci rahasia (privat) dari kunci publik mengharuskan penyerang melakukan faktorisasi terhadap bilangan yang sangat besar, dalam hal ini sangat sulit untuk melakukan penurunan. Inilah ide di belakang RSA public-key cryptosystem.
PUBLIC-KEY-2
Gambar 2.9 Ilustrasi Kriptografi Kunci Publik
2.4              Landasan Matematis Kriptografi
2.4.1        Aritmatika Modular
Aritmatika modular merupakan operasi matematika yang banyak diimplementasikan pada metode kriptografi. Pada metoda IDEA, operasi aritmetika modular yang dipakai adalah operasi penjumlahan modulo 216 dan operasi perkalian modulo 216 + 1. Operasi modulo ini melibatkan bilangan 0 dan 1 saja sehingga identik dengan bit pada komputer. Contohnya,
(65530 + 10) mod 216 = 65540 mod 65536 = 4
(32675 * 4) mod (216 + 1) = 131060 mod 65537 = 65523

2.4.2        Inverse Perkalian
Inverse perkalian yang digunakan pada metode IDEA tidak seperti inverse pada operasi perkalian dalam matematika. Inverse perkalian ini tidak dapat dijelaskan secara matematis, tetapi dengan menggunakan algoritma berikut ini :
Fungsi Inverse(A As Double) As Double
    n = 65537
    G0 = n
    G1 = A
    V0 = 0
    V1 = 1
    While (G1 <> 0)
       Y = Int(G0 / G1)
       G2 = G0 - Y * G1
       G0 = G1
       G1 = G2
       V2 = V0 - Y * V1
       V0 = V1
       V1 = V2
    Wend
    If (V0 >= 0) Then
       Inverse = V0
    Else
       Inverse = V0 + n
    End If
End Fungsi
Contoh, Misalkan untuk A = 3265, maka proses kerjanya adalah sebagai berikut :
    n = 65537
    G0 = 65537
    G1 = 3265
    V0 = 0
    V1 = 1
    While (3265 <> 0)
       Y = Int(65537 / 3265) = 20
       G2 = 65537 - 20 * 3265 = 237
       G0 = 3267
       G1 = 237
       V2 = 0 - 20 * 1 = -20
       V0 = 1
       V1 = -20
    Wend

o
o
o

    While (0 <> 0)
       Y =  3
       G2 = 0
       G0 = 1
       G1 = 0
       V2 = -65537
       V0 = 21016
       V1 = -65537
    Wend

    If (21016 >= 0) Then
       Inverse = 21016
    End If
Jadi inverse perkalian dari 3265 adalah 21016.

2.4.3        Inverse Penjumlahan
Inverse penjumlahan dalam metode IDEA menggunakan algoritma berikut ini :
Inverse penjumlahan = 65536 - pnBil
Contoh : Inverse penjumlahan dari 32654 adalah 65536 – 32654 = 32882
2.4.4        Operasi XOR
            XOR adalah operasi Exclusive-OR yang dilambangkan dengan tanda “Å”. Operasi XOR akan menghasilkan nilai bit “0” (nol) jika meng-XOR-kan dua buah bit yang sama nilainya dan akan menghasilkan nilai bit “1” (satu) jika meng-XOR-kan dua buah bit yang masing – masing nilai bitnya berbeda. Aturan yang berlaku untuk operasi XOR dapat dilihat pada Tabel 2.1 berikut ini,
Tabel 2.1 Aturan Operasi XOR
A
B
A Å B
0
0
0
0
1
1
1
0
1
1
1
0

            Nilai A jika di-XOR-kan dengan nilai B sebanyak dua kali maka akan didapatkan nilai A kembali. Karena sifat istimewa yang dimiliki operasi XOR tersebut sehingga operasi XOR cenderung dipakai dalam proses enkripsi dan dekripsi yang memiliki algoritma yang sama.
            P Å K = C ;  C Å K = P
Keterangan,
P = Plaintext
K = Key
C = Ciphertext

Berikut ini adalah contoh operasi XOR :
            1101 0110 0001 0100
     1000 0001 1110 0000 Å
     0101 0111 1111 0100

2.4.5        Permutasi (Permutation)
            Permutasi merupakan suatu proses korespondensi dari satu ke banyak. Permutasi dalam kriptografi sering digunakan untuk memindahkan posisi sejumlah bit ke posisi yang telah ditentukan dalam tabel permutasi. Ada beberapa metode dalam kriptografi yang menggunakan permutasi pada awal maupun akhir dari proses enkripsi maupun dekripsi, dan ada juga metode yang menggunakan permutasi untuk menghasilkan beberapa subkunci yang diperlukan dalam proses enkripsi dan dekripsi.
Berikut ini adalah contoh permutasi :
Misalkan terdapat sebuah tabel permutasi 16 bit sebagai berikut :
12
4
13
5
14
6
15
7
0
8
1
9
11
2
3
10

Diberikan 1 baris bit sebagai berikut : 1110 0110 0000 1001
Terhadap barisan bit tersebut akan dilakukan permutasi menggunakan tabel permutasi sebagai berikut :
Bit ke-
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Bit
1
1
1
0
0
1
1
0
0
0
0
0
1
0
0
1



Hasil permutasi :

Bit ke-
12
4
13
5
14
6
15
7
0
8
1
9
11
2
3
10
Bit
1
0
0
1
0
1
1
0
1
0
1
0
0
1
0
0

2.4.6        Pergeseran Bit (Shift)
            Pergeseran bit (Shift) adalah operasi pergeseran terhadap suatu barisan bit sebanyak yang diinginkan. Bit kosong yang telah tergeser akan diberikan nilai bit “0” (nol). Operasi pergeseran terbagi menjadi dua macam yaitu,
1.      Operasi Geser Kiri (Shift Left) yaitu operasi yang menggeser (shift) sejumlah bit ke kiri (left) dengan  nilai bit “0” (nol). Operasi shift left dilambangkan dengan “<<”. Contoh operasi shift left :
          11000110 << 1 : 10001100
          11000110 << 2 : 00011000
          11000110 << 3 : 00110000
2.      Operasi Geser Kanan (Shift Right) yaitu operasi yang menggeser (shift) sejumlah bit ke kanan (right) dengan nilai bit “0” (nol). Operasi shift right dilambangkan dengan “>>”. Contoh operasi shift right :
          11000110 >> 1 : 01100011
          11000110 >> 2 : 00110001
          11000110 >> 3 : 00011000



2.4.7        Rotasi Bit (Rotate)
            Rotasi bit (Rotate) adalah operasi perputaran terhadap suatu barisan bit sebanyak yang diinginkan. Bit yang tergeser akan dipindahkan ke sisi barisan bit yang berlawanan dengan arah putaran bit. Operasi rotasi terbagi atas dua macam yaitu,
1.      Operasi Rotasi Kiri (Rotate Left) yaitu operasi memutar barisan bit ke kiri sebanyak nilai yang diberikan secara per bit, bit kosong yang telah tergeser di sebelah kanan akan digantikan dengan bit yang telah tergeser di sebelah kirinya. Operasi rotate left dilambangkan dengan “<<<”. Contoh operasi rotate left :    
          11000110 <<< 1 : 10001101
          11000110 <<< 2 : 00011011
          11000110 <<< 3 : 00110110
2.      Operasi Rotasi Kanan (Rotate Right) yaitu operasi memutar barisan bit ke kanan sebanyak nilai yang diberikan secara per bit, bit kosong yang telah tergeser di sebelah kiri akan digantikan dengan bit yang telah tergeser di sebelah kanannya. Operasi rotate right dilambangkan dengan “>>>”.Contoh operasi rotate right :    
          11000110 >>> 1 : 01100011
          11000110 >>> 2 : 10110001
          11000110 >>> 3 : 11011000



2.4.8        Perkalian Modulo
Perkalian dengan nol selalu menghasilkan nol dan tidak memiliki invers. Perkalian modulo n juga tidak memiliki invers jika angka yang dikalikan tidak relatif prima terhadap n. Sementara algoritma kriptografi memerlukan operasi yang memiliki inversi. Angka 65537 (216 + 1) adalah sebuah bilangan prima. Oleh karena itu, operasi perkalian modulo (216 + 1) pada algoritma IDEA memiliki inversi. Jika kita membentuk suatu tabel perkalian untuk bilangan-bilangan mulai dari 1 sampai 65536, maka setiap baris dan kolom hanya berisi setiap bilangan satu kali saja.
Dalam IDEA, untuk operasi perkalian, bilangan 16 bit yang terdiri dari nol semua dianggap sebagai bilangan 65536, sedangkan bilangan lainnya tetap sesuai dengan bilangan tak bertanda yang diwakilinya.
Contoh :
(32542 * 10) mod 65537 = 325420 mod 65537 = 63272
(3154 * 25) mod 65537 = 78850 mod 65537 = 13313

2.5              Metoda IDEA
2.5.1        Sejarah
Metoda IDEA diperkenalkan pertama kali oleh Xuejia Lai dan James Massey pada tahun 1990 dengan nama PES (Proposed Encryption Standard). Tahun berikutnya, setelah Biham dan Shamir mendemonstrasikan cryptanalysis yang berbeda, sang penemu memperkuat algoritma mereka dari serangan dan algoritma hasil pengubahan tersebut diberi nama IPES (Improved Proposed Encryption Algorithm). Kemudian pada tahun 1992, IPES diganti namanya menjadi IDEA (International Data Encryption Algorithm). IDEA dirancang untuk menggantikan DES (Data Encryption Standard).

2.5.2        Algoritma
IDEA merupakan block cipher (cipher blok), yang beroperasi pada blok plaintext 64 bit. Panjang kuncinya 128 bit. Algoritma yang sama digunakan untuk proses enkripsi dan dekripsi. Sebagaimana algoritma enkripsi yang lain, IDEA menggunakan confusion dan diffusion, berbeda dengan DES yang menggunakan permutasi dan substitusi untuk confusion dan diffusion, IDEA menggunakan operasi aljabar yang tidak kompatibel sebagai berikut,
a.       XOR.
b.      Penambahan modulo 216.
c.       Perkalian modulo 216 + 1 (operasi ini menggantikan kotak-S atau S-Box).
Algoritma IDEA menggunakan perkalian modulo 216 + 1 dengan pertimbangan berikut ini,
Perkalian dengan nol selalu menghasilkan nol dan tidak memiliki inversi. Perkalian modulo n juga tidak memiliki inversi jika angka yang dikalikan tidak relatif prima terhadap n. Sementara algoritma kriptografi memerlukan operasi yang memiliki inversi. Angka 65537 (216 + 1) adalah sebuah bilangan prima. Oleh karena itu, operasi perkalian modulo (216 + 1) pada algoritma IDEA memiliki inversi. Jika kita membentuk suatu tabel perkalian untuk bilangan-bilangan mulai dari 1 sampai 65536, maka setiap baris dan kolom hanya berisi setiap bilangan satu kali saja.
Dalam IDEA, untuk operasi perkalian, bilangan 16 bit yang terdiri dari nol semua dianggap sebagai bilangan 65536, sedangkan bilangan lainnya tetap sesuai dengan bilangan tak bertanda yang diwakilinya. Algoritma IDEA ini dapat dibagi menjadi tiga bagian besar, yaitu algoritma pembentukan kunci, enkripsi dan dekripsi.

2.5.2.1  Pembentukan Kunci
Proses pembentukan ini dimulai dengan membagi 128 bit key menjadi 8 buah 16 bit subkey. Ini merupakan delapan subkey pertama untuk algoritma dengan perincian enam subkey pertama untuk putaran (round) 1 dan dua subkey terakhir untuk putaran 2. Key dirotasikan 25 bit ke kiri dan dibagi menjadi 8 subkey lagi. Ini merupakan delapan subkey kedua untuk algoritma dengan perincian empat subkey pertama untuk putaran 2 dan empat subkey terakhir untuk putaran 3. Algoritma hanya menggunakan 52 buah subkey dengan perincian 6 buah subkey untuk 8 putaran ditambah 4 buah subkey untuk transformasi output.
Proses pembentukan kunci dapat dilihat pada gambar 2.10 di bawah ini :
 Gambar 2.10 Proses Pembentukan Kunci untuk IDEA



2.5.2.2  Enkripsi
Proses enkripsi algoritma IDEA adalah sebagai berikut,
Pertama – tama, plaintext 64 bit dibagi menjadi 4 buah sub blok dengan panjang 16 bit, yaitu X1, X2, X3, X4. Empat sub blok ini menjadi masukan bagi iterasi tahap pertama algoritma. Total terdapat 8 iterasi. Pada setiap iterasi, 4 sub blok di-XOR-kan, ditambahkan, dikalikan dengan yang lain dan dengan 6 buah subkey 16 bit. Diantara iterasi sub blok kedua dan ketiga saling dipertukarkan. Akhirnya 4 buah sub blok dikombinasikan dengan 4 subkey dalam transformasi output. Pada setiap tahapan, urutan berikut ini dikerjakan,
1.      Kalikan X1 dengan K1 mod (216 + 1).
2.      Tambahkan X2 dengan K2 mod 216.
3.      Tambahkan X3 dengan K3 mod 216.
4.      Kalikan X4 dengan K4  mod (216 + 1).
5.      XOR hasil dari step 1 dan 3.
6.      XOR hasil dari step 2 dan 4.
7.      Kalikan hasil dari step 5 dengan K5 mod (216 + 1).
8.      Tambahkan hasil dari step 6 dan 7 mod 216.
9.      Kalikan hasil dari step 8 dengan K6 mod (216 + 1).
10.  Tambahkan hasil dari step 7 dan 9.
11.  XOR hasil dari step 1 dan 9.
12.  XOR hasil dari step 3 dan 9.
13.  XOR hasil dari step 2 dan 10.
14.  XOR hasil dari step 4 dan 10.
Output dari setiap round adalah empat sub blok yang dihasilkan pada langkah 11, 12, 13 dan 14. Sub blok 12 dan 13 di-swap (kecuali untuk putaran terakhir) sehingga input dari putaran berikutnya adalah hasil kombinasi dari langkah 11 13 12 14.
Setelah 8 putaran, akan dilakukan tranformasi output berikut,
1.      Kalikan X1 dengan subkey K1 mod (216 + 1).
2.      Tambahkan X2 dengan subkey K2 mod 216.
3.      Tambahkan X3 dengan subkey K3 mod 216.
4.      Kalikan X4 dengan subkey K4 mod (216 + 1).











Proses enkripsi algoritma IDEA dapat dilihat pada gambar berikut ini,
Gambar 2.11 Proses Enkripsi Algoritma IDEA



2.5.2.3  Dekripsi
Proses dekripsi sama persis dengan proses enkripsi. Perbedaannya hanya terletak pada aturan dari subkey-nya. Urutan subkey terbalik dengan proses enkripsi dan subkey-nya di-inverse-kan. Subkey pada langkah transformasi output pada proses enkripsi di-inverse-kan dan digunakan sebagai subkey pada putaran 1 pada proses dekripsi. Subkey pada putaran 8 di-inverse-kan dan digunakan sebagai subkey pada putaran 1 dan 2 pada proses dekripsi. Demikian seterusnya.
Agar lebih jelas, lihatlah tabel berikut ini.
Tabel 2.2 Subkey enkripsi dan dekripsi algoritma IDEA
Round
Subkey Enkripsi
Subkey Dekripsi
1
K1(1) K2(1) K3(1) K4(1) K5(1) K6(1)
K1(9)-1 -K2(9) -K3(9) K4(9)-1 K5(8) K6(8)
2
K1(2) K2(2) K3(2) K4(2) K5(2) K6(2)
K1(8)-1 -K3(8) -K2(8) K4(8)-1 K5(7) K6(7)
3
K1(3) K2(3) K3(3) K4(3) K5(3) K6(3)
K1(7)-1 -K3(7) -K2(7) K4(7)-1 K5(6) K6(6)
4
K1(4) K2(4) K3(4) K4(4) K5(4) K6(4)
K1(6)-1 -K3(6) -K2(6) K4(6)-1 K5(5) K6(5)
5
K1(5) K2(5) K3(5) K4(5) K5(5) K6(5)
K1(5)-1 -K3(5) -K2(5) K4(5)-1 K5(4) K6(4)
6
K1(6) K2(6) K3(6) K4(6) K5(6) K6(6)
K1(4)-1 -K3(4) -K2(4) K4(4)-1 K5(3) K6(3)
7
K1(7) K2(7) K3(7) K4(7) K5(7) K6(7)
K1(3)-1 -K3(3) -K2(3) K4(3)-1 K5(2) K6(2)
8
K1(8) K2(8) K3(8) K4(8) K5(8) K6(8)
K1(2)-1 -K3(2) -K2(2) K4(2)-1 K5(1) K6(1)
Transformasi output
K1(9) K2(9) K3(9) K4(9)
K1(1)-1 -K2(1) -K3(1) K4(1)-1

2.6              Perangkat Lunak Pembelajaran

            Seiring dengan perkembangan peradaban manusia dan kemajuan pesat di bidang teknologi, tanpa disadari komputer telah ikut berperan dalam dunia pendidikan terutama penggunaannya sebagai alat bantu pengajaran. Percobaan penggunaan komputer untuk proses belajar dimulai di Amerika Serikat pada akhir tahun 1950-an dan awal tahun 1960-an. Kemudian penelitian selanjutnya dilakukan oleh Harvard University bekerja sama dengan IBM pada tahun 1965. Setelah munculnya komputer mikro, sistem pengajaran dengan komputer menjadi semakin meluas pada pengembangan aplikasi perangkat lunak ajar yang dikenal dengan istilah perangkat lunak pembelajaran. Perangkat lunak pembelajaran dengan komputer muncul dari sejumlah disiplin ilmu, terutama ilmu komputer dan psikologi. Dari ilmu komputer dan matematika muncul program – program yang membuat semua perhitungan dan fungsi lebih mudah dan bermanfaat. Sedangkan dari ilmu psikologi muncul pengetahuan mengenai teori belajar, teknik belajar, serta motivasi yang baik.


2.6.1        Tujuan Perangkat Lunak Pembelajaran
Tujuan dari perangkat lunak pembelajaran antara lain :
1.      Peningkatan pengawasan
2.      Penggunaan sumber daya
3.      Individualisasi
4.      Ketepatan waktu dan tingkat ketersediaan
5.      Pengurangan waktu latihan
6.      Perbaikan hasil kerja
7.      Alat yang nyaman dipakai
8.      Pengganti cara belajar
9.      Peningkatan kepuasan belajar
10.    Pengurangan waktu pengembangan

2.6.2        Langkah-Langkah Pengembangan Perangkat Lunak Pembelajaran
Ada 5 tahap siklus pengembangan perangkat lunak pembelajaran yaitu :
1.      Pengembangan spesifikasi perancangan detail
Tujuan dari pengembangan spesifikasi perancangan detail ini meliputi perluasan konsep perancangan untuk menciptakan suatu rencana yang efektif.
2.      Pengembangan teknik
Pengembangan ini biasanya dilakukan dengan persetujuan dari tim perancang. Tahap ini biasanya akan diulang-ulang dan sering terjadi perbaikan.
3.      Evaluasi
Untuk menghasilkan suatu perangkat lunak pembelajaran yang dapat memenuhi standar maka perlu dilakukan suatu pengujian. Pengujian biasanya dilakukan pada bagian pelajaran dan pelatihan. Hasil dari pengujian inilah yang dievaluasi oleh tim perancang.
4.      Produksi dan pengembangan
Produksi ini harus dilakukan secara teknis dan logis dalam pembuatan dokumentasi. Sedangkan pengembangan yang dilakukan mengacu pada proses pengembangannya.
5.      Evaluasi akhir
Langkah pengujian yang dapat dilakukan misalnya dengan melakukan suatu kuisioner maupun konsultasi dengan mereka yang ingin belajar. Hasilnya dapat menjadi pedoman apakah perangkat lunak pembelajaran tersebut perlu dilakukan perbaikan lagi atau tidak.
BAB III

PEMBAHASAN DAN PERANCANGAN

3.1  Pembahasan
3.1.1        Persyaratan Perangkat Lunak
Perangkat lunak pembelajaran metode kriptografi IDEA memiliki persyaratan sebagai berikut :
  1. Perangkat lunak cukup menerima plaintext sepanjang 8 karakter dan kunci sepanjang 16 karakter.
  2. Perangkat lunak harus dapat menampilkan tahapan-tahapan proses pembentukan kunci, enkripsi dan dekripsi.
  3. Perangkat lunak akan menyediakan teori-teori dasar mengenai metode IDEA.
  4. Kecepatan visualisasi proses pada perangkat lunak dapat disesuaikan dengan cepat lambatnya daya tangkap user.
  5. Perangkat lunak harus dapat menampilkan tahapan proses perhitungan dalam biner dan heksadesimal.
  6. User diasumsikan telah memahami dasar matematika kriptografi seperti operasi XOR, perkalian modulo, penjumlahan modulo, Left Rotate, dan konversi antar basis bilangan dan konversi dari bilangan ke ASCII Code yaitu mencakup biner ke desimal, heksadesimal ke desimal, biner ke heksadesimal, biner ke ASCII Code, heksadesimal ke ASCII Code dan sebaliknya.

3.1.2        Pembahasan Proses IDEA
Proses penyelesaian metoda kriptografi IDEA ini dapat dibagi menjadi 3 tahapan yaitu :
  1. Proses Pembentukan Kunci.
  2. Proses Enkripsi.
  3. Proses Dekripsi.

3.1.2.1  Proses Pembentukan Kunci
Metoda IDEA memiliki input 128 bit kunci (key) yang identik dengan 32 digit heksadesimal ataupun 16 karakter yang diproses untuk menghasilkan 52 buah subkey dengan perincian masing-masing 6 buah subkey akan digunakan pada 8 putaran dan 4 buah subkey untuk transformasi output.
Untuk lebih memahami proses pembentukan kunci pada metoda IDEA, diberikan sebuah contoh berikut ini.
Misalkan : Input kunci = ‘METODA IDEA FERI’
Proses pembentukan kuncinya adalah sebagai berikut :
KUNCI ENKRIPSI
-----------------------
PUTARAN - 1
INPUT KUNCI :
01001101010001010101010001001111010001000100000100100000010010010100010001000101010000010010000001000110010001010101001001001001
Pecah menjadi 8 kelompok :
KE1 (Putaran 1) = 0100110101000101
KE2 (Putaran 1) = 0101010001001111
KE3 (Putaran 1) = 0100010001000001
KE4 (Putaran 1) = 0010000001001001
KE5 (Putaran 1) = 0100010001000101
KE6 (Putaran 1) = 0100000100100000
KE1 (Putaran 2) = 0100011001000101
KE2 (Putaran 2) = 0101001001001001

PUTARAN - 2
Left Shift
(01001101010001010101010001001111010001000100000100100000010010010100010001000101010000010010000001000110010001010101001001001001, 25) =
10011110100010001000001001000000100100101000100010001010100000100100000010001100100010101010010010010010100110101000101010101000
Pecah menjadi 8 kelompok :
KE3 (Putaran 2) = 1001111010001000
KE4 (Putaran 2) = 1000001001000000
KE5 (Putaran 2) = 1001001010001000
KE6 (Putaran 2) = 1000101010000010
KE1 (Putaran 3) = 0100000010001100
KE2 (Putaran 3) = 1000101010100100
KE3 (Putaran 3) = 1001001010011010
KE4 (Putaran 3) = 1000101010101000

PUTARAN - 3
Left Shift
(10011110100010001000001001000000100100101000100010001010100000100100000010001100100010101010010010010010100110101000101010101000, 25) =
10000001001001010001000100010101000001001000000100011001000101010100100100100101001101010001010101010001001111010001000100000100
Pecah menjadi 8 kelompok :
KE5 (Putaran 3) = 1000000100100101
KE6 (Putaran 3) = 0001000100010101
KE1 (Putaran 4) = 0000010010000001
KE2 (Putaran 4) = 0001100100010101
KE3 (Putaran 4) = 0100100100100101
KE4 (Putaran 4) = 0011010100010101
KE5 (Putaran 4) = 0101000100111101
KE6 (Putaran 4) = 0001000100000100

PUTARAN - 4
Left Shift
(10000001001001010001000100010101000001001000000100011001000101010100100100100101001101010001010101010001001111010001000100000100, 25) =
00101010000010010000001000110010001010101001001001001010011010100010101010100010011110100010001000001001000000100100101000100010
Pecah menjadi 8 kelompok :
KE1 (Putaran 5) = 0010101000001001
KE2 (Putaran 5) = 0000001000110010
KE3 (Putaran 5) = 0010101010010010
KE4 (Putaran 5) = 0100101001101010
KE5 (Putaran 5) = 0010101010100010
KE6 (Putaran 5) = 0111101000100010
KE1 (Putaran 6) = 0000100100000010
KE2 (Putaran 6) = 0100101000100010

PUTARAN - 5
Left Shift
(00101010000010010000001000110010001010101001001001001010011010100010101010100010011110100010001000001001000000100100101000100010, 25) =
01100100010101010010010010010100110101000101010101000100111101000100010000010010000001001001010001000100010101000001001000000100
Pecah menjadi 8 kelompok :
KE3 (Putaran 6) = 0110010001010101
KE4 (Putaran 6) = 0010010010010100
KE5 (Putaran 6) = 1101010001010101
KE6 (Putaran 6) = 0100010011110100
KE1 (Putaran 7) = 0100010000010010
KE2 (Putaran 7) = 0000010010010100
KE3 (Putaran 7) = 0100010001010100
KE4 (Putaran 7) = 0001001000000100
PUTARAN - 6
Left Shift
(01100100010101010010010010010100110101000101010101000100111101000100010000010010000001001001010001000100010101000001001000000100, 25) =
00101001101010001010101010001001111010001000100000100100000010010010100010001000101010000010010000001000110010001010101001001001
Pecah menjadi 8 kelompok :
KE5 (Putaran 7) = 0010100110101000
KE6 (Putaran 7) = 1010101010001001
KE1 (Putaran 8) = 1110100010001000
KE2 (Putaran 8) = 0010010000001001
KE3 (Putaran 8) = 0010100010001000
KE4 (Putaran 8) = 1010100000100100
KE5 (Putaran 8) = 0000100011001000
KE6 (Putaran 8) = 1010101001001001

PUTARAN - 7
Left Shift
(00101001101010001010101010001001111010001000100000100100000010010010100010001000101010000010010000001000110010001010101001001001, 25) =
00010011110100010001000001001000000100100101000100010001010100000100100000010001100100010101010010010010010100110101000101010101
Pecah menjadi 8 kelompok (4 kelompok terakhir tidak digunakan) :
KE1 (Transformasi Output) = 0001001111010001
KE2 (Transformasi Output) = 0001000001001000
KE3 (Transformasi Output) = 0001001001010001
KE4 (Transformasi Output) = 0001000101010000

KUNCI DEKRIPSI
-----------------------
KD1(Putaran 1) = Inverse(KE1-Putaran9) = 0011110110000100
KD2(Putaran 1) = Minus(KE2-Putaran9) = 1110111110111000
KD3(Putaran 1) = Minus(KE3-Putaran9) = 1110110110101111
KD4(Putaran 1) = Inverse(KE4-Putaran9) = 0000001010110111
KD5(Putaran 1) = (KE5-Putaran8) = 0000100011001000
KD6(Putaran 1) = (KE6-Putaran8) = 1010101001001001

KD1(Putaran 2) = Inverse(KE1-Putaran8) = 1111101000010101
KD2(Putaran 2) = Minus(KE3-Putaran8) = 1101011101111000
KD3(Putaran 2) = Minus(KE2-Putaran8) = 1101101111110111
KD4(Putaran 2) = Inverse(KE4-Putaran8) = 1001011100110100
KD5(Putaran 2) = (KE5-Putaran7) = 0010100110101000
KD6(Putaran 2) = (KE6-Putaran7) = 1010101010001001

KD1(Putaran 3) = Inverse(KE1-Putaran7) = 0011111111010101
KD2(Putaran 3) = Minus(KE3-Putaran7) = 1011101110101100
KD3(Putaran 3) = Minus(KE2-Putaran7) = 1111101101101100
KD4(Putaran 3) = Inverse(KE4-Putaran7) = 0100010100111000
KD5(Putaran 3) = (KE5-Putaran6) = 1101010001010101
KD6(Putaran 3) = (KE6-Putaran6) = 0100010011110100

KD1(Putaran 4) = Inverse(KE1-Putaran6) = 1000101001110000
KD2(Putaran 4) = Minus(KE3-Putaran6) = 1001101110101011
KD3(Putaran 4) = Minus(KE2-Putaran6) = 1011010111011110
KD4(Putaran 4) = Inverse(KE4-Putaran6) = 1010001011101010
KD5(Putaran 4) = (KE5-Putaran5) = 0010101010100010
KD6(Putaran 4) = (KE6-Putaran5) = 0111101000100010

KD1(Putaran 5) = Inverse(KE1-Putaran5) = 0101110011001110
KD2(Putaran 5) = Minus(KE3-Putaran5) = 1101010101101110
KD3(Putaran 5) = Minus(KE2-Putaran5) = 1111110111001110
KD4(Putaran 5) = Inverse(KE4-Putaran5) = 0110110010001011
KD5(Putaran 5) = (KE5-Putaran4) = 0101000100111101
KD6(Putaran 5) = (KE6-Putaran4) = 0001000100000100

KD1(Putaran 6) = Inverse(KE1-Putaran4) = 0001010011011111
KD2(Putaran 6) = Minus(KE3-Putaran4) = 1011011011011011
KD3(Putaran 6) = Minus(KE2-Putaran4) = 1110011011101011
KD4(Putaran 6) = Inverse(KE4-Putaran4) = 0001001000101110
KD5(Putaran 6) = (KE5-Putaran3) = 1000000100100101
KD6(Putaran 6) = (KE6-Putaran3) = 0001000100010101

KD1(Putaran 7) = Inverse(KE1-Putaran3) = 0000101101110011
KD2(Putaran 7) = Minus(KE3-Putaran3) = 0110110101100110
KD3(Putaran 7) = Minus(KE2-Putaran3) = 0111010101011100
KD4(Putaran 7) = Inverse(KE4-Putaran3) = 1101010011001000
KD5(Putaran 7) = (KE5-Putaran2) = 1001001010001000
KD6(Putaran 7) = (KE6-Putaran2) = 1000101010000010

KD1(Putaran 8) = Inverse(KE1-Putaran2) = 0100000011001111
KD2(Putaran 8) = Minus(KE3-Putaran2) = 0110000101111000
KD3(Putaran 8) = Minus(KE2-Putaran2) = 1010110110110111
KD4(Putaran 8) = Inverse(KE4-Putaran2) = 0100000111010110
KD5(Putaran 8) = (KE5-Putaran1) = 0100010001000101
KD6(Putaran 8) = (KE6-Putaran1) = 0100000100100000

KD1(Putaran 9) = Inverse(KE1-Putaran1) = 0011001101110101
KD2(Putaran 9) = Minus(KE2-Putaran1) = 1010101110110001
KD3(Putaran 9) = Minus(KE3-Putaran1) = 1011101110111111
KD4(Putaran 9) = Inverse(KE4-Putaran1) = 0111110001000101

3.1.2.2  Proses Enkripsi
Proses enkripsi dari metoda IDEA terdiri dari 8 iterasi (putaran) ditambah satu putaran transformasi output. Proses ini memiliki input data plaintext 64 bit yang identik dengan 16 digit heksadesimal atau 8 karakter.
Proses enkripsi dari metoda IDEA dapat dilihat pada contoh berikut ini.
Misalkan plaintext = ‘FERIFERI’ dengan kunci yang dihasilkan di atas, maka proses enkripsinya adalah sebagai berikut :


PUTARAN - 1
01) L#1 = (X1 * K1) mod (2^16 + 1) = 0100011001000101 *
0100110101000101 mod (2^16 + 1) = 1001110001100100
02) L#2 = (X2 + K2) mod 2^16 = 0101001001001001 + 0101010001001111
mod 2^16 = 1010011010011000
03) L#3 = (X3 + K3) mod 2^16 = 0100011001000101 + 0100010001000001
mod 2^16 = 1000101010000110
04) L#4 = (X4 * K4) mod (2^16 + 1) = 0101001001001001 *
0010000001001001 mod (2^16 + 1) = 1000110001110001
05) L#5 = L#1 XOR L#3 = 1001110001100100 XOR 1000101010000110 =
0001011011100010
06) L#6 = L#2 XOR L#4 = 1010011010011000 XOR 1000110001110001 =
0010101011101001
07) L#7 = (L#5 * K5) mod (2^16 + 1) = 0001011011100010 *
0100010001000101 mod (2^16 + 1) = 0010110011010000
08) L#8 = (L#6 + L#7)) mod 2^16 = 0010101011101001 +
0010110011010000 mod 2^16 = 0101011110111001
09) L#9 = (L#8 * K6) mod (2^16 + 1) = 0101011110111001 *
0100000100100000 mod (2^16 + 1) = 1101100111010000
10) L#10 = (L#7 + L#9)) mod 2^16 = 0010110011010000 +
1101100111010000 mod 2^16 = 0000011010100000
11) L#11 = L#1 XOR L#9 = 1001110001100100 XOR 1101100111010000 =
0100010110110100
12) L#12 = L#3 XOR L#9 = 1000101010000110 XOR 1101100111010000 =
0101001101010110
13) L#13 = L#2 XOR L#10 = 1010011010011000 XOR 0000011010100000 =
1010000000111000
14) L#14 = L#4 XOR L#10 = 1000110001110001 XOR 0000011010100000 =
1000101011010001
Untuk putaran berikutnya :
X1 = L#11 = 0100010110110100
X2 = L#12 = 0101001101010110
X3 = L#13 = 1010000000111000
X4 = L#14 = 1000101011010001

PUTARAN - 2
01)  L#1 = (X1 * K1) mod (2^16 + 1) = 0100010110110100 *
0100011001000101 mod (2^16 + 1) = 1110111001100011
02)  L#2 = (X2 + K2) mod 2^16 = 0101001101010110 + 0101001001001001
mod 2^16 = 1010010110011111
03)  L#3 = (X3 + K3) mod 2^16 = 1010000000111000 + 1001111010001000
mod 2^16 = 0011111011000000
04)  L#4 = (X4 * K4) mod (2^16 + 1) = 1000101011010001 *
1000001001000000 mod (2^16 + 1) = 1000111110100000
05)  L#5 = L#1 XOR L#3 = 1110111001100011 XOR 0011111011000000 =
1101000010100011
06)  L#6 = L#2 XOR L#4 = 1010010110011111 XOR 1000111110100000 =
0010101000111111
07)  L#7 = (L#5 * K5) mod (2^16 + 1) = 1101000010100011 *
1001001010001000 mod (2^16 + 1) = 0101010100101101
08)  L#8 = (L#6 + L#7)) mod 2^16 = 0010101000111111 +
0101010100101101 mod 2^16 = 0111111101101100
09)  L#9 = (L#8 * K6) mod (2^16 + 1) = 0111111101101100 *
1000101010000010 mod (2^16 + 1) = 1010011111101000
10)  L#10 = (L#7 + L#9)) mod 2^16 = 0101010100101101 +
1010011111101000 mod 2^16 = 1111110100010101
11)  L#11 = L#1 XOR L#9 = 1110111001100011 XOR 1010011111101000 =
0100100110001011
12)  L#12 = L#3 XOR L#9 = 0011111011000000 XOR 1010011111101000 =
1001100100101000
13)  L#13 = L#2 XOR L#10 = 1010010110011111 XOR 1111110100010101 =
0101100010001010
14)  L#14 = L#4 XOR L#10 = 1000111110100000 XOR 1111110100010101 =
0111001010110101
Untuk putaran berikutnya :
X1 = L#11 = 0100100110001011
X2 = L#12 = 1001100100101000
X3 = L#13 = 0101100010001010
X4 = L#14 = 0111001010110101

o
o
o

PUTARAN - 8
01)  L#1 = (X1 * K1) mod (2^16 + 1) = 1110110000001011 *
1110100010001000 mod (2^16 + 1) = 1000011101110010
02)  L#2 = (X2 + K2) mod 2^16 = 1111101011010010 + 0010010000001001
mod 2^16 = 0001111011011011
03)  L#3 = (X3 + K3) mod 2^16 = 1010100000101011 + 0010100010001000
mod 2^16 = 1101000010110011
04)  L#4 = (X4 * K4) mod (2^16 + 1) = 1000100010011101 *
1010100000100100 mod (2^16 + 1) = 1110010001011011
05)  L#5 = L#1 XOR L#3 = 1000011101110010 XOR 1101000010110011 =
0101011111000001
06)  L#6 = L#2 XOR L#4 = 0001111011011011 XOR 1110010001011011 =
1111101010000000
07)  L#7 = (L#5 * K5) mod (2^16 + 1) = 0101011111000001 *
0000100011001000 mod (2^16 + 1) = 1001001111000110
08)  L#8 = (L#6 + L#7)) mod 2^16 = 1111101010000000 +
1001001111000110 mod 2^16 = 1000111001000110
09)  L#9 = (L#8 * K6) mod (2^16 + 1) = 1000111001000110 *
1010101001001001 mod (2^16 + 1) = 1010111101010100
10)  L#10 = (L#7 + L#9)) mod 2^16 = 1001001111000110 +
1010111101010100 mod 2^16 = 0100001100011010
11)  L#11 = L#1 XOR L#9 = 1000011101110010 XOR 1010111101010100 =
0010100000100110
12)  L#12 = L#3 XOR L#9 = 1101000010110011 XOR 1010111101010100 =
0111111111100111
13)  L#13 = L#2 XOR L#10 = 0001111011011011 XOR 0100001100011010 =
0101110111000001
14)  L#14 = L#4 XOR L#10 = 1110010001011011 XOR 0100001100011010 =
1010011101000001
Untuk transformasi output :
X1 = L#11 = 0010100000100110
X2 = L#13 = 0101110111000001
X3 = L#12 = 0111111111100111
X4 = L#14 = 1010011101000001

TRANSFORMASI OUTPUT
01)  Y1 = (X1 * K1) mod (2^16 + 1) = 0010100000100110 *
0001001111010001 mod (2^16 + 1) = 1001010111101011
02)  Y2 = (X2 + K2) mod 2^16 = 0101110111000001 + 0001000001001000
mod 2^16 = 0110111000001001
03)  Y3 = (X3 + K3) mod 2^16 = 0111111111100111 + 0001001001010001
mod 2^16 = 1001001000111000
04)  Y4 = (X4 * K4) mod (2^16 + 1) = 1010011101000001 *
0001000101010000 mod (2^16 + 1) = 1000101000000001
Hasil Enkripsi :
Y1 = 1001010111101011 = •ë
Y2 = 0110111000001001 = n    
Y3 = 1001001000111000 = ’8
Y4 = 1000101000000001 = Š
Cipher text   = •ën     ’8Š

3.1.2.3  Proses Dekripsi
Proses dekripsi merupakan kebalikan dari proses enkripsi. Proses dekripsi menggunakan algoritma yang sama dengan proses enkripsi. Sebagai contoh, misalkan ingin didekripsikan kembali hasil enkripsi yang telah didapatkan di atas, maka proses dekripsinya adalah sebagai berikut :
PUTARAN - 1
01)  L#1 = (X1 * K1) mod (2^16 + 1) = 1001010111101011 *
0011110110000100 mod (2^16 + 1) = 0010100000100110
02)  L#2 = (X2 + K2) mod 2^16 = 0110111000001001 + 1110111110111000
mod 2^16 = 0101110111000001

03)  L#3 = (X3 + K3) mod 2^16 = 1001001000111000 + 1110110110101111
mod 2^16 = 0111111111100111
04)  L#4 = (X4 * K4) mod (2^16 + 1) = 1000101000000001 *
0000001010110111 mod (2^16 + 1) = 1010011101000001
05)  L#5 = L#1 XOR L#3 = 0010100000100110 XOR 0111111111100111 =
0101011111000001
06)  L#6 = L#2 XOR L#4 = 0101110111000001 XOR 1010011101000001 =
1111101010000000
07)  L#7 = (L#5 * K5) mod (2^16 + 1) = 0101011111000001 *
 0000100011001000 mod (2^16 + 1) = 1001001111000110
08)  L#8 = (L#6 + L#7)) mod 2^16 = 1111101010000000 +
1001001111000110 mod 2^16 = 1000111001000110
09)  L#9 = (L#8 * K6) mod (2^16 + 1) = 1000111001000110 *
1010101001001001 mod (2^16 + 1) = 1010111101010100
10)  L#10 = (L#7 + L#9)) mod 2^16 = 1001001111000110 +
1010111101010100 mod 2^16 = 0100001100011010
11)  L#11 = L#1 XOR L#9 = 0010100000100110 XOR 1010111101010100 =
1000011101110010
12)  L#12 = L#3 XOR L#9 = 0111111111100111 XOR 1010111101010100 =
1101000010110011
13)  L#13 = L#2 XOR L#10 = 0101110111000001 XOR 0100001100011010 =
0001111011011011
14)  L#14 = L#4 XOR L#10 = 1010011101000001 XOR 0100001100011010 =
1110010001011011
Untuk putaran berikutnya :
X1 = L#11 = 1000011101110010
X2 = L#12 = 1101000010110011
X3 = L#13 = 0001111011011011
X4 = L#14 = 1110010001011011

PUTARAN - 2
01)  L#1 = (X1 * K1) mod (2^16 + 1) = 1000011101110010 * 1111101000010101 mod
(2^16 + 1) = 1110110000001011

02)  L#2 = (X2 + K2) mod 2^16 = 1101000010110011 + 1101011101111000 mod 2^16 =
1010100000101011
03)  L#3 = (X3 + K3) mod 2^16 = 0001111011011011 + 1101101111110111 mod 2^16 =
1111101011010010
04)  L#4 = (X4 * K4) mod (2^16 + 1) = 1110010001011011 * 1001011100110100 mod
(2^16 + 1) = 1000100010011101
05)  L#5 = L#1 XOR L#3 = 1110110000001011 XOR 1111101011010010 =
0001011011011001
06)  L#6 = L#2 XOR L#4 = 1010100000101011 XOR 1000100010011101 =
0010000010110110
07)  L#7 = (L#5 * K5) mod (2^16 + 1) = 0001011011011001 * 0010100110101000 mod
(2^16 + 1) = 1011101110110001
08)  L#8 = (L#6 + L#7)) mod 2^16 = 0010000010110110 + 1011101110110001 mod 2^16
= 1101110001100111
09)  L#9 = (L#8 * K6) mod (2^16 + 1) = 1101110001100111 * 1010101010001001 mod
(2^16 + 1) = 1100011001001110
10)  L#10 = (L#7 + L#9)) mod 2^16 = 1011101110110001 + 1100011001001110 mod
2^16 = 1000000111111111
11)  L#11 = L#1 XOR L#9 = 1110110000001011 XOR 1100011001001110 =
0010101001000101
12)  L#12 = L#3 XOR L#9 = 1111101011010010 XOR 1100011001001110 =
0011110010011100
13)  L#13 = L#2 XOR L#10 = 1010100000101011 XOR 1000000111111111 =
0010100111010100
14)  L#14 = L#4 XOR L#10 = 1000100010011101 XOR 1000000111111111 =
0000100101100010
Untuk putaran berikutnya :
X1 = L#11 = 0010101001000101
X2 = L#12 = 0011110010011100
X3 = L#13 = 0010100111010100
X4 = L#14 = 0000100101100010
o
o
o

PUTARAN - 8
01)  L#1 = (X1 * K1) mod (2^16 + 1) = 1110111001100011 * 0100000011001111 mod
(2^16 + 1) = 0100010110110100
02)  L#2 = (X2 + K2) mod 2^16 = 0011111011000000 + 0110000101111000 mod 2^16 =
1010000000111000
03)  L#3 = (X3 + K3) mod 2^16 = 1010010110011111 + 1010110110110111 mod 2^16 =
0101001101010110
04)  L#4 = (X4 * K4) mod (2^16 + 1) = 1000111110100000 * 0100000111010110 mod
(2^16 + 1) = 1000101011010001
05)  L#5 = L#1 XOR L#3 = 0100010110110100 XOR 0101001101010110 =
0001011011100010
06)  L#6 = L#2 XOR L#4 = 1010000000111000 XOR 1000101011010001 =
0010101011101001
07)  L#7 = (L#5 * K5) mod (2^16 + 1) = 0001011011100010 * 0100010001000101 mod
(2^16 + 1) = 0010110011010000
08)  L#8 = (L#6 + L#7)) mod 2^16 = 0010101011101001 + 0010110011010000 mod 2^16
= 0101011110111001
09)  L#9 = (L#8 * K6) mod (2^16 + 1) = 0101011110111001 * 0100000100100000 mod
(2^16 + 1) = 1101100111010000
10)  L#10 = (L#7 + L#9)) mod 2^16 = 0010110011010000 + 1101100111010000 mod
2^16 = 0000011010100000
11)  L#11 = L#1 XOR L#9 = 0100010110110100 XOR 1101100111010000 =
1001110001100100
12)  L#12 = L#3 XOR L#9 = 0101001101010110 XOR 1101100111010000 =
1000101010000110
13)  L#13 = L#2 XOR L#10 = 1010000000111000 XOR 0000011010100000 =
1010011010011000
14)  L#14 = L#4 XOR L#10 = 1000101011010001 XOR 0000011010100000 =
1000110001110001
Untuk transformasi output :
X1 = L#11 = 1001110001100100
X2 = L#13 = 1010011010011000
X3 = L#12 = 1000101010000110
X4 = L#14 = 1000110001110001

TRANSFORMASI OUTPUT
01)  Y1 = (X1 * K1) mod (2^16 + 1) = 1001110001100100 * 0011001101110101 mod
(2^16 + 1) = 0100011001000101
02)  Y2 = (X2 + K2) mod 2^16 = 1010011010011000 + 1010101110110001 mod 2^16 =
0101001001001001
03)  Y3 = (X3 + K3) mod 2^16 = 1000101010000110 + 1011101110111111 mod 2^16 =
0100011001000101
04)  Y4 = (X4 * K4) mod (2^16 + 1) = 1000110001110001 * 0111110001000101 mod
(2^16 + 1) = 0101001001001001
Hasil Dekripsi :
Y1 = 0100011001000101 = FE
Y2 = 0101001001001001 = RI
Y3 = 0100011001000101 = FE
Y4 = 0101001001001001 = RI
Plain text   = FERIFERI

3.2  Perancangan
Perangkat lunak pembelajaran ini dirancang dengan menggunakan bahasa pemrograman Microsoft Visual Basic 6.0 dan menggunakan fasilitas menu editor untuk membuat dan mengatur tampilan menu pull down.
Perangkat lunak pembelajaran ini dirancang dengan menggunakan beberapa form, antara lain :
  1. Form Splash Screen sebagai tampilan awal (pembuka).
  2. Form Main.
  3. Form Input Proses Pembentukan Kunci.
  4. Form Input Proses Enkripsi.
  5. Form Input Proses Dekripsi.
  6. Form Tampilan Proses Pembentukan Kunci.
  7. Form Tampilan Proses Enkripsi / Dekripsi.
  8. Form Teori.
  9. Form About.

3.2.1        Form Splash Screen

Gambar 3.1 Rancangan Form Splash Screen

Keterangan :
1   : judul tugas akhir.
2   : data penyusun tugas akhir.
3   : gambar icon dari perangkat lunak.
3.2.2        Form Main

Gambar 3.2 Rancangan Form Main
Keterangan :
1   : title bar, berisi tulisan ‘Perangkat Lunak Pembelajaran Kriptografi Metode
       IDEA’.
2   : tombol ‘Minimize’, berfungsi untuk memperkecil form.
3   : tombol ‘Maximize’, berfungsi untuk memperbesar form.
4   : tombol ‘Close’, berfungsi untuk menutup form.
5   : menu bar, berisi menu-menu sebagai berikut :
a.       ‘File’ terdiri dari sub menu :
                                            i.            ‘Open …’, berfungsi untuk membuka file hasil eksekusi yang telah disimpan sebelumnya.
                                          ii.            ‘Exit’, berfungsi untuk keluar dari perangkat lunak.
b.      ‘Teori IDEA’ terdiri dari sub menu :
                                            i.            ‘Pembentukan Kunci’, berfungsi untuk menampilkan teori mengenai proses pembentukan kunci pada metode IDEA.
                                          ii.            ‘Proses Enkripsi’, berfungsi untuk menampilkan teori mengenai proses enkripsi pada metode IDEA.
                                        iii.            ‘Proses Dekripsi’, berfungsi untuk menampilkan teori mengenai proses dekripsi pada metode IDEA.
c.       ‘Pembelajaran’, terdiri dari sub menu :
                                            i.            ‘Proses Pembentukan Kunci’, berfungsi untuk memanggil form ‘Input Proses Pembentukan Kunci’.
                                          ii.            ‘Proses Enkripsi’, berfungsi untuk memanggil form ‘Input Proses Enkripsi’.
                                        iii.            ‘Proses Dekripsi’, berfungsi untuk memanggil form ‘Input Proses Dekripsi’.
d.      ‘About’, berfungsi untuk memanggil form ‘About’.
6   : badan form.
Rancangan menu dari perangkat lunak ditunjukkan oleh gambar berikut ini :
Gambar 3.3 Rancangan menu dari perangkat lunak
3.2.3        Form Input Proses Pembentukan Kunci
Gambar 3.4 Rancangan Form Input Proses Pembentukan Kunci

Keterangan :
1   : title bar, berisi tulisan ‘Proses Pembentukan Kunci’.
2   : tombol ‘Close’, berfungsi untuk menutup form.
3   : text box, berfungsi untuk meng-input kunci.
4   : daerah ‘Tampilan Proses’, berisi option button ‘Biner’ dan ‘Heksa’ untuk
       mengatur tampilan proses yang diinginkan.
5   : tombol ‘Proses’, berfungsi untuk menampilkan form ‘Proses Pembentukan
       Kunci’.
6   : tombol ‘Keluar’, berfungsi untuk keluar dari perangkat lunak.




3.2.4        Form Input Proses Enkripsi
Gambar 3.5 Rancangan Form Input Proses Enkripsi

Keterangan :
1   : title bar, berisi tulisan ‘Proses Enkripsi’.
2   : tombol ‘Close’, berfungsi untuk menutup form.
3   : text box, berfungsi untuk meng-input plaintext.
4   : text box, berfungsi untuk meng-input kunci.
5   : text box, berfungsi untuk menampilkan hasil ciphertext.
6   : daerah ‘Tampilan Proses’, berisi option button ‘Biner’ dan ‘Heksa’ untuk
       mengatur tampilan proses yang diinginkan.
7   : tombol ‘Enkripsi’, berfungsi untuk menampilkan form ‘Proses Enkripsi /
       Dekripsi’.
8   : tombol ‘Keluar’, berfungsi untuk keluar dari perangkat lunak.



3.2.5        Form Input Proses Dekripsi
Gambar 3.6 Rancangan Form Input Proses Dekripsi

Keterangan :
1   : title bar, berisi tulisan ‘Proses Dekripsi’.
2   : tombol ‘Close’, berfungsi untuk menutup form.
3   : text box, berfungsi untuk meng-input ciphertext.
4   : text box, berfungsi untuk meng-input kunci.
5   : text box, berfungsi untuk menampilkan hasil plaintext.
6   : daerah ‘Tampilan Proses’, berisi option button ‘Biner’ dan ‘Heksa’ untuk
       mengatur tampilan proses yang diinginkan.
7   : tombol ‘Dekripsi’, berfungsi untuk menampilkan form ‘Proses Enkripsi /
       Dekripsi’.
8   : tombol ‘Keluar’, berfungsi untuk keluar dari perangkat lunak.


3.2.6        Form Proses Pembentukan Kunci
Gambar 3.7 Rancangan Form Proses Pembentukan Kunci

Keterangan :
1   : title bar, berisi tulisan ‘IDEA - Proses Pembentukan Kunci’.
2   : tombol ‘Close’, berfungsi untuk menutup form.
3   : daerah tampilan diagram dari algoritma.
4   : daerah tampilan hasil eksekusi.
5   : combo box ‘Kecepatan’, berfungsi untuk mengatur kecepatan algoritma.
6   : tombol ‘Simpan’, berfungsi untuk menyimpan hasil proses eksekusi.
7   : tombol ‘Cetak’, berfungsi untuk mencetak hasil proses eksekusi.
8   : tombol ‘Mulai’, berfungsi untuk memulai proses pembentukan kunci.
9   : tombol ‘Ulangi’, berfungsi untuk mengulangi proses pembentukan kunci.
10 : tombol ‘Keluar’, berfungsi untuk keluar dari form.
11 : vertical scrollbar.
12 : checkbox ‘Kunci Dekripsi’, jika dipilih maka akan menampilkan proses kunci
       dekripsi.
13 : checkbox ‘Tampilkan proses Inverse’, jika dipilih maka akan menampilkan
       proses inverse kunci.

3.2.7        Form Proses Enkripsi / Dekripsi
Gambar 3.8 Rancangan Form Proses Enkripsi / Dekripsi
Keterangan :
1   : title bar, berisi tulisan ‘IDEA - Proses xxx’.
2   : tombol ‘Close’, berfungsi untuk menutup form.
3   : daerah tampilan diagram dari algoritma.
4   : daerah tampilan hasil eksekusi.
5   : combo box ‘Kecepatan’, berfungsi untuk mengatur kecepatan algoritma.
6   : tombol ‘Simpan’, berfungsi untuk menyimpan hasil proses eksekusi.
7   : tombol ‘Cetak’, berfungsi untuk mencetak hasil proses eksekusi.
8   : tombol ‘Mulai’, berfungsi untuk memulai proses enkripsi / dekripsi.
9   : tombol ‘Ulang’, berfungsi untuk mengulangi proses enkripsi / dekripsi.
10 : tombol ‘Keluar’, berfungsi untuk keluar dari form.
11 : vertical scrollbar.

3.2.8        Form Teori
Gambar 3.9 Rancangan Form Teori
Keterangan :
1   : title bar, berisi tulisan ‘Teori xxx’.
2   : tombol ‘Close’, berfungsi untuk menutup form.
3   : daerah tampilan judul teori.
4   : daerah tampilan teori.
5   : tombol ‘< Kembali’, berfungsi untuk menampilkan halaman sebelumnya.
6   : tombol ‘Lanjut >’, berfungsi untuk menampilkan halaman selanjutnya.
7   : tombol ‘Keluar’, berfungsi untuk keluar dari form.

3.2.9        Form Proses Inverse Penjumlahan
Gambar 3.10 Rancangan Form Proses Inverse Penjumlahan

Keterangan :
1   : title bar, berisi tulisan ‘Inverse Kunci Penjumlahan’.
2   : tombol ‘Close’, berfungsi untuk menutup form.
3   : daerah penginputan kunci enkripsi.
4   : daerah tampilan kunci dekripsi yang dihasilkan.
5   : tombol ‘Proses’, berfungsi untuk memulai proses.
6   : tombol ‘Keluar’, berfungsi untuk keluar dari form.
7   : option button ‘Biner’, berfungsi untuk menampilkan hasil proses dalam biner.
8   : option button ‘Heksa’, berfungsi untuk menampilkan hasil proses dalam
       heksadesimal.

3.2.10    Form Proses Inverse Perkalian
Gambar 3.11 Rancangan Form Proses Inverse Perkalian

Keterangan :
1   : title bar, berisi tulisan ‘Inverse Kunci Perkalian’.
2   : tombol ‘Close’, berfungsi untuk menutup form.
3   : daerah tampilan animasi algoritma.
4   : daerah tampilan hasil eksekusi.
5   : vertical scroll bar.
6   : daerah penginputan kunci enkripsi.
7   : daerah tampilan kunci dekripsi yang dihasilkan.
8   : tombol ‘Proses’, berfungsi untuk memulai proses.
9   : tombol ‘Keluar’, berfungsi untuk keluar dari form.
10 : option button ‘Biner’, berfungsi untuk menampilkan hasil proses dalam biner.
11 : option button ‘Heksa’, berfungsi untuk menampilkan hasil proses dalam
       heksadesimal.

3.2.11    Form Rotasi Kiri
Gambar 3.12 Rancangan Form Proses Inverse Perkalian

Keterangan :
1   : title bar, berisi tulisan ‘Pembelajaran Proses Rotasi Kiri’.
2   : tombol ‘Minimize’, berfungsi untuk me-minimize form.
3   : tombol ‘Maximize’, berfungsi untuk memperbesar form.
4   : tombol ‘Close’, berfungsi untuk menutup form.
5   : tombol ‘Proses’, berfungsi untuk memulai proses.
6   : tombol ‘Keluar’, berfungsi untuk menutup form.
7   : textbox ‘Nilai Bit’ berisi nilai dari bit yang akan dan telah dilakukan proses.
8   : textbox ‘Rotasi’ berisi jumlah bit yang akan dirotasikan.
9   : updown untuk mengontrol isi dari textbox (8).
10 : daerah tampilan proses animasi.

3.2.12    Form About
Gambar 3.13 Rancangan Form About

Keterangan :
1   : title bar, berisi tulisan ‘IDEA - Cryptography’.
2   : tombol ‘Close’, berfungsi untuk menutup form.
3   : keterangan bertuliskan ‘Sejarah Singkat Kriptografi’.
4   : keterangan singkat mengenai sejarah kriptografi.
5   : gambar icon dari perangkat lunak.
6   : data identitas pembuat perangkat lunak.
7   : tombol ‘OK’ untuk keluar dari form.
BAB IV

ALGORITMA DAN IMPLEMENTASI


4.1       Algoritma

Algoritma perancangan perangkat lunak pembelajaran kriptografi metode IDEA dibagi menjadi 3 bagian yaitu :
  1. Algoritma Pembentukan Kunci Enkripsi dan Dekripsi.
  2. Algoritma Proses Enkripsi.
  3. Algoritma Proses Dekripsi.
  4. Algoritma Fungsi Pendukung dalam Proses  Pembentukan Kunci, Enkripsi dan Dekripsi.

4.1.1        Algoritma Pembentukan Kunci Enkripsi dan Dekripsi
    'Panjang kunci harus 16 karakter
    If Len(pstrKey) <> 16 Then
        MsgBox "Panjang kunci harus 16 karakter !", vbCritical
        Exit Sub
    End If
    'Biner kunci ß 128 bit
    strKunci ß ""
    For ß 1 To len(pstrKey)
        strKunci ß strKunci & FDec2Biner(Asc(Mid(pstrKey, i, 1)), 8)
    Next i
    '---- Pembentukan Key Enkripsi ----
    nRound ß 1: nKey ß 0
    For i ß 1 To 7
        'Kelompokkan ke 8 buah subkey (pjg 16 bit)
        For j ß 1 To 128 Step 16
            'Tambah nKey
            nKey ß nKey + 1
            If nKey = 7 Then
                'Tambah Round
                nRound ß nRound + 1
               
                'Reset nilai nKey
                nKey ß 1
            End If
           
            If Val(Format(nRound) & Format(nKey)) < 95 Then
                'Kunci per round
                K(nRound, nKey) ß Mid(strKunci, j, 16)
            End If
        Next j
       
        'Untuk putaran terakhir tidak usah Left Shift
        If i <> 7 Then
            strKunci ß FRotateLeftShift(strKunci, 25)
        End If
    Next i
   
    '---- Pembentukan Key Dekripsi ----
    For i ß 1 To 9
        For j ß 1 To 6
            If (I ß 1) Or (i ß 9) Then
                'Putaran awal & terakhir
                If (j ß 1) Or (j ß 4) Then
                    KD(i, j) ß FDec2Biner(Inverse(FBiner2Dec(K(10 –
  i, j))), 16)
                ElseIf (j ß 2) Or (j ß 3) Then
                    KD(i, j) ß FMinus(K(10 - i, j))
                Else
                    'Putaran terakhir -> tidak ada key 5 & 6
                    If i < 9 Then
                        KD(i, j) ß K(10 - i - 1, j)
                    End If
                End If
            Else
                'Putaran selanjutnya
                If (j ß 1) Or (j ß 4) Then
                    KD(i, j) ß FDec2Biner(Inverse(FBiner2Dec(K(10 –
  i, j))), 16)
                ElseIf (j ß 2) Or (j ß 3) Then
                    KD(i, j) ß FMinus(K(10 - i, IIf(j ß 2, 3, 2)))
                Else
                    KD(i, j) ß K(10 - i - 1, j)
                End If
            End If
        Next j
    Next i
   
    'Array kunci berdimensi 9, 6
    ReDim pArrKeyEncrypt(9, 6)
    ReDim pArrKeyDecrypt(9, 6)
    'Hasil pembentukan kunci
    pArrKeyEncrypt ß K
    pArrKeyDecrypt ß KD
End Sub

4.1.2        Algoritma Proses Enkripsi
    'Panjang text harus 8 karakter
    If Len(pstrEncryptText) <> 8 Then
        MsgBox "Panjang text harus 8 karakter !", vbCritical
        Exit Function
    End If
   
    'Biner text - 64 bit
    strBinerText ß ""
    For i ß 1 To Len(pstrEncryptText)
        strBinerText ß strBinerText &
    FDec2Biner(Asc(Mid(pstrEncryptText, i, 1)), 8)
    Next i
   
    'Kelompokkan ke 4 sub blok X
    j ß 0
    For i ß 1 To 64 Step 16
        j ß j + 1
        X(j) ß Mid(strBinerText, i, 16)
    Next i  
    'Lakukan sebanyak 8 putaran
    For i ß 1 To 8
       
        'Simpan hasil X
        X1(i) ß X(1)
        X2(i) ß X(2)
        X3(i) ß X(3)
        X4(i) ß X(4)
       
        'Algo-1 -> Hasil = (X1 * K1) mod ((2^16) + 1)
        nTmp1 ß FBiner2Dec(X(1)) * FBiner2Dec(K(i, 1))
        Hasil(1) ß FDec2Biner(FMod(nTmp1, (2 ^ 16) + 1), 16)
       
        'Algo-2 -> Hasil = (X2 + K2) mod 2^16
        nTmp1 ß FBiner2Dec(X(2)) + FBiner2Dec(K(i, 2))
        Hasil(2) ß FDec2Biner(FMod(nTmp1, 2 ^ 16), 16)
       
        'Algo-3 -> Hasil = (X3 + K3) mod 2^16
        nTmp1 ß FBiner2Dec(X(3)) + FBiner2Dec(K(i, 3))
        Hasil(3) ß FDec2Biner(FMod(nTmp1, 2 ^ 16), 16)
       
        'Algo-4 -> Hasil = (X4 * K4) mod ((2^16) + 1)
        nTmp1 ß FBiner2Dec(X(4)) * FBiner2Dec(K(i, 4))
        Hasil(4) ß FDec2Biner(FMod(nTmp1, (2 ^ 16) + 1), 16)
       
        'Algo-5 -> Hasil = Hasil(1) XOR Hasil(3)
        Hasil(5) ß FXORBiner(Hasil(1), Hasil(3), 16)
       
        'Algo-6 -> Hasil = Hasil(2) XOR Hasil(4)
        Hasil(6) ß FXORBiner(Hasil(2), Hasil(4), 16)
       
        'Algo-7 -> Hasil = (Hasil(5) * K5) mod ((2^16) + 1)
        nTmp1 ß FBiner2Dec(Hasil(5)) * FBiner2Dec(K(i, 5))
        Hasil(7) ß FDec2Biner(FMod(nTmp1, (2 ^ 16) + 1), 16)
       
        'Algo-8 -> Hasil = (Hasil(6) + Hasil(7)) mod 2^16
        nTmp1 ß FBiner2Dec(Hasil(6)) + FBiner2Dec(Hasil(7))
        Hasil(8) ß FDec2Biner(FMod(nTmp1, 2 ^ 16), 16)
       
        'Algo-9 -> Hasil = (Hasil(8) * K6) mod ((2^16) + 1)
        nTmp1 ß FBiner2Dec(Hasil(8)) * FBiner2Dec(K(i, 6))
        Hasil(9) ß FDec2Biner(FMod(nTmp1, (2 ^ 16) + 1), 16)
       
        'Algo-10 -> Hasil = (Hasil(7) * Hasil(9)) mod (2^16)
        nTmp1 ß FBiner2Dec(Hasil(7)) + FBiner2Dec(Hasil(9))
        Hasil(10) ß FDec2Biner(FMod(nTmp1, 2 ^ 16), 16)
       
        'Algo-11 -> Hasil = Hasil(1) XOR Hasil(9)
        Hasil(11) ß FXORBiner(Hasil(1), Hasil(9), 16)
       
        'Algo-12 -> Hasil = Hasil(3) XOR Hasil(9)
        Hasil(12) ß FXORBiner(Hasil(3), Hasil(9), 16)
       
        'Algo-13 -> Hasil = Hasil(2) XOR Hasil(10)
        Hasil(13) ß FXORBiner(Hasil(2), Hasil(10), 16)
       
        'Algo-14 -> Hasil = Hasil(4) XOR Hasil(10)
        Hasil(14) ß FXORBiner(Hasil(4), Hasil(10), 16)
       
        'Hasil
        X(1) ß Hasil(11)
        If i < 8 Then
            'Swap
            X(2) ß Hasil(12)
            X(3) ß Hasil(13)
        Else
            'No Swap
            X(2) ß Hasil(13)
            X(3) ß Hasil(12)
        End If
        X(4) ß Hasil(14)
    Next i
   
    'Simpan hasil X
    X1(9) ß Hasil(11)
    X2(9) ß Hasil(13)
    X3(9) ß Hasil(12)
    X4(9) ß Hasil(14)
   
    '---- TRANSFORMASI OUTPUT ----
   
    'Algo-1 -> Hasil = (X1 * K1) mod ((2^16) + 1)
    nTmp1 ß FBiner2Dec(X(1)) * FBiner2Dec(K(9, 1))
    Hasil(1) ß FDec2Biner(FMod(nTmp1, (2 ^ 16) + 1), 16)
   
    'Algo-2 -> Hasil = (X2 + K2) mod 2^16
    nTmp1 ß FBiner2Dec(X(2)) + FBiner2Dec(K(9, 2))
    Hasil(2) ß FDec2Biner(FMod(nTmp1, 2 ^ 16), 16)
   
    'Algo-3 -> Hasil = (X3 + K3) mod 2^16
    nTmp1 ß FBiner2Dec(X(3)) + FBiner2Dec(K(9, 3))
    Hasil(3) ß FDec2Biner(FMod(nTmp1, 2 ^ 16), 16)
   
    'Algo-4 -> Hasil = (X4 * K4) mod ((2^16) + 1)
    nTmp1 ß FBiner2Dec(X(4)) * FBiner2Dec(K(9, 4))
    Hasil(4) ß FDec2Biner(FMod(nTmp1, (2 ^ 16) + 1), 16)
   
    'Simpan hasil X
    X1(10) ß Hasil(1)
    X2(10) ß Hasil(2)
    X3(10) ß Hasil(3)
    X4(10) ß Hasil(4)
   
    '---- KONVERSI KE ASCII ----
    strHasil = ""
    cTmp1 ß Hasil(1) & Hasil(2) & Hasil(3) & Hasil(4)
    For i ß 1 To 64 Step 8
        strHasil ß strHasil & Chr(FBiner2Dec(Mid(cTmp1, i, 8)))
    Next i
   
    'Hasil enkripsi
    IDEAEncryption ß strHasil
End Function

4.1.3        Algoritma Proses Dekripsi   
    'Panjang text harus 8 karakter
    If Len(pstrDecryptText) <> 8 Then
        MsgBox "Panjang text harus 8 karakter !", vbCritical
        Exit Function
    End If
   
    'Biner text - 64 bit
    strBinerText ß ""
    For i ß 1 To Len(pstrDecryptText)
        strBinerText ß strBinerText &
    FDec2Biner(Asc(Mid(pstrDecryptText, i, 1)), 8)
    Next i
    'Kelompokkan ke 4 sub blok X
    j ß 0
    For i ß 1 To 64 Step 16
        j ß j + 1
        X(j) ß Mid(strBinerText, i, 16)
    Next i
   
    'Lakukan sebanyak 8 putaran
    For i ß 1 To 8
       
        'Simpan hasil X
        X1(i) ß X(1)
        X2(i) ßX(2)
        X3(i) ß X(3)
        X4(i) ß X(4)
       
        '---- K1 & K4 --- dipangkat -1 (* ganti jadi /)
       
        'Algo-1 -> Hasil = (X1 * K1) mod ((2^16) + 1)
        nTmp1 ß FBiner2Dec(X(1)) * FBiner2Dec(K(i, 1))
        Hasil(1) ß FDec2Biner(FMod(nTmp1, (2 ^ 16) + 1), 16)
       
        'Algo-2 -> Hasil = (X2 + K2) mod 2^16
        nTmp1 ß FBiner2Dec(X(2)) + FBiner2Dec(K(i, 2))
        Hasil(2) ß FDec2Biner(FMod(nTmp1, 2 ^ 16), 16)
       
        'Algo-3 -> Hasil = (X3 + K3) mod 2^16
        nTmp1 ß FBiner2Dec(X(3)) + FBiner2Dec(K(i, 3))
        Hasil(3) ß FDec2Biner(FMod(nTmp1, 2 ^ 16), 16)
       
        'Algo-4 -> Hasil = (X4 * K4) mod ((2^16) + 1)
        nTmp1 ß FBiner2Dec(X(4)) * FBiner2Dec(K(i, 4))
        Hasil(4) ß FDec2Biner(FMod(nTmp1, (2 ^ 16) + 1), 16)
       
        'Algo-5 -> Hasil = Hasil(1) XOR Hasil(3)
        Hasil(5) ß FXORBiner(Hasil(1), Hasil(3), 16)
       
        'Algo-6 -> Hasil = Hasil(2) XOR Hasil(4)
        Hasil(6) ß FXORBiner(Hasil(2), Hasil(4), 16)
       
        'Algo-7 -> Hasil = (Hasil(5) * K5) mod ((2^16) + 1)
        nTmp1 ß FBiner2Dec(Hasil(5)) * FBiner2Dec(K(i, 5))
        Hasil(7) ß FDec2Biner(FMod(nTmp1, (2 ^ 16) + 1), 16)
       
        'Algo-8 -> Hasil = (Hasil(6) + Hasil(7)) mod 2^16
        nTmp1 ß FBiner2Dec(Hasil(6)) + FBiner2Dec(Hasil(7))
        Hasil(8) ß FDec2Biner(FMod(nTmp1, 2 ^ 16), 16)
       
        'Algo-9 -> Hasil = (Hasil(8) * K6) mod ((2^16) + 1)
        nTmp1 ß FBiner2Dec(Hasil(8)) * FBiner2Dec(K(i, 6))
        Hasil(9) ß FDec2Biner(FMod(nTmp1, (2 ^ 16) + 1), 16)
       
        'Algo-10 -> Hasil = (Hasil(7) * Hasil(9)) mod (2^16)
        nTmp1 ß FBiner2Dec(Hasil(7)) + FBiner2Dec(Hasil(9))
        Hasil(10) ß FDec2Biner(FMod(nTmp1, 2 ^ 16), 16)
       
        'Algo-11 -> Hasil = Hasil(1) XOR Hasil(9)
        Hasil(11) ß FXORBiner(Hasil(1), Hasil(9), 16)
       
        'Algo-12 -> Hasil = Hasil(3) XOR Hasil(9)
        Hasil(12) ß FXORBiner(Hasil(3), Hasil(9), 16)
       
        'Algo-13 -> Hasil = Hasil(2) XOR Hasil(10)
        Hasil(13) ß FXORBiner(Hasil(2), Hasil(10), 16)
       
        'Algo-14 -> Hasil = Hasil(4) XOR Hasil(10)
        Hasil(14) ß FXORBiner(Hasil(4), Hasil(10), 16)
       
        'Hasil
        X(1) ß Hasil(11)
        If i < 8 Then
            'Swap
            X(2) ß Hasil(12)
            X(3) ß Hasil(13)
        Else
            'No Swap
            X(2) ß Hasil(13)
            X(3) ß Hasil(12)
        End If
        X(4) ß Hasil(14)
    Next i
   
    'Simpan hasil X
    X1(9) ß Hasil(11)
    X2(9) ß Hasil(13)
    X3(9) ß Hasil(12)
    X4(9) ß Hasil(14)
   
    '---- TRANSFORMASI OUTPUT ----
   
    'Algo-1 -> Hasil = (X1 * K1) mod ((2^16) + 1)
    nTmp1 ß FBiner2Dec(X(1)) * FBiner2Dec(K(9, 1))
    Hasil(1) ß FDec2Biner(FMod(nTmp1, (2 ^ 16) + 1), 16)
   
    'Algo-2 -> Hasil = (X2 + K2) mod 2^16
    nTmp1 ß FBiner2Dec(X(2)) + FBiner2Dec(K(9, 2))
    Hasil(2) ß FDec2Biner(FMod(nTmp1, 2 ^ 16), 16)
   
    'Algo-3 -> Hasil = (X3 + K3) mod 2^16
    nTmp1 ß FBiner2Dec(X(3)) + FBiner2Dec(K(9, 3))
    Hasil(3) ß FDec2Biner(FMod(nTmp1, 2 ^ 16), 16)
    'Algo-4 -> Hasil = (X4 * K4) mod ((2^16) + 1)
    nTmp1 ß FBiner2Dec(X(4)) * FBiner2Dec(K(9, 4))
    Hasil(4) ß FDec2Biner(FMod(nTmp1, (2 ^ 16) + 1), 16)
   
    'Simpan hasil X
    X1(10) ß Hasil(1)
    X2(10) ß Hasil(2)
    X3(10) ß Hasil(3)
    X4(10) ß Hasil(4)
   
    '---- KONVERSI KE ASCII ----
    strHasil ß ""
    cTmp1 ß Hasil(1) & Hasil(2) & Hasil(3) & Hasil(4)
    For i ß 1 To 64 Step 8
        strHasil ß strHasil & Chr(FBiner2Dec(Mid(cTmp1, i, 8)))
    Next i
   
    'Hasil dekripsi
    IDEADecryption ß strHasil
End Function

4.1.4        Algoritma Fungsi Pendukung dalam Proses Pembentukan Kunci, Enkripsi dan Dekripsi
Fungsi-fungsi pendukung yang digunakan dalam proses pembentukan kunci, enkripsi dan dekripsi dalam metode IDEA adalah sebagai berikut :
1.      Fungsi konversi dari biner ke desimal.
'Pengubahan biner menjadi desimal
Fungsi FBiner2Dec(pcText As String) As Double
    nHasil ß 0
    'Konversi dari belakang
    For nLoop ß Len(pcText) To 1 Step -1
        If Mid(pcText, nLoop, 1) ß "1" Then
            nHasil ß nHasil + (2 ^ (Len(pcText) - nLoop))
        End If
    Next nLoop
    'Angka Desimal
    FBiner2Dec ß nHasil
End Fungsi

2.      Fungsi konversi dari desimal ke biner.
'Pengubahan desimal menjadi biner
Fungsi FDec2Biner(pnAngka As Double, Optional pnLength As Double = -1) As String
    nHasilBagi ß pnAngka
    While nHasilBagi <> 0
        nSisaBagi ß FMod(nHasilBagi, 2)
        cBiner1 ß cBiner1 & Format(nSisaBagi)
        nHasilBagi ß FDiv(nHasilBagi, 2)
    Wend
    If cBiner1 ß "" Then cBiner1 = "0"
   
    'Ambil Terbalik
    For nLoop ß Len(cBiner1) To 1 Step -1
        cBiner2 ß cBiner2 & Mid(cBiner1, nLoop, 1)
    Next nLoop
   
    If pnLength ß -1 Then
        'Angka Biner
        FDec2Biner ß cBiner2
    Else
        If Len(cBiner2) <= pnLength Then
            'Angka Biner Kurang dari pnLength
            FDec2Biner ß String(pnLength - Len(cBiner2), "0") &
cBiner2
        Else
            'Angka Biner Melebihi pnLength
            FDec2Biner ß Left(cBiner2, pnLength)
        End If
   End If
End Fungsi

3.      Fungsi konversi dari biner ke heksadesimal.
'Biner ke heksa
Fungsi FBiner2Hex(pcText As String) As String
   
    For i ß 1 To Len(pcText) Step 4
        FBiner2Hex ß FBiner2Hex & Hex(FBiner2Dec(Mid(pcText, i, 4)))
    Next i
End Fungsi

4.      Fungsi konversi dari heksadesimal ke desimal.
'Heksa ke desimal
Function FHex2Dec(pcText As String) As Double
    For i = 1 To Len(pcText)
        Select Case Mid(pcText, i, 1)
            Case "1" To "9": FHex2Dec = FHex2Dec + CDec(Mid(pcText,
i, 1)) * 16 ^ (Len(pcText) - i)
            Case "A", "a": FHex2Dec = FHex2Dec + 10 * 16 ^
(Len(pcText) - i)
            Case "B", "b": FHex2Dec = FHex2Dec + 11 * 16 ^
(Len(pcText) - i)
            Case "C", "c": FHex2Dec = FHex2Dec + 12 * 16 ^
(Len(pcText) - i)
            Case "D", "d": FHex2Dec = FHex2Dec + 13 * 16 ^
(Len(pcText) - i)
            Case "E", "e": FHex2Dec = FHex2Dec + 14 * 16 ^
(Len(pcText) - i)
            Case "F", "f": FHex2Dec = FHex2Dec + 15 * 16 ^
(Len(pcText) - i)
        End Select
    Next i
End Function

5.      Fungsi Rotate Left
Fungsi FRotateLeft(pcText As String, pnRotate As Long) As String
   
    cHasil ß pcText
    For nLoop ß 1 To pnRotate
        cHasil ß Right(cHasil, Len(cHasil) - 1) & Left(cHasil, 1)
    Next nLoop
   
    FRotateLeft ß cHasil
End Fungsi

6.      Fungsi XOR
Fungsi FXORBiner(pcText1 As String, pcText2 As String, Optional pnByte As Long = 0) As String
    'Banyak byte
    nByte1 ß pnByte
    If nByte1 ß 0 Then
        'Ambil yang terpanjang
        If Len(pcText1) > Len(pcText2) Then
            nByte1 ß Len(pcText1)
        Else
            nByte1 ß Len(pcText2)
        End If
    End If
   
    cText1 ß FormatStr(pcText1, "0", nByte1)    'Text-1
    cText2 ß FormatStr(pcText2, "0", nByte1)    'Text-2
    For nF ß 1 To nByte1
        cXOR ß cXOR & IIf(Mid(cText1, nF, 1) = Mid(cText2, nF, 1),
   "0", "1")
    Next nF
   
    'Hasil XOR
    cHasilXOR = FormatStr(cXOR, "0", pnByte)
    FXORBiner = cHasilXOR
End Fungsi

7.      Fungsi Inverse Penjumlahan
'FMinus
Fungsi FMinus(pcBiner As String) As String
    FMinus ß FDec2Biner(65536 - FBiner2Dec(pcBiner), 16)
End Fungsi

8.      Fungsi Inverse Perkalian
'Inverse functions
Fungsi Inverse(A As Double) As Double
    n ß 65537
    G0 ß n
    G1 ß A
    V0 ß 0
    V1 ß 1
    While (G1 <> 0)
       Y ß Int(G0 / G1)
       G2 ß G0 - Y * G1
       G0 ß G1
       G1 ß G2
       V2 ß V0 - Y * V1
       V0 ß V1
       V1 ß V2
    Wend
    If (V0 >= 0) Then
       Inverse ß V0
    Else
       Inverse ß V0 + n
    End If
End Fungsi



4.2              Implementasi Sistem
Implementasi sistem program ini mencakup spesifikasi kebutuhan perangkat keras (hardware) dan spesifikasi perangkat lunak (software).

4.2.1        Spesifikasi Perangkat Keras dan Perangkat Lunak
Program ini direkomendasikan untuk dijalankan dengan menggunakan perangkat keras (hardware) yang mempunyai spesifikasi berikut :
1.            Prosesor Intel Pentium IV 1,6 Ghz.
2.            Memory 128 MB.
3.            Harddisk 10 GB.
4.            VGA card 64 MB.
5.            Monitor dengan resolusi 800 ´ 600 pixel.
6.            Keyboard dan Mouse.
Adapun perangkat lunak (software) yang digunakan untuk menjalankan aplikasi ini adalah lingkungan sistem operasi MS-Windows 98 atau MS-Windows NT/2000/XP.

4.2.2        Cara Menggunakan Perangkat Lunak
Perangkat lunak pembelajaran metode kriptografi IDEA dapat dijalankan dengan cara sebagai berikut :
1.      Untuk melakukan proses pembentukan kunci, lakukan langkah-langkah berikut ini :
a.       Klik menu ‘Proses’, pilih sub menu ‘Pembentukan Kunci’ seperti terlihat pada gambar berikut ini :
BAB4-1
Gambar 4.1 Langkah-1 untuk proses pembentukan kunci
b.      Setelah itu, akan muncul form ‘Input Data untuk Proses Pembentukan Kunci’. Ketikkan kunci yang diinginkan pada textbox ‘Kunci’.
Gambar 4.2 Langkah-2 untuk proses pembentukan kunci
c.       Pilihlah bentuk tampilan hasil yang diinginkan. Setelah itu, klik tombol ‘Proses’, maka akan ditampilkan form ‘Proses Pembentukan Kunci’ berikut ini :
Gambar 4.3 Langkah-3 untuk proses pembentukan kunci
d.      Jika ingin menampilkan kunci dekripsi, maka pilihlah checkbox ‘Kunci Dekripsi’. Jika ingin menampilkan proses inverse-nya maka pilihlah checkbox ‘Tampilkan proses Inverse’. Kliklah tombol ‘Mulai’ untuk memulai proses pembentukan kunci. Hasil proses ditunjukkan oleh gambar berikut :
Gambar 4.4 Langkah-4 untuk proses pembentukan kunci
e.       Jika ingin melanjutkan ke proses untuk putaran selanjutnya kliklah tombol ‘Lanjut’, maka proses akan dilanjutkan. Jika proses telah selesai, maka tombol ‘Lanjut’ tidak dapat diakses.
Gambar 4.5 Langkah-5 untuk proses pembentukan kunci
2.      Untuk melakukan proses enkripsi, lakukan langkah-langkah berikut ini :
a.       Klik menu ‘Proses’, pilih sub menu ‘Enkripsi’ seperti terlihat pada gambar berikut ini :
BAB4-2
Gambar 4.6 Langkah-1 untuk proses enkripsi
b.      Setelah itu, akan muncul form ‘Input Data untuk Proses Enkripsi’. Ketikkan plaintext yang diinginkan pada textboxPlaintext’ dan kunci pada textbox ‘Kunci Enkripsi’.
Gambar 4.7 Langkah-2 untuk proses enkripsi
c.       Pilihlah bentuk tampilan hasil yang diinginkan. Setelah itu, klik tombol ‘Proses’, maka akan ditampilkan form ‘Proses Enkripsi’ berikut ini :
Gambar 4.8 Langkah-3 untuk proses enkripsi
d.      Kliklah tombol ‘Mulai’ untuk memulai proses enkripsi. Hasil proses ditunjukkan oleh gambar berikut :
Gambar 4.9 Langkah-4 untuk proses enkripsi
e.       Jika ingin melanjutkan ke proses untuk putaran selanjutnya kliklah tombol ‘Lanjut’, maka proses akan dilanjutkan. Jika proses telah selesai, maka tombol ‘Lanjut’ tidak dapat diakses.
Gambar 4.10 Langkah-5 untuk proses enkripsi
3.      Untuk melakukan proses dekripsi, lakukan langkah-langkah berikut ini :
a.       Klik menu ‘Proses’, pilih sub menu ‘Dekripsi’ seperti terlihat pada gambar berikut ini :
BAB4-3
Gambar 4.11 Langkah-1 untuk proses dekripsi
b.      Setelah itu, akan muncul form ‘Input Data untuk Proses Dekripsi’. Ketikkan plaintext yang diinginkan pada textboxCiphertext’ dan kunci pada textbox ‘Kunci Dekripsi’.
Gambar 4.12 Langkah-2 untuk proses dekripsi
c.       Pilihlah bentuk tampilan hasil yang diinginkan. Setelah itu, klik tombol ‘Proses’, maka akan ditampilkan form ‘Proses Dekripsi’ berikut ini :
Gambar 4.13 Langkah-3 untuk proses dekripsi
d.      Kliklah tombol ‘Mulai’ untuk memulai proses dekripsi. Hasil proses ditunjukkan oleh gambar berikut :
Gambar 4.14 Langkah-4 untuk proses dekripsi
e.       Jika ingin melanjutkan ke proses untuk putaran selanjutnya kliklah tombol ‘Lanjut’, maka proses akan dilanjutkan. Jika proses telah selesai, maka tombol ‘Lanjut’ tidak dapat diakses.
Gambar 4.15 Langkah-5 untuk proses dekripsi
4.      Untuk melakukan proses inverse kunci penjumlahan, lakukan langkah-langkah berikut ini :
a.       Klik menu ‘Proses’, pilih sub menu ‘Inverse Kunci’ >> ‘Penjumlahan’ seperti terlihat pada gambar berikut ini :
BAB4-4
Gambar 4.16 Langkah-1 untuk proses inverse kunci penjumlahan
b.      Setelah itu, akan muncul form ‘Inverse Kunci Penjumlahan’ seperti terlihat pada gambar berikut ini :
Gambar 4.17 Langkah-2 untuk proses inverse kunci penjumlahan
c.       Pilihlah bentuk tampilan output yang diinginkan. Klik tombol ‘Proses’ untuk memulai proses inverse kunci penjumlahan dan bit output akan ditampilkan pada textbox.
Gambar 4.18 Langkah-3 untuk proses inverse kunci penjumlahan
5.      Untuk melakukan proses inverse kunci perkalian, lakukan langkah-langkah berikut ini :
a.       Klik menu ‘Proses’, pilih sub menu ‘Inverse Kunci’ >> ‘Perkalian’ seperti terlihat pada gambar berikut ini :
BABA4-5
Gambar 4.19 Langkah-1 untuk proses inverse kunci perkalian
b.      Setelah itu, akan muncul form ‘Inverse Kunci Perkalian’, seperti terlihat pada gambar berikut ini :
Gambar 4.20 Langkah-2 untuk proses inverse kunci perkalian
c.       Klik tombol ‘Proses’ untuk memulai proses inverse kunci perkalian dan bit output akan ditampilkan pada textbox.
Gambar 4.21 Langkah-3 untuk proses inverse kunci perkalian
6.      Untuk melakukan proses rotasi kiri, lakukan langkah-langkah berikut ini :
a.       Klik menu ‘Proses’, pilih sub menu ‘Rotasi Kiri’ seperti terlihat pada gambar berikut ini :
BABA4-6
Gambar 4.22 Langkah-1 untuk proses rotasi kiri
b.      Setelah itu, akan muncul form ‘Rotasi Kiri’, seperti terlihat pada gambar berikut ini :
Gambar 4.23 Langkah-2 untuk proses rotasi kiri
c.       Ketikkan nilai bit pada textbox dan besar bit yang akan dirotasikan. Klik tombol ‘Proses’ untuk memulai proses rotasi kiri dan bit output akan ditampilkan pada textbox.
Gambar 4.24 Langkah-3 untuk proses rotasi kiri
4.2.3        Pengujian Program
Sebagai contoh, penulis meng-input data sebagai berikut.
  1. Kunci : ‘KUNCI KRIPTO 123’.
  2. Proses pembentukan kunci dalam bentuk biner, didapat :
Gambar 4.25 Proses pembentukan kunci enkripsi dan dekripsi
untuk kunci = ‘KUNCI KRIPTO 123’
Hasil Eksekusi Program :

-----------------------------
  KUNCI ENKRIPSI
-----------------------------

*************
 PUTARAN - 1
*************
INPUT KUNCI :
10000110100100100100000010010110101001001001001010100000101010001001111001000000011000100110010001100110100101101010101010011100

Pecah menjadi 8 kelompok :
KE1 (Putaran 1) = 1000011010010010
KE2 (Putaran 1) = 0100000010010110
KE3 (Putaran 1) = 1010010010010010
KE4 (Putaran 1) = 1010000010101000
KE5 (Putaran 1) = 1001111001000000
KE6 (Putaran 1) = 0110001001100100
KE1 (Putaran 2) = 0110011010010110
KE2 (Putaran 2) = 1010101010011100

*************
 PUTARAN - 2
*************
Left Shift
(00101101010010010010010101000001010100010011110010000000110001001100100011001101001011010101010100111001000011010010010010000001, 25) =
10000010101000100111100100000001100010011001000110011010010110101010101001110010000110100100100100000010010110101001001001001010

Pecah menjadi 8 kelompok :
KE3 (Putaran 2) = 1000001010100010
KE4 (Putaran 2) = 0111100100000001
KE5 (Putaran 2) = 1000100110010001
KE6 (Putaran 2) = 1001101001011010
KE1 (Putaran 3) = 1010101001110010
KE2 (Putaran 3) = 0001101001001001
KE3 (Putaran 3) = 0000001001011010
KE4 (Putaran 3) = 1001001001001010

*************
 PUTARAN - 3
*************
Left Shift
(00000011000100110010001100110100101101010101010011100100001101001001001000000100101101010010010010010101000001010100010011110010, 25) = 01101001011010101010100111001000011010010010010000001001011010100100100100101010000010101000100111100100000001100010011001000110
Pecah menjadi 8 kelompok :
KE5 (Putaran 3) = 0110100101101010
KE6 (Putaran 3) = 1010100111001000
KE1 (Putaran 4) = 0110100100100100
KE2 (Putaran 4) = 0000100101101010
KE3 (Putaran 4) = 0100100100101010
KE4 (Putaran 4) = 0000101010001001
KE5 (Putaran 4) = 1110010000000110
KE6 (Putaran 4) = 0010011001000110
*************
 PUTARAN - 4
*************
Left Shift
(10010000110100100100100000010010110101001001001001010100000101010001001111001000000011000100110010001100110100101101010101010011, 25) = 00100101101010010010010010101000001010100010011110010000000110001001100100011001101001011010101010100111001000011010010010010000
Pecah menjadi 8 kelompok :
KE1 (Putaran 5) = 0010010110101001
KE2 (Putaran 5) = 0010010010101000
KE3 (Putaran 5) = 0010101000100111
KE4 (Putaran 5) = 1001000000011000
KE5 (Putaran 5) = 1001100100011001
KE6 (Putaran 5) = 1010010110101010
KE1 (Putaran 6) = 1010011100100001
KE2 (Putaran 6) = 1010010010010000

*************
 PUTARAN - 5
*************
Left Shift
(01010000010101000100111100100000001100010011001000110011010010110101010101001110010000110100100100100000010010110101001001001001, 25) = 01000000011000100110010001100110100101101010101010011100100001101001001001000000100101101010010010010010101000001010100010011110

Pecah menjadi 8 kelompok :
KE3 (Putaran 6) = 0100000001100010
KE4 (Putaran 6) = 0110010001100110
KE5 (Putaran 6) = 1001011010101010
KE6 (Putaran 6) = 1001110010000110
KE1 (Putaran 7) = 1001001001000000
KE2 (Putaran 7) = 1001011010100100
KE3 (Putaran 7) = 1001001010100000
KE4 (Putaran 7) = 1010100010011110

*************
 PUTARAN - 6
*************
Left Shift
(11001101001011010101010100111001000011010010010010000001001011010100100100100101010000010101000100111100100000001100010011001000, 25) = 01110010000110100100100100000010010110101001001001001010100000101010001001111001000000011000100110010001100110100101101010101010

Pecah menjadi 8 kelompok :
KE5 (Putaran 7) = 0111001000011010
KE6 (Putaran 7) = 0100100100000010
KE1 (Putaran 8) = 0101101010010010
KE2 (Putaran 8) = 0100101010000010
KE3 (Putaran 8) = 1010001001111001
KE4 (Putaran 8) = 0000000110001001
KE5 (Putaran 8) = 1001000110011010
KE6 (Putaran 8) = 0101101010101010

*************
 PUTARAN - 7
*************
Left Shift
(00000100101101010010010010010101000001010100010011110010000000110001001100100011001101001011010101010100111001000011010010010010, 25) = 00101010000010101000100111100100000001100010011001000110011010010110101010101001110010000110100100100100000010010110101001001001

Pecah menjadi 8 kelompok (4 kelompok terakhir tidak digunakan) :
KE1 (Transformasi Output) = 0010101000001010
KE2 (Transformasi Output) = 1000100111100100
KE3 (Transformasi Output) = 0000011000100110
KE4 (Transformasi Output) = 0100011001101001

-----------------------------
  KUNCI DEKRIPSI
-----------------------------

KD1(Putaran 1) = Inverse(KE1-Putaran9) = 0001111100111111
KD2(Putaran 1) = Minus(KE2-Putaran9) = 1011011111101110
KD3(Putaran 1) = Minus(KE3-Putaran9) = 0010101101101110
KD4(Putaran 1) = Inverse(KE4-Putaran9) = 1000000100010001
KD5(Putaran 1) = (KE5-Putaran8) = 1110010000000110
KD6(Putaran 1) = (KE6-Putaran8) = 0010011001000110

KD1(Putaran 2) = Inverse(KE1-Putaran8) = 1100100000100101
KD2(Putaran 2) = Minus(KE3-Putaran8) = 1011011011010110
KD3(Putaran 2) = Minus(KE2-Putaran8) = 1111011010010110
KD4(Putaran 2) = Inverse(KE4-Putaran8) = 0000000011110011
KD5(Putaran 2) = (KE5-Putaran7) = 0110100101101010
KD6(Putaran 2) = (KE6-Putaran7) = 1010100111001000

KD1(Putaran 3) = Inverse(KE1-Putaran7) = 0111110101100001
KD2(Putaran 3) = Minus(KE3-Putaran7) = 0110101011111011
KD3(Putaran 3) = Minus(KE2-Putaran7) = 0100101011011100
KD4(Putaran 3) = Inverse(KE4-Putaran7) = 0001001111111001
KD5(Putaran 3) = (KE5-Putaran6) = 1011010101010100
KD6(Putaran 3) = (KE6-Putaran6) = 1110010000110100

KD1(Putaran 4) = Inverse(KE1-Putaran6) = 0111010011110010
KD2(Putaran 4) = Minus(KE3-Putaran6) = 1111110011101101
KD3(Putaran 4) = Minus(KE2-Putaran6) = 0110110110110110
KD4(Putaran 4) = Inverse(KE4-Putaran6) = 0110010101110001
KD5(Putaran 4) = (KE5-Putaran5) = 1010101001110010
KD6(Putaran 4) = (KE6-Putaran5) = 0001101001001001

KD1(Putaran 5) = Inverse(KE1-Putaran5) = 0010001100101001
KD2(Putaran 5) = Minus(KE3-Putaran5) = 0111011001101111
KD3(Putaran 5) = Minus(KE2-Putaran5) = 1000011011111111
KD4(Putaran 5) = Inverse(KE4-Putaran5) = 0000111111000000
KD5(Putaran 5) = (KE5-Putaran4) = 0011100100001101
KD6(Putaran 5) = (KE6-Putaran4) = 0010010010000001

KD1(Putaran 6) = Inverse(KE1-Putaran4) = 0001010001010011
KD2(Putaran 6) = Minus(KE3-Putaran4) = 0011011100110011
KD3(Putaran 6) = Minus(KE2-Putaran4) = 0111111100111100
KD4(Putaran 6) = Inverse(KE4-Putaran4) = 0001010011100100
KD5(Putaran 6) = (KE5-Putaran3) = 0010110101001001
KD6(Putaran 6) = (KE6-Putaran3) = 0010010101000001

KD1(Putaran 7) = Inverse(KE1-Putaran3) = 0110000010100111
KD2(Putaran 7) = Minus(KE3-Putaran3) = 1001100101101010
KD3(Putaran 7) = Minus(KE2-Putaran3) = 1001110110011100
KD4(Putaran 7) = Inverse(KE4-Putaran3) = 0111010011011111
KD5(Putaran 7) = (KE5-Putaran2) = 1010010010010010
KD6(Putaran 7) = (KE6-Putaran2) = 1010000010101000

KD1(Putaran 8) = Inverse(KE1-Putaran2) = 0000100010000011
KD2(Putaran 8) = Minus(KE3-Putaran2) = 0111100101101110
KD3(Putaran 8) = Minus(KE2-Putaran2) = 1100110111001101
KD4(Putaran 8) = Inverse(KE4-Putaran2) = 0101111110111100
KD5(Putaran 8) = (KE5-Putaran1) = 0100100101010000
KD6(Putaran 8) = (KE6-Putaran1) = 0101010001001111

KD1(Putaran 9) = Inverse(KE1-Putaran1) = 0111111001100111
KD2(Putaran 9) = Minus(KE2-Putaran1) = 1011000110111101
KD3(Putaran 9) = Minus(KE3-Putaran1) = 1011011011100000
KD4(Putaran 9) = Inverse(KE4-Putaran1) = 0111010101101111

Sebagai contoh proses enkripsi dalam bentuk biner, penulis meng-input data sebagai berikut.
  1. Kunci : ‘KUNCI KRIPTO 123’ dan Plain Text : ‘TextAsli’.
  2. Proses enkripsi, didapat :
Gambar 4.26 Proses enkripsi text ‘TextAsli’ dengan kunci
‘KUNCI KRIPTO 123’ putaran ke-1 sampai putaran ke-8
Gambar 4.27 Proses enkripsi text ‘TextAsli’ dengan kunci
‘KUNCI KRIPTO 123’ putaran transformasi output

Hasil Eksekusi :

*************
 PUTARAN - 1
*************
01)  L#1 = (X1 * K1) mod (2^16 + 1) = 0101010001100101 * 0100101101010101 mod (2^16 + 1) = 1000001110110100

02)  L#2 = (X2 + K2) mod 2^16 = 0111100001110100 + 0100111001000011 mod 2^16 = 1100011010110111

03)  L#3 = (X3 + K3) mod 2^16 = 0100000101110011 + 0100100100100000 mod 2^16 = 1000101010010011

04)  L#4 = (X4 * K4) mod (2^16 + 1) = 0110110001101001 * 0100101101010010 mod (2^16 + 1) = 0101110010111101

05)  L#5 = L#1 XOR L#3 = 1000001110110100 XOR 1000101010010011 = 0000100100100111

06)  L#6 = L#2 XOR L#4 = 1100011010110111 XOR 0101110010111101 = 1001101000001010

07)  L#7 = (L#5 * K5) mod (2^16 + 1) = 0000100100100111 * 0100100101010000 mod (2^16 + 1) = 1111100010010010

08)  L#8 = (L#6 + L#7)) mod 2^16 = 1001101000001010 + 1111100010010010 mod 2^16 = 1001001010011100

09)  L#9 = (L#8 * K6) mod (2^16 + 1) = 1001001010011100 * 0101010001001111 mod (2^16 + 1) = 0011110111011100

10)  L#10 = (L#7 + L#9)) mod 2^16 = 1111100010010010 + 0011110111011100 mod 2^16 = 0011011001101110

11)  L#11 = L#1 XOR L#9 = 1000001110110100 XOR 0011110111011100 = 1011111001101000

12)  L#12 = L#3 XOR L#9 = 1000101010010011 XOR 0011110111011100 = 1011011101001111

13)  L#13 = L#2 XOR L#10 = 1100011010110111 XOR 0011011001101110 = 1111000011011001

14)  L#14 = L#4 XOR L#10 = 0101110010111101 XOR 0011011001101110 = 0110101011010011

Untuk putaran berikutnya :
X1 = L#11 = 1011111001101000
X2 = L#12 = 1011011101001111
X3 = L#13 = 1111000011011001
X4 = L#14 = 0110101011010011
*************
 PUTARAN - 2
*************
01)  L#1 = (X1 * K1) mod (2^16 + 1) = 1011111001101000 * 0010000000110001 mod (2^16 + 1) = 0101100111110111

02)  L#2 = (X2 + K2) mod 2^16 = 1011011101001111 + 0011001000110011 mod 2^16 = 1110100110000010

03)  L#3 = (X3 + K3) mod 2^16 = 1111000011011001 + 1000011010010010 mod 2^16 = 0111011101101011

04)  L#4 = (X4 * K4) mod (2^16 + 1) = 0110101011010011 * 0100000010010110 mod (2^16 + 1) = 0011110010101111

05)  L#5 = L#1 XOR L#3 = 0101100111110111 XOR 0111011101101011 = 0010111010011100

06)  L#6 = L#2 XOR L#4 = 1110100110000010 XOR 0011110010101111 = 1101010100101101

07)  L#7 = (L#5 * K5) mod (2^16 + 1) = 0010111010011100 * 1010010010010010 mod (2^16 + 1) = 0110011100000010

08)  L#8 = (L#6 + L#7)) mod 2^16 = 1101010100101101 + 0110011100000010 mod 2^16 = 0011110000101111

09)  L#9 = (L#8 * K6) mod (2^16 + 1) = 0011110000101111 * 1010000010101000 mod (2^16 + 1) = 1011100100010100

10)  L#10 = (L#7 + L#9)) mod 2^16 = 0110011100000010 + 1011100100010100 mod 2^16 = 0010000000010110

11)  L#11 = L#1 XOR L#9 = 0101100111110111 XOR 1011100100010100 = 1110000011100011

12)  L#12 = L#3 XOR L#9 = 0111011101101011 XOR 1011100100010100 = 1100111001111111

13)  L#13 = L#2 XOR L#10 = 1110100110000010 XOR 0010000000010110 = 1100100110010100

14)  L#14 = L#4 XOR L#10 = 0011110010101111 XOR 0010000000010110 = 0001110010111001

Untuk putaran berikutnya :
X1 = L#11 = 1110000011100011
X2 = L#12 = 1100111001111111
X3 = L#13 = 1100100110010100
X4 = L#14 = 0001110010111001


*************
 PUTARAN - 3
*************
01)  L#1 = (X1 * K1) mod (2^16 + 1) = 1110000011100011 * 1001111001000000 mod (2^16 + 1) = 1100011110111101

02)  L#2 = (X2 + K2) mod 2^16 = 1100111001111111 + 0110001001100100 mod 2^16 = 0011000011100011

03)  L#3 = (X3 + K3) mod 2^16 = 1100100110010100 + 0110011010010110 mod 2^16 = 0011000000101010

04)  L#4 = (X4 * K4) mod (2^16 + 1) = 0001110010111001 * 1010101010011100 mod (2^16 + 1) = 0100011110011000

05)  L#5 = L#1 XOR L#3 = 1100011110111101 XOR 0011000000101010 = 1111011110010111

06)  L#6 = L#2 XOR L#4 = 0011000011100011 XOR 0100011110011000 = 0111011101111011

07)  L#7 = (L#5 * K5) mod (2^16 + 1) = 1111011110010111 * 0010110101001001 mod (2^16 + 1) = 1111100101000100

08)  L#8 = (L#6 + L#7)) mod 2^16 = 0111011101111011 + 1111100101000100 mod 2^16 = 0111000010111111

09)  L#9 = (L#8 * K6) mod (2^16 + 1) = 0111000010111111 * 0010010101000001 mod (2^16 + 1) = 0010101100010111

10)  L#10 = (L#7 + L#9)) mod 2^16 = 1111100101000100 + 0010101100010111 mod 2^16 = 0010010001011011

11)  L#11 = L#1 XOR L#9 = 1100011110111101 XOR 0010101100010111 = 1110110010101010

12)  L#12 = L#3 XOR L#9 = 0011000000101010 XOR 0010101100010111 = 0001101100111101

13)  L#13 = L#2 XOR L#10 = 0011000011100011 XOR 0010010001011011 = 0001010010111000

14)  L#14 = L#4 XOR L#10 = 0100011110011000 XOR 0010010001011011 = 0110001111000011

Untuk putaran berikutnya :
X1 = L#11 = 1110110010101010
X2 = L#12 = 0001101100111101
X3 = L#13 = 0001010010111000
X4 = L#14 = 0110001111000011


*************
 PUTARAN - 4
*************
01)  L#1 = (X1 * K1) mod (2^16 + 1) = 1110110010101010 * 0101000100111100 mod (2^16 + 1) = 1111011011000000

02)  L#2 = (X2 + K2) mod 2^16 = 0001101100111101 + 1000000011000100 mod 2^16 = 1001110000000001

03)  L#3 = (X3 + K3) mod 2^16 = 0001010010111000 + 1100100011001101 mod 2^16 = 1101110110000101

04)  L#4 = (X4 * K4) mod (2^16 + 1) = 0110001111000011 * 0010110101010101 mod (2^16 + 1) = 0101010100010101

05)  L#5 = L#1 XOR L#3 = 1111011011000000 XOR 1101110110000101 = 0010101101000101

06)  L#6 = L#2 XOR L#4 = 1001110000000001 XOR 0101010100010101 = 1100100100010100

07)  L#7 = (L#5 * K5) mod (2^16 + 1) = 0010101101000101 * 0011100100001101 mod (2^16 + 1) = 1000010111011101

08)  L#8 = (L#6 + L#7)) mod 2^16 = 1100100100010100 + 1000010111011101 mod 2^16 = 0100111011110001

09)  L#9 = (L#8 * K6) mod (2^16 + 1) = 0100111011110001 * 0010010010000001 mod (2^16 + 1) = 1010000000110000

10)  L#10 = (L#7 + L#9)) mod 2^16 = 1000010111011101 + 1010000000110000 mod 2^16 = 0010011000001101

11)  L#11 = L#1 XOR L#9 = 1111011011000000 XOR 1010000000110000 = 0101011011110000

12)  L#12 = L#3 XOR L#9 = 1101110110000101 XOR 1010000000110000 = 0111110110110101

13)  L#13 = L#2 XOR L#10 = 1001110000000001 XOR 0010011000001101 = 1011101000001100

14)  L#14 = L#4 XOR L#10 = 0101010100010101 XOR 0010011000001101 = 0111001100011000

Untuk putaran berikutnya :
X1 = L#11 = 0101011011110000
X2 = L#12 = 0111110110110101
X3 = L#13 = 1011101000001100
X4 = L#14 = 0111001100011000


*************
 PUTARAN - 5
*************
01)  L#1 = (X1 * K1) mod (2^16 + 1) = 0101011011110000 * 1000001010100010 mod (2^16 + 1) = 1011011110000100

02)  L#2 = (X2 + K2) mod 2^16 = 0111110110110101 + 0111100100000001 mod 2^16 = 1111011010110110

03)  L#3 = (X3 + K3) mod 2^16 = 1011101000001100 + 1000100110010001 mod 2^16 = 0100001110011101

04)  L#4 = (X4 * K4) mod (2^16 + 1) = 0111001100011000 * 1001101001011010 mod (2^16 + 1) = 1010000100001100

05)  L#5 = L#1 XOR L#3 = 1011011110000100 XOR 0100001110011101 = 1111010000011001

06)  L#6 = L#2 XOR L#4 = 1111011010110110 XOR 1010000100001100 = 0101011110111010

07)  L#7 = (L#5 * K5) mod (2^16 + 1) = 1111010000011001 * 1010101001110010 mod (2^16 + 1) = 1010101010011110

08)  L#8 = (L#6 + L#7)) mod 2^16 = 0101011110111010 + 1010101010011110 mod 2^16 = 0000001001011000

09)  L#9 = (L#8 * K6) mod (2^16 + 1) = 0000001001011000 * 0001101001001001 mod (2^16 + 1) = 1001101011011011

10)  L#10 = (L#7 + L#9)) mod 2^16 = 1010101010011110 + 1001101011011011 mod 2^16 = 0100010101111001

11)  L#11 = L#1 XOR L#9 = 1011011110000100 XOR 1001101011011011 = 0010110101011111

12)  L#12 = L#3 XOR L#9 = 0100001110011101 XOR 1001101011011011 = 1101100101000110

13)  L#13 = L#2 XOR L#10 = 1111011010110110 XOR 0100010101111001 = 1011001111001111

14)  L#14 = L#4 XOR L#10 = 1010000100001100 XOR 0100010101111001 = 1110010001110101

Untuk putaran berikutnya :
X1 = L#11 = 0010110101011111
X2 = L#12 = 1101100101000110
X3 = L#13 = 1011001111001111
X4 = L#14 = 1110010001110101


*************
 PUTARAN - 6
*************
01)  L#1 = (X1 * K1) mod (2^16 + 1) = 0010110101011111 * 0000001001011010 mod (2^16 + 1) = 1011000011111100

02)  L#2 = (X2 + K2) mod 2^16 = 1101100101000110 + 1001001001001010 mod 2^16 = 0110101110010000

03)  L#3 = (X3 + K3) mod 2^16 = 1011001111001111 + 0000001100010011 mod 2^16 = 1011011011100010

04)  L#4 = (X4 * K4) mod (2^16 + 1) = 1110010001110101 * 0010001100110100 mod (2^16 + 1) = 0100011101011010

05)  L#5 = L#1 XOR L#3 = 1011000011111100 XOR 1011011011100010 = 0000011000011110

06)  L#6 = L#2 XOR L#4 = 0110101110010000 XOR 0100011101011010 = 0010110011001010

07)  L#7 = (L#5 * K5) mod (2^16 + 1) = 0000011000011110 * 1011010101010100 mod (2^16 + 1) = 0011001110000011

08)  L#8 = (L#6 + L#7)) mod 2^16 = 0010110011001010 + 0011001110000011 mod 2^16 = 0110000001001101

09)  L#9 = (L#8 * K6) mod (2^16 + 1) = 0110000001001101 * 1110010000110100 mod (2^16 + 1) = 1100110111001101

10)  L#10 = (L#7 + L#9)) mod 2^16 = 0011001110000011 + 1100110111001101 mod 2^16 = 0000000101010000

11)  L#11 = L#1 XOR L#9 = 1011000011111100 XOR 1100110111001101 = 0111110100110001

12)  L#12 = L#3 XOR L#9 = 1011011011100010 XOR 1100110111001101 = 0111101100101111

13)  L#13 = L#2 XOR L#10 = 0110101110010000 XOR 0000000101010000 = 0110101011000000

14)  L#14 = L#4 XOR L#10 = 0100011101011010 XOR 0000000101010000 = 0100011000001010

Untuk putaran berikutnya :
X1 = L#11 = 0111110100110001
X2 = L#12 = 0111101100101111
X3 = L#13 = 0110101011000000
X4 = L#14 = 0100011000001010


*************
 PUTARAN - 7
*************
01)  L#1 = (X1 * K1) mod (2^16 + 1) = 0111110100110001 * 1001001000000100 mod (2^16 + 1) = 1001111101011101

02)  L#2 = (X2 + K2) mod 2^16 = 0111101100101111 + 1011010100100100 mod 2^16 = 0011000001010011

03)  L#3 = (X3 + K3) mod 2^16 = 0110101011000000 + 1001010100000101 mod 2^16 = 1111111111000101

04)  L#4 = (X4 * K4) mod (2^16 + 1) = 0100011000001010 * 0100010011110010 mod (2^16 + 1) = 1100101010011000

05)  L#5 = L#1 XOR L#3 = 1001111101011101 XOR 1111111111000101 = 0110000010011000

06)  L#6 = L#2 XOR L#4 = 0011000001010011 XOR 1100101010011000 = 1111101011001011

07)  L#7 = (L#5 * K5) mod (2^16 + 1) = 0110000010011000 * 0110100101101010 mod (2^16 + 1) = 0010111100101010

08)  L#8 = (L#6 + L#7)) mod 2^16 = 1111101011001011 + 0010111100101010 mod 2^16 = 0010100111110101

09)  L#9 = (L#8 * K6) mod (2^16 + 1) = 0010100111110101 * 1010100111001000 mod (2^16 + 1) = 0110100010010101

10)  L#10 = (L#7 + L#9)) mod 2^16 = 0010111100101010 + 0110100010010101 mod 2^16 = 1001011110111111

11)  L#11 = L#1 XOR L#9 = 1001111101011101 XOR 0110100010010101 = 1111011111001000

12)  L#12 = L#3 XOR L#9 = 1111111111000101 XOR 0110100010010101 = 1001011101010000

13)  L#13 = L#2 XOR L#10 = 0011000001010011 XOR 1001011110111111 = 1010011111101100

14)  L#14 = L#4 XOR L#10 = 1100101010011000 XOR 1001011110111111 = 0101110100100111

Untuk putaran berikutnya :
X1 = L#11 = 1111011111001000
X2 = L#12 = 1001011101010000
X3 = L#13 = 1010011111101100
X4 = L#14 = 0101110100100111


*************
 PUTARAN - 8
*************
01)  L#1 = (X1 * K1) mod (2^16 + 1) = 1111011111001000 * 0110100100100100 mod (2^16 + 1) = 0111101001011101

02)  L#2 = (X2 + K2) mod 2^16 = 1001011101010000 + 0000100101101010 mod 2^16 = 1010000010111010

03)  L#3 = (X3 + K3) mod 2^16 = 1010011111101100 + 0100100100101010 mod 2^16 = 1111000100010110

04)  L#4 = (X4 * K4) mod (2^16 + 1) = 0101110100100111 * 0000101010001001 mod (2^16 + 1) = 0101110000001010

05)  L#5 = L#1 XOR L#3 = 0111101001011101 XOR 1111000100010110 = 1000101101001011

06)  L#6 = L#2 XOR L#4 = 1010000010111010 XOR 0101110000001010 = 1111110010110000

07)  L#7 = (L#5 * K5) mod (2^16 + 1) = 1000101101001011 * 1110010000000110 mod (2^16 + 1) = 1001001110110001

08)  L#8 = (L#6 + L#7)) mod 2^16 = 1111110010110000 + 1001001110110001 mod 2^16 = 1001000001100001

09)  L#9 = (L#8 * K6) mod (2^16 + 1) = 1001000001100001 * 0010011001000110 mod (2^16 + 1) = 1100101011110001

10)  L#10 = (L#7 + L#9)) mod 2^16 = 1001001110110001 + 1100101011110001 mod 2^16 = 0101111010100010

11)  L#11 = L#1 XOR L#9 = 0111101001011101 XOR 1100101011110001 = 1011000010101100

12)  L#12 = L#3 XOR L#9 = 1111000100010110 XOR 1100101011110001 = 0011101111100111

13)  L#13 = L#2 XOR L#10 = 1010000010111010 XOR 0101111010100010 = 1111111000011000

14)  L#14 = L#4 XOR L#10 = 0101110000001010 XOR 0101111010100010 = 0000001010101000

Untuk transformasi output :
X1 = L#11 = 1011000010101100
X2 = L#13 = 1111111000011000
X3 = L#12 = 0011101111100111
X4 = L#14 = 0000001010101000


***********************
 TRANSFORMASI OUTPUT
***********************
01)  Y1 = (X1 * K1) mod (2^16 + 1) = 1011000010101100 * 1001000011010010 mod (2^16 + 1) = 0100100100100111

02)  Y2 = (X2 + K2) mod 2^16 = 1111111000011000 + 0100100000010010 mod 2^16 = 0100011000101010

03)  Y3 = (X3 + K3) mod 2^16 = 0011101111100111 + 1101010010010010 mod 2^16 = 0001000001111001

04)  Y4 = (X4 * K4) mod (2^16 + 1) = 0000001010101000 * 0101010000010101 mod (2^16 + 1) = 0101011011101001

Hasil Enkripsi :
Y1 = 0100100100100111 = I'
Y2 = 0100011000101010 = F*
Y3 = 0001000001111001 = y
Y4 = 0101011011101001 = Vé

Cipher text   = I'F*yVé

Sebagai contoh proses dekripsi dalam bentuk biner, penulis meng-input data sebagai berikut.
  1. Kunci : ‘KUNCI KRIPTO 123’.
  2. Plain Text : ‘I'F*yVé’
  3. Proses dekripsi, didapat
Gambar 4.28 Proses dekripsi text ‘I'F*yVé’ dengan kunci
‘KUNCI KRIPTO 123’ putaran ke-1 sampai putaran ke-8
Gambar 4.29 Proses dekripsi text ‘I'F*yVé’ dengan kunci
‘KUNCI KRIPTO 123’ putaran transformasi output
Hasil Eksekusi :

*************
 PUTARAN - 1
*************
01)  L#1 = (X1 * K1) mod (2^16 + 1) = 0100100100100111 * 0001111100111111 mod (2^16 + 1) = 1011000010101100

02)  L#2 = (X2 + K2) mod 2^16 = 0100011000101010 + 1011011111101110 mod 2^16 = 1111111000011000

03)  L#3 = (X3 + K3) mod 2^16 = 0001000001111001 + 0010101101101110 mod 2^16 = 0011101111100111

04)  L#4 = (X4 * K4) mod (2^16 + 1) = 0101011011101001 * 1000000100010001 mod (2^16 + 1) = 0000001010101000

05)  L#5 = L#1 XOR L#3 = 1011000010101100 XOR 0011101111100111 = 1000101101001011

06)  L#6 = L#2 XOR L#4 = 1111111000011000 XOR 0000001010101000 = 1111110010110000

07)  L#7 = (L#5 * K5) mod (2^16 + 1) = 1000101101001011 * 1110010000000110 mod (2^16 + 1) = 1001001110110001

08)  L#8 = (L#6 + L#7)) mod 2^16 = 1111110010110000 + 1001001110110001 mod 2^16 = 1001000001100001

09)  L#9 = (L#8 * K6) mod (2^16 + 1) = 1001000001100001 * 0010011001000110 mod (2^16 + 1) = 1100101011110001

10)  L#10 = (L#7 + L#9)) mod 2^16 = 1001001110110001 + 1100101011110001 mod 2^16 = 0101111010100010

11)  L#11 = L#1 XOR L#9 = 1011000010101100 XOR 1100101011110001 = 0111101001011101

12)  L#12 = L#3 XOR L#9 = 0011101111100111 XOR 1100101011110001 = 1111000100010110

13)  L#13 = L#2 XOR L#10 = 1111111000011000 XOR 0101111010100010 = 1010000010111010

14)  L#14 = L#4 XOR L#10 = 0000001010101000 XOR 0101111010100010 = 0101110000001010

Untuk putaran berikutnya :
X1 = L#11 = 0111101001011101
X2 = L#12 = 1111000100010110
X3 = L#13 = 1010000010111010
X4 = L#14 = 0101110000001010
*************
 PUTARAN - 2
*************
01)  L#1 = (X1 * K1) mod (2^16 + 1) = 0111101001011101 * 1100100000100101 mod (2^16 + 1) = 1111011111001000

02)  L#2 = (X2 + K2) mod 2^16 = 1111000100010110 + 1011011011010110 mod 2^16 = 1010011111101100

03)  L#3 = (X3 + K3) mod 2^16 = 1010000010111010 + 1111011010010110 mod 2^16 = 1001011101010000

04)  L#4 = (X4 * K4) mod (2^16 + 1) = 0101110000001010 * 0000000011110011 mod (2^16 + 1) = 0101110100100111

05)  L#5 = L#1 XOR L#3 = 1111011111001000 XOR 1001011101010000 = 0110000010011000

06)  L#6 = L#2 XOR L#4 = 1010011111101100 XOR 0101110100100111 = 1111101011001011

07)  L#7 = (L#5 * K5) mod (2^16 + 1) = 0110000010011000 * 0110100101101010 mod (2^16 + 1) = 0010111100101010

08)  L#8 = (L#6 + L#7)) mod 2^16 = 1111101011001011 + 0010111100101010 mod 2^16 = 0010100111110101

09)  L#9 = (L#8 * K6) mod (2^16 + 1) = 0010100111110101 * 1010100111001000 mod (2^16 + 1) = 0110100010010101

10)  L#10 = (L#7 + L#9)) mod 2^16 = 0010111100101010 + 0110100010010101 mod 2^16 = 1001011110111111

11)  L#11 = L#1 XOR L#9 = 1111011111001000 XOR 0110100010010101 = 1001111101011101

12)  L#12 = L#3 XOR L#9 = 1001011101010000 XOR 0110100010010101 = 1111111111000101

13)  L#13 = L#2 XOR L#10 = 1010011111101100 XOR 1001011110111111 = 0011000001010011

14)  L#14 = L#4 XOR L#10 = 0101110100100111 XOR 1001011110111111 = 1100101010011000

Untuk putaran berikutnya :
X1 = L#11 = 1001111101011101
X2 = L#12 = 1111111111000101
X3 = L#13 = 0011000001010011
X4 = L#14 = 1100101010011000


*************
 PUTARAN - 3
*************
01)  L#1 = (X1 * K1) mod (2^16 + 1) = 1001111101011101 * 0111110101100001 mod (2^16 + 1) = 0111110100110001

02)  L#2 = (X2 + K2) mod 2^16 = 1111111111000101 + 0110101011111011 mod 2^16 = 0110101011000000

03)  L#3 = (X3 + K3) mod 2^16 = 0011000001010011 + 0100101011011100 mod 2^16 = 0111101100101111

04)  L#4 = (X4 * K4) mod (2^16 + 1) = 1100101010011000 * 0001001111111001 mod (2^16 + 1) = 0100011000001010

05)  L#5 = L#1 XOR L#3 = 0111110100110001 XOR 0111101100101111 = 0000011000011110

06)  L#6 = L#2 XOR L#4 = 0110101011000000 XOR 0100011000001010 = 0010110011001010

07)  L#7 = (L#5 * K5) mod (2^16 + 1) = 0000011000011110 * 1011010101010100 mod (2^16 + 1) = 0011001110000011

08)  L#8 = (L#6 + L#7)) mod 2^16 = 0010110011001010 + 0011001110000011 mod 2^16 = 0110000001001101

09)  L#9 = (L#8 * K6) mod (2^16 + 1) = 0110000001001101 * 1110010000110100 mod (2^16 + 1) = 1100110111001101

10)  L#10 = (L#7 + L#9)) mod 2^16 = 0011001110000011 + 1100110111001101 mod 2^16 = 0000000101010000

11)  L#11 = L#1 XOR L#9 = 0111110100110001 XOR 1100110111001101 = 1011000011111100

12)  L#12 = L#3 XOR L#9 = 0111101100101111 XOR 1100110111001101 = 1011011011100010

13)  L#13 = L#2 XOR L#10 = 0110101011000000 XOR 0000000101010000 = 0110101110010000

14)  L#14 = L#4 XOR L#10 = 0100011000001010 XOR 0000000101010000 = 0100011101011010

Untuk putaran berikutnya :
X1 = L#11 = 1011000011111100
X2 = L#12 = 1011011011100010
X3 = L#13 = 0110101110010000
X4 = L#14 = 0100011101011010


*************
 PUTARAN - 4
*************
01)  L#1 = (X1 * K1) mod (2^16 + 1) = 1011000011111100 * 0111010011110010 mod (2^16 + 1) = 0010110101011111

02)  L#2 = (X2 + K2) mod 2^16 = 1011011011100010 + 1111110011101101 mod 2^16 = 1011001111001111

03)  L#3 = (X3 + K3) mod 2^16 = 0110101110010000 + 0110110110110110 mod 2^16 = 1101100101000110

04)  L#4 = (X4 * K4) mod (2^16 + 1) = 0100011101011010 * 0110010101110001 mod (2^16 + 1) = 1110010001110101

05)  L#5 = L#1 XOR L#3 = 0010110101011111 XOR 1101100101000110 = 1111010000011001

06)  L#6 = L#2 XOR L#4 = 1011001111001111 XOR 1110010001110101 = 0101011110111010

07)  L#7 = (L#5 * K5) mod (2^16 + 1) = 1111010000011001 * 1010101001110010 mod (2^16 + 1) = 1010101010011110

08)  L#8 = (L#6 + L#7)) mod 2^16 = 0101011110111010 + 1010101010011110 mod 2^16 = 0000001001011000

09)  L#9 = (L#8 * K6) mod (2^16 + 1) = 0000001001011000 * 0001101001001001 mod (2^16 + 1) = 1001101011011011

10)  L#10 = (L#7 + L#9)) mod 2^16 = 1010101010011110 + 1001101011011011 mod 2^16 = 0100010101111001

11)  L#11 = L#1 XOR L#9 = 0010110101011111 XOR 1001101011011011 = 1011011110000100

12)  L#12 = L#3 XOR L#9 = 1101100101000110 XOR 1001101011011011 = 0100001110011101

13)  L#13 = L#2 XOR L#10 = 1011001111001111 XOR 0100010101111001 = 1111011010110110

14)  L#14 = L#4 XOR L#10 = 1110010001110101 XOR 0100010101111001 = 1010000100001100

Untuk putaran berikutnya :
X1 = L#11 = 1011011110000100
X2 = L#12 = 0100001110011101
X3 = L#13 = 1111011010110110
X4 = L#14 = 1010000100001100


*************
 PUTARAN - 5
*************
01)  L#1 = (X1 * K1) mod (2^16 + 1) = 1011011110000100 * 0010001100101001 mod (2^16 + 1) = 0101011011110000

02)  L#2 = (X2 + K2) mod 2^16 = 0100001110011101 + 0111011001101111 mod 2^16 = 1011101000001100

03)  L#3 = (X3 + K3) mod 2^16 = 1111011010110110 + 1000011011111111 mod 2^16 = 0111110110110101

04)  L#4 = (X4 * K4) mod (2^16 + 1) = 1010000100001100 * 0000111111000000 mod (2^16 + 1) = 0111001100011000

05)  L#5 = L#1 XOR L#3 = 0101011011110000 XOR 0111110110110101 = 0010101101000101

06)  L#6 = L#2 XOR L#4 = 1011101000001100 XOR 0111001100011000 = 1100100100010100

07)  L#7 = (L#5 * K5) mod (2^16 + 1) = 0010101101000101 * 0011100100001101 mod (2^16 + 1) = 1000010111011101

08)  L#8 = (L#6 + L#7)) mod 2^16 = 1100100100010100 + 1000010111011101 mod 2^16 = 0100111011110001

09)  L#9 = (L#8 * K6) mod (2^16 + 1) = 0100111011110001 * 0010010010000001 mod (2^16 + 1) = 1010000000110000

10)  L#10 = (L#7 + L#9)) mod 2^16 = 1000010111011101 + 1010000000110000 mod 2^16 = 0010011000001101

11)  L#11 = L#1 XOR L#9 = 0101011011110000 XOR 1010000000110000 = 1111011011000000

12)  L#12 = L#3 XOR L#9 = 0111110110110101 XOR 1010000000110000 = 1101110110000101

13)  L#13 = L#2 XOR L#10 = 1011101000001100 XOR 0010011000001101 = 1001110000000001

14)  L#14 = L#4 XOR L#10 = 0111001100011000 XOR 0010011000001101 = 0101010100010101

Untuk putaran berikutnya :
X1 = L#11 = 1111011011000000
X2 = L#12 = 1101110110000101
X3 = L#13 = 1001110000000001
X4 = L#14 = 0101010100010101


*************
 PUTARAN - 6
*************
01)  L#1 = (X1 * K1) mod (2^16 + 1) = 1111011011000000 * 0001010001010011 mod (2^16 + 1) = 1110110010101010

02)  L#2 = (X2 + K2) mod 2^16 = 1101110110000101 + 0011011100110011 mod 2^16 = 0001010010111000

03)  L#3 = (X3 + K3) mod 2^16 = 1001110000000001 + 0111111100111100 mod 2^16 = 0001101100111101

04)  L#4 = (X4 * K4) mod (2^16 + 1) = 0101010100010101 * 0001010011100100 mod (2^16 + 1) = 0110001111000011

05)  L#5 = L#1 XOR L#3 = 1110110010101010 XOR 0001101100111101 = 1111011110010111

06)  L#6 = L#2 XOR L#4 = 0001010010111000 XOR 0110001111000011 = 0111011101111011

07)  L#7 = (L#5 * K5) mod (2^16 + 1) = 1111011110010111 * 0010110101001001 mod (2^16 + 1) = 1111100101000100

08)  L#8 = (L#6 + L#7)) mod 2^16 = 0111011101111011 + 1111100101000100 mod 2^16 = 0111000010111111

09)  L#9 = (L#8 * K6) mod (2^16 + 1) = 0111000010111111 * 0010010101000001 mod (2^16 + 1) = 0010101100010111

10)  L#10 = (L#7 + L#9)) mod 2^16 = 1111100101000100 + 0010101100010111 mod 2^16 = 0010010001011011

11)  L#11 = L#1 XOR L#9 = 1110110010101010 XOR 0010101100010111 = 1100011110111101

12)  L#12 = L#3 XOR L#9 = 0001101100111101 XOR 0010101100010111 = 0011000000101010

13)  L#13 = L#2 XOR L#10 = 0001010010111000 XOR 0010010001011011 = 0011000011100011

14)  L#14 = L#4 XOR L#10 = 0110001111000011 XOR 0010010001011011 = 0100011110011000

Untuk putaran berikutnya :
X1 = L#11 = 1100011110111101
X2 = L#12 = 0011000000101010
X3 = L#13 = 0011000011100011
X4 = L#14 = 0100011110011000


*************
 PUTARAN - 7
*************
01)  L#1 = (X1 * K1) mod (2^16 + 1) = 1100011110111101 * 0110000010100111 mod (2^16 + 1) = 1110000011100011

02)  L#2 = (X2 + K2) mod 2^16 = 0011000000101010 + 1001100101101010 mod 2^16 = 1100100110010100

03)  L#3 = (X3 + K3) mod 2^16 = 0011000011100011 + 1001110110011100 mod 2^16 = 1100111001111111

04)  L#4 = (X4 * K4) mod (2^16 + 1) = 0100011110011000 * 0111010011011111 mod (2^16 + 1) = 0001110010111001

05)  L#5 = L#1 XOR L#3 = 1110000011100011 XOR 1100111001111111 = 0010111010011100

06)  L#6 = L#2 XOR L#4 = 1100100110010100 XOR 0001110010111001 = 1101010100101101

07)  L#7 = (L#5 * K5) mod (2^16 + 1) = 0010111010011100 * 1010010010010010 mod (2^16 + 1) = 0110011100000010

08)  L#8 = (L#6 + L#7)) mod 2^16 = 1101010100101101 + 0110011100000010 mod 2^16 = 0011110000101111

09)  L#9 = (L#8 * K6) mod (2^16 + 1) = 0011110000101111 * 1010000010101000 mod (2^16 + 1) = 1011100100010100

10)  L#10 = (L#7 + L#9)) mod 2^16 = 0110011100000010 + 1011100100010100 mod 2^16 = 0010000000010110

11)  L#11 = L#1 XOR L#9 = 1110000011100011 XOR 1011100100010100 = 0101100111110111

12)  L#12 = L#3 XOR L#9 = 1100111001111111 XOR 1011100100010100 = 0111011101101011

13)  L#13 = L#2 XOR L#10 = 1100100110010100 XOR 0010000000010110 = 1110100110000010

14)  L#14 = L#4 XOR L#10 = 0001110010111001 XOR 0010000000010110 = 0011110010101111

Untuk putaran berikutnya :
X1 = L#11 = 0101100111110111
X2 = L#12 = 0111011101101011
X3 = L#13 = 1110100110000010
X4 = L#14 = 0011110010101111


*************
 PUTARAN - 8
*************
01)  L#1 = (X1 * K1) mod (2^16 + 1) = 0101100111110111 * 0000100010000011 mod (2^16 + 1) = 1011111001101000

02)  L#2 = (X2 + K2) mod 2^16 = 0111011101101011 + 0111100101101110 mod 2^16 = 1111000011011001

03)  L#3 = (X3 + K3) mod 2^16 = 1110100110000010 + 1100110111001101 mod 2^16 = 1011011101001111

04)  L#4 = (X4 * K4) mod (2^16 + 1) = 0011110010101111 * 0101111110111100 mod (2^16 + 1) = 0110101011010011

05)  L#5 = L#1 XOR L#3 = 1011111001101000 XOR 1011011101001111 = 0000100100100111

06)  L#6 = L#2 XOR L#4 = 1111000011011001 XOR 0110101011010011 = 1001101000001010

07)  L#7 = (L#5 * K5) mod (2^16 + 1) = 0000100100100111 * 0100100101010000 mod (2^16 + 1) = 1111100010010010

08)  L#8 = (L#6 + L#7)) mod 2^16 = 1001101000001010 + 1111100010010010 mod 2^16 = 1001001010011100

09)  L#9 = (L#8 * K6) mod (2^16 + 1) = 1001001010011100 * 0101010001001111 mod (2^16 + 1) = 0011110111011100

10)  L#10 = (L#7 + L#9)) mod 2^16 = 1111100010010010 + 0011110111011100 mod 2^16 = 0011011001101110

11)  L#11 = L#1 XOR L#9 = 1011111001101000 XOR 0011110111011100 = 1000001110110100

12)  L#12 = L#3 XOR L#9 = 1011011101001111 XOR 0011110111011100 = 1000101010010011

13)  L#13 = L#2 XOR L#10 = 1111000011011001 XOR 0011011001101110 = 1100011010110111

14)  L#14 = L#4 XOR L#10 = 0110101011010011 XOR 0011011001101110 = 0101110010111101

Untuk transformasi output :
X1 = L#11 = 1000001110110100
X2 = L#13 = 1100011010110111
X3 = L#12 = 1000101010010011
X4 = L#14 = 0101110010111101


***********************
 TRANSFORMASI OUTPUT
***********************
01)  Y1 = (X1 * K1) mod (2^16 + 1) = 1000001110110100 * 0111111001100111 mod (2^16 + 1) = 0101010001100101

02)  Y2 = (X2 + K2) mod 2^16 = 1100011010110111 + 1011000110111101 mod 2^16 = 0111100001110100

03)  Y3 = (X3 + K3) mod 2^16 = 1000101010010011 + 1011011011100000 mod 2^16 = 0100000101110011

04)  Y4 = (X4 * K4) mod (2^16 + 1) = 0101110010111101 * 0111010101101111 mod (2^16 + 1) = 0110110001101001

Hasil Dekripsi :
Y1 = 0101010001100101 = Te
Y2 = 0111100001110100 = xt
Y3 = 0100000101110011 = As
Y4 = 0110110001101001 = li

Plain text   = TextAsli

Sebagai contoh proses pembentukan kunci inverse penjumlahan, penulis meng-input data ‘1011011011000110’.
Gambar 4.30 Proses pembentukan kunci inverse penjumlahan
untuk data ‘1011011011000110’
Untuk contoh proses pembentukan kunci inverse perkalian, penulis meng-input data ‘1011011011000110’.
Gambar 4.31 Proses pembentukan kunci inverse perkalian
untuk data ‘1011011011000110’
BAB V

KESIMPULAN DAN SARAN


5.1              Kesimpulan
Setelah melalui proses penyelesaian tugas akhir (skripsi) yang berjudul ‘Perancangan Perangkat Lunak Pembelajaran Kriptografi dengan Metode IDEA’, penulis menarik kesimpulan sebagai berikut :
1.      Keunggulan dari metode IDEA adalah penggunaan operasi yang tidak kompatibel sehingga tidak dapat diserang oleh kriptanalisis.
2.      Perangkat lunak pembelajaran ini menyediakan fasilitas pengaturan kecepatan visualisasi proses.
3.      Perangkat lunak pembelajaran ini dapat menampilkan langkah-langkah penyelesaian algoritma untuk proses pembentukan kunci, enkripsi dan dekripsi secara tahap demi tahap sehingga mempermudah pemahaman.
4.      Perangkat lunak pembelajaran ini menyediakan teori-teori dasar mengenai metode IDEA.

5.2              Saran
Penulis ingin memberikan beberapa saran yang mungkin berguna untuk pengembangan lebih lanjut pada perancangan perangkat lunak pembelajaran kriptografi dengan metode IDEA yaitu :
1.      Perangkat lunak dapat dikembangkan agar dapat digabungkan dengan pembelajaran untuk metode kriptografi yang lain.
2.      Perangkat lunak dapat ditambahkan soal-soal latihan untuk mendukung proses pembelajaran.
3.      Perangkat lunak dapat ditambahkan fasilitas multimedia agar lebih menarik.
DAFTAR PUSTAKA

  1. Ario Suryokusumo, Microsoft Visual Basic 6.0, PT. Elex Media Komputindo, 2001.
  2. Bruce Schneier, Applied Crytography, Second Edition, John Willey and Sons Inc., 1996.
  3. Djoko Pramono, Mudah menguasai Visual Basic 6, PT. Elex Media Komputindo, 2002.
  4. Jennifer Seberpy, Jojef Pieprzyk, Cryptography : An Introduction to Computer Security.
  5. Jusuf Kurniawan, Kriptografi, Keamanan Internet dan Jaringan Komunikasi, Penerbit Informatika Bandung, 2004.
  6. encryption-security.com/directory/international-data-encryption-algorithm.
  7. http://www.pasta.cs.uit.no/thesis/html/ronnya/node16.html.
  8. http://www.cs.nps.navy.mil/curricula/tracks/security/notes/chap04_43.html.
  9. http://www-unix.ecs.umass.edu/~ccowell/projects/VLSI%20Projects/ IDEA%20overview.htm.


2 komentar:

{ Muchamad Octo } at: January 7, 2016 at 10:22 PM said...

Bagi GUI alhoritma IDEA?
Soalnya punya saya cuman bisa enkripsi string bukan byte file.. gimana caranya ya?

{ Muchamad Octo } at: January 7, 2016 at 10:22 PM said...

Bagi GUI alhoritma IDEA?
Soalnya punya saya cuman bisa enkripsi string bukan byte file.. gimana caranya ya?

Post a Comment

 

Pengikut

Copyright © ZONA SKRIPSI All Rights Reserved • Design by Dzignine
best suvaudi suvinfiniti suv