Anda di halaman 1dari 9

ENKRIPSI DATA MENGGUNAKAN ALGORITMA SERPENT

Disusun Oleh :

Edi Permadi Budiono Sudirman Irfan Sadi Angga Tri Cahyono


UNIVERSITAS MARITIM RAJA ALI HAJI FAKULTAS TEKNIK Software Engineering 2009

Kriptografi adalah suatu ilmu yang mempelajari bagaimana cara menjaga agar data atau pesan tetap aman saat dikirimkan, dari pengirim ke penerima tanpa mengalami gangguan dari pihak ketiga. Menurut Bruce Scheiner dalam bukunya "Applied Cryptography", kriptografi adalah ilmu pengetahuan dan seni menjaga message-message agar tetap aman (secure). Konsep kriptografi sendiri telah lama digunakan oleh manusia misalnya pada peradaban Mesir dan Romawi walau masih sangat sederhana. Prinsip-prinsip yang mendasari kriptografi yakni:

Confidelity (kerahasiaan) yaitu layanan agar isi pesan yang dikirimkan

tetap rahasia dan tidak diketahui oleh pihak lain (kecuali pihak pengirim, pihak penerima / pihak-pihak memiliki ijin). Umumnya hal ini dilakukan dengan cara membuat suatu algoritma matematis yang mampu mengubah data hingga menjadi sulit untuk dibaca dan dipahami.

Data

integrity

(keutuhan

data)

yaitu

layanan

yang

mampu

mengenali/mendeteksi adanya manipulasi (penghapusan, pengubahan atau penambahan) data yang tidak sah (oleh pihak lain).

Authentication

(keotentikan) Baik

yaitu

layanan

yang yang

berhubungan terlibat dalam

dengan

identifikasi.

otentikasi

pihak-pihak

pengiriman data maupun otentikasi keaslian data/informasi. Non-repudiation (anti-penyangkalan) yaitu layanan yang dapat mencegah suatu pihak untuk menyangkal aksi yang dilakukan sebelumnya (menyangkal bahwa pesan tersebut berasal dirinya).

Berikut adalah istilah-istilah yang digunakan dalam bidang kriptografi :


Plaintext (M) adalah pesan yang hendak dikirimkan (berisi data asli). Ciphertext (C) adalah pesan ter-enkrip (tersandi) yang merupakan hasil enkripsi. Enkripsi ciphertext. (fungsi E) adalah proses pengubahan plaintext menjadi

Dekripsi (fungsi D) adalah kebalikan dari enkripsi yakni mengubah ciphertext menjadi plaintext, sehingga berupa data awal/asli. Kunci adalah suatu bilangan yang dirahasiakan yang digunakan dalam proses enkripsi dan dekripsi.

Kriptografi itu sendiri terdiri dari dua proses utama yakni proses enkripsi dan proses dekripsi. Seperti yang telah dijelaskan di atas, proses enkripsi mengubah plaintext menjadi ciphertext (dengan menggunakan kunci tertentu) sehingga isi informasi pada pesan tersebut sukar dimengerti.

Gambar 2.1 Diagram proses enkripsi dan dekripsi Peranan kunci sangatlah penting dalam proses enkripsi dan dekripsi (disamping pula algoritma yang digunakan) sehingga kerahasiaannya sangatlah penting, apabila kerahasiaannya terbongkar, maka isi dari pesan dapat diketahui. Secara matematis, proses enkripsi merupakan pengoperasian fungsi E (enkripsi) menggunakan e (kunci enkripsi) pada M (plaintext) sehingga dihasilkan C (ciphertext), notasinya : Ee(M) C

Sedangkan untuk proses dekripsi, merupakan pengoperasian fungsi D (dekripsi) menggunakan d (kunci dekripsi) pada C (ciphertext) sehingga dihasilkan M (plaintext), notasinya : Dd(C) = M Sehingga dari dua hubungan diatas berlaku : Dd(Ee(M)) = M

Algoritma Simetri Serpent


Algoritma Serpent merupakan hasil kerjasama internasional yang melibatkan tiga negara Inggris, Israel, dan Norwegia melalui tiga buah universitasnya. Inggris dalam hal ini diwakili oleh Cambridge University sedangkan Israel diwakili oleh Haifa Israel dan Norwegia diwakili oleh University of Bergen. Algoritma ini dikembangkan oleh Ross Anderson dari Inggris, Eli Biham dari Israel, dan Lars Knudsen dari Norwegia.

Serpent merupakan algoritma cipher blok algoritma dengan 32 putaran jaringan Substitution-Permutation Network (SP-network) yang beroperasi pada empat word 32 bit, yang berarti ukuran bloknya adalah 128 bit. Untuk komputasi internal, semua nilai direpresentasikan dalam little-endian, di mana word pertama adalah least-significant word, dan word terakhir adalah most-significant word.

Serpent mendukung masukan kunci sepanjang 128 bit, 192 bit, dan 256 bit. Kenyataannya, dalam mekanisme penjadwalan kunci dibutuhkan kunci sepanjang 256 bit. Oleh karena itu, untuk masukan kunci sepanjang 128 bit dan 192 bit memerlukan mekanisme tambahan, yaitu padding. Padding menambahkan bit 1 pada bit terpenting (most significant bit) dan beberapa bit 0 sampai ukuran kunci mencapai 256 bit. Untuk proses enkripsi, Serpent membutuhkan 32 upakunci 128 bit yang dinotasikan dengan K0, , K32. Tahapan untuk mendapatkan ke-33 upakunci yaitu [SER09]: 1. Membagi kunci masukan K menjadi delapan bagian, masing-masing 32 bit yang dinotasikan dengan w-8, , w-1

2. Membentuk 132 kunci antara (prekey) yang dinotasikan dengan w0, , w131 melalui persamaan: wi = (wi-8 wi-5 wi-3 wi-1 i) <<< 11, Notasi merupakan bagian kecil dari golden ratio ( + 1) / 2 atau 0x9e3779b9 dalam heksadesimal.

3. Membentuk 132 kunci putaran (round key) k0 sampai k131 yang dibentuk dari kunci antara yang dihasilkan dari proses sebelumnya dengan menggunakan S-boxes. S-boxes digunakan untuk mengubah kunci antara wi menjadi ki dengan ketentuan berikut ini : {k0, k1, k2, k3} = S3 (w0, w1, w2, w3) {k4, k5, k6, k7} = S2 (w4, w5, w6, w7) {k8, k9, k10, k11} = S1 (w8, w8, w10, w11) {k12, k13, k14, k15} = S0 (w12, w13, w14, w15) ... {k124, k125, k126, k127} = S4 (w124, w125, w126, w127) {k128, k129, k130, k131} = S3 (w128, w129, w130, w131) Pembentukan kunci putaran untuk tahap (1) sampai tahap (3) dapat digambarkan dalam gambar ini.

4. Membentuk kunci 128 bit Ki (untuk I {0, , 32}) dari 32 bit nilai kj dengan cara:

Ki = {k4i, k4i+1, k4i+2,k4i+3}

5. Menerapkan IP pada upakunci yang dihasilkan untuk menempatkan bit-bitnya ke dalam

urutan yang sesuai. Ki = IP (Ki) Algoritma Serpent ini terdiri dari : 1. Initial Permutation (IP) 2. Terdiri dari 32 putaran, masing-masing terdiri dari sebuah operasi pengacakan kunci, operasi menggunakan S-Box, dan transformasi linear. Pada putaran terakhir, transformasi ini digantikan dengan penambahan operasi pengacakan kunci. 3. Final Permutition (FP) IP atau Initial Permutation diterapkan pada plainteks P menghasilkan B0, yang merupakan input dari putaran pertama, yaitu putaran-0 (putaran diberi nomor dari 0 sampai 31). Hasil dari putaran pertama (putaran-0) dinamakan B1, hasil putaran kedua (putaran-1) dinamakan B2, dan seterusnya sampai B32. Permutasi akhir akan menghasilkan cipherteks C. Masing-masing fungsi putaran Ri (i = 0,...,31) hanya menggunakan sebuah S-Box terreplikasi. Misalnya, R0 menggunakan S0, 32 copy yang diterapkan secara paralel, sehingga copy dari S0 menggunakan bit 0,1,2, dan 3 dari B0 K0 sebagai input dan mengembalikan empat bit pertama dari vektor intermediate sebagai output, copy selanjutnya menerima masukan bit ke 4-7 public class CryptoUtils { dari B0 K0 dan mengembalikan empat bit selanjutnya dari vektor intemediate, dan seterusnya. public static void main(String arg[]) { try { Vektor intermediate kemudian ditransformasi menggunakan linear transformasi, menghasilkan java.io.StreamTokenizer Input=new B1. java.io.StreamTokenizer(System.in); System.out.print("Masukkan kata yang akan dienkripsi : "); Input.nextToken(); Contoh Implementasi Algoritma Serpent dalam Pemmrograman String hash = byteArrayToHexString(CryptoUtils.computeHash(Input.sval)); Java : System.out.println("Hasil enkripsinya (hex string) : " + hash); boolean ok = true; String inputHash = ""; while (ok) { System.out.print("Sekarang coba masukkan pasword rahasianya : " ); Input.nextToken(); inputHash = byteArrayToHexString(CryptoUtils.computeHash(Input.sval)); if (hash.equals(inputHash)){ System.out.println("Mantabb! benerr BOSS"); ok = false; }

else System.out.println("Salah Gan, coba lagi...!"); } } catch (Exception e){ e.printStackTrace(); } } public static byte[] computeHash(String x) throws Exception { java.security.MessageDigest d =null; d = java.security.MessageDigest.getInstance("SHA-1"); d.reset(); d.update(x.getBytes()); return d.digest(); } public static String byteArrayToHexString(byte[] b){ StringBuffer sb = new StringBuffer(b.length * 2); for (int i = 0; i < b.length; i++){ int v = b[i] & 0xff; if (v < 16) { sb.append('0'); } sb.append(Integer.toHexString(v)); } return sb.toString().toUpperCase(); } }

Hasil Programnya : (Jika Benar)

(Jika Salah)

Anda mungkin juga menyukai