indah_crypt’s blog











{April 2, 2008}   Support to me

Setiap ujian ada peningkatan,

Allah beserta kita

Kita tdk usah risau,

Kita mohon pertolongan Allah

niscaya Allah akan menolong,Amin.

-My mom-

 

Nyante ae,,

km g sendirian.

Ada org yg sll siap bntu km dgn tulus.

Km hrs sll bdoa.

Allah tdk akan ninggalin km.

Km hrs ttp bsabar.

Yg namana bsabar psti ada balasanna,

wlpn mungkin g scr lsg.

Klo km mo nangis,

luapin ja,jgn ditahan.

Tp km hrs ttp kuat dan jgn pts asa..

SEMANGAT!!!

-Erry-

 

Dik,,hrs tabah n smangat. Jgn lp b’doa.

-Bapak-

 

Semoga Allah SWT meridloi n mberi barokah n mmudahkan sgl urusan. Ibu sgt mcintaimu.

- My mom-

 

Life will be end when we stop to hope

A hope will be lose when we feel hopeless

Dream come true if we try harder to make it real

 

Semangat ya Ndah,

Allah g akan ksh cobaan di luar kmampuan qt.

-Martha-

 

Saudariq….
sabar ya..

dg sabar km psti bs dpt hikmah dr semua cobaan…

jgn mrs sendiri,40 orang yg laen akan selalu ada di belakangmu untuk selalu mendukungmu…
luph u sist..

-Ria-

 

Udhlh g ush dsesalin, g ush sdih n nangis. Instropeksi diri ja. Serahin ja ma yg d ATAS, mgkin dh jd kehendakNya,

SEMANGAT!!

-Fendy-

 

If u ever think that u’re all alone, that no one notices or cares, remember this God see u, God understand, God can make things better 4 u and I’ll always with u..

-Martha-

 

Skl lg jgn da kt pnyesalan. Yg b’lalu dan tjadi jdikn pedoman km. Pcayalah km pst bs.

-Aryo-

 



Program ini berisi mengenai Pembangkit Permutasi dan Pembangkit Combinasi. Hal ini biasa digunakan dalam mata pelajaran matematika. Dalam program ini digunakan bahasa pemrograman C. Program ini dapat menghitung sampai n=100. Sebenarnya bisa untuk n berapa aja, tetapi itu harus menggunakan memori dinamis. Inputan bisa berupa huruf, angka, maupun kata tapi panjang kata max 19 karakter.

Program Pembangkit Permutasi dan Kombinasi



{Januari 30, 2008}   Kriptografi

KRIPTOGRAFI

 

 

 

 

 

Pengertian Dasar

Suatu pesan yang tidak disandikan disebut sebagai plaintext ataupun dapat disebut juga sebagai cleartext. Proses yang dilakukan untuk mengubah plaintext ke dalam ciphertext disebut encryption atau encipherment. Sedangkan proses untuk mengubah ciphertext kembali ke plaintext disebut decryption atau decipherment.

Kriptografi, secara umum adalah ilmu dan seni untuk menjaga kerahasiaan berita [bruce Schneier - Applied Cryptography]. Selain pengertian tersebut terdapat pula pengertian ilmu yang mempelajari teknik-teknik matematika yang berhubungan dengan aspek keamanan informasi seperti kerahasiaan data, keabsahan data, integritas data, serta autentikasi data [A. Menezes, P. van Oorschot and S. Vanstone - Handbook of Applied Cryptography]. Tidak semua aspek keamanan informasi ditangani oleh kriptografi.

Cryptography adalah suatu ilmu ataupun seni mengamankan pesan, dan dilakukan oleh cryptographer. Sedang, cryptanalysis adalah suatu ilmu dan seni membuka (breaking) ciphertext dan orang yang melakukannya disebut cryptanalyst.

Ada empat tujuan mendasar dari ilmu kriptografi ini yang juga merupakan aspek keamanan informasi yaitu :

  • Kerahasiaan, adalah layanan yang digunakan untuk menjaga isi dari informasi dari siapapun kecuali yang memiliki otoritas atau kunci rahasia untuk membuka/mengupas informasi yang telah disandi.

  • Integritas data, adalah berhubungan dengan penjagaan dari perubahan data secara tidak sah. Untuk menjaga integritas data, sistem harus memiliki kemampuan untuk mendeteksi manipulasi data oleh pihak-pihak yang tidak berhak, antara lain penyisipan, penghapusan, dan pensubsitusian data lain kedalam data yang sebenarnya.

  • Autentikasi, adalah berhubungan dengan identifikasi/pengenalan, baik secara kesatuan sistem maupun informasi itu sendiri. Dua pihak yang saling berkomunikasi harus saling memperkenalkan diri. Informasi yang dikirimkan melalui kanal harus diautentikasi keaslian, isi datanya, waktu pengiriman, dan lain-lain.

  • Non-repudiasi, atau nirpenyangkalan adalah usaha untuk mencegah terjadinya penyangkalan terhadap pengiriman/terciptanya suatu informasi oleh yang mengirimkan/membuat.

 

Cryptographic system atau cryptosystem adalah suatu fasilitas untuk mengkonversikan plaintext ke ciphertext dan sebaliknya. Dalam sistem ini, seperangkat parameter yang menentukan transformasi pencipheran tertentu disebut suatu set kunci. Proses enkripsi dan dekripsi diatur oleh satu atau beberapa kunci kriptografi. Secara umum, kunci-kunci yang digunakan untuk proses pengenkripsian dan pendekripsian tidak perlu identik, tergantung pada sistem yang digunakan.

Secara umum operasi enkripsi dan dekripsi dapat diterangkan secara matematis sebagai berikut :

EK (M)= C (Proses Enkripsi)

DK (C)= M Proses (Dekripsi)

Pada saat proses enkripsi kita menyandikan pesan M dengan suatu kunci K lalu dihasilkan pesan C. Sedangkan pada proses dekripsi, pesan C tersebut diuraikan dengan menggunakan kunci K sehingga dihasilkan pesan M yang sama seperti pesan sebelumnya.

Dengan demikian keamanan suatu pesan tergantung pada kunci ataupun kunci-kunci yang digunakan, dan tidak tergantung pada algoritma yang digunakan. Sehingga algoritma-algoritma yang digunakan tersebut dapat dipublikasikan dan dianalisis, serta produk-produk yang menggunakan algoritma tersebut dapat diproduksi massal. Tidaklah menjadi masalah apabila seseorang mengetahui algoritma yang kita gunakan. Selama ia tidak mengetahui kunci yang dipakai, ia tetap tidak dapat membaca pesan.

 

Cryptographic system (cryptosystem)

Suatu cryptosystem terdiri dari sebuah algoritma, seluruh kemungkinan plaintext, ciphertext dan kunci-kunci. Secara umum cryptosystem dapat digolongkan menjadi dua buah, yaitu :

  1. Symmetric Cryptosystem

Dalam symmetric cryptosystem ini, kunci yang digunakan untuk proses enkripsi dan dekripsi pada prinsipnya identik, tetapi satu buah kunci dapat pula diturunkan dari kunci yang lainnya. Kunci-kunci ini harus dirahasiakan. Oleh karena itulah sistem ini sering disebut sebagai secret-key ciphersystem. Jumlah kunci yang dibutuhkan umumnya adalah :

nC2=n.(n-1) / 2

dengan n menyatakan banyaknya pengguna. Contoh dari sistem ini adalah Data Encryption Standard (DES), Blowfish, IDEA.

 

  1. Assymmetric Cryptosystem

Dalam assymmetric cryptosystem ini digunakan dua buah kunci. Satu kunci yang disebut kunci publik (public key) dapat dipublikasikan, sedang kunci yang lain yang disebut kunci privat (private key) harus dirahasiakan. Proses menggunakan sistem ini dapat diterangkan secara sederhana sebagai berikut : bila A ingin mengirimkan pesan kepada B, A dapat menyandikan pesannya dengan menggunakan kunci publik B, dan bila B ingin membaca surat tersebut, ia perlu mendekripsikan surat itu dengan kunci privatnya. Dengan demikian kedua belah pihak dapat menjamin asal surat serta keaslian surat tersebut, karena adanya mekanisme ini. Contoh sistem ini antara lain RSA Scheme dan Merkle-Hellman Scheme.

Setiap cryptosytem yang baik harus memiliki karakteristik sebagai berikut :

  • Keamanan sistem terletak pada kerahasiaan kunci dan bukan pada kerahasiaan algoritma yang digunakan.

  • Cryptosystem yang baik memiliki ruang kunci (keyspace) yang besar.

  • Cryptosystem yang baik akan menghasilkan ciphertext yang terlihat acak dalam seluruh tes statistik yang dilakukan terhadapnya.

  • Cryptosystem yang baik mampu menahan seluruh serangan yang telah dikenal sebelumnya

Namun demikian perlu diperhatikan bahwa bila suatu cryptosystem berhasil memenuhi seluruh karateristik di atas belum tentu ia merupakan sistem yang baik. Banyak cryptosystem lemah yang terlihat baik pada awalnya. Kadang kala untuk menunjukkan bahwa suatu cryptosystem kuat atau baik dapat dilakukan dengan menggunakan pembuktian matematika.

Hingga saat ini masih banyak orang yang menggunakan cryptosystem yang relatif mudah dibuka, alasannya adalah mereka tidak mengetahui sistem lain yang lebih baik serta kadang kala terdapat motivasi yang kurang untuk menginvestasikan seluruh usaha yang diperlukan untuk membuka suatu sistem.

 

Cryptographic Protokol

Pengertian

Suatu protokol adalah serangkaian langkah yang melibatkan dua pihak atau lebih dan dirancang untuk menyelesaikan suatu tugas. Dari definisi ini dapat diambil beberapa arti sebagai berikut :

  • protokol memiliki urutan dari awal hingga akhir;

  • setiap langkah harus dilaksanakan secara bergiliran;

  • suatu langkah tidak dapat dikerjakan bila langkah sebelumnya belum selesai;

  • diperlukan dua pihak atau lebih untuk melaksanakan protokol;

  • protokol harus mencapai suatu hasil;

Selain itu, suatu protokol pun memiliki karakteristik yang lain, yaitu :

  • setiap orang yang terlibat dalam protokol harus mengetahui terlebih dahulu mengenai protokol dan seluruh langkah yang akan dilaksanakan;

  • setiap orang yang terlibat dalam protokol harus menyetujui untuk mengikutinya;

  • protokol tidak boleh menimbulkan kerancuan;

  • protokol harus lengkap;

Cryptographic protocol adalah suatu protokol yang menggunakan kriptografi. Protokol ini melibatkan sejumlah algoritma kriptografi, namun secara umum tujuan protokol lebih dari sekedar kerahasiaan. Pihak-pihak yang berpartisipasi mungkin saja ingin membagi sebagian rahasianya untuk menghitung sebuah nilai, menghasilkan urutan random, atau pun menandatangani kontrak secara bersamaan. Penggunaan kriptografi dalam sebuah protokol terutama ditujukan untuk mencegah atau pun mendeteksi adanya eavesdropping dan cheating.

Fungsi Protokol

Dalam kehidupan kita sehari-hari terdapat banyak sekali protokol tidak resmi, misalnya saja dalam permainan kartu, pemungutan suara dalam pemilihan umum. Akan tetapi tidak ada seorang pun yang memikirkan mengenai protokol-protokol ini, protokol-protokol ini terus berkembang, semua orang mengetahui bagaimana menggunakannya.

Saat ini, semakin banyak interaksi antar manusia dilakukan melalui jaringan komputer. Komputer ini tentu saja memerlukan suatu protokol formal agar dapat melakukan hal yang biasa dilakukan manusia tanpa berpikir. Bila kita berpindah dari satu daerah ke daerah lain dan mengetahui bahwa kartu pemilihan suaranya berbeda dengan yang biasa kita gunakan, kita dapat beradaptasi dengan mudah. Akan tetapi kemampuan ini belum dimiliki oleh komputer, sehingga diperlukan suatu protokol.

Protokol digunakan untuk mengabtraksikan proses penyelesaian suatu tugas dari mekanisme yang digunakan. Protokol komunikasi adalah sama meskipun diimplementasikan pada PC atau VAX. Bila kita yakin bahwa kita memiliki protokol yang baik, kita dapat mengimplementasikannya dalam segala benda mulai dari telepon hingga pemanggang roti cerdas.

Penyerangan terhadap protokol

Penyerangan cryptographic dapat ditujukan pada beberapa hal berikut :

  • algoritma cryptographic yang digunakan dalam protokol;

  • teknik cryptographic yang digunakan untuk mengimplementasikan algoritma dan protokol;

  • protokol itu sendiri;

Seseorang dapat mencoba berbagai cara untuk menyerang suatu protokol. Mereka yang tidak terlibat dalam protokol dapat menyadap sebagian atau seluruh protokol. Tindakan ini disebut penyerangan pasif, karena si penyerang tidak mempengaruhi atau mengubah protokol, ia hanya mengamati protokol dan berusaha untuk memperoleh informasi.

Selain itu, seorang penyerang dapat berusaha untuk mengubah protokol demi keuntungannya sendiri. Ia dapat mengirimkan pesan dalam protokol, menghapus pesan, atau bahkan mengubah informasi yang ada di dalam suatu komputer. Tindakan-tindakan ini disebut sebagai penyerangan aktif, karena ia membutuhkan suatu campur tangan aktif.

Seorang penyerang tidaklah hanya berasal dari lingkungan luar protokol, namun ia mungkin juga berasal dari dalam protokol itu sendiri, ia dapat merupakan salah satu pihak yang terlibat dalam protokol. Tipe penyerang semacam ini disebut sebagai cheater. Passive cheater mengikuti protokol, tetapi berusaha memperoleh informasi lebih banyak daripada yang diperbolehkan protokol bagi dirinya. Active cheater mengubah protokol dalam usahanya untuk berbuat curang.

Usaha untuk menjaga keamanan protokol akan semakin sulit apabila pihak-pihak yang terlibat umumnya merupakan active cheater, oleh karena itu suatu protokol yang baik harus mampu atau pun harus aman terhadap kemungkinan passive cheating.

Berbagai macam basic cryptanalytic attacks

Tujuan cryptanalytic attack adalah untuk mengetahui beberapa plaintext yang sesuai dengan ciphertext yang ada dan berusaha menentukan kunci yang memetakan satu dengan yang lainnya. Plaintext ini dapat diketahui karena ia merupakan standar atau karena pendugaan. Jika suatu teks diduga berada di dalam suatu pesan, posisinya mungkin tidak diketahui, tetapi suatu pesan lazimnya cukup pendek sehingga memungkinkan cryptanalyst menduga plaintext yang diketahui dalam setiap posisi yang mungkin dan melakukan penyerangan pada setiap kasus secara paralel.

Suatu algoritma enkripsi yang kuat tidak hanya mampu bertahan terhadap serangan plaintext yang dikenal tetapi juga mampu bertahan terhadap adaptive chosen plaintext. Dalam penyerangan ini, cryptanalyst berkesempatan memilih plaintext yang digunakan dan dapat melakukannya secara berulang kali, memilih plaintext untuk tahap N+1 setelah menganalisis hasil tahap N.

Yang dimaksud cryptanalytic attacks adalah usaha-usaha yang dilakukan seseorang untuk memperoleh informasi ataupun data yang telah dienkripsi. Secara ringkas terdapat tujuh macam basic cryptanalytic attacks berdasarkan tingkat kesulitannya bagi penyerang, dimulai dari yang paling sulit adalah :

  • Ciphertext-only attack. Dalam penyerangan ini, seorang cryptanalyst memiliki ciphertext dari sejumlah pesan yang seluruhnya telah dienkripsi menggunakan algoritma yang sama.

  • Known-plaintext attack. Dalam tipe penyerangan ini, cryptanalyst memiliki akses tidak hanya ke ciphertext sejumlah pesan, namun ia juga memiliki plaintext pesan-pesan tersebut.

  • Chosen-plaintext attack. Pada penyerangan ini, cryptanalyst tidak hanya memiliki akses atas ciphertext dan plaintext untuk beberapa pesan, tetapi ia juga dapat memilih plaintext yang dienkripsi.

  • Adaptive-chosen-plaintext attack. Penyerangan tipe ini merupakan suatu kasus khusus chosen-plaintext attack. Cryptanalyst tidak hanya dapat memilih plaintext yang dienkripsi, ia pun memiliki kemampuan untuk memodifikasi pilihan berdasarkan hasil enkripsi sebelumnya. Dalam chosen-plaintext attack, cryptanalyst mungkin hanya dapat memiliki plaintext dalam suatu blok besar untuk dienkripsi; dalam adaptive-chosen-plaintext attack ini ia dapat memilih blok plaintext yang lebih kecil dan kemudian memilih yang lain berdasarkan hasil yang pertama, proses ini dapat dilakukannya terus menerus hingga ia dapat memperoleh seluruh informasi.

  • Chosen-ciphertext attack. Pada tipe ini, cryptanalyst dapat memilih ciphertext yang berbeda untuk didekripsi dan memiliki akses atas plaintext yang didekripsi.

  • Chosen-key attack. Cryptanalyst pada tipe penyerangan ini memiliki pengetahuan tentang hubungan antara kunci-kunci yang berbeda.

  • Rubber-hose cryptanalysis. Pada tipe penyerangan ini, cryptanalyst mengancam, memeras, atau bahkan memaksa seseorang hingga mereka memberikan kuncinya.

Analisis berbagai tipe penyerangan secara matematis

Suatu penyerangan pasif atas cryptosystem adalah semua metode untuk mengungkapkan informasi tentang plaintext dan ciphertextnya dengan tanpa mengetahui kunci. Secara matematis :

Diberikan fungsi F, G, dan H yang terdiri dari n variabel.

Diberikan sistem enkripsi E.

Diberikan suatu distribusi plaintext dan kunci.

Suatu penyerangan atas E dengan menggunakan G dengan mengasumsikan F membagi H dengan probabilitas p adalah suatu algoritma A dengan sepasang input f,g dan satu buah output h sedemikian hingga terdapat probabilitas p atas h = H(P1, …, Pn), jika kita memiliki f = F(P1, …, Pn) dan g = G(EK(P1), …, EK(Pn)). Perlu diperhatikan bahwa probabilitas ini tergantung pada distribusi vektor-vektor (K,P1,…,Pn).

Penyerangan akan merupakan suatu trivial bila terdapat probabilitas paling sedikir p untuk h = H(P1, …, Pn) jika f = F (P1,…,Pn) dan g = G (C1,…,Cn). Di sini C1,…,Cn terletak pada ciphertext yang mungkin, dan tidak memiliki hubungan tertentu dengan P1,…,Pn. Dengan kata lain, suatu serangan akan merupakan trivial bila ia tidak benar-benar menggunakan enkripsi EK(P1),…,EK(Pn).

Dengan merumuskan penyerangan secara matematis, kita dapat secara tepat memformulasikan dan bahkan membuktikan pernyataan bahwa suatu cryptosystem itu kuat. Kita katakan, sebagai contoh, bahwa suatu cryptosystem adalah aman terhadap seluruh penyerangan pasif jika sembarang penyerangan nontrivial terhadapnya tidak praktis. Jika kita dapat membuktikan pernyataan ini maka kita akan memiliki keyakinan bahwa cryptosystem kita akan bertahan terhadap seluruh teknik cryptanalytic pasif. Jika kita dapat mereduksi pernyataan ini hingga pada beberapa masalah yang tidak terpecahkan maka kita masih tetap memiliki keyakinan bahwa cryptosystem kita tidak mudah dibuka.

Ciphertext-only attack

Dengan menggunakan notasi di atas, suatu ciphertext-only attack adalah suatu penyerangan dengan F adalah konstanta. Diberikan hanya beberapa informasi G(EK(P1),..EK(Pn)) tentang n ciphertext, penyerangan harus memiliki kesempatan menghasilkan beberapa informasi H(P1,…,Pn) tentang plaintext. Penyerangan akan merupakan suatu trivial bila ia hanya menghasilkan H(P1,…,Pn) ketika diberikan G(C1,…,Cn) untuk C1,…,Cn acak.

Sebagai contoh, misalkan G ( C ) = C dan misalkan H(P) adalah bit pertama P. Kita dapat secara mudah menulis suatu penyerangan, pendugaan, yang menduga bahwa H(P) adalah 1. Penyerangan ini adalah trivial karena tidak menggunakan ciphertext, probabilitas keberhasilannya adalah 50 %. Di lain pihak, terdapat penyerangan atas RSA yang memproduksi satu bit informasi tentang P, dengan probabilitas keberhasilan 100 %, menggunakan C. Jika diberikan suatu C acak maka tingkat kesuksesan turun menjadi 50%. Inilah yang disebut penyerangan nontrivial.

Known-plaintext attack

Penyerangan known-plaintext klasik memiliki F(P1,P2) = P1, G(C1,C2) = (C1,C2), dan H(P1,P2) tergantung hanya pada P2. Dengan kata lain, bila diberikan dua ciphertext C1 dan C2 dan satu dekripsi P1, penyerangan known-plaintext seharusnya menghasilkan informasi tentang dekripsi P2.

Brute-force attack

Umpamakan penyerangan known-plaintext berikut. Kita diberikan sejumlah plaintext P1,…,Pn-1 dan ciphertext C1,…,Cn-1. Kita juga diberikan sebuah ciphertext Cn. Kita jalankan seluruh kunci K. Bila kita temukan K sedemikian sehingga EK(P1) = Ci untuk setiap I<n, kita cetak DK(Cn).

Jika n cukup besar sehingga hanya satu kunci yang bekerja, penyerangan ini akan sukses untuk seluruh input yang valid pada setiap waktu, sementara ia akan menghasilkan hasil yang tepat hanya sekali untuk input acak. Penyerangan ini adalah nontrivial, masalahnya ia sangat lambat bila terdapat banyak kemungkinan kunci.

 

 

 



{Januari 28, 2008}   Algoritma Kriptografi Modern

Algoritma Kriptografi Modern

 

 

Kriptografi modern menggunakan gagasan dasar yang sama seperti kriptografi klasik (permutasi dan transposisi) tetapi penekanannya berbeda. Pada kriptografi klasik, kriptografer menggunakan algoritma yang sederhana, yang memungkinkan cipherteks dapat dipecahkan dangan mudah (melalui penggunaan statistik, terkaan, intuisi, dsb). Algoritma kriptografi modern dibuat sedemikian kompleks sedemikian sehingga kriptanalis sangat sulit memecahkan cipherteks tanpa mengetahui kunci.

Algoritma kriptografi modern umumnya beroperasi dalam mode bit ketimbang mode karakter. Operasi dalam mode bit berarti semua data dan informasi (baik kunci, plainteks, maupun cipherteks) dinyatakan dalam rangkaian (string) bit biner, 0 dan 1. Algoritma enkripsi dan dekripsi memproses semua data dan informasi dalam bentuk rangkaian bit. Rangkaian bit yang menyatakan plainteks dienkripsi menjadi cipherteks dalam bentuk rangkaian bit, demikian sebaliknya.

 

Kategori Cipher Kunci-Simetri

Algoritma kunci-simetri mengacu pada metode enkripsi yang dalam hal ini pengirim maupun penerima memiliki kunci yang sama. Algoritma kunci-simetri modern beroperasi dalam mode bit dan dapat dikelompokkan menjadi dua kategori:

  1. Cipher aliran (stream cipher)

Algoritma kiptografi beroperasi pada plainteks/cipherteks dalam bentuk bit tunggal, yang dalam hal ini rangkaian bit dienkripsikan/didekripsikan bit per bit. Cipher aliran mengenkripsi satu bit setiap kali.

Algoritma-algoritma sandi kunci-simetris

Beberapa contoh algoritma yang menggunakan kunci-simetris:

  • DES (Data Encryption Standard)

  • Blowfish

  • Twofish

  • MARS

  • IDEA

  • 3DES (DES diaplikasikan 3 kali)

  • AES (Advanced Encryption Standard, yang bernama asli rijndael)

 

 

  1. Cipher blok(block cipher)

Algoritma kriptografi beroperasi pada plainteks/cipherteks dalam bentuk blok bit, yang dalam hal ini rangkaian bit dibagi menjadi blok-blok bit yang panjangnya sudah ditentukan sebelumnya. Misalnya panjang blok adalah 64 bit, maka itu berarti algoritma enkripsi memerlukan 8 karakter setiap kali enkripsi (1 karakter = 8 bit dalam pengkodean ASCII). Cipher blok mengenkripsi satu blok bit setiap kali.

  • Pada cipher blok, rangkaian bit-bit plainteks dibagi menjadi blok-blok bit dengan panjang sama, biasanya 64 bit (tapi adakalanya lebih). Algoritma enkripsi menghasilkan blok cipherteks yang – pada kebanyakan sistem kriptografi simetri – berukuran sama dengan blok plainteks.

  • Dengan blok cipher, blok plainteks yang sama akan dienkripsi menjadi blok cipherteks yang sama bila digunakan kunci yang sama pula. Ini berbeda dengan cipher aliran dimana bit-bit plainteks yang sama akan dienkripsi menjadi bit-bit cipherteks yang berbeda setiap kali dienkripsi.

  • Misalkan blok plainteks (P) yang berukuran m bit dinyatakan sebagai vektor

P = (p1, p2, …, pm)

yang dalam hal ini pi adalah 0 atau 1 untuk i = 1, 2, …, m, dan blok cipherteks (C) adalah

C = (c1, c2, …, cm)

yang dalam hal ini ci adalah 0 atau 1 untuk i = 1, 2, …, m.

Bila plainteks dibagi menjadi n buah blok, barisan blok-blok plainteks dinyatakan sebagai

(P1, P2, …, Pn)

Untuk setiap blok plainteks Pi, bit-bit penyusunnya dapat dinyatakan sebagai vektor

Pi = (pi1, pi2, …, pim)

  • Enkripsi dan dekripsi dengan kunci K dinyatakan berturut-turut dengan persamaan

EK(P) = C

untuk enkripsi, dan

DK(C) = P

Fungsi E haruslah fungsi yang berkoresponden satu-ke-satu, sehingga

E-1 = D

Skema enkripsi dan dekripsi dengan cipher blok digambarkan pada Gambar 1.

Enkripsi: Dekripsi:

Blok Plainteks P Blok Cipherteks CA

P = (p1, p2, …, pm) C = (c1, c2, …, cm)

Kunci K E Kunci K D

Blok Cipherteks C Blok Plainteks P

C = (c1, c2, …, cm) P = (p1, p2, …, pm)

Gambar 1 Skema enkripsi dan dekripsi pada cipher blok

 

Block-Cipher

Untuk menambah kehandalan model algoritma sandi ini, dikembangkan pula beberapa tipe proses enkripsi, yaitu :

  • ECB (Eectronic Code Book)

  • CBC (Cipher Block Chaining)

  • OFB (Output Feed Back)

  • CFB (Cipher Feed Back)

 

 

Fungsi Hash Kriptografis

 

Fungsi hash Kriptografis adalah fungsi hash yang memiliki beberapa sifat keamanan tambahan sehingga dapat dipakai untuk tujuan keamanan data. Umumnya digunakan untuk keperluan autentikasi dan integritas data. Fungsi hash adalah fungsi yang secara efisien mengubah string input dengan panjang berhingga menjadi string output dengan panjang tetap yang disebut nilai hash.

Sifat-Sifat Fungsi Hash Kriptografi

  • Tahan preimej (Preimage resistant): bila diketahui nilai hash h maka sulit (secara komputasi tidak layak) untuk mendapatkan m dimana h = hash(m).

  • Tahan preimej kedua (Second preimage resistant): bila diketahui input m1 maka sulit mencari input m2 (tidak sama dengan m1) yang menyebabkan hash(m1) = hash(m2).

  • Tahan tumbukan (Collision-resistant): sulit mencari dua input berbeda m1 dan m2 yang menyebabkan hash(m1) = hash(m2)

Algoritma-Algoritma Fungsi Hash Kriptografi

Beberapa contoh algoritma fungsi hash Kriptografi:

  1. MD4

  2. MD5

  3. SHA-0

  4. SHA-1

  5. SHA-256

  6. SHA-512

 

 

 

 

 

 

 

 

 

 

 

 



{Desember 30, 2007}   Sistem Sandi Modern

KRIPTOGRAFI KUNCI-PUBLIK

Sampai akhir tahun 1975, hanya ada kriptografi kunci-simetri. Karena kriptografi simetri menggunakan kunci yang sama untuk enkripsi dan dekripsi, maka hal ini mengimplikasikan dua pihak yang berkomunikasi saling mempercayai. Kedua pihak harus menjaga kerahasiaan kunci. Satu masalah kritis di dalam sistem kriptografi kunci-simetri adalah cara mendistribusikan kunci. Baik pengirim maupun penerima harus berbagi kunci yang sama. Mengirim kunci dari pengirim ke penerima melalui saluran publik (seperti melalui pos, telepon, internet, dsb) jelas tidak aman, karena pihak lawan dapat menyadap kunci selama transmisi. Oleh karena itu kunci harus dikirim melalui saluran kedua yang benar-benar aman (misalnya melalui kurir) atau bertemu pada tempat yang ditentukan untuk membagi kunci. Perhatikanlah kedua itu umumnya lambat dan mahal.

Masalah ini dipecahkan oleh Diffie dan Hellman dengan mengusulkan kriptografi nirsimetri (asymmetric cryptosystem) yang memungkinkan pengguna berkomunikasi secara aman tanpa perlu berbagi kunci rahasia. Nama lainnya adalah kriptografi kunci-publik (public-key cryptography), sebab kunci untuk enkripsi diumumkan kepada publik sehingga dapat diketahui oleh siapapun, sementara kunci untuk dekripsi hanya diketahui oleh penerima pesan (karena itu rahasia). Siapapun dapat mengirim pesan yang dienkripsi dengan kunci publik tersebut, tetapi hanya penerima pesan yang dapat mendekripsi pesan karena hanya ia yang mengetahui kunci privatnya sendiri. Ini berlawanan dengan kriptografi kunci simetri yang hanya mempunya satu kunci.

Keuntungan kriptografi kunci-publik ada dua. Pertama, tidak ada kebutuhan untuk mendistribusikan kunci privat sebagaimana pada kriptografi kunci-simetri. Kunci publik dapat dikirim ke penerima melalui saluran yang sama dengan saluran yang digunakan untuk mengirim pesan. Perhatikan bahwa saluran untuk mengirim pesan umumnya tidak aman. Kedua, jumlah kunci dapat ditekan. Untuk komunikasi secara rahasia dengan banyak orang tidak perlu kunci rahasia sebanyak jumlah orang tersebut, cukup membuat dua buah kunci, yaitu kunci pulik bagi para koresponden untuk mengenkripsi pesan, dan kunci privat untuk mendekripsi pesan. Berbeda dengan kriptografi kunci-simetri dimana jumlah kunci yang dibuat adalah sebanyak jumlah pihak yang diajak korespondensi.

Yang termasuk algoritma kriptografi kunci publik adalah RSA, ElGamal, Algoritma Pertukaran Kunci Diffie-Hellman, Algoritma Knapsack. Berikut akan dijelaskan mengenai salah satu dari algoritma kunci publik yaitu RSA.

 

 

RSA

 

Pada tahun 1978, Ron Rivest, Adi Shamir, dan Leonard Adleman yang merupakan tiga orang professor di MIT (Massachussets Institute of Technology), pertama kali mempublikasikan teori secret exponents yang diberi nama RSA (Rivest, Shamir, Adleman) yang merupakan suatu metode untuk memperoleh Digital Signatures dan Public-Key Cryptosystems.

Algoritma RSA adalah algoritma yang paling popular dari sekian banyak algoritma kriptografi kunci-publik yang pernah dibuat. Algoritma RSA didasarkan pada bukti bahwa menemukan bilangan prima yang cukup besar kemudian mengkalikannya lebih mudah dibandingkan memfaktorkan hasil dari perkalian dua buah bilangan prima tersebut untuk mendapatkan faktornya yang merupakan dua buah bilangan prima itu sendiri.

Algoritma RSA memiliki besaran-besaran sbagai berikut :

1. p dan q bilangan prima (rahasia)

2. n = p . q (tidak rahasia)

3. ф(n) = (p-1)(q-1) (rahasia)

4. e (kunci enkripsi) (tidak rahasia)

5. d (kunci dekripsi) (rahasia)

6. m (plainteks) (rahasia)

7. c (cipherteks) (tidak rahasia)

 

Perumusan Algoritma RSA

Algoritma RSA didasarkan pada teorema Euler yang menyatakan bahwa

a ф(n) ≡ 1 (mod n)

denagn syarat :

a harus relative prima terhadap n

ф(n) = n (1 – 1/p1)(1 – 1/p2) … (1 – 1/pr), yang dalam hal ini p1,p2, …,pr adalah faktor prima dari n. ф(n) adalah fungsi yang menentukan berapa banyak dari bilangan-bilangan 1,2,3, …,n yang relative prima terhadap n.

Deskripsi Algoritma RSA

Secara garis besar proses dari RSA terbagi ke dalam tiga buah proses, yaitu key generation, encryption, dan decryption

a) Key Generation (Pembangkit pasangan kunci)

Public key adalah kunci publik untuk setiap user dapat diperoleh melalui prosedur berikut:

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

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

3. Hitung ф(n) = (p-1)(q-1)

4. Pilih kunci public, e, yang relative prima terhadap ф(n)

5. Bangkitkan kunci privat, yaitu e . d ≡ 1 (mod ф(n)). Perhatikan bahwa e . d ≡1 (mod ф(n)) ekivalen denagn e . d = 1 + kф(n), sehingga secara sederhana d dapat dihitung dengan d = (1 + kф(n)) / e

6. Nilai dari (e,n) adalah kunci publiknya dan (d,n) adalah kunci privatnya

 

b) Encryption (Enkripsi)

1. Ambil kunci publik pnerima pesan, e, dan modulus n

2. Nyatakan plainteks m menjadi blok-blok m1, m2, …sedemikian sehingga setiap blok mempresentasikan niali di dalam selang [0, n-1]

3. Setiap blok mi dienkripsi menjadi blok ci dengan rumus ci = mi e mod n

 

c) Decryption (Dekripsi)

Setiap blok cipherteks ci didekripsi kembali menjadi blok mi dengan rumus

mi = ci d mod n

 

Flowchart Algoritma RSA

 

 

(Flowchart Algoritma RSA)

 

Source Code RSA (C program)

#include <stdio.h>

#include <math.h>

 

#define TRUE 1

#define FALSE 0

 

void get_prime( long *val);

long getE( long PHI);

long get_common_denom( long e, long PHI);

long getD( long e, long PHI);

long decrypt(long c,long n, long d);

 

int main(void)

{

long a,b,n,e,PHI,d,m,c;

 

get_prime(&a);

get_prime(&b);

n=a*b;

PHI=(a-1)*(b-1);

e=getE(PHI);

 

d= getD(e,PHI);

printf(“Enter input value >> “); scanf(“%ld”,&m);

 

printf(“a=%ld b=%ld n=%ld PHI=%ld\n”,a,b,n,PHI);

 

c=(long)pow(m,e) % n; /* note, this may overflow with large numbers */

/* when e is relatively large */

printf(“e=%ld d=%ld c=%ld\n”,e,d,c);

 

m=decrypt(c,n,d); /* this function required as c to */

/*the power of d causes an overflow */

printf(“Message is %ld “,m);

return(0);

}

 

long decrypt(long c,long n, long d)

{

long i,g,f;

 

if (d%2==0) g=1; else g=c;

 

for (i=1;i<=d/2;i++)

{

f=c*c % n;

g=f*g % n;

}

return(g);

}

 

long getD( long e, long PHI)

{

long u[3]={1,0,PHI};

long v[3]={0,1,e};

long q,temp1,temp2,temp3;

 

while (v[2]!=0)

{

q=floor(u[2]/v[2]);

temp1=u[0]-q*v[0];

temp2=u[1]-q*v[1];

temp3=u[2]-q*v[2];

u[0]=v[0];

u[1]=v[1];

u[2]=v[2];

v[0]=temp1;

v[1]=temp2;

v[2]=temp3;

}

if (u[1]<0) return(u[1]+PHI);

else return(u[1]);

}

 

long getE( long PHI)

{

long great=0, e=2;

 

while (great!=1)

{

e=e+1;

great = get_common_denom(e,PHI);

}

return(e);

}

 

long get_common_denom(long e, long PHI)

{

long great,temp,a;

 

if (e >PHI)

{

while (e % PHI != 0)

{

temp= e % PHI;

e =PHI;

PHI = temp;

}

great = PHI;

} else

{

while (PHI % e != 0)

{

a = PHI % e;

PHI = e;

e = a;

}

great = e;

}

return(great);

}

 

void get_prime( long *val)

{

#define NO_PRIMES 13

long primes[NO_PRIMES]={3,5,7,11,13,17,19,23,29,31,37,41,43};

long prime,i;

do

{

prime=FALSE;

printf(“Enter a prime number >> “);

scanf(“%ld”,val);

for (i=0;i<NO_PRIMES;i++)

if (*val==primes[i]) prime=TRUE;

} while (prime==FALSE);

}

 

Padding schemes

Padding schemes harus dibangun secara hati-hati sehingga tidak ada nilai dari m yang menyebabkan masalah keamanan. Sebagai contoh, jika kita ambil contoh sederhana dari penampilan ASCII dari m dan menggabungkan bit-bit secara bersama-sama akan menghasilkan n, kemudian pessan yang berisi ASCII tunggal karakter NUL (nilai numeris 0) akan menghasilkan n= 0, yang akan menghasilkan ciphertext 0 apapun itu nilai dari e dan N yang digunakan. Sama halnya dengan karakter ASCII tunggal SOH (nilai numeris 1) akan selalu menghasilkan chiphertext 1. Pada kenyataannya, untuk sistem yang menggunakan nilai e yang kecil, seperti 3, seluruh karakter tunggal ASCII pada pesan akan disandikan menggunakan skema yang tidak aman, dikarenakan nilai terbesar n adalah nilai 255, dan 2553 menghasilkan nilai yang lebih kecil dari modulus yang sewajarnya, maka proses dekripsi akan menjadi masalah sederhana untuk mengambil pola dasar dari ciphertext tanpa perlu menggunakan modulus N. Sebagai konsekuensinya, standar seperti PKCS didesain dengan sangat hati-hati sehingga membuat pesan asal-asalan dapat terenkripsi secara aman. Dan juga berdasar pada bagian Kecepatan, akan dijelaskan kenapa m hampir bukanlah pesan itu sendiri tetapi lebih pada message key yang dipilh secara acak.

Pengesahan pesan

RSA dapat juga digunakan untuk mengesahkan sebuah pesan. Misalkan Alice ingin mengirim pesan kepada Bob. Alice membuat sebuah hash value dari pesan tersebut, di pangkatkan dengan bilangan d dibagi N (seperti halnya pada deskripsi pesan), dan melampirkannya sebagai “tanda tangan” pada pesan tersebut. Saat Bob menerima pesan yang telah “ditandatangani”, Bob memangkatkan “tanda tangan” tersebut dengan bilangan e dibagi N (seperti halnya pada enkripsi pesan), dan membandingkannya dengan nilai hasil dari hash value dengan hash value pada pesan tersebut. Jika kedua cocok, maka Bob dapat mengetahui bahwa pemilik dari pesan tersebut adalah Alice, dan pesan pun tidak pernah diubah sepanjang pengiriman.

Harap dicatat bahwa padding scheme merupakan hal yang esensial untuk mengamankan pengesahan pesan seperti halnya pada enkripsi pesan, oleh karena itu kunci yang sama tidak digunakan pada proses enkripsi dan pengesahan.

Keamanan

Penyerangan yang paling umum pada RSA ialah pada penanganan masalah faktorisasi pada bilangan yang sangat besar. Apabila terdapat faktorisasi metode yang baru dan cepat telah dikembangkan, maka ada kemungkinan untuk membongkar RSA.

Pada tahun 2005, bilangan faktorisasi terbesar yang digunakan secara umum ialah sepanjang 663 bit, menggunakan metode distribusi mutakhir. Kunci RSA pada umumnya sepanjang 1024—2048 bit. Beberapa pakar meyakini bahwa kunci 1024-bit ada kemungkinan dipecahkan pada waktu dekat (hal ini masih dalam perdebatan), tetapi tidak ada seorangpun yang berpendapat kunci 2048-bit akan pecah pada masa depan yang terprediksi.

Semisal Eve, seorang eavesdropper (pencuri dengar—penguping), mendapatkan public key N dan e, dan ciphertext c. Bagimanapun juga, Eve tidak mampu untuk secara langsung memperoleh d yang dijaga kerahasiannya oleh Alice. Masalah untuk menemukan n seperti pada ne=c mod N di kenal sebagai permasalahan RSA.

Cara paling efektif yang ditempuh oleh Eve untuk memperoleh n dari c ialah dengan melakukan faktorisasi N kedalam p dan q, dengan tujuan untuk menghitung (p-1)(q-1) yang dapat menghasilkan d dari e. Tidak ada metode waktu polinomial untuk melakukan faktorisasi pada bilangan bulat berukuran besar di komputer saat ini, tapi hal tersebut pun masih belum terbukti.

Masih belum ada bukti pula bahwa melakukan faktorisasi N adalah satu-satunya cara untuk memperoleh n dari c, tetapi tidak ditemukan adanya metode yang lebih mudah (setidaknya dari sepengatahuan publik).

Bagaimanapun juga, secara umum dianggap bahwa Eve telah kalah jika N berukuran sangat besar.

Jika N sepanjang 256-bit atau lebih pendek, N akan dapat difaktorisasi dalam beberapa jam pada Personal Computer, dengan menggunakan perangkat lunak yang tersedia secara bebas. Jika N sepanjang 512-bit atau lebih pendek, N akan dapat difaktorisasi dalam hitungan ratusan jam seperti pada tahun 1999. Secara teori, perangkat keras bernama TWIRL dan penjelasan dari Shamir dan Tromer pada tahun 2003 mengundang berbagai pertanyaan akan keamanan dari kunci 1024-bit. Santa disarankan bahwa N setidaknya sepanjang 2048-bit.

Pada thaun 1993, Peter Shor menerbitkan Algoritma Shor , menunjukkan bahwa sebuah komputer quantum secara prinsip dapat melakukan faktorisasi dalam waktu polinomial, mengurai RSA dan algoritma lainnya. Bagaimanapun juga, masih terdapat pedebatan dalam pembangunan komputer quantum secara prinsip.

Pembangkitan kunci

Menemukan bilangan prima besar p dan q pada biasanya didapat dengan mencoba serangkaian bilangan acak dengan ukuran yang tepat menggunakan probabilitas bilangan prima yang dapat dengan cepat menghapus hampir semua bilangan bukan prima.

p dan q seharusnya tidak “saling-berdekatan”, agar faktorisasi fermat pada N berhasil. Selain itu pula, jika p-1 atau q-1 memeiliki faktorisasi bilangan prima yang kecil, N dapat difaktorkan secara mudah dan nilai-nilai dari p atau q dapat diacuhkan.

Seseorang seharusnya tidak melakukan metoda pencarian bilangan prima yang hanya akan memberikan informasi penting tentang bilangan prima tersebut kepada penyerang. Biasanya, pembangkit bilangan acak yang baik akan memulai nilai bilangan yang digunakan. Harap diingat, bahwa kebutuhan disini ialah “acak” dan “tidak-terduga”. Berikut ini mungkin tidak memenuhi kriteria, sebuah bilangan mungkin dapat dipilah dari proses acak (misal, tidak dari pola apapun), tetapi jika bilangan itu mudah untuk ditebak atau diduga (atau mirip dengan bilangan yang mudah ditebak), maka metode tersebut akan kehilangan kemampuan keamanannya. Misalnya, tabel bilangan acak yang diterbitkan oleh Rand Corp pada tahun 1950-an mungkin memang benar-benar teracak, tetapi dikarenakan diterbitkan secara umum, hal ini akan mempermudah para penyerang dalam mendapatkan bilangan tersebut. Jika penyerang dapat menebak separuh dari digit p atau q, para penyerang dapat dengan cepat menghitung separuh yang lainnya (ditunjukkan oleh Donald Coppersmith pada tahun 1997).

Sangatlah penting bahwa kunci rahasia d bernilai cukup besar, Wiener menunjukkan pada tahun 1990 bahwa jika p diantara q dan 2q (yang sangat mirip) dan d lebih kecil daripada N1/4/3, maka d akan dapat dihitung secara effisien dari N dan e. Kunci enkripsi e = 2 sebaiknya tidak digunakan.

Kecepatan

RSA memiliki kecepatan yang lebih lambat dibandingkan dengan DES dan algoritma simetrik lainnya. Pada prakteknya, Bob menyandikan pesan rahasia menggunakan algoritma simetrik, menyandikan kunci simetrik menggunakan RSA, dan mengirimkan kunci simetrik yang dienkripsi menggunakan RSA dan juga mengirimkan pesan yang dienkripasi secara simetrik kepada Alice.

Prosedur ini menambah permasalahan akan keamanan. Singkatnya, Sangatlah penting untuk menggunakan pembangkit bilangan acak yang kuat untuk kunci simetrik yang digunakan, karena Eve dapat melakukan bypass terhadap RSA dengan menebak kunci simterik yang digunakan.

Distribusi kunci

Sebagaimana halnya cipher, bagaimana public key RSA didistribusi menjadi hal penting dalam keamanan. Distribusi kunci harus aman dari man-in-the-middle attack (penghadang-ditengah-jalan). Anggap Eve dengan suatu cara mampu memberikan kunci arbitari kepada Bob dan membuat Bob percaya bahwa kunci tersebut milik Alice. Anggap Eve dapan “menghadang” sepenuhnya transmisi antara Alice dan Bob. Eve mengirim Bob public key milik Eve, dimana Bob percaya bahwa public key tersebut milik Alice. Eve dapat menghadap seluruh ciphertext yang dikirim oleh Bob, melakukan dekripsi dengan kunci rahasia milik Eve sendiri, menyimpan salinan dari pesan tersebut, melakukan enkripsi menggunakan public key milik Alice, dan mengirimkan ciphertext yang baru kepada Alice. Secara prinsip, baik Alice atau Bob tidak menyadari kehadiran Eve diantara transmisi mereka. Pengamanan terhadap serangan semacam ini yaitu menggunakan sertifikat digital atau komponen lain dari infrastuktur public key.

Penyerangan waktu

Kocher menjelaskan sebuah serangan baru yang cerdas pada RSA di tahun 1995: jika penyerang, Eve, mengetahui perangkat keras yang dimiliki oleh Alice secara terperinci dan mampu untuk mengukur waktu yang dibutuhkan untuk melakukan dekripsi untuk beberapa ciphertext, Eve dapat menyimpulkan kunci dekripsi d secara cepat. Penyerangan ini dapat juga diaplikasikan pada skema “tanda tangan” RSA. SAlah satu cara untuk mencegah penyerangan ini yaitu dengan memastikan bahwa operasi dekripsi menggunakan waktu yang konstan untuk setiap ciphertext yang diproses. Cara yang lainnya, yaitu dengan menggunakan properti multipikatif dari RSA. Sebagai ganti dari menghitung cd mod N, Alice pertama-tama memilih nilai bilangan acak r dan menghitung (rec)d mod N. Hasil dari penghitungan tersebut ialah rm mod N kemudian efek dari r dapat dihilangkan dengan perkalian dengan inversenya. Nilai baru dari r dipilih pada tiap ciphertext. Dengan teknik ini, dikenal sebagai message blinding (pembutaan pesan), waktu yang diperlukan untuk proses dekripsi tidak lagi berhubungan dengan nilai dari ciphertext sehingga penyerangan waktu akan gagal.

Penyerangan ciphertext adaptive

Pada tahun 1998, Daniel Bleichenbacher menjelaskan penggunaan penyerangan ciphertext adaptive, terhadap pesan yang terenkripsi menggunakan RSA dan menggunakan PKCS #1 v1 padding scheme. Dikarenakan kecacatan pada skema PKCS #1, Bleichenbacher mampu untuk melakukan serangkaian serangan terhadap implementasi RSA pada protokol Secure Socket Layer, dan secara potensial mengungkap kunci-kunci yang digunakan. Sebagai hasilnya, para pengguna kriptografi menganjurkan untuk menggunakan padding scheme yang relatif terbukti aman seperti Optimal Asymmetric Encryption Padding, dan Laboratorium RSA telah merilis versi terbaru dari PKCS #1 yang tidak lemah terdapat serangan ini.



Bisa jd sesuatu yg kita sukai t’nyata itulah yg t’baik utk kita & sebalikny, apa yg kita kejar & idamkn setengah mati belum tentu t’baik untuk kita.  Rejeki, jodoh, hidup, dan mati ada di tanganNya, mengapa kita harus resah menghadapi semuanya? Allah tlh merencanakn yg t’baik utk umatNya dan mengapa kita hrs b’sedih hati?



{November 29, 2007}   Hello world!

Welcome to WordPress.com. This is your first post. Edit or delete it and start blogging!



dan lain-lain
Ikuti

Get every new post delivered to your Inbox.