Sisyboy’s Weblog

Just another WordPress.com weblog

Flowchart & Source Code ElGamal

Flowchart & Source Code ElGamal

January 26, 2008 Posted by | Kriptografi | Leave a comment

Sejarah Kriptografi

Dalam The CodeBreaker yang ditulis oleh Kahn, terlihat bahwa kriptografi mempunyai sejarah yang panjang. Kriptografi sudah digunakan oleh bangsa Mesir Kuno sekitar
4000 tahun sampai abad 20 dimana kriptografi berperanan penting di dalam perang dunia pertama dan kedua. Juga diungkap bahwa latar belakang sejarah yang panjang itu sangat menentukan perkembangan ilmu kriptografi itu sendiri baik dari segi teoretik maupun aplikasinya.

Awalnya kriptografi sangat dominan digunakan dalam bidang-bidang ang berhubungan dengan militer, layanan diplomatik, dan pemerintahan secara umum. Dalam hal ini kriptografi digunakan sebagai suatu alat untuk elindungi strategi dan rahasia negara. Perkembangan sistem komunikasi an komputer pada tahun 1960 an membawa kriptografi memasuki sektor wasta sebagai alat untuk melindungi informasi dalam bentuk dijitel dan untuk memberikan layanan keamanan.

Hasil kerja Feistel di IBM pada awal tahun 1970 an dan puncaknya ada tahun 1977, DES (Data Ecryption Standart) merupakan karya kriptografi yang paling terkenal di dalam sejarah. Karya ini menjadi alat keamanan komersial elektronik di banyak institusi keuangan di seluruh dunia ingga pertengahan tahun 1990-an. DES secara definitif terbukti tak-aman ejak Juli 1998. Walaupun demikian DES telah melandasi prinsip-prinsip
sandi simetrik modern yang dewasa ini muncul produk-produk penggantinya seperti: AES (Advanced Ecryption Standart), Blowfish, 3DES, RC5, dan lain ebagainya.

Yang cukup signifikan selanjutnya adalah pada tahun 1976
ketika Diffie dan Hellman mempublikasikan suatu artikel dengan judul New
Directions in Cryptography. Artikel ini memperkenalkan konsep revolusioner
tentang kriptografi kunci-publik (public-key cryptography) dan juga mem-
berikan suatu metode baru untuk perubahan kunci dimana keamanan di-
dasarkan pada pemecahan problem logaritme diskret. Walaupun penulis
pada saat itu mengungkapkan hanya segi teoretiknya tanpa bentuk praktis-
nya, namun karya ini telah memberikan cakrawala baru bagi para ilmuwan
kriptografi. Ini terbukti pada tahun 1978, Rivest, Shamir, dan Adleman
menemukan bentuk praktis yang pertama untuk skema enkripsi dan penan-
daan kunci publik yang sekarang dikenal dengan skema RSA. Skema ini
didasarkan pada problem matematika yang sulit lainnya, yaitu pemecahan
masalah faktorisasi intejer besar. Bentuk praktis skema kunci-publik lainya
ditemukan oleh ElGamal pada tahun 1985. Sebagaimana karya Diffie dan
Hellman, skema ini juga didasarkan pada pemecahan problem logaritme
diskret.

December 31, 2007 Posted by | Kriptografi | 1 Comment

Enkripsi Blowfish

Blowfish merupakan metoda enkripsi yang mirip dengan DES (DES-like cipher) dan diciptakan oleh Bruce Schneier yang ditujukan untuk mikroposesor besar (32 bit ke atas dengan cache data yang besar). Blowfish dikembangkan untuk memenuhi kriteria disain sebagai berikut:

  • Cepat, pada implementasi yang optimal Blowfish dapat mencapai kecepatan 26 clock cycle per byte.

  • Kompak, Blowfish dapat berjalan pada memori kurang dari 5 KB.

  • Sederhana, Blowfish hanya menggunakan operasi yang simpel: penambahan (addition), XOR, dan penelusuran tabel (table lookup) pada operand 32 bit. Desainnya mudah untuk dianalisa yang membuatnya resisten terhadap kesalahan implementasi.

  • Keamanan yang variabel, panjang kunci Blowfish dapat bervariasi dan dapat mencapai 448 bit (56 byte).

Blowfish dioptimasikan untuk aplikasi dimana kunci tidak sering berubah, seperti jalur komunikasi atau enkripsi file otomatis. Blowfish jauh lebih cepat dari DES bila diimplementasikan pada 32 bit mikroprosesor dengan cache data yang besar, seperti Pentium dan Power PC, Blowfish tidak cocok untuk aplikasi seperti packet switching, dengan perubahan kunci yang sering, atau sebagai fungsi hash satu arah. Kebutuhan memorinya yang besar tidak memungkinkan untuk aplikasi kartu pintar (smart card).

 

Deskripsi dari Blowfish

Blowfish merupakan blok cipher 64-bit dengan panjang kunci variabel. Algoritma ini terdiri dari dua bagian: key expansion dan enkripsi data. Key expansion merubah kunci yang dapat mencapai 448 bit menjadi beberapa array subkunci (subkey) dengan total 4168 byte.

Enkripsi data terdiri dari iterasi fungsi sederhana sebanyak 16 kali. Setiap putaran terdiri dari permutasi kunci-dependent dan substitusi kunci- dan data-dependent. Semua operasi adalah penambahan dan XOR pada variable 32-bit. Tambahan operasi lainnya hanyalah empat penelusuran tabel (table lookup) array berindeks untuk setiap putaran.

Blowfish menggunakan subkunci yang besar. Kunci ini harus dihitung sebelum enkripsi atau dekripsi data.

Array P terdiri dari delapan belas 32-bit subkunci:

P1,P2, . . . ,P18

Empat 32-bit S-box masing-masing mempunyai 256 entri:

S1,0, S1,1, . . . , S1,255

S2,0, S2,1, . . . , S2,255

S3,0, S3,1, . . . , S3,255

S4,0, S4,1, . . . , S4,255

Metoda selengkapnya untuk menghitung subkunci ini akan dijelaskan pada bagian bawah.

Blowfish merupakan algoritma yang menerapkan jaringan Feistel (Feistel network) yang terdiri dari 16 putaran. Input merupakan elemen 64 bit, X. Untuk mengenkrip:

Bagi X menjadi dua 32-bit: XL, XR

untuk i = 1 sampai 16

XL = XL xor Pi

XR = F(XL) xor XR

Tukar XL dan XR

Tukar XL dan X(batalkan penukaran terakhir)

XR = XR xor P17

XL = XL xor P18

Kombinasikan kembali XL dan XR

Fungsi F adalah sebagai berikut:

Bagi XL, menjadi empat bagian 8-bit: a, b, c dan d

F(XL) = ((S1,a + S2,b mod 232) xor S3,c) + S4,c mod 232

Dekripsi sama persis dengan enkripsi, kecuali P1, P2, . . . , P18 digunakan pada urutan yang terbalik.

Subkunci dihitung menggunakan algoritma Blowfish, metodanya adalah sebagai berikut:

  1. Pertama-tama inisialisasi P-array dan kemudian empat S-box secara berurutan dengan string yang tetap. String ini terdiri digit hexadesimal dari pi.

  2. XOR P1 dengan 32 bit pertama kunci, XOR P2 dengan 32 bit kedua dari kunci dan seterusnya untuk setiap bit dari kunci (sampai P18). Ulangi terhadap bit kunci  sampai seluruh P-array di XOR dengan bit kunci.

  3. Enkrip semua string nol dengan algoritma Blowfish dengan menggunakan subkunci seperti dijelaskan pada langkah (1) dan (2).

  4. Ganti P1 dan P2 dengan keluaran dari langkah (3)

  5. Enkrip keluaran dari langkah (3) dengan algoritma Blowfish dengan subkunci yang sudah dimodifikasi.

  6. Ganti P3 dan P4 dengan keluaran dari langkah (5).

  7. Lanjutkan proses tersebut, ganti seluruh elemen dari P-array, dan kemudian seluruh keempat S-box berurutan, dengan keluaran yang berubah secara kontinyu dari algoritma Blowfish.

Total diperlukan 521 iterasi untuk menghasilkan semua subkunci yang dibutuhkan. Aplikasi kemudian dapat menyimpan subkunci ini dan tidak dibutuhkan langkah-langkah proses penurunan ini berulang kali, kecuali kunci yang digunakan berubah.

 

Keamanan dari Blowfish

Tidak ada kelemahan yang berarti dari algoritma Blowfish yang dapat ditemukan sampai saat ini, kecuali adanya weak key, dimana dua entri dari S-box mempunyai nilai yang sama. Tidak ada cara untuk mencek weak key sebelum melakukan key expansion. Bila dikuatirkan hal ini dapat mengurangi keamanannya maka dapat dibuat rutin untuk mengecek entri S-box, walaupun hal ini tidak perlu.

Sampai saat ini tidak ada cryptanalysis yang berhasil tehadap Blowfish, untuk amannya jangan menggunakan Blowfish dengan kurang dari 16 putaran (round).

December 31, 2007 Posted by | Kriptografi | Leave a comment

Algoritma RC4

RC4 merupakan salah satu jenis stream cipher, yaitu memproses unit atau input data pada satu saat. Unit atau data pada umumnya sebuah byte atau bahkan kadang kadang bit (byte dalam hal RC4). Dengan cara ini enkripsi atau dekripsi dapat dilaksanakan pada panjang yang variabel. Algoritma ini tidak harus menunggu sejumlah input data tertentu sebelum diproses, atau menambahkan byte tambahan untuk mengenkrip. Contoh stream cipher adalah RC4, Seal, A5, Oryx, dll. Tipe lainnya adalah block cipher yang memproses sekaligus sejumlah tertentu data (biasanya 64 bit atau 128 bit blok), contohnya : Blowfish, DES, Gost, Idea, RC5, Safer, Square, Twofish, RC6, Loki97, dll.

RC4 merupakan enkripsi stream simetrik proprietary yang dibuat oleh RSA Data Security, Inc (RSADSI). Penyebarannya diawali dari sebuah source code yang diyakini sebagai RC4 dan dipublikasikan secara ‘anonymously’ pada tahun 1994. Algoritma yang dipublikasikan ini sangat identik dengan implementasi RC4 pada produk resmi. RC4 digunakan secara luas pada beberapa aplikasi dan umumnya dinyatakan sangat aman. Sampai saat ini diketahui tidak ada yang dapat memecahkan/membongkarnya, hanya saja versi ekspor 40 bitnya dapat dibongkar dengan cara “brute force” (mencoba semua kunci yang mungkin). RC4 tidak dipatenkan oleh RSADSI, hanya saja tidak diperdagangkan secara bebas (trade secret).

Algoritma RC4 cukup mudah untuk dijelaskan. RC4 mempunyai sebuah S-Box, S0,S1,…,S255, yang berisi permutasi dari bilangan 0 sampai 255, dan permutasi merupakan fungsi dari kunci dengan panjang yang variabel. Terdapat dua indeks yaitu i dan j, yang diinisialisasi dengan bilangan nol. Untuk menghasilkan random byte langkahnya adalah sebagai berikut :

i = ( i + 1 ) mod 256

j = ( j + Si ) mod 256

swap Si dan Sj

t = (Si + Sj) mod 256

K = St

Byte K di XOR dengan plainteks untuk menghasilkan cipherteks atau di XOR dengan cipherteks untuk menghasilkan plainteks. Enkripsi sangat cepat kurang lebih 10 kali lebih cepat dari DES.

Inisialisasi S-Box juga sangat mudah. Pertama isi secara berurutan S0 = 0, S1 = 1,…,S255 = 255. Kemudian isi array 256 byte lainnya dengan kunci yang diulangi sampai seluruh array K0, K1,…,K255 terisi seluruhnya. Set indeks j dengan nol, Kemudian lakukan langkah berikut :

for i = 0 to 255

j = (j + Si + Ki) mod 256

swap Si dan Sj

Salah satu kelemahan dari RC4 adalah terlalu tingginya kemungkinan terjadi tabel S-box yang sama, hal ini terjadi karena kunci user diulang-ulang untuk mengisi 256 bytes, sehingga ‘aaaa’ dan ‘aaaaa’ akan menghasilkan permutasi yang sama. Untuk mengatasi ini maka pada implementasinya nanti kita menggunakan hasil hash 160 bit SHA dari password kita untuk mencegah hal ini terjadi. Kekurangan lainnya ialah karena enkripsi RC4 adalah XOR antara data bytes dan pseudo-random byte stream yang dihasilkan dari kunci, maka penyerang akan mungkin untuk menentukan beberapa byte pesan orisinal dengan meng-XOR dua set cipher byte, bila beberapa dari pesan input diketahui (atau mudah untuk ditebak). Untuk mengatasinya pada aplikasinya kita menggunakan initialization vector (IV) yang berbeda-beda untuk setiap data, sehingga bahkan untuk file yang sama akan dihasilkan ciphertext yang berbeda. IV ini tidak perlu dirahasikan karena digunakan hanya agar setiap proses enkripsi akan menghasilkan ciphertext yang berbeda.

Untuk lebih meningkatkan keamanan dari metoda ini penulis juga mengembangkan inisialisasi kunci yang baru yang kita sebut saja inisialisasi SK (strengtened key), pada proses ini kunci user di-expand hingga 260 byte (tetapi kemudian hanya 256 byte saja yang digunakan) dengan menggunakan SHA-1, caranya pertama kunci user dijadikan kunci, kemudian 1-20 byte pertama pada buffer diproses dengan SHA kemudian digestnya diletakan pada 20 byte pertama, kemudian diambil byte 1-40 diproses dengan SHA dan hasilnya diletakan mulai pada byte 20, berikutnya byte 1-60 hasilnya diletakkan pada mulai byte 40, dan seterusnya. Kemudian buffer ini dienkrip dengan RC4, lalu buffer dijadikan kunci kembali, proses terakhir ini diulang sebanyak 16 kali untuk mencoba mencampur dengan baik sehingga dihasilkan kunci yang se-random mungkin. Untuk lebih jelas tetang proses ini dapat dilihat pada listing. Penggunaan SHA pada proses inisialisasi kunci bukanlah hal yang baru, hal ini dapat dilihat pada proses inisialisasi kunci SEAL misalnya. Penggunaan proses primitif enkripsi pada inisialisasi kunci juga digunakan juga pada Blowfish ataupun Cobra-128. Secara teoritis dengan proses ini akan ekivalen dengan menggunakan kunci sebesar 2048 bit, walaupun penulis sendiri tidak yakin akan hal ini (mungkin pembaca ada yang bisa memberikan tanggapan). Metoda ini tampaknya sedikit lebih rumit dari pada inisialisasi kunci standar, tetapi pada Pentium 133 prosesnya hanya memerlukan waktu kurang sari 10ms saja. Metoda ini walaupun penulis anggap lebih kuat, tetapi belum teruji sehingga dalam penerapan aplikasinya penulis memberikan dua pilihan yaitu dengan metoda SK ini atau dengan metoda standar.

December 31, 2007 Posted by | Kriptografi | Leave a comment

Pengenalan AES (Advanced Encryption Standard)

AES (Advanced Encryption Standard) adalah lanjutan dari algoritma enkripsi standar DES (Data Encryption Standard) yang masa berlakunya dianggap telah usai karena factor keamanan. Kecepatan computer yang sangat pesat dianggap sangat membahayakan DES, sehingga pada tanggal 2 Maret tahun 2001 ditetapkanlah algoritma baru Rijndael sebagai AES. Rijndael dipilih dari 15 algoritma yang didaftarkan oleh berbagai kalangan industri dan akademik di seluruh dunia ke NIST (National Institute of Standard and Technology), Amerika.Kriteria pemilihan AES didasarkan pada 3 kriteria yaitu : keamanan, harga, dan karakteristik algoritma beserta implementasinya. Keamanan merupakan factor terpenting dalam evaluasi (minimal seaman triple DES), yang meliputi ketahanan terhadap semua analisis sandi yang telah diketahui dan diharapkan dapat menghadapi analisis sandi yang belum diketahui. Disamping itu, AES juga harus dapat digunakan membayar royalty, dan juga murah untuk diimplementasikan pada smart card yang memiliki ukuran memorikecil. AES juga harus efisien dan cepat (minimal secepat triple DES) dijalankan dalam berbagai mesin 8 bit hingga 64 bit, dan berbagai perangkat lunak.DES menggunakan struktur Feistel yang memiliki kelebihan bahwa struktur enkripsi dan dekripsinya sama, meskipun menggunakan fungsi F yang tidak invertible. Kelemahan Feistel yang utama adalah bahwa pada setiap ronde, hanya setengah data yang diolah. Sedangkan AES menggunakan struktur SPN (Subtitution Permutation Network) yang memiliki derajat paralelisme yang lebih besar sehingga diharapkan lebih cepat dari pada Feistel. Kelemahan SPN pada umumnya (termasukpada Rijndael) adalah berbedanya struktur enkripsi dan dekripsi sehingga diperlukan dua algoritma yang berbeda untuk enkripsi dan dekripsi. Dan tentu pula tingkat keamanan enkripsi dan dekripsinya menjadi berbeda.AES[4] meiliki blok masukan dan keluaran serta kunci 128 bit. Untuk tingkat keamanan yang lebih tinggi, AES dapat menggunakan kunci 192 dan 256 bit. Setiap masukan 128 bit plaintext dimasukan kedalam state yang berbentuk bujursangkar berukuran 4×4 byte. State ini di-XOR dngan key dan selanjutnya diolah 10 kali dengan subtitusi-transformasi linear-addkey. Dan diakhir diperoleh ciphertext.

December 31, 2007 Posted by | Kriptografi | 1 Comment

Algoritma RSA

Tentang RSA

December 31, 2007 Posted by | Kriptografi | Leave a comment

ALGORITMA ELGAMAL

ALGORITMA ELGAMAL

December 31, 2007 Posted by | Kriptografi | 1 Comment

Sistem Sandi DES (Data Encryption Standard)

Pertengahan tahun 1973, Pemerintah Amerika Serikat (AS) melalui National Bureau of Standards (NBS) mengumumkan kebutuhan akan suatu algoritma sandi yang akan digunakan sebagai standar untuk melindungi kerahasiaan dan keutuhan data-data penting baik yang sedang ditransmisikan maupun yang disimpan.

Sampai pertengahan tahun 1974 tidak ada satupun algoritma sandi yang diusulkan. Hingga akhirnya pada tanggal 6 Agustus 1974, algoritma sandi yang didesain oleh IBM yang bernama sistem sandi Lucifer ditawarkan kepada NBS. Kemudian setelah dilakukan evaluasi dan modifikasi dengan bantuan National Security Agency (NSA), pada tanggal 15 Juli 1977 NBS menetapkan algaritma Lucifer yang telah dimodifikasi tersebut dengan nama baru Data Encryption Standard atau lebih populer dengan sebutan sistem sandi DES.

Setelah ditetapkan sebagai standar untuk melindungi data dan informasi baik yang ditransmisikan maupun yang disimpan, sistem sandi DES dengan cepat digunakan secara internasional pada hampir diberbagai aplikasi yang membutuhkan penyandian pada saat operasionalnya.

Tercatat penggunaan sistem sandi DES terbesar saat itu adalah pada industri perbankan disamping pemerintahan dan militer. Hal ini mengingat pada institusi tersebut data / informasi yang ditansmisikan dan disimpan banyak yang merupakan data penting yang sensitif dan bersifat rahasia.

Sebelum distandarkan, DES (saat itu masih bernama Lucifer) menggunakan algoritma dengan panjang kunci 128 bit, namun oleh Pemerintah AS panjang kunci DES dibatasi hanya diperbolehkan 56 bit saja dengan maksud agar NSA (National Security Agency) dapat memonitor informasi yang disandikan dengan sistem DES tersebut. Selain menentukan panjang kunci, NSA juga mengubah S-Box (Substitution Box) nya sehinga walaupun S-Box tersebut diubah secara acak, NSA tetap dapat membongkar sistem sandi DES tersebut.

Sebagai sistem sandi modern yang berbasiskan peralatan elektronik, DES beroperasi dalam bentuk bit yang berupa angka binari 0 dan 1, yang berkelompok dengan masing-masing kelompok terdiri dari 4 bit membentuk bilangan heksadesimal atau bilangan berbasis 16.

Binari : 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111

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

DES adalah salah satu metode penyandian dengan sistem block cipher. Yaitu sistem penyandian yang pengacakannya dilakukan secara blok demi blok dengan blok input (teks asli) 64 bit dan menghasilkan output (teks sandi) yang juga per blok 64 bit, algoritma yang digunakan adalah kunci simetris dengan panjang kunci 56 bit.

Saat ini panjang kunci 56 bit dianggap terlalu kecil karena dengan cepat dapat dipecahkan dengan metode analisis brute force attacks. Sehingga sebagai solusinya perlu dibuat algoritma sandi DES dengan kunci yang lebih panjang.

Triple DES merupakan jawaban dari solusi tersebut, sebab Triple DES adalah DES dengan panjang kunci 2 kali 56 bit. Dimana Teks Asli disandi dengan Kunci 56 bit pertama (K-1), menghasilkan Teks Sandi (TS-1). Kemudian TS-1 di sandi kembali dengan Kunci 56 bit kedua (K-2), menghasilkan Teks Sandi berikutnya (TS-2). Kemudian TS-2 di sandi lagi dengan K-1 menghasilkan Teks Sandi terakhir. Ketiga langkah ini disebut dengan Triple DES.

Jadi sesungguhnya Triple DES adalah DES yang dilakukan 3 kali dengan menggunakan 2 kunci 56 bit yang berbeda sehingga panjang kunci menjadi 112 bit. Panjang kunci 112 bit ini akan memperlambat pemecahan teks sandi menggunakan analisis brute force attacks, namun tidak menutup kemungkinan dapat dianalisis dengan metode lainnya seperti linear cryptanalysis atau Davies’ attack.

December 29, 2007 Posted by | Kriptografi | 1 Comment