Algoritma Kriptografi Modern

Kunci Simetris Dalam symmetric cryptosistem 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 ciphersistem. Jumlah kunci yang dibutuhkan umumnya adalah: nC2 = n . (n-1) -------2 dengan n menyatakan banyaknya pengguna.

Pihak tak dikenal

sumber kunci e enkripsi Ee(P) = c P sumber plaintext Anto

e

jalur aman

c jalur tak aman

dekripsi Dd(c) = P P

tujuan Badu Gambar 23. Mekanisme Kriptografi Simetrik

Dari gambar 23 dapat dilihat bahwa harus ada jalur aman (secure channel) dahulu yang memungkinkan Anto dan Badu melakukan transaksi kunci. Hal ini menjadi masalah karena jika jalur itu memang ada, tentunya kriptografi tidak diperlukan lagi dalam hal ini. Masalah ini dikenal sebagai masalah persebaran kunci (key distribution problem). Kelemahan lainnya adalah bahwa untuk tiap pasang pelaku sistem informasi diperlukan sebuah kunci yang berbeda. Dengan demikian bila terdapat n pelaku sistem informasi, maka agar tiap pasang dapat melakukan komunikasi diperlukan kunci sejumlah total n ( n – 1) / 2 kunci. Untuk jumlah n yang sangat besar, penyediaan kunci ini akan menjadi masalah, yang dikenal sebagai masalah manajemen kunci (key management problem). Ini adalah jenis kriptografi yang paling umum dipergunakan. Kunci untuk membuat pesan yang disandikan sama dengan kunci untuk membuka pesan yang disandikan itu. Jadi pembuat pesan dan penerimanya harus memiliki kunci yang sama persis. Siapapun yang memiliki kunci tersebut – termasuk pihak-pihak yang tidak diinginkan – dapat membuat dan membongkar rahasia ciphertext.

Problem yang paling jelas disini terkadang bukanlah masalah pengiriman ciphertext-nya, melainkan masalah bagaimana menyampaikan kunci simetris tersebut kepada pihak yang diinginkan. Contoh algoritma kunci simetris yang terkenal adalah DES (Data Encryption Standard) dan RC-4.

Gambar 24. Kunci Simetris DES, atau juga dikenal sebagai Data Encrytion Algorithm (DEA) oleh ANSI dan DEA-1 oleh ISO, merupakan algoritma kriptogrfi simetris yang paling umum digunakan saat ini. Sejarah DES dimulai dari permintaan pemerintah Amerika Serikat untuk memasukkan proposal enkripsi. DES memiliki sejarah dari Lucifer, enkripsi yang dikembangkan di IBM kala itu. Horst Feistel merupakan salah satu periset yang mula-mula mengembangkan DES ketika bekerja di IBM Watson Laboratory di Yorktown Heights, New York. DES baru resmi digunakan oleh pemerintah AS di tahun 1977. Aplikasi yang menggunakan DES antara lain : • • Enkripsi dari password di sistem UNIX Berbagai aplikasi di bidang perbankan

Cipher Aliran (Stream Chiper) • • Chiper aliran merupakan salah satu tipe algoritma kriptografi kriptografi simetri. Chiper aliran mengenkripsikan plainteks menjadi chiperteks bit per bit (1 bit setiap kali transformasi). Catatan: Variasi chiper aliran lainnya adalah mengenkripsikan plainteks menjadi chiperteks karakter per karakter atau kata per kata, misalnya pada Vigenere Cipher dan one-time pad chiper. Cipher aliran pertama kali diperkenalkan oleh Vernam melalui algoritmanya yang dikenal dengan nama Vernam Cipher. Vernam cipher diadopsi dari one-time pad cipher, yang dalam hal ini karakter diganti dengan bit (0 atau 1). Cipherteks diperoleh dengan melakukan penjumlahan modulo 2 satu bit plainteks dengan satu bit kunci: ci = (pi + ki) mod 2 yang dalam hal ini, pi : bit plainteks ki : bit kunci ci : bit cipherteks Plainteks diperoleh dengan melakukan penjumlahan modulo 2 satu bit cipherteks dengan satu bit kunci: pi = (ci – ki) mod 2 Dengan kata lain, Vernam cipher adalah versi lain dari one-time pad cipher Oleh karena operasi penjumlahan modulo 2 identik dengan operasi bit dengan operator XOR, maka persaman tadi dapat ditulis sebagai ci = pi ⊕ ki dan proses deksripsi menggunakan persamaan pi = ci ⊕ ki

• •

Pada cipher aliran, bit hanya mempunyai dua buah nilai, sehingga proses enkripsi hanya menyebabkan dua keadaan pada bit tersebut: berubah atau tidak berubah. Dua keadaan tersebut ditentukan oleh kunci enkripsi yang disebut aliran-bit-kunci (keystream). Aliran-bit-kunci dibangkitkan dari sebuah pembangkit yang dinamakan pembangkit aliran-bitkunci (keystream generator). Aliran-bit-kunci (sering dinamakan running key) di-XOR-kan dengan aliran bit-bit plainteks, p1, p2, …, pi, untuk menghasilkan aliran bit-bit cipherteks: ci = pi ⊕ ki Di sisi penerima, bit-bit cipherteks di-XOR-kan dengan aliran-bit-kunci yang sama untuk menghasilkan bit-bit plainteks: pi = ci ⊕ ki

karena ci ⊕ ki = (pi ⊕ ki) ⊕ ki = pi ⊕ (ki ⊕ ki) = pi ⊕ 0 = pi Catatlah bahwa proses enkripsi dua kali berturut-turut menghasilkan kembali plainteks semula Keystream Generator Keystream Generator

Keystream

ki

Keystream ci

ki

pi Plainteks


Enkripsi Cipherteks


Dekripsi Gambar 25. Konsep Cipher Aliran

pi Plainteks

Contoh: Misalkan plainteks adalah 1100101 dan aliran-bit-kunci adalah 1000110 maka cipherteks yang dihasilkan adalah 0100011 yang mana diperoleh dengan meng-XOR-kan bit-bit plainteks dengan bit-bit aliran-kunci pada posisi yang berkoresponden. • Keamanan sistem cipher aliran bergantung seluruhnya pada pembangkit aliran-bit-kunci. Jika pembangkit mengeluarkan aliran-bit-kunci yang seluruhnya nol, maka cipherteks sama dengan plainteks, dan proses enkripsi menjadi tidak artinya. Jika pembangkit mengeluarkan aliran-bit-kunci dengan pola 16-bit yang berulang, maka algoritma enkripsinya menjadi sama seperti enkripsi dengan XOR sederhana yang memiliki tingkat kemanan yang tidak berarti. Jika pembangkit mengeluarkan aliran-bit-kunci yang benar-benar acak (truly random), maka algoritma enkripsinya sama dengan one-time pad dengan tingkat keamanan yang sempurna. Pada kasus ini, aliran-bit-kunci sama panjangnya dengan panjang plainteks, dan kita mendapatkan cipher aliran sebagai unbreakable cipher.

Tingkat keamanan cipher aliran terletak antara algoritma XOR sederhana dengan one-time pad. Semakin acak keluaran yang dihasilkan oleh pembangkit aliran-bit-kunci, semakin sulit kriptanalis memecahkan cipherteks.

Pembangkit aliran-bit-kunci (Keystream Generator) • Pembangkit bit-aliran-kunci dapat membangkitkan bit-aliran-kunci berbasis bit per bit atau dalam bentuk blok-blok bit. Untuk yang terakhir ini, cipher blok dapat digunakan untuk untuk memperoleh cipher aliran. Untuk alasan praktis, pembangkit bit-aliran-kunci diimplementasikan sebagai prosedur algoritmik, sehingga bit-aliran-kunci dapat dibangkitkan secara simultan oleh pengirim dan penerima pesan. Prosedur algoritmik tersebut menerima masukan sebuah kunci U. Keluaran dari prosedur merupakan fungsi dari U (lihat Gambar 26). Pembangkit harus menghasilkan bit-aliran-kunci yang kuat secara kriptografi.

U

Keystream Generator

U

Keystream Generator

Keystream

ki ci

Keystream

ki

pi Plainteks


Enkripsi Cipherteks


Dekripsi

pi Plainteks

Gambar 26. Cipher Aliran dengan Pembangkit Bit-Aliran-Kunci yang bergantung pada kunci U. • • Karena pengirim dan penerima harus menghasilkan bit-aliran-kunci yang sama , maka keduanya harus memiliki kunci U yang sama. Kunci U ini harus dijaga kerahasiaanya. Cipher aliran menggunakan kunci U yang relatif pendek untuk membangkitkan bit-alirankunci yang panjang. Contoh: Misalkan U adalah kunci empat-bit yang dipilih sembarang, kecuali 0000. Bit-alirankunci yang dibangkitkan akan berulang setiap 15 bit. Misalkan U = 1111 Barisan bit-bit aliran-kunci diperoleh dengan meng-XOR-kan bit pertama dengan bit terakhir dari empat bit sebelumnya, sehingga menghasilkan: 111101011001000 dan akan berulang setiap 15 bit. Secara umum, jika panjang kunci U adalah n bit, maka bit-aliran-kunci tidak akan berulang sampai 2n – 1 bit. • Karena U adalah besaran yang konstan, maka bit-aliran-kunci yang dihasilkan pada setiap lelaran tidak berubah jika bergantung hanya pada U.

• Ini berarti pembangkit bit-aliran-kunci tidak boleh mulai dengan kondisi awal yang sama supaya tidak menghasilkan kembali bit-aliran-kunci yang sama pada setiap lelaran. Oleh karena itu, beberapa pembangkit bit-aliran-kunci menggunakan besaran vektor inisialisasi atau umpan (seed), disimbolkan dengan Z, agar diperoleh kondisi awal yang berbeda pada setiap lelaran (lihat Gambar 27). Z Z

U

Keystream Generator

U

Keystream Generator

Keystream

ki ci

Keystream

ki

pi Plainteks


Enkripsi Cipherteks


Dekripsi

pi Plainteks

Gambar 27. Cipher aliran dengan pembangkit bit-aliran-kunci yang bergantung pada kunci U dan umpan Z. • Dengan demikian, bit-aliran-kunci K dapat dinyatakan sebagai hasil dari fungsi g dengan parameter kunci U dan masukan umpan Z: K = gK(Z) sehingga proses enkripsi dan dekripsi didefinisikan sebagai C = P ⊕ K = P ⊕ gK(Z) P = C ⊕ K = C ⊕ gK(Z) • • Nilai Z yang berbeda-beda pada setiap lelaran menghasilkan bit-aliran-kunci yang berbeda pula. Merancang pembangkit bit-aliran-kunci yang bagus cukup sulit karena membutuhkan pengujian statistik untuk menjamin bahwa keluaran dari pembangkit tersebut sangat mendekati barisan acak yang sebenarnya.

Serangan Terhadap Cipher Aliran • Serangan yang dapat dilakukan oleh kriptanalis terhadap cipher aliran adalah: 1. Known-plaintext attack Misalkan kriptanalis memiliki potongan plainteks (P) dan cipherteks (C) yang berkoresponden, maka ia dapat menemukan bagian bit-aliran-kunci (K) yang berkoresponden dengan meng-XOR-kan bit-bit plainteks dan cipherteks: P ⊕ C = P ⊕ (P ⊕ K) = (P ⊕ P) ⊕ K = 0 ⊕ K = K 2. Ciphertext-only attack Misalkan kriptanalis memiliki dua potongan cipherteks berbeda (C1 dan C2) yang dienkripsi dengan bit-aliran-kunci yang sama. Ia meng-XOR-kan kedua cipherteks tersebut dan memperoleh dua buah plainteks yang ter-XOR satu sama lain:

C1 ⊕ C2 = (P1 ⊕ K ) ⊕ (P2 ⊕ K) = (P1 ⊕ P2 ) ⊕ (K ⊕ K) = (P1 ⊕ P2 ) ⊕ 0 = (P1 ⊕ P2 ) P1 dan P2 dapat diperoleh dengan mudah. Selanjutnya, XOR-kan salah satu plainteks dengan cipherteksnya untuk memperoleh bit-aliran-kunci K yang berkoresponden: P1 ⊕ C1 = P1 ⊕ (P1 ⊕ K) = K • Pesan dari dua serangan di atas adalah: pengguna cipher aliran harus mempunyai bit-alirankunci yang tidak dapat diprediksi sehingga mengetahui sebagian dari bit-aliran-kunci tidak memungkinkan kriptanalis dapat mendeduksi bagian sisanya.

Aplikasi Cipher Aliran • Cipher aliran cocok untuk mengenkripsikan aliran data yang terus menerus melalui saluran komunikasi, misalnya: 1. Mengenkripsikan data pada saluran yang menghubungkan antara dua buah komputer. 2. Mengenkripiskan suara digital pada jaringan telepon mobile GSM. Alasannya, jika bit cipherteks yang diterima mengandung kesalahan, maka hal ini hanya menghasilkan satu bit kesalahan pada waktu dekripsi, karena tiap bit plainteks ditentukan hanya oleh satu bit cipherteks. Kondisi ini tidak benar untuk cipher blok karena jika satu bit cipherteks yang diterima mengandung kesalahan, maka kesalahan ini akan merambat pada seluruh blok bit plainteks hasil dekripsi (error propagation). Cipher Blok (Block Cipher) • 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 28.

Enkripsi: Blok Plainteks P P = (p1, p2, …, pm)

Dekripsi: Blok Cipherteks C C = (c1, c2, …, cm)

Kunci K

E

Kunci K

D

Blok Cipherteks C C = (c1, c2, …, cm)

Blok Plainteks P P = (p1, p2, …, pm)

Gambar 28. Skema Enkripsi dan Dekripsi pada Cipher Blok Teknik Kriptografi Klasik yang Digunakan pada Cipher Blok • • Algoritma blok cipher menggabungkan beberapa teknik kriptografi klasik enkripsi. Dengan kata lain, cipher blok dapat diacu sebagai super-enkripsi. Teknik kriptografi klasik yang digunakan adalah: dalam proses

1. Substitusi. Teknik ini mengganti satu atau sekumpulan bit pada blok plainteks tanpa mengubah urutannya. Secara matematis, teknik substitusi ini ditulis sebagai ci = E(pi), i = 1, 2, … (urutan bit) yang dalam hal ini ci adalah bit cipherteks, pi adalah bit plainteks, dan f adalah fungsi substitusi. Dalam praktek, E dinyatakan sebagai fungsi matematis atau dapat merupakan tabel susbtitusi (Sbox). 2. Transposisi atau permutasi Teknik ini memindahkan posisi bit pada blok plainteks berdasarkan aturan tertentu. Secara matematis, teknik transposisi ini ditulis sebagai C = PM yang dalam hal ini C adalah blok cipherteks, P adalah blok plainteks, dan M adalah fungsi transposisi. Dalam praktek, M dinyatakan sebagai tabel atau matriks permutasi. • Selain kedua teknik di atas, cipher blok juga menggunakan dua teknik tambahan sebagai berikut:

3. Ekspansi Teknik ini memperbanyak jumlah bit pada blok plainteks berdasarkan aturan tertentu, misalnya dari 32 bit menjadi 48 bit. Dalam praktek, aturan eskpansi dinyatakan dengan tabel. 4. Kompresi Teknik ini kebalikan dari ekspansi, di mana jumlah bit pada blok plainteks diciutkan berdasarkan aturan tertentu. Dalam praktek, aturan kompresi dinyatakan dengan tabel.

Prinsip Penyandian Shannon • Pada tahun 1949, Shannon mengemukakan dua prinsip (properties) penyandian (encoding) data. Kedua prinsip ini dipakai dalam perancangan cipher blok yang kuat. Kedua prinsip Shannon tersebut adalah: 1. Confusion Prinsip ini menyembunyikan hubungan apapun yang ada antara plainteks, cipherteks, dan kunci. Sebagai contoh, pada cipher substitusi seperti caesar cipher, hubungan antara cipherteks dan plainteks mudah diketahui, karena satu huruf yang sama pada plainteks diganti dengan satu huruf yang sama pada cipherteksnya. Prinsip confusion akan membuat kriptanalis frustasi untuk mencari pola-pola statistik yang muncul pada cipherteks. Confusion yang bagus membuat hubungan statistik antara plainteks, cipherteks, dan kunci menjadi sangat rumit. 2. Diffusion Prinsip ini menyebarkan pengaruh satu bit plainteks atau kunci ke sebanyak mungkin cipherteks. Sebagai contoh, pengubahan kecil pada plainteks sebanyak satu atau dua bit menghasilkan perubahan pada cipherteks yang tidak dapat diprediksi. Prinisp diffusion juga menyembunyikan hubungan statistik antara plainteks, cipherteks, dan kunci dan membuat kriptanalisis menjadi sulit. Untuk mendapatkan keamanan yang bagus, prinsip confusion dan diffusion diulang berkali-kali pada sebuah blok tunggal dengan kombinasi yang berbeda-beda. Mode Operasi Cipher Blok • Plainteks dibagi menjadi beberapa blok dengan panjang tetap. Beberapa mode operasi dapat diterapkan untuk melakukan enkripsi terhadap keseluruhan blok plainteks. Empat mode operasi yang lazim diterapkan pada sistem blok cipher adalah: 1. Electronic Code Book (ECB) 2. Cipher Block Chaining (CBC) 3. Cipher Feedback (CFC) 4. Output Feedback (OFB) Hanya 2 mode operasi saja yang akan dibahas dalam kuliah ini, yaitu ECB dan CBC.

Electronic Code Book (ECB) • Pada mode ini, setiap blok plainteks dienkripsi secara individual dan independen.

Secara matematis, enkripsi dengan mode ECB dinyatakan sebagai Ci = EK(Pi) dan dekripsi sebagai Pi = DK(Ci) yang dalam hal ini, Pi dan Ci masing-masing blok plainteks dan cipherteks ke-i. Gambar 29 memperlihatkan enkripsi dua buah blok plainteks, P1 dan P2 dengan mode ECB, yang dalam hal ini E menyatakan fungsi enkripsi yang melakukan enkripsi terhadap blok plainteks dengan menggunakan kunci K.

Blok Plainteks P1

Blok Plainteks P2

Kunci K

E

Kunci K

E

Blok Cipherteks C1

Blok Plainteks C2

Gambar 29. Skema enkripsi dan dekripsi dengan mode ECB Contoh 1: Misalkan plainteks (dalam biner) adalah 10100010001110101001 Bagi plainteks menjadi blok-blok yang berukuran 4 bit: 1010 0010 0011 1010 1001 atau dalam notasi HEX adalah A23A9. Misalkan kunci (K) yang digunakan adalah (panjangnya juga 4 bit) 1011 atau dalam notasi HEX adalah B. Misalkan fungsi enkripsi E yang sederhana (tetapi lemah) adalah dengan meng-XOR-kan blok plainteks Pi dengan K, kemudian geser secara wrapping bit-bit dari Pi ⊕ K satu posisi ke kiri. Proses enkripsi untuk setiap blok digambarkan sebagai berikut: 1010 0010 0011 1010 1001 1011 1011 1011 1011 1011 ⊕ Hasil XOR: Geser 1 bit ke kiri: 0001 1001 1000 0001 0010 0010 0011 0001 0010 0100

Dalam notasi HEX: 2 Jadi, hasil enkripsi plainteks 10100010001110101001 adalah 00100011000100100100 •

3

1

2

4

(A23A9 dalam notasi HEX) (23124 dalam notasi HEX)

Catatlah bahwa blok plainteks yang sama selalu dienkripsi menjadi blok cipherteks yang sama (atau identik). Pada contoh 1 di atas, blok 1010 muncul dua kali dan selalu dienkripsi menjadi 0010. Contoh yang lebih nyata misalkan pesan KUTU BUKU DI LEMARIKU dibagi menjadi blok-blok yang terdiri dua huruf (dengan menghilangkan semua spasi) menjadi KU TU BU KU DI LE MA RI KU maka blok yang menyatakan “KU” akan dienkripsi menjadi blok cipherteks (dua huruf) yang sama. Kata “code book” di dalam ECB muncul dari fakta bahwa karena blok plainteks yang sama selalu dienkripsi menjadi blok cipherteks yang sama, maka secara teoritis dimungkinkan membuat buku kode plainteks dan cipherteks yang berkoresponden. Namun, semakin besar ukuran blok, semakin besar pula ukuran buku kodenya. Misalkan jika blok berukuran 64 bit, maka buku kode terdiri dari 2 64 – 1 buah kode (entry), yang berarti terlalu besar untuk disimpan. Lagipula, setiap kunci mempunyai buku kode yang berbeda.

Padding • Ada kemungkinan panjang plainteks tidak habis dibagi dengan panjang ukuran blok yang ditetapkan (misalnya 64 bit atau lainnya). Hal ini mengakibatkan blok terakhir berukuran lebih pendek daripada blok-blok lainnya. Satu cara untuk mengatasi hal ini adalah dengan padding, yaitu menambahkan blok terakhir dengan pola bit yang teratur agar panjangnya sama dengan ukuran blok yang ditetapkan. Misalnya ditambahkan bit 0 semua, atau bit 1 semua, atau bit 0 dan bit 1 berselang-seling. Misalkan ukuran blok adalah 64 bit (8 byte) dan blok terakhir terdiri dari 24 bit (3 byte). Tambahkan blok terakhir dengan 40 bit (5 byte) agar menjadi 64 bit, misalnya dengan menambahkan 4 buah byte 0 dan satu buah byte angka 5. Setelah dekripsi, hapus 5 byte terakhir dari blok dekripsi terakhir.

Keuntungan Mode ECB 1. Karena tiap blok plainteks dienkripsi secara independen, maka kita tidak perlu mengenkripsi file secara linear. Kita dapat mengenkripsi 5 blok pertama, kemudian blok-blok di akhir, dan kembali ke blok-blok di tengah dan seterusnya. Mode ECB cocok untuk mengenkripsi arsip (file) yang diakses secara acak, misalnya arsiparsip basisdata. Jika basisdata dienkripsi dengan mode ECB, maka sembarang record dapat dienkripsi atau didekripsi secara independen dari record lainnya (dengan asumsi setiap record terdiri dari sejumlah blok diskrit yang sama banyaknya). Jika mode ECB dikerjakan dengan prosesor paralel (multiple processor), maka setiap prosesor dapat melakukan enkripsi atau dekripsi blok plainteks yang berbeda-beda.

2. Jika satu atau lebih bit pada blok cipherteks mengalami kesalahan, maka kesalahan ini hanya mempengaruhi cipherteks yang bersangkutan pada waktu dekripsi. Blok-blok cipherteks lainnya bila didekripsi tidak terpengaruh oleh kesalahan bit cipherteks tersebut. Kelemahan ECB 1. Karena bagian plainteks sering berulang (sehingga terdapat blok-blok plainteks yang sama), maka hasil enkripsinya menghasilkan blok cipherteks yang sama (lihat Contoh 1). Bagian plainteks yang sering berulang misalnya kata-kata seperti (dalam Bahasa Indonesia) dan, yang, ini, itu, dan sebagainya. Di dalam e-mail, pesan sering mengandung bagian yang redundan seperti string 0 atau spasi yang panjang, yang bila dienkripsi maka akan menghasilkan pola-pola cipherteks yang mudah dipecahkan dengan serangan yang berbasis statistik (menggunakan frekuensi kemunculan blok cipherteks). Selain itu, e-mail mempunyai struktur yang teratur yang menimbulkan pola-pola yang khas dalam cipherteksnya. Misalnya kriptanalis mempelajari bahwa blok plainteks 5EB82F (dalam notasi HEX) dienkripsi menjadi blok AC209D, maka setiap kali ia menemukan cipherteks AC209D, ia dapat langsung mendekripsinya menjadi 5EB82F. Satu cara untuk mengurangi kelemahan ini adalah menggunakan ukuran blok yang besar, misalnya 64 bit, sebab ukuran blok yang besar dapat menghilangkan kemungkinan menghasilkan blok-blok yang identik. 2. Pihak lawan dapat memanipulasi cipherteks untuk “membodohi” atau mengelabui penerima pesan. Contoh 2. Misalkan seseorang mengirim pesan Uang ditransfer lima satu juta rupiah Andaikan bahwa kriptanalis mengetahui bahwa blok plainteks terdiri dari dua huruf (spasi diabaikan sehingga menjadi 16 blok plainteks) dan blok-blok cipherteksnya adalah C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16 Misalkan kriptanalis berhasil mendekripsi keseluruhan blok cipherteks menjadi plainteks semula, sehingga ia dapat mendekripsi C1 menjadi Ua, C2 menjadi ng, C3 menjadi di dan seterusnya. Kriptanalis memanipulasi cipherteks dengan membuang blok cipheteks ke-8 dan 9 sehingga menjadi C1, C2, C3, C4, C5, C6, C7, C10, C11, C12, C13, C14, C15, C16 Penerima pesan mendekripsi cipherteks yang sudah dimanipulasi dengan kunci yang benar menjadi Uang ditransfer satu juta rupiah Karena dekripsi menghasilkan pesan yang bermakna, maka penerima menyimpulkan bahwa uang yang dikirim kepadanya sebesar satu juta rupiah. • Kedua kelemahan di atas dapat diatasi dengan mengatur enkripsi tiap blok individual bergantung pada semua blok-blok sebelumnya. Dengan cara ini, blok plainteks yang identik akan menghasilkan blok cipherteks yang berbeda, dan manipulasi cipherteks mungkin

menghasilkan pesan hasil dekripsi yang tidak mempunyai makna. Prinsip inilah yang mendasari mode operasi cipher blok yang kedua, yaitu Cipher Block Chaining. Cipher Block Chaining (CBC) • • • • Mode ini menerapkan mekanisme umpan-balik (feedback) pada sebuah blok, yang dalam hal ini hasil enkripsi blok sebelumnya di-umpan-balikkan ke dalam enkripsi blok yang current. Caranya, blok plainteks yang current di-XOR-kan terlebih dahulu dengan blok cipherteks hasil enkripsi sebelumnya, selanjutnya hasil peng-XOR-an ini masuk ke dalam fungsi enkripsi. Dengan mode CBC, setiap blok cipherteks bergantung tidak hanya pada blok plainteksnya tetapi juga pada seluruh blok plainteks sebelumnya. Dekripsi dilakukan dengan memasukkan blok cipherteks yang current ke fungsi dekripsi, kemudian meng-XOR-kan hasilnya dengan blok cipherteks sebelumnya. Dalam hal ini, blok cipherteks sebelumnya berfungsi sebagai umpan-maju (feedforward) pada akhir proses dekripsi. Gambar 30 memperlihatkan skema mode operasi CBC. Pi – 1 Pi Ci – 1

Ci

Ci – 2


EK


EK DK DK

Ci – 2 Ci – 1 Ci


Pi – 1


Pi

Enkripsi

Dekripsi

Gambar 30. Skema Enkripsi dan Dekripsi dengan Mode CBC • Secara matematis, enkripsi dengan mode CBC dinyatakan sebagai Ci = EK(Pi ⊕ Ci – 1) dan dekripsi sebagai Pi = DK(Ci) ⊕ Ci – 1 Blok plainteks pertama menggunakan C0 sebagai vektor awal (initialization vector atau IV). IV tidak perlu rahasia. • Blok-blok plainteks yang identik dienkripsi menjadi blok-blok cipherteks yang berbeda hanya jika blok-blok plainteksnya sebelumnya berbeda.

Jika blok-blok plainteks sebelumnya ada yang sama, maka ada kemungkinan cipherteksnya sama. Untuk mencegah hal ini, maka digunakan IV yang merupakan data acak sebagai blok pertama. IV tidak mempunyai makna, ia hanya diguanakan untuk membuat tiap blok cipherteks menjadi unik.

Contoh 3. Tinjau kembali painteks (dalam biner) pada Contoh 1: 10100010001110101001 Bagi plainteks menjadi blok-blok yang berukuran 4 bit: 1010 0010 0011 1010 1001 atau dalam notasi HEX adalah A23A9. Misalkan kunci (K) yang digunakan adalah (panjangnya juga 4 bit) 1011 atau dalam notasi HEX adalah B. Sedangkan IV yang digunakan seluruhnya bit 0 (Jadi, C0 = 0000) Misalkan fungsi enkripsi E yang sederhana (tetapi lemah) adalah dengan meng-XOR-kan blok plainteks Pi dengan K, kemudian geser secara wrapping bit-bit dari Pi ⊕ K satu posisi ke kiri.

C1 diperoleh sebagai berikut: P1 ⊕ C0 = 1010 ⊕ 0000 = 1010 Enkripsikan hasil ini dengan fungsi E sbb: 1010 ⊕ K = 1010 ⊕ 1011 = 0001 Geser (wrapping) hasil ini satu bit ke kiri: 0010 Jadi, C1 = 0010 (atau 2 dalam HEX) C2 diperoleh sebagai berikut: P2 ⊕ C1 = 0010 ⊕ 0010 = 0000 0000 ⊕ K = 0000 ⊕ 1011 = 1011 Geser (wrapping) hasil ini satu bit ke kiri: 0111 Jadi, C2 = 0111 (atau 7 dalam HEX) C3 diperoleh sebagai berikut: P3 ⊕ C2 = 0011 ⊕ 0111 = 0100 0100 ⊕ K = 0100 ⊕ 1011 = 1111 Geser (wrapping) hasil ini satu bit ke kiri: 1111 Jadi, C2 = 1111 (atau F dalam HEX) Demikian seterusnya, sehingga plainteks dan cipherteks hasilnya adalah: Pesan (plainteks): A23A9 Cipherteks (mode ECB): 23124 Cipherteks (mode CBC): 27FBF Terlihat bahwa dengan menggunakan mode CBC, blok plainteks yang sama (A dalam HEX) dienkripsikan menjadi dua blok cipherteks yang berbeda (masing-masing 2 dan B). Bandingkan dengan mode EBC yang menghasilkan blok cipherteks yang sama (2 dalam HEX) untuk dua buah blok yang sama (A).

Dengan kata lain, pada mode CBC, tidak ada korelasi antara posisi blok plainteks yang sams dengan posisi blok cipherteksnya. Perambatan Kesalahan • Karena blok cipherteks yang dihasilkan selama proses enkripsi bergantung pada blok-blok cipherteks sebelumnya, maka kesalahan satu bit pada sebuah blok plainteks akan merambat pada blok cipherteks yang berkoresponden dan semua blok cipherteks berikutnya. Tetapi, hal ini berkebalikan pada proses dekripsi. Kesalahan satu bit pada blok cipherteks hanya mempengaruhi blok plainteks yang berkoresponden dan satu bit pada blok plainteks berikutnya (pada posisi bit yang berkoresponden pula). Kesalahan bit cipherteks biasanya terjadi karena adanya gangguan (noise) saluran komunikasi data selama transmisi atau malfunction pada media penyimpanan.

Persoalan Keamanan yang Muncul pada Mode CBC 1. Karena blok cipherteks mempengaruhi blok-blok berikutnya, pihak lawan dapat menambahkan blok cipherteks tambahan pada akhir pesan terenkripsi tanpa terdeteksi. Ini akan menghasilkan blok plainteks tambahan pada waktu dekripsi. Pesan moral untuk masalah ini, pengirim pesan seharusnya menstrukturkan plainteksnya sehingga ia mengetahui di mana ujung pesan dan dapat mendeteksi adanya blok tambahan. 2. Pihak lawan dapat mengubah cipherteks, misalnya mengubah sebuah bit pada suatu blok cipherteks. Tetapi hal ini hanya mempengaruhi blok plainteks hasil dekripsinya dan satu bit keslahan pada posisi plainteks berikutnya. Mode Cipher-Feedback (CFB) • Jika mode CBC yang diterapkan pada aplikasi komunikasi data, maka enkripsi tidak dapat dilakukan bila blok plainteks yang diterima belum lengkap. Misalnya bila pengiriman data dilakukan setiap kali karakter di-enter dari terminal komputer ke host. Pada mode CFB, data dienkripsikan dalam unit yang lebih kecil daripada ukuran blok, misalnya dienkripsikan satu karakter setiap kalinya (ini disebut CFB 8-bit). Unit yang dienkripsikan dapat berupa bit per bit (jadi seperti cipher aliran), 2 bit, dan seterusnya. Secara umum, CFB n-bit mengenkripsi plainteks sebanyak n bit setiap kalinya, yang mana n ≤ ukuran blok. Dengan kata lain, CFB mengenkripsikan cipher blok seperti pada cipher aliran. • Mode CFB membutuhkan sebuah antrian (queue) yang berukuran sama dengan ukuran blok masukan. Tinjau mode CFB 8-bit yang bekerja pada blok cipher berukuran 64-bit (setara dengan 8 byte). Algoritma enkripsi dengan mode CFB adalah sbb (lihat Gambar 31): 1. Antrian diisi dengan IV (initialiazation vector) seperti pada mode CBC. 2. Enkripsikan antrian dengan kunci K. Delapan bit paling kiri dari hasil enkripsi berlaku sebagai keystream yang kemudian di-XOR-kan dengan karakter 8-bit dari plainteks menjadi karakter 8-bit pertama dari cipherteks. Karakter cipherteks ini dikirim (pada aplikasi komunikasi data) atau disimpan (pada aplikasi penyimpanan data). Salinan (copy) dari karakter cipherteks ini juga dimasukkan ke dalam antrian (menempati 8 posisi bit paling kanan antrian), dan semua bit bit-bit lainnya di antrian digeser ke kiri menggantikan 8 bit pertama yang sudah digunakan. 3. Karakter plainteks berikutnya dienkripsikan dengan cara yang sama seperti pada langkah 2.

4.

Dekripsi dilakukan sebagai kebalikan dari proses enkripsi. Antrian
Last 8-byte

Antrian

Last 8-byte

K

Enkripsi

K

Enkripsi

Left-most byte

Left-most byte

ki pi ⊕ ci ci

ki ⊕ pi

(a) Enciphering

(b) Deciphering Gambar 31. Mode CFB 8-bit

Secara formal, mode CFB dapat dinyatakan sebagai: Proses Enkripsi: Ci = Pi ⊕ MSBm(Ek (Xi)) Xi+1 = LSBm – n(Xi) || Ci Proses Dekripsi: Pi = Ci ⊕ MSBm(Ek (Xi)) Xi+1 = LSBm – n(Xi) || Ci yang dalam hal ini, Xi = isi antrian dengan X1adalah IV E = fungsi enkripsi dengan algoritma cipher blok. K = kunci m = panjang blok enkripsi n = panjang unit enkripsi || = operator penyambungan (concatenation) MSB = Most Significant Byte LSB = Least Significant Byte

Seperti pada mode CBC, mode CFB juga menggunakan skema umpan-balik dengan mengaitkan blok plainteks bersama-sama dengan blok cipherteks sebelumnya (Gambar 32). Pi – 1 Pi Pi+1

Ek

Ek

Ci – 1

Ci

Ci+1

Gambar 32. Skema umpan-balik yang diterapkan pada mode CFB Dari Gambar 32 dapat dilihat bahwa: Ci = Pi ⊕ Ek (Ci – 1 ) Pi = Ci ⊕ Ek (Ci – 1 ) Prinsip-prinsip Perancangan Cipher Blok 1. Prinsip Confusion dan Diffusion dari Shannon Kedua prinsip Shannon ini sudah dibicarakan pada kuliah yang lalu. 2. Cipher Berulang (Iterated Cipher) • Fungsi transformasi sederhana yang mengubah plainteks menjadi cipherteks diulang sejumlah kali. Pada setiap putaran digunakan upa-kunci (subkey) atau kunci putaran (round key) yang dikombinasikan dengan plainteks. Secara formal, cipher berulang dinyatakan sebagai Ci = f(Ci – 1, Ki) yang dalam hal ini, i Ki f = 1, 2, …, r (r adalah jumlah putaran). = upa-kunci (subkey) pada putaran ke-i = fungsi transformasi (di dalamnya terdapat fungsi substitusi, permutasi, dan/atau ekspansi, kompresi). Plainteks dinyatakan dengan C0 dan cipherteks dinyatakan dengan Cr. 3. Jaringan Feistel (Feistel Network) • • Hampir semua algoritma cipher blok bekerja dalam model jaringan Feistel. Jaringan Feistel ditemukan oleh Horst Feistel tahun 1970. Model jaringan Feistel adalah sebagai berikut: 1. Bagi blok yang panjangnya n bit menjadi dua bagian, kiri (L) dan kanan (R), yang masingmasing panjangnya n/2 (hal ini mensyaratkan n harus genap). 2. Definisikan cipher blok berulang dimana hasil dari putaran ke-i ditentukan dari hasil putaran sebelumnya (lihat Gambar 33), yaitu Li = Ri+1 Ri = Li – 1 ⊕ f(Ri – 1, Ki) yang dalam hal ini, i = 1, 2, …, r (r adalah jumlah putaran). Ki = upa-kunci (subkey) pada putaran ke-i f = fungsi transformasi (di dalamnya terdapat fungsi substitusi, permutasi, dan/atau ekspansi, kompresi).

Li – 1

Ki

Ri – 1

f

Li – 1 Gambar 33. Jaringan Feistel •

Ri – 1

Plainteks adalah gabungan L dan R awal, atau secara formal dinyatakan dengan (L0, R0), sedangkan cipherteks didapatkan dari L dan R hasil dari putaran terakhir setelah terlebih dauhulu dipertukarkan, atau secara formal dinyatakan sebagai (Rr, Lr). Jaringan Feistel banyak dipakai pada algoritma kriptografi DES (Data Encryption Standard), LOKI, GOST, FEAL, Lucifer, Blowfish, Khufu, Khafre, dan lain-lain karena model ini bersifat rErnirsible untuk proses enkripsi dan dekripsi. Sifat rErnirsible ini membuat kita tidak perlu membuat algoritma baru unruk mendekripsi cipherteks menjadi plainteks. Karena operator XOR mengkombinasikan setengah bagian kiri dengan hasil dari fungsi transformasi f, maka kesamaan berikut pasti benar: Li – 1 ⊕ f(Ri – 1, Ki) ⊕ f(Ri – 1, Ki) = Li – 1 Sifat rErnirsible tidak bergantung pada fungsi f sehingga fungsi f dapat dibuat serumit mungkin.

4. Kunci Lemah (Weak Key) • Kunci lemah adalah kunci yang menyebabkan tidak adanya perbedaan antara enkripsi dan dekripsi. Dekripsi terhadap cipherteks tetap menghasilkan plainteks semula, namun enkripsi dua kali berturut-turut terhadap plainteks akan menghasilkan kembali plainteksnya. Misalkan KL adalah kunci lemah, E adalah fungsi enkripsi, D adalah fungsi dekripsi, P adalah plainteks, dan C adalah cipherteks, maka persamaan berikut menunjukan fenomena kunci lemah: EKL(P) = C DKL(C) = EKL(C ) = P Cipher blok yang bagus tidak mempunyai kunci lemah. Meskipun demikian, algoritma yang mempunyai sedikit kunci lemah seperti DES tidak begitu masalah, karena jumlah kunci lemah itu relatif sangat kecil dibandingkan jumlah kunci keseluruhan.

5. Kotak-S (S-box) • • Kotak-S adalah matriks yang berisi substitusi sederhana yang memetakan satu atau lebih bit dengan satu atau lebih bit yang lain. Pada kebanyakan algoritma cipher blok, kotak-S memetakan m bit masukan menjadi n bit keluaran, sehingga kotak-S tersebut dinamakan kotak m × n S-box.

Kotak-S merupakan satu-satunya langkah nirlanjar di dalam algoritma, karena operasinya adalah look-up table. Masukan dari operasi look-up table dijadikan sebagai indeks kotak-S, dan keluarannya adalah entry di dalam kotak-S.

Contoh: Kotak-S di dalam algoritma DES adalah 6 × 4 S-box yang berarti memetakan 6 bit masukan menjadi 4 bit keluaran. Salah satu kotak-S yang ada di dalam algoritma DES adalah sebagai berikut: 12 10 9 4 1 15 14 3 10 4 15 2 15 2 5 12 9 7 2 9 2 12 8 5 6 9 12 15 8 5 3 10 0 6 7 11 13 1 0 14 3 13 4 1 4 14 10 7 14 0 1 6 7 11 13 0 5 3 11 8 11 8 6 13

Baris diberi nomor dari 0 sampai 3 Kolom diberi nomor dari 0 sampai 15 Masukan untuk proses substitusi adalah 6 bit, b1b2b3b4b5b6 Nomor baris dari tabel ditunjukkan oleh string bit b1b6 (menyatakan 0 sampai 3 desimal) Nomor kolom ditunjukkan oleh string bit b2b3b4b5 (menyatakan 0 sampai 15) Misalkan masukan adalah 110100 Nomor baris tabel = 10 (artinya baris 2 desimal) Nomor kolom tabel = 1010 (artinya kolom 10 desimal) Jadi, substitusi untuk 110100 adalah entry pada baris 2 dan kolom 10, yaitu 0100 (atau 4 desimal). Perancangan kotak-S menjadi isu penting karena kotak-S harus dirancang sedemikian sehingga kekuatan kriptografinya bagus dan mudah diimplementasikan. • Ada empat cara (pendekatan) yang dapat digunakan dalam mengisi kotak-S: 1. Dipilih secara acak Untuk kotak-S yang kecil, cara pengisian secara acak tidak aman, namun untuk kotak-S yang besar cara ini cukup bagus. 2. Dipilih secara acak lalu diuji Sama seperti cara nomor 1, namun nilai acak yang dibangkitkan diuji apakah memenuhi sifat tertentu. 3. Dibuat oleh orang (man-made) Entry di dalam kotak-S dibangkitkan dengan teknik yang lebih intuitif. 4. Dihitung secara matematis (math-made) Entry di dalam kotak-S dibangkitkan berdasarkan prinsip matematika yang terbukti aman dari serangan kriptanalis. Data Encryption Standard (DES) Sejarah DES • Algoritma DES dikembangkan di IBM dibawah kepemimpinan W.L. Tuchman pada tahun 1972. Algoritma ini didasarkan pada algoritma LUCIFER yang dibuat oleh Horst Feistel.

Algoritma ini telah disetujui oleh National Bureau of Standard (NBS) setelah penilaian kekuatannya oleh National Security Agency (NSA) Amerika Serikat.

Tinjauan Umum • • DES termasuk ke dalam sistem kriptografi simetri dan tergolong jenis cipher blok. DES beroperasi pada ukuran blok 64 bit. DES mengenkripsikan 64 bit plainteks menjadi 64 bit cipherteks dengan menggunakan 56 bit kunci internal (internal key) atau upa-kunci (subkey). Kunci internal dibangkitkan dari kunci eksternal (external key) yang panjangnya 64 bit. Skema global dari algoritma DES adalah sebagai berikut (lihat Gambar 34):

• 1. 2.

Blok plainteks dipermutasi dengan matriks permutasi awal (initial permutation atau IP). Hasil permutasi awal kemudian di-enciphering- sebanyak 16 kali (16 putaran). Setiap putaran menggunakan kunci internal yang berbeda. 3. Hasil enciphering kemudian dipermutasi dengan matriks permutasi balikan (invers initial permutation atau IP-1 ) menjadi blok cipherteks. Plainteks Plainteks

IP

16 kali

Enciphering

IP-1

Cipherteks Gambar 34. Skema Global Algoritma DES • Di dalam proses enciphering, blok plainteks terbagi menjadi dua bagian, kiri (L) dan kanan (R), yang masing-masing panjangnya 32 bit. Kedua bagian ini masuk ke dalam 16 putaran DES. Pada setiap putaran i, blok R merupakan masukan untuk fungsi transformasi yang disebut f. Pada fungsi f, blok R dikombinasikan dengan kunci internal Ki. Keluaran dai fungsi f di-XORkan dengan blok L untuk mendapatkan blok R yang baru. Sedangkan blok L yang baru langsung diambil dari blok R sebelumnya. Ini adalah satu putaran DES. Secara matematis, satu putaran DES dinyatakan sebagai Li = Ri – 1 Ri = Li – 1 ⊕ f(Ri – 1, Ki) Gambar 35 memperlihatkan skema algoritma DES yang lebih rinci.

P la in te k s

IP

L

0

R

0

f

K

1


L
1

= R

0

R1 = L0 ⊕ f ( R 0 , K 1 )

f

K

2


L
2

= R

1

R 2 = L1 ⊕ f ( R1 , K 2 )

L

15

= R

14

R15 = L14 ⊕ f ( R14 , K 15 )

f

K

16


R16 = L15 ⊕ f ( R15 , K 16 ) L = R

16

15

IP

-1

C ip h e r te k s

Gambar 35. Algoritma Enkripsi dengan DES • Catatlah bahwa satu putaran DES merupakan model jaringan Feistel (lihat Gambar 36).
Li

-1

Ri −1

f

K

i


Li

Ri

Gambar 36. Jaringan Feistel untuk satu putaran DES

Perlu dicatat dari Gambar 35 bahwa jika (L16, R16) merupakan keluaran dari putaran ke-16, maka (R16, L16) merupakan pra-cipherteks (pre-ciphertext) dari enciphering ini. Cipherteks yang sebenarnya diperoleh dengan melakukan permutasi awal balikan, IP-1, terhadap blok pra-cipherteks.

Permutasi Awal Sebelum putaran pertama, terhadap blok plainteks dilakukan permutasi awal (initial permutation atau IP). Tujuan permutasi awal adalah mengacak plainteks sehingga urutan bit-biit di dalamnya berubah. Pengacakan dilakukan dengan menggunakan matriks permutasi awal berikut ini: 58 50 42 34 26 18 10 2 60 52 44 36 28 20 62 54 46 38 30 22 14 6 64 56 48 40 32 24 57 49 41 33 25 17 9 1 59 51 43 35 27 19 61 53 45 37 29 21 13 5 63 55 47 39 31 23 Cara membaca tabel/matriks di atas: dua entry ujung kiri atas (58 dan 50) berarti: “pindahkan bit ke-58 ke posisi bit 1” “pindahkan bit ke-50 ke posisi bit 2”, dst Pembangkitan Kunci Internal • Karena ada 16 putaran, maka dibutuhkan kunci internal sebanyak 16 buah, yaitu K1, K2, …, K16. Kunci-kunci internal ini dapat dibangkitkan sebelum proses enkripsi atau bersamaan dengan proses enkripsi. Kunci internal dibangkitkan dari kunci eksternal yang diberikan oleh pengguna. Kunci eksternal panjangnya 64 bit atau 8 karakter. Misalkan kunci eksternal yang tersusun dari 64 bit adalah K. Kunci eksternal ini menjadi masukan untuk permutasi dengan menggunakan matriks permutasi kompresi PC-1 sebagai berikut: 57 49 41 33 25 17 9 1 58 50 42 34 26 18 10 2 59 51 43 35 27 19 11 3 60 52 44 36 63 55 47 39 31 23 15 7 62 54 46 38 30 22 14 6 61 53 45 37 29 21 13 5 28 20 12 4 Dalam permutasi ini, tiap bit kedelapan (parity bit) dari delapan byte kunci diabaikan. Hasil permutasinya adalah sepanjang 56 bit, sehingga dapat dikatakan panjang kunci DES adalah 56 bit. Selanjutnya, 56 bit ini dibagi menjadi 2 bagian, kiri dan kanan, yang masing-masing panjangnya 28 bit, yang masing-masing disimpan di dalam C0 dan D0: C0: berisi bit-bit dari K pada posisi 57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18 10, 2, 59, 51, 43, 35, 27, 19, 11, 3, 60, 52, 44, 36 D0: berisi bit-bit dari K pada posisi 63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22 14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4 Selanjutnya, kedua bagian digeser ke kiri (left shift) sepanjang satu atau dua bit bergantung pada tiap putaran. Operasi pergeseran bersifat wrapping atau round-shift. Jumlah pergeseran pada setiap putaran ditunjukkan pada Tabel 8, sbb: 12 16 11 15 4 8 3 7

• •

Tabel 8. Jumlah pergeseran bit pada setiap putaran Putaran, i Jumlah pergeseran bit 1 1 2 1 3 2 4 2 5 2 6 2 7 2 8 2 9 1 10 2 11 2 12 2 13 2 14 2 15 2 16 1

Misalkan (Ci, Di) menyatakan penggabungan Ci dan Di. (Ci+1, Di+1) diperoleh dengan menggeser Ci dan Di satu atau dua bit. Setelah pergeseran bit, (Ci, Di) mengalami permutasi kompresi dengan menggunakan matriks PC-2 berikut: 14 23 41 44 17 19 52 49 11 12 31 39 24 4 37 56 1 26 47 34 5 8 55 53 3 16 30 46 28 7 40 42 15 27 51 50 6 20 45 36 21 13 33 29 10 2 48 32

Dengan permutasi ini, kunci internal Ki diturunkan dari (Ci, Di) yang dalam hal ini Ki merupakan penggabungan bit-bit Ci pada posisi: 14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10 23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2 dengan bit-bit Di pada posisi: 41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48 44, 49, 39,56, 34, 53, 46, 42, 50, 36, 29, 32 Jadi, setiap kunci internal Ki mempunyai panjang 48 bit. Proses pembangkitan kunci-kunci internal ditunjukkan pada Gambar 37. Bila jumlah pergeseran bit-bit pada Tabel 8 dijumlahkan semuanya, maka jumlah seluruhnya sama dengan 28, yang sama dengan jumlah bit pada Ci dan Di. Karena itu, setelah putaran ke-16 akan didapatkan kembali C16 = C0 dan D16 = D0.

K u n c i e k s te rn a l P e rm u ta s i P C -1 C D

0

0

L e ft S h ift C

L e ft S h ift D

1

1

P e r m u ta s i P C -2

K

1

L e ft S h ift

L e ft S h ift


C
j


D
j

P e r m u ta s i P C -2

K

j


L e ft S h ift C


L e ft S h ift D

16

16

P e r m u ta s i P C -2

K

16

Gambar 37. Proses Pembangkitan Kunci-Kunci Internal DES Enciphering • Proses enciphering terhadap blok plainteks dilakukan setelah permutasi awal (lihat Gambar 34). Setiap blok plainteks mengalami 16 kali putaran enciphering (lihat Gambar 35). Setiap putaran enciphering merupakan jaringan Feistel yang secara matematis dinyatakan sebagai Li = Ri – 1 Ri = Li – 1 ⊕ f(Ri – 1, Ki) Diagram komputasi fungsi f diperlihatkan pada Gambar 38.
R 3 2 b it E (R 4 8 b it
i-1 i-1

E k sp a n si m e n ja d i 4 8 b it )


4 8 b it 4 8 b it

K

i

E ( Ri −1 ) ⊕ K i = A

S

1

...
B

S

8

M a trik s s u b s titu s i

3 2 b it P (B ) 3 2 b it

Gambar 38. Rincian komputasi fungsi f

E adalah fungsi ekspansi yang memperluas blok Ri – 1 yang panjangnya 32-bit menjadi blok 48 bit. Fungsi ekspansi direalisasikan dengan matriks permutasi ekspansi sbb: 32 1 2 3 4 5 4 5 6 7 8 9 8 9 10 11 12 13 12 13 14 15 16 17 16 17 18 19 20 21 20 21 22 23 24 25 24 25 26 27 28 29 28 29 30 31 32 1 Selanjutnya, hasil ekpansi, yaitu E(Ri – 1), yang panjangnya 48 bit di-XOR-kan dengan Ki yang panjangnya 48 bit menghasilkan vektor A yang panjangnya 48-bit: E(Ri – 1) ⊕ Ki = A

Vektor A dikelompokkan menjadi 8 kelompok, masing-masing 6 bit, dan menjadi masukan bagi proses substitusi. Proses substitusi dilakukan dengan menggunakan delapan buah kotak-S (S-box), S1 sampai S8. Setiap kotak-S menerima masukan 6 bit dan menghasilkan keluaran 4 bit. Kelompok 6-bit pertama menggunakan S1, kelompok 6-bit kedua menggunakan S2, dan seterusnya. (cara pensubstitusian dengan kotak-S sudah dijelaskan pada materi “Prinsip-prinsip Perancangan Cipher Blok”) Kedelapan kotak-S tersebut adalah: S1: 14 0 4 15 S2: 15 3 0 13 S3: 10 13 13 1 S4: 7 13 10 3 S5: 2 14 4 11 S6: 12 10 9 4 S7: 4 15 1 12 1 13 14 8 0 7 6 10 13 8 6 15 12 11 2 8 1 15 14 3 13 7 14 8 8 4 7 10 9 0 4 13 14 11 9 0 4 2 1 12 10 4 15 2 1 4 8 2 14 7 11 1 14 9 9 0 3 5 0 6 1 12 11 7 15 2 5 12 2 14 13 4 6 15 10 3 6 3 8 6 0 6 12 10 7 4 10 1 9 7 2 9 15 2 6 9 11 2 4 15 3 4 15 9 6 15 11 1 10 7 13 14 2 12 8 5 11 13 2 1 3 8 13 4 15 6 3 8 9 0 7 13 11 13 7 2 6 9 12 15 8 1 11 7 4 14 1 2 5 10 0 7 10 3 13 8 6 1 8 13 8 5 3 10 3 10 15 5 9 12 5 11 1 2 11 4 1 4 15 9 8 5 15 6 0 6 7 11 10 6 12 11 7 0 8 6 13 8 1 15 2 7 1 4 5 0 9 15 13 1 0 14 6 12 9 3 2 1 12 7 12 5 2 14 8 2 3 5 3 15 12 0 3 13 4 1 12 11 7 14 13 10 6 12 7 14 12 3 5 12 14 11 15 10 5 9 4 14 10 7 5 9 3 10 12 6 9 0 11 12 5 11 11 1 5 12 13 3 6 10 14 0 1 6 9 5 10 0 0 9 3 5 4 11 10 5 12 10 2 7 0 9 3 4 7 11 13 0 0 3 5 6 5 11 2 14 2 15 14 2 4 14 8 2 14 8 0 5 5 3 11 8 7 8 0 13 10 5 15 9 8 1 7 12 15 9 4 14 9 16 14 3 11 8 6 13

4 13 1 6 S8: 13 1 7 2 •

11 0 4 11

2 11 11 13

14 7 13 8

15 4 12 1

0 9 3 4

8 1 7 10

13 10 14 7

3 14 10 9

12 3 15 5

9 5 6 0

7 12 8 15

5 2 0 14

10 15 5 2

6 8 9 3

1 6 2 12

2 15 11 1

8 13 4 14

4 8 1 7

6 10 9 4

15 3 12 10

11 7 14 8

1 4 2 13

10 12 0 15

9 5 6 12

3 6 10 9

14 11 13 0

5 0 15 3

0 14 3 5

12 9 5 6

7 2 8 11

Keluaran proses substitusi adalah vektor B yang panjangnya 48 bit. Vektor B menjadi masukan untuk proses permutasi. Tujuan permutasi adalah untuk mengacak hasil proses substitusi kotak-S. Permutasi dilakukan dengan menggunakan matriks permutasi P (P-box) sbb: 7 8 20 24 21 14 29 32 12 27 28 3 17 9 1 19 15 13 23 30 26 6 5 22 8 11 31 4 10 25

16 2 • •

Bit-bit P(B) merupakan keluaran dari fungsi f. Akhirnya, bit-bit P(B) di-XOR-kan dengan Li – 1 untuk mendapatkan Ri (lihat Gambar 39): Ri = Li – 1 ⊕ P(B)

Jadi, keluaran dari putaran ke-i adalah (Li, Ri) = (Ri – 1 , Li – 1 ⊕ P(B))
L 3 2 b it

i-1

f


R 3 2 b it
i

Gambar 39. Skema Perolehan Ri Permutasi Terakhir (Inverse Initial Permutation) • • 40 38 36 34 8 6 4 2 Permutasi terakhir dilakukan setelah 16 kali putaran terhadap gabungan blok kiri dan blok kanan. Proses permutasi menggunakan matriks permutasi awal balikan (inverse initial permutation atau IP-1 ) sbb: 48 46 44 42 16 14 12 10 56 54 52 50 24 22 20 18 64 62 60 58 32 30 28 26 39 37 35 33 7 5 3 1 47 45 43 41 15 13 11 9 55 53 51 49 23 21 19 17 63 61 59 57 31 29 27 25

Dekripsi • Proses dekripsi terhadap cipherteks merupakan kebalikan dari proses enkripsi. DES menggunakan algoritma yang sama untuk proses enkripsi dan dekripsi. Jika pada proses enkripsi urutan kunci internal yang digunakan adalah K1, K2, …, K16, maka pada proses dekripsi urutan kunci yang digunakan adalah K16, K15, …, K1. Untuk tiap putaran 16, 15, …, 1, keluaran pada setiap putaran deciphering adalah Li = Ri – 1 Ri = Li – 1 ⊕ f(Ri – 1, Ki) yang dalam hal ini, (R16, L16) adalah blok masukan awal untuk deciphering. Blok (R16, L16) diperoleh dengan mempermutasikan cipherteks dengan matriks permutasi IP-1. Pra-keluaran dari deciphering adalah adalah (L0, R0). Dengan permutasi awal IP akan didapatkan kembali blok plainteks semula. • Tinjau kembali proses pembangkitan kunci internal. Selama deciphering, K16 dihasilkan dari (C16, D16) dengan permutasi PC-2. Tentu saja (C16, D16) tidak dapat diperoleh langsung pada permulaan deciphering. Tetapi karena (C16, D16) = (C0, D0), maka K16 dapat dihasilkan dari (C0, D0) tanpa perlu lagi melakukan pergeseran bit. Catatlah bahwa (C0, D0) yang merupakan bitbit dari kunci eksternal K yang diberikan pengguna pada waktu dekripsi. Selanjutnya, K15 dihasilkan dari (C15, D15) yang mana (C15, D15) diperoleh dengan menggeser C16 (yang sama dengan C0) dan D16 (yang sama dengan C0) satu bit ke kanan. Sisanya, K14 sampai K1 dihasilkan dari (C14, D14) sampai (C1, D1). Catatlah bahwa (Ci – 1, Di – 1) diperoleh dengan menggeser Ci dan Di dengan cara yang sama seperti pada Tabel 1, tetapi pergeseran kiri (left shift) diganti menjadi pergeseran kanan (right shift).

Mode DES • DES dapat dioperasikan dengan mode ECB, CBC, OFB, dan CFB. Namun karena kesederhanaannya, mode ECB lebih sering digunakan pada paket program komersil meskipun sangat rentan terhadap serangan. Mode CBC lebih kompleks daripada EBC namun memberikan tingkat keamanan yang lebih bagus daripada mode EBC. Mode CBC hanya kadang-kadang saja digunakan.

Implementasi Hardware dan Software DES • • • DES sudah diimplementasikan dalam bentuk perangkat keras. Dalam bentuk perangkat keras, DES diimplementasikan di dalam chip. Setiap detik chip ini dapat mengenkripsikan 16,8 juta blok (atau 1 gigabit per detik). Implementasi DES ke dalam perangkat lunak dapat melakukan enkripsi 32.000 blok per detik (pada komputer mainframe IBM 3090).

Keamanan DES • Isu-isu yang menjadi perdebatan kontroversial menyangkut keamanan DES: 1. Panjang kunci 2. Jumlah putaran 3. Kotak-S Panjang kunci • Panjang kunci eksternal DES hanya 64 bit atau 8 karakter, itupun yang dipakai hanya 56 bit. Pada rancangan awal, panjang kunci yang diusulkan IBM adalah 128 bit, tetapi atas

permintaan NSA, panjang kunci diperkecil diumumkan. •

menjadi 56 bit. Alasan pengurangan tidak

Tetapi, dengan panjang kunci 56 bit akan terdapat 256 atau 72.057.594.037.927.936 kemungkinan kunci. Jika diasumsikan serangan exhaustive key search dengan menggunakan prosesor paralel mencoba setengah dari jumlah kemungkinan kunci itu, maka dalam satu detik dapat dikerjakan satu juta serangan. Jadi seluruhnya diperlukan 1142 tahun untuk menemukan kunci yang benar.

Tahun 1998, Electronic Frontier Foundarion (EFE) merancang dan membuat perangkat keras khusus untuk menemukan kunci DES secara exhaustive search key dengan biaya $250.000 dan diharapkan dapat menemukan kunci selama 5 hari. Tahun 1999, kombinasi perangkat keras EFE dengan kolaborasi internet yang melibatkan lebih dari 100.000 komputer dapat menemukan kunci DES kurang dari 1 hari. Jumlah putaran • • Sebenarnya, delapan putaran sudah cukup untuk membuat cipherteks sebagai fungsi acak dari setiap bit plainteks dan setiap bit cipherteks. Jadi, mengapa harus 16 kali putaran? Dari penelitian, DES dengan jumlah putaran yang kurang dari 16 ternyata dapat dipecahkan dengan known-plaintext attack lebih mangkus daripada dengan brute force attack.

Kotak-S • Pengisian kotak-S DES masih menjadi misteri tanpa ada alasan mengapa memilih konstantakonstanta di dalam kotak itu.

Kunci Lemah dan Kunci Setengah Lemah • DES mempunyai beberapa kunci lemah (weak key). Kunci lemah menyebabkan kunci-kunci internal pada setiap putaran sama (K1 = K2 = … = K16). Akibatnya, enkripsi dua kali berturutturut terhadap plainteks menghasilkan kembali plainteks semula. Kunci lemah terjadi bila bit-bit di dalam Ci dan Di semuanya 0 atau 1, atau setengah dari kunci seluruh bitnya 1 dan setengah lagi seluruhnya 0. Kunci eksternal (dalam notasi HEX) yang menyebabkan terjadinya kunci lemah adalah (ingat bahwa setiap bit kedelapan adalah bit paritas). Kunci lemah (dengan bit paritas) 0101 0101 0101 0101 1F1F 1F1F 1F1F 1F1F E0E0 E0E0 F1F1 F11F FEFE FEFE FEFE FEFE • Kunci sebenarnya 0000000 0000000 0000000 FFFFFFF FFFFFFF 0000000 FFFFFFF FFFFFFF

• •

Selain kunci lemah, DES juga mempunyai sejumlah pasangan kunci setengah-lemah (semiweak key). Pasangan kunci setengah- lemah mengenkripsikan plainteks menjadi cipherteks yang sama. Sehingga, satu kunci dalam pasangan itu dapat mendekripsi pesan yang dienkripsi oleh kunci yang lain di dalam pasangan itu. Kunci setengah-lemah terjadi bila: 1. Register C dan D berisi bit-bit dengan pola 0101…0101 atau 1010…1010 2. Register yang lain (C atau D) berisi bit-bit dengan pola 0000…0000, 1111…1111, 0101… 0101, atau 1010…1010

Ada 6 pasang kunci setengah lemah (dalam notasi HEX): a. 01FE 01FE 01FE 01FE dan FE01 FE01 FE01 FE01 b. 1FE0 1FE0 0EF1 0EF1 dan E01F E01F F10E F10E c. 01E0 01E0 01F1 01F1 dan E001 E001 F101 F101 d. 1FFE 1FFE 0EFE 0EFE dan FE1F FE1F FE0E FE0E e. 011F 011F 010E 010E dan 1F01 1F01 0E01 0E01 f. E0FE E0FE F1FE F1FE dan FEE0 FEE0 FEF1 FEF1 IV. Kunci Asimetris Dalam assymmetric cryptosistem 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 MerkleHellman Scheme. Setiap cryptosytem yang baik harus memiliki karakteristik sebagai berikut : • • • • Keamanan sistem terletak pada kerahasiaan kunci dan bukan pada kerahasiaan algoritma yang digunakan. Cryptosistem yang baik memiliki ruang kunci (keyspace) yang besar. Cryptosistem yang baik akan menghasilkan ciphertext yang terlihat acak dalam seluruh tes statistik yang dilakukan terhadapnya. Cryptosistem yang baik mampu menahan seluruh serangan yang telah dikenal sebelumnya

Namun demikian perlu diperhatikan bahwa bila suatu cryptosistem berhasil memenuhi seluruh karateristik di atas belum tentu ia merupakan sistem yang baik. Banyak cryptosistem lemah yang terlihat baik pada awalnya. Kadang kala untuk menunjukkan bahwa suatu cryptosistem kuat atau baik dapat dilakukan dengan menggunakan pembuktian matematika. Hingga saat ini masih banyak orang yang menggunakan cryptosistem 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. Pada pertengahan tahun 70-an Whitfield Diffie dan Martin Hellman menemukan teknik enkripsi asimetris yang merevolusi dunia kriptografi. Kunci asimetris adalah pasangan kunci-kunci kriptografi yang salah satunya dipergunakan untuk proses enkripsi dan yang satu lagi untuk dekripsi. Semua orang yang mendapatkan kunci publik dapat menggunakannya untuk mengenkripsikan suatu pesan, sedangkan hanya satu orang saja yang memiliki rahasia tertentu – dalam hal ini kunci privat – untuk melakukan pembongkaran terhadap sandi yang dikirim untuknya. • Ide dasar dari sistem kriptografi kunci-publik adalah bahwa kunci kriptografi dibuat sepasang, satu kunci untuk enkripsi dan satu kunci untuk dekripsi. Kunci untuk enkripsi bersifat publik (tidak rahasia) – sehingga dinamakan kunci publik (public-key) – sedangkan kunci dekripsi bersifat rahasia – sehingga dinamakan kunci rahasia (private key atau secret key). Kunci-kunci ini dipilih sedemikian sehingga – secara praktek – tidak mungkin menurunkan kunci rahasia dari kunci publik.

PK

SK

plainteks enkripsi

chiperteks dekripsi

plainteks semula

Ket: PK = Public Key, SK = Secret Key Gambar 40. Sistem kriptografi kunci-publik. • Sistem kriptografi kunci-publik cocok untuk kelompok pengguna di lingkungan jaringan komputer. Setiap pengguna jaringan mempunyai kunci publik dan kunci rahasia yang bersuaian. Kunci publik, karena tidak rahasia, biasanya disimpan di dalam basisdata kunci yang dapat diakses oleh pengguna lain. Jika ada pengguna yang hendak berkirim pesan ke pengguna lainnya, maka ia ia perlu mengetahui kunci publik penerima pesan melalui basisdata kunci ini lalu menggunakannya untuk mengenkripsi pesan. Hanya penerima pesan yang berhak yang dapat mendekripsi pesan karena ia mempunyai kunci rahasia. Dengan sistem kriptografi kunci publik, tidak diperlukan pengiriman kunci rahasia melalui saluran komunikasi khusus sebagaimana pada sistem kriptografi simetri. Meskipun kunci publik diumumkan ke setiap orang di dalam kelompok, namun kunci publik perlu dilindungi agar otentikasinya terjamin (misalnya tidak diubah oleh orang lain).

• •

Keamanan Sistem Kriptografi Kunci-Publik • Keamanan sistem kriptografi kunci piblik terletak pada dua hal: 1. Sulitnya menurunkan kunci rahasia dari kunci publik. 2. Sulitnya menurunkan plainteks dari cipherteks. Kelemahan Sistem Kriptografi Kunci-Publik 1. 2. 3. Enkripsi dan dekripsi data umumnya lebih lambat daripada sistem simetri, karena enkripsi dan dekripsi melibatkan operasi perpangkatan yang besar. Ukuran cipherteks lebih besar daripada plainteks (bisa dua sampai empat kali ukuran plainteks). Karena kunci publik diketahui secara luas dan dapat digunakan setiap orang, maka cipherteks tidak memberikan informasi mengenai otentikasi pengirim.

Dengan cara seperti ini, jika Anto mengirim pesan untuk Badu, Anto dapat merasa yakin bahwa pesan tersebut hanya dapat dibaca oleh Badu, karena hanya Badu yang bisa melakukan dekripsi dengan kunci privatnya. Tentunya Anto harus memiliki kunci publik Badu untuk melakukan enkripsi. Anto bisa mendapatkannya dari Badu, ataupun dari pihak ketiga seperti Tari.

Gambar 41. Penggunaan Kunci Asimetris Teknik enkripsi asimetris ini jauh lebih lambat ketimbang enkripsi dengan kunci simetris. Oleh karena itu, biasanya bukanlah pesan itu sendiri yang disandikan dengan kunci asimetris, namun hanya kunci simetrislah yang disandikan dengan kunci asimetris. Sedangkan pesannya dikirim setelah disandikan dengan kunci simetris tadi. Contoh algoritma terkenal yang menggunakan kunci asimetris adalah RSA (merupakan singkatan penemunya yakni Rivest, Shamir dan Adleman). Pada kriptosistem asimetrik, setiap pelaku sistem informasi memiliki sepasang kunci, yaitu kunci publik dan kunci pribadi. Kunci publik didistribusikan kepada umum, sedangkan kunci pribadi disimpan untuk diri sendiri. Dengan menggunakan kriptografi asimetrik, mekanisme pengiriman pesan oleh Anto kepada Badu menjadi seperti gambar di atas. Langkah-langkahnya adalah sebagai berikut, 1. Anto mengambil kunci publik milik Badu yang didistribusikan kepada umum. 2. Anto melakukan enkripsi terhadap plaintext dengan kunci publik Badu tersebut sehingga menghasilkan ciphertext. 3. Anto mengirimkan ciphertext kepada Badu. 4. Badu yang menerima ciphertext tersebut melakukan proses dekripsi dengan menggunakan kunci pribadi miliknya sehingga mendapatkan plaintext semula.

Pihak tak dikenal

e jalur tak aman

tempat kunci d

enkripsi Ee(m) = c p sumber plaintext Anto

c jalur tak aman

dekripsi Dd(c) = m p

tujuan Badu Gambar 42. Mekanisme Kriptografi Asimetrik

Algoritma Knapsack • Algoritma ini didasarkan pada persoalan 1/0 Knapsack Problem yang berbunyi: Diberikan Baduot knapsack adalah M. Diketahui n buah objek yang masing-masing Baduotnya adalah w1, w2, …, wn. Tentukan nilai bi sedemikian sehingga M = b1w1 + b2w2 + … + bnwn

yang dalam hal ini, bi bernilai 0 atau 1. Jika bi = 1, berarti objek i dimasukkan ke dalam knapsack, sebaliknya jika bi = 0, objek i tidak dimasukkan. • • Dalam teori algoritma, persoalan knapsack termasuk ke dalam kelompok NP-complete. Persoalan yang termasuk NP-complete tidak dapat dipecahkan dalam orde waktu polinomial.

Ide dasar dari algoritma knapsack adalah mengkodekan pesan sebagai rangkaian solusi dari dari persoalan knapsack. Setiap Baduot wi di dalam persoalan knapsack merupakan kunci rahasia, sedangkan bit-bit plainteks menyatakan bi. Contoh 1: Misalkan n = 6 dan w1 = 1, w2 = 5, w3 = 6, w4 = 11, w5 = 14, dan w6 = 20. Plainteks: 111001010110000000011000 Plainteks dibagi menjadi blok yang panjangnya n, kemudian setiap bit di dalam blok dikalikan dengan wi yang berkorepsonden sesuai dengan persamaan (1): Blok plainteks ke-1 : 111001 Knapsack : 1, 5, 6, 11, 14, 20 Kriptogram Blok plainteks ke-2 Knapsack Kriptogram Blok plainteks ke-3 Knapsack Kriptogram Blok plainteks ke-4 Knapsack Kriptogram : (1 × 1) + (1 × 5) + (1 × 6) + (1 × 20) = 32 : 010110 : 1, 5, 6, 11, 14, 20 : (1 × 5) + (1 × 11) + (1 × 14) = 30 : 000000 : 1, 5, 6, 11, 14, 20 :0 : 011000 : 1, 5, 6, 11, 14, 20 : (1 × 5) + (1 × 6) = 11

Jadi, cipherteks yang dihasilkan: 32 30 0 11 • Sayangnya, algoritma knapsack sederhana di atas hanya dapat digunakan untuk enkripsi, tetapi tidak dirancang untuk dekripsi. Misalnya, jika diberikan kriptogram = 32, maka tentukan b1, b2, …, b6 sedemikian sehingga 32= b1 + 5b2 + 6b3 + 11b4 + 14b5 + 20b6 Solusi persamaan (2) ini tidak dapat dipecahkan dalam orde waktu polinomial dengan semakin besarnya n (dengan catatan barisan Baduot tidak dalam urutan menaik). Namun, hal inilah yang dijadikan sebagai kekuatan algoritma knapsack. Superincreasing Knapsack • Superincreasing knapsack adalah persoalan knapsack yang dapat dipecahkan dalam orde O(n) (jadi, polinomial). Ini adalah persoalan knapsack yang mudah sehingga tidak disukai untuk dijadikan sebagai algoritma kriptografi yang kuat. Jika senarai Baduot disebut barisan superincreasing, maka kita dapat membentuk superincreasing knapsack. Barisan superincreasing adalah suatu barisan di mana setiap nilai di dalam barisan lebih besar daripada jumlah semua nilai sebelumnya. Misalnya {1, 3, 6, 13, 27, 52} adalah barisan superincreasing, tetapi {1, 3, 4, 9, 15, 25} bukan.

Solusi dari superincreasing knapsack (yaitu b1, b2, …, bn) mudah dicari sebagai berikut (berarti sama dengan mendekripsikan cipherteks mnejadi plainteks semula): 1. Jumlahkan semua Baduot di dalam barisan. 2. Bandingkan Baduot total dengan Baduot terbesar di dalam barisan. Jika Baduot terbesar lebih kecil atau sama dengan Baduot total, maka ia dimasukkan ke dalam knapsack, jika tidak, maka ia tidak dimasukkan. 3. Kurangi Baduot total dengan Baduot yang telah dimasukkan, kemudian bandingkan Baduot total sekarang dengan Baduot terbesar selanjutnya. Demikian seterusnya sampai seluruh Baduot di dalam barisan selesai dibandingkan. 4. Jika Baduot total menjadi nol, maka terdapat solusi persoalan superincreasing knapsack , tetapi jika tidak nol, maka tidak ada solusinya.

Contoh 2: Misalkan Baduot-Baduot yang membentuk barisan superincreasing adalah {2, 3, 6, 13, 27, 52}, dan diketahui Baduot knapsack (M) = 70. Kita akan mencari b1, b2, …, b6 sedemikian sehingga 70= 2b1 + 3b2 + 6b3 + 13b4 + 27b5 + 52b6 Caranya sebagai berikut: (i) (ii) Bandingkan 70 dengan Baduot terbesar, yaitu 52. Karena 52 ≤ 70, maka 52 dimasukkan ke dalam knapsack. Baduot total sekarang menjadi 70 – 52 = 18. Bandingkan 18 dengan Baduot terbesar kedua, yaitu 27. Karena 27 > 18, maka 27 tidak dimasukkan ke dalam knapsack. Bandingkan 18 dengan Baduot terbesar berikutnya, yaitu 13. Karena 13 ≤ 18, maka 13 dimasukkan ke dalam knapsack. (iv) (v) (vi) (vii) (viii) (ix) Baduot total sekarang menjadi 18 – 13 = 5. Bandingkan 5 dengan Baduot terbesar kedua, yaitu 6. Karena 6 > 5, maka 6 tidak dimasukkan ke dalam knapsack. Bandingkan 5 dengan Baduot terbesar berikutnya, yaitu 3. Karena 3 ≤ 5, maka 3 dimasukkan ke dalam knapsack. Baduot total sekarang menjadi 5 – 3 = 2. Bandingkan 2 dengan Baduot terbesar berikutnya, yaitu 2. Karena 2 ≤ 2, maka 2 dimasukkan ke dalam knapsack. Baduot total sekarang menjadi 2 – 2 = 0.

(iii)

Karena Baduot total tersisa = 0, maka solusi persoalan superincreasing knapsack ditemukan. Barisan Baduot yang dimasukkan ke dalam knapsack adalah {2, 3, – , 13, – , 52} sehingga 70 = (1 × 2) + (1 × 3) + (0 × 6) + (1 × 13) + (0 × 27) + (1 × 52) Dengan kata lain, plainteks dari kriptogram 70 adalah 110101. Algoritma Knapsack Kunci-Publik • • Algoritma superincreasing knapsack adalah algoritma yang lemah, karena cipherteks dapat didekripsi menjadi plainteksnya secara mudah dalam waktu lanjar. Algoritma non-superincreasing knapsack atau normal knapsack adalah kelompok algoritma knapsack yang sulit (dari segi komputasi) karena membutuhkan waktu dalam orde eksponensial untuk memecahkannya.

Namun, superincreasing knapsack dapat dimodifikasi menjadi non-superincreasing knapsack dengan menggunakan kunci publik (untuk enkripsi) dan kunci rahasia (untuk dekripsi). Kunci publik merupakan barisan non-superincreasing sedangkan kunci rahasia tetap merupakan barisan superincreasing. Modifikasi ini ditemukan oleh Martin Hellman dan Ralph Merkle. Cara membuat kunci publik dan kunci rahasia: 1. Tentukan barisan superincreasing. 2. Kalikan setiap elemen di dalam barisan tersebut dengan n modulo m. Modulus m seharusnya angka yang lebih besar daripada jumlah semua elemen di dalam barisan, sedangkan pengali n seharusnya tidak mempunyai faktor persekutuan dengan m. 3. Hasil perkalian akan menjadi kunci publik sedangkan barisan superincreasing semula menjadi kunci rahasia.

Contoh 3: Misalkan barisan superincreasing adalah {2, 3, 6, 13, 27, 52), m = 105, dan n = 31. Barisan non-superincreasing (atau normal) knapsack dihitung sbb: 2 ⋅ 31 mod 105 = 62 3 ⋅ 31 mod 105 = 93 6 ⋅ 31 mod 105 = 81 13 ⋅ 31 mod 105 = 88 27 ⋅ 31 mod 105 = 102 52 ⋅ 31 mod 105 = 37 Jadi, kunci publik adalah {62, 93, 81, 88, 102, 37}, sedangkan kunci rahasia adalah {2, 3, 6, 13, 27, 52}. Enkripsi • • • Enkripsi dilakukan dengan cara yang sama seperti algoritma knapsack sebelumnya. Mula-mula plainteks dipecah menjadi blok bit yang panjangnya sama dengan kardinalitas barisan kunci publik. Kalikan setiap bit di dalam blok dengan elemen yang berkoresponden di dalam kunci publik.

Contoh 4: Misalkan Plainteks: 011000110101101110 dan kunci publik yang digunakan seperti pada Contoh 3. Plainteks dibagi menjadi blok yang panjangnya 6, kemudian setiap bit di dalam blok dikalikan dengan elemen yang berkorepsonden di dalam kunci publik: Blok plainteks ke-1 : 011000 Kunci publik : 62, 93, 81, 88, 102, 37 Kriptogram Blok plainteks ke-2 Kunci publik Kriptogram Blok plainteks ke-3 Kunci publik Kriptogram : (1 × 93) + (1 × 81) = 174 : 110101 : 62, 93, 81, 88, 102, 37 : (1 × 62) + (1 × 93) + (1 × 88) + (1 × 37) = 280 : 101110 : 62, 93, 81, 88, 102, 37 : (1 × 62) + (1 × 81) + (1 × 88) + (1 × 102) = 333

Jadi, cipherteks yang dihasilkan : 174, 280, 333 Dekripsi • • Dekripsi dilakukan dengan menggunakan kunci rahasia. Mula-mula penerima pesan menghitung n–1 , yaitu balikan n modulo m, sedemikian sehingga n ⋅ n–1 ≡ 1 (mod m). Kekongruenan ini dapat dihitung dengan cara yang sederhana sebagai berikut (disamping dengan cara yang sudah pernah diberikan pada Teori Bilangan Bulat): n ⋅ n–1 ≡ 1 (mod m) ⇔ ⇔ n ⋅ n–1 = 1 + km n–1 = (1 + km)/n , k sembarang bilangan bulat

Kalikan setiap kriptogram dengan n–1 mod m, lalu nyatakan hasil kalinya sebagai penjumlahan elemen-elemen kunci rahasia untuk memperoleh plainteks dengan menggunakan algoritma pencarian solusi superincreasing knapsack. Contoh 5: Kita akan mendekripsikan cipherteks dari Contoh 4 dengan menggunakan kunci rahasia {2, 3, 6, 13, 27, 52}. Di sini, n = 31 dan m = 105. Nilai n–1 diperoleh sbb: n–1 = (1 + 105k)/31 Dengan mencoba k = 0, 1, 2, …, maka untuk k = 18 diperoleh n–1 bilangan bulat, yaitu n–1 = (1 + 105 ⋅ 18)/31 = 61

Cipherteks dari Contoh 4 adalah 174, 280, 222. Plainteks yang berkoresponden diperoleh kembali sebagai berikut: 174 ⋅ 61 mod 105 = 9 = 3 + 6, berkoresponden dengan 011000 280 ⋅ 61 mod 105 = 70 = 2 + 3 + 13 + 52, berkoresponden dengan 011000 333 ⋅ 61 mod 105 = 48 = 2 + 6 + 13 + 27, berkoresponden dengan 101110 Jadi, plainteks yang dihasilkan kembali adalah: 011000 011000 101110 Implementasi Knapsack • Ukuran cipherteks yang dihasilkan lebih besar daripada plainteksnya, karena enkripsi dapat menghasilkan kriptogram yang nilai desimalnya lebih besar daripada nilai desimal blok plainteks yang dienkripsikan. Untuk menambah kekuatan algoritma knapsack, kunci publik maupun kunci rahasia seharusnya paling sedikit 250 elemen, nilai setiap elemen antara 200 sampai 400 bit panjangnya, nilai modulus antara 100 sampai 200 bit. Dengan nilai-nilai knapsack sepanjang itu, dibutuhkan 1046 tahun untuk menemukan kunci secara brute force, dengan asumsi satu juta percobaan setiap detik.

Keamanan Knapsack • Sayangnya, algoritma knapsack dinyatakan sudah tidak aman, karena knapsack dapat dipecahkan oleh pasangan kriptografer ShAnto dan Zippel. Mereka merumuskan transformasi yang memungkinkan mereka merekonstruksi superincreasing knapsack dari normal knapsack.

Algoritma RSA • • • Dari sekian banyak algoritma kriptografi kunci-publik yang pernah dibuat, algoritma yang paling populer adalah algoritma RSA. Algoritma RSA dibuat oleh 3 orang peneliti dari MIT (Massachussets Institute of Technology) pada tahun 1976, yaitu: Ron (R)ivest, Adi (S)hAnto, dan Leonard (A)dleman. Keamanan algoritma RSA terletak pada sulitnya memfaktorkan bilangan yang besar menjadi faktor-faktor prima. Pemfaktoran dilakukan untuk memperoleh kunci pribadi. Selama pemfaktoran bilangan besar menjadi faktor-faktor prima belum ditemukan algoritma yang mangkus, maka selama itu pula keamanan algoritma RSA tetap terjamin. Besaran-besaran yang digunakan pada algoritma RSA: 1. p dan q bilangan prima 2. r = p ⋅ q 3. φ (r) = (p – 1)(q – 1) 4. 5. 6. 7. • PK (kunci enkripsi) SK (kunci dekripsi) X (plainteks) Y (cipherteks) (rahasia) (tidak rahasia) (rahasia) (tidak rahasia) (rahasia) (rahasia) (tidak rahasia)

Algoritma RSA didasarkan pada teorema Euler (lihat bahan kuliah Teori Bilangan Bulat) yang menyatakan bahwa a (r) ≡ 1 (mod r) yang dalam hal ini, 1. a harus relatif prima terhadap r
φ

(1)

2. φ (r) = r(1 – 1/p1)(1 – 1/p2) … (1 – 1/pn), yang dalam hal ini p1, p2, …, pn adalah faktor prima dari r. • φ (r) adalah fungsi yang menentukan berapa banyak dari bilanganbilangan 1, 2, 3, …, r yang relatif prima terhadap r. Berdasarkan sifat am ≡ bm (mod r) untuk m bilangan bulat ≥ 1, maka persamaan (1) dapat ditulis menjadi am atau am • •
φ (r) φ (r)

≡ 1m (mod r) ≡ 1 (mod r) ≡ 1 (mod r) ≡ X (mod r) (2) (3) (4)

Bila a diganti dengan X, maka persamaan (2) menjadi Xm Xm
φ (r)

Berdasarkan sifat ac ≡ bc (mod r), maka bila persamaan (3) dikali dengan X menjadi:
φ (r) + 1

yang dalam hal ini X relatif prima terhadap r. • Misalkan SK dan PK dipilih sedemikian sehingga SK ⋅ PK ≡ 1 (mod φ (r)) (5)

atau SK ⋅ PK = mφ (r) + 1 • Sulihkan (6) ke dalam persamaan (4) menjadi: X SK
⋅ PK

(6) (7) (8)

≡ X (mod r)

Persamaan (7) dapat ditulis kembali menjadi (X PK)SK ≡ X (mod r) yang artinya, perpangkatan X dengan PK diikuti dengan perpangkatan dengan SK menghasilkan kembali X semula. • Berdasarkan persamaan (8), maka enkripsi dan dekripsi dirumuskan sebagai berikut: EPK(X) = Y ≡ XPK mod r DSK(Y) = X ≡ Y •
SK

(9) (10)

mod r

Karena SK ⋅ PK = PK ⋅ SK, maka enkripsi diikuti dengan dekripsi ekivalen dengan dekripsi diikuti enkripsi: ESK(DSK(X)) = DSK(EPK(X)) ≡ XPK mod r (11) Oleh karena X mod r ≡ (X + mr) mod r untuk sembarang bilangan bulat m, maka tiap plainteks X, X + r, X + 2r, …, menghasilkan cipherteks yang sama. Dengan kata lain, transformasinya dari banyak ke satu. Agar transformasinya satu-ke-satu, maka X harus dibatasi dalam himpunan {0, 1, 2, …, r – 1} sehingga enkripsi dan dekripsi tetap benar seperti pada persamaan (8) dan (9).
PK PK

Prosedur Membuat Pasangan Kunci 1. Pilih dua buah bilangan prima sembarang, p dan q. 2. Hitung r = p ⋅ q. Sebaiknya p ≠ q, sebab jika p = q maka r = p2 sehingga p dapat diperoleh dengan menarik akar pangkat dua dari r. 3. Hitung φ (r) = (p – 1)(q – 1). 4. Pilih kunci publik, PK, yang relatif prima terhadap φ (r). 5. Bangkitkan kunci rahasia dengan menggunakan persamaan (5), yaitu SK ⋅ PK ≡ 1 (mod φ (r)). Perhatikan bahwa SK ⋅ PK ≡ 1 (mod φ (r)) ekivalen dengan SK ⋅ PK = 1 + mφ (r), sehingga SK dapat dihitung dengan

SK =

1 + mφ ( r ) PK

(12)

Akan terdapat bilangan bulat m yang menyebabkan memberikan bilangan bulat SK. Catatan: PK dan SK dapat dipertukarkan urutan pembangkitannya. Jika langkah 4 diganti dengan “Pilih kunci rahasia, SK, yang …”, maka pada langkah 5 kita menghitung kunci publik dengan rumus yang sama. Contoh 1. Misalkan p = 47 dan q = 71 (keduanya prima). Selanjutnya, hitung nilai r = p ⋅ q = 3337 dan

φ (r)= (p – 1)(q – 1) = 3220.
Pilih kunci publik SK = 79, karena 79 relatif prima dengan 3220. umum. PK dan r dapat dipublikasikan ke

Selanjutnya akan dihitung kunci dekripsi SK seperti yang dituliskan pada langkah instruksi 5 dengan menggunakan persamaan (12),

SK =

1 + ( m × 3220 ) 79

Dengan mencoba nilai-nilai m = 1, 2, 3, …, diperoleh nilai SK yang bulat adalah 1019. Ini adalah kunci dekripsi yang harus dirahasiakan. Enkrips • • Plainteks disusun menjadi blok-blok x1, x2, …, sedemikian sehingga setiap blok merepresentasikan nilai di dalam rentang 0 sampai r – 1. Setiap blok xi dienkripsi menjadi blok yi dengan rumus yi = xi PK mod r Dekripsi • Setiap blok cipherteks yi didekripsi kembali menjadi blok xi dengan rumus xi = yi SK mod r Contoh 2. Misalkan plainteks yang akan dienkripsikan adalah X = HARI INI atau dalam sistem desimal (pengkodean ASCII) adalah 7265827332737873 Pecah X menjadi blok yang lebih kecil, misalnya X dipecah menjadi enam blok yang berukuran 3 digit: x1 = 726 x4 = 273 x2 = 582 x5 = 787 x3 = 733 x6 = 003 Nilai-nilai xi ini masih terletak di dalam rentang 0 sampai 3337 – 1 (agar transformasi menjadi satu-kesatu). Blok-blok plainteks dienkripsikan sebagai berikut: 72679 mod 3337 = 215 = y1 58279 mod 3337 = 776 = y2 73379 mod 3337 = 1743 = y3 27379 mod 3337 = 933 = y4 78779 mod 3337 = 1731 = y5 00379 mod 3337 = 158 = y6 Jadi, cipherteks yang dihasilkan adalah Y = 215 776 1743 933 1731 158. Dekripsi dilakukan dengan menggunakan kunci rahasia SK = 1019 Blok-blok cipherteks didekripsikan sebagai berikut: 2151019 mod 3337 = 726 = x1

7761019 mod 3337 = 582 = x2 17431019 mod 3337 = 733 = x3 … Blok plainteks yang lain dikembalikan dengan cara yang serupa. Akhirnya kita memperoleh kembali plainteks semula P = 7265827332737873 yang dalam karakter ASCII adalah P = HARI INI. Kekuatan dan Keamanan RSA • Keamanan algoritma RSA terletak pada tingkat kesulitan dalam memfaktorkan bilangan non prima menjadi faktor primanya, yang dalam hal ini r = p × q. • Sekali r berhasil difaktorkan menjadi p dan q, maka φ (r) = (p – 1) (q – 1) dapat dihitung. Selanjutnya, karena kunci enkrispi PK diumumkan (tidak rahasia), maka kunci dekripsi SK dapat dihitung dari persamaan PK ⋅ SK ≡ 1 (mod φ (r)). • Penemu algoritma RSA menyarankan nilai p dan q panjangnya lebih dari 100 digit. Dengan demikian hasil kali r = p × q akan berukuran lebih dari 200 digit. Menurut Rivest dan kawankawan, uasaha untuk mencari faktor bilangan 200 digit membutuhkan waktu komputasi selama 4 milyar tahun! (dengan asumsi bahwa algoritma pemfaktoran yang digunakan adalah algoritma yang tercepat saat ini dan komputer yang dipakai mempunyai kecepatan 1 milidetik). • Untunglah algoritma yang paling mangkus untuk memfaktorkan bilangan yang besar belum ditemukan. Inilah yang membuat algoritma RSA tetap dipakai hingga saat ini. Selagi belum ditemukan algoritma yang mangkus untuk memfaktorkan bilangan bulat menjadi faktor primanya, maka algoritma RSA tetap direkomendasikan untuk menyandikan pesan.

Algoritma ElGamal • Algoritma Elgamal juga adalah algoritma kriptografi kunci-publik. Algoritma ini pada mulanya digunakan untuk digital signature, namun kemudian dimodifikasi sehingga juga bisa digunakan untuk enkripsi dan dekripsi. Kekuatan algoritma ini terletak pada sulitnya menghitung logaritma diskrit. Besaran-besaran yang digunakan d dalam algoritma ElGamal: 1. 2. 3. 4. 5. Bilangan prima, p Bilangan acak, g ( g < p) Bilangan acak, x (x < p) M (plainteks) a dan b (cipherteks) (tidak rahasia) (tidak rahasia) (rahasia) (rahasia) (tidak rahasia)

• •

Prosedur Membuat Pasangan Kunci 1. Pilih sembarang bilangan prima p. 2. Pilih dua buah bilangan acak, g dan x, dengan syarat g < p dan x < p. 3. Hitung y = gx mod p.

4. Kunci publik adalah y, kunci rahasia adalah x. Nilai g dan p tidak dirahasiakan dan dapat diumumkan kepada anggota kelompok. Enkripsi • • • Plainteks disusun menjadi blok-blok m1, m2, …, sedemikian sehingga setiap blok merepresentasikan nilai di dalam rentang 0 sampai p – 1. Pilih bilangan acak k, yang dalam hal ini 0 ≤ k ≤ p – 1, sedemikian sehingga k relatif prima dengan p – 1. Setiap blok m dienkripsi dengan rumus a = gk mod p b = ykm mod p Pasangan a dan b adalah cipherteks untuk blok pesan m. Jadi, ukuran cipherteks dua kali ukuran plainteksnya. Dekripsi Untuk mendekripsi a dan b digunakan kunci rahasia, x, dan plainteks m diperoleh kembali dengan persamaan m = b/ax mod p Catatlah bahwa karena ax ≡ gkx (mod p) maka b/ax ≡ ykm/ax ≡ gxkm/gxk ≡ m (mod p) yang berarti bahwa plainteks dapat ditemukan kembali dari pasangan cipherteks a dan b. Otentikasi dan Sidik Digital (Authentication and Digital Signature) • Selain dengan merahasiakan isi pesan dengan suatu teknik kriptografi, kriptografi juga digunakan untuk menangani masalah keamanan yang mencakup dua hal berikut: •

1. Keabsahan pengirim (user authentication). Hal ini berkaitan dengan kebenaran identitas pengirim. Dengan kata lain, masalah ini dapat diungkapkan sebagai pertanyaan: “Apakah pesan yang diterima benar-benar berasal dari pengirim yang sesungguhnya?” 2. Keaslian pesan (message authentication). Hal ini berkaitan dengan keutuhan pesan (data integrity). Dengan kata lain, masalah ini dapat diungkapkan sebagai pertanyaan: “Apakah pesan yang diterima tidak mengalami perubahan (modifikasi)?” 3. Anti-penyanggahan (nonrepudiation). Pengirim tidak dapat menyangkal (berbohong) tentang isi pesan atau ia yang mengirimkan pesan. Masalah ini masih berkaitan dengan dengan masalah pertama dan kedua. Jika keabsahan pengirim dan keaslian pesan dapat diverifikasi, maka pengirim tidak dapat melakukan sanggahan terhadap pesan yang dikirim. • • Ketiga masalah ini dapat diselesaikan dengan teknik otentikasi (authentication). Teknik otentikasi (dalam komunikasi data) adalah prosedur yang digunakan untuk membuktikan keaslian pesan atau identitas pemakai.

Sebenarnya, algoritma kriptografi simetri sudah memberikan solusi untuk masalah keamanan pertama dan kedua, karena kunci simetri hanya diketahui oleh pengirim dan penerima. Jadi, jika B menerima pesan dari A, maka ia percaya pesan itu dari A dan isinya tidak mengalami perubahan, karena tidak ada orang lain yang mengetahui kunci selali mereka berdua. Namun, algoritma kriptografi simetri tidak dapat menyediakan cara untuk mengatasi masalah keamanan yang ketiga, yaitu jika salah satu dari dua pihak, A dan B, membantah isi pesan atau telah mengirim pesan.

Sidik Digital (Digital Signature) • Sejak berabad-abad lamanya, tanda tangan (sidik yang ditulis tangan) digunakan untuk membuktikan otentikasi dokumen kertas (misalnya surat, piagam, ijazah, buku, karya seni, dan sebagainya). Fungsi tanda tangan pada dokumen kertas juga diterapkan untuk otentikasi pada data digital seperti pesan yang dikirim melalui saluran komunikasi dan dokumen elektronis yang disimpan di dalam memori komputer. Tanda tangan pada data digital ini disebut sidik digital (digital signature). Yang dimaksud dengan sidik digital bukanlah tanda tangan yang di-digitalsi dengan alat scanner, tetapi suatu nilai kriptografis yang bergantung pada pesan dan pengirim pesan (Hal ini kontras dengan tanda tangan pada dokumen kertas yang bergantung hanya pada pengirim dan selalu sama untuk semua dokumen). Dengan sidik digital, maka integritas data dapat dijamin, disamping itu ia juga digunakan untuk membuktikan asal pesan (keabsahan pengirim dan anti-penyanggahan). Hanya sistem kriptografi kunci-publik yang cocok dan alami untuk pemberian sidik digital. Hal ini disebabkan karena skema sidik digital berbasis sistem kunci-publik dapat menyelesaikan masalah nonrepudiation (baik penerima dan pengirim pesan mempunyai pasangan kunci masing-masing).

• •

Sidik Digital dengan Algoritma Kunci-Publik • • Algoritma kunci-publik seperti RSA dapat digunakan untuk membuat sidik digital. Misalkan M adalah pesan yang akan dikirim. Sidik digital S untuk pesan M diperoleh dengan mengenkripsikan M dengan menggunakan kunci rahasia (SK) pengirim, S = ESK(M) (1) yang dalam hal ini, E adalah fungsi enkripsi dari algoritma kunci-publik. Selanjutnya, S dikirim melalui saluran komunikasi. Di tempat penerima, pesan dibuktikan kebenaran sidik-digitalnya dengan menggunakan kunci publik (PK) pengirim, M = DPK(S) (2) yang dalam hal ini, D adalah fungsi enkripsi dari algoritma kunci-publik. Sidik digital S dikatakan absah apabila pesan M yang dihasilkan merupakan pesan yang mempunyai makna.

Sidik Digital dengan Menggunakan Fungsi Hash Satu-Arah Proses Pemberian Sidik Digital (Signing) • Pesan yang hendak dikirim diubah terlebih dahulu menjadi bentuk yang ringkas yang disebut message digest. Message digest (MD) diperoleh dengan mentransformasikan pesan M dengan menggunakan fungsi hash satu-arah (one-way) H,

MD = H(M)

(3)

Pesan yang sudah diubah menjadi message digest oleh fungsi hash tidak dapat dikembalikan lagi menjadi bentuk semula walaupun digunakan algoritma dan kunci yang sama (itulah sebabnya dinamakan fungsi hash satu-arah). Sembarang pesan yang berukuran apapun diubah oleh fungsi hash menjadi message digest yang berukuran tetap (umumnya 128 bit). • Selanjutnya, message digest MD dienkripsikan dengan algoritma kunci-publik menggunakan kunci rahasia (SK) pengirim menjadi sidik digital S, S = ESK(MD) (4) Pesan M disambung (append) dengan sidik digital S, lalu keduanya dikirim melalui saluran komunikasi . Dalam hal ini, kita katakan bahwa pesan M sudah ditandatangani oleh pengirim dengan sidik digital S. Di tempat penerima, pesan diverifikasi untuk dibuktikan keotentikannya dengan cara berikut:

1. Sidik digital S didekripsi dengan menggunakan kunci publik (PK) pengirim pesan, menghasilkan message digest semula, MD, sebagai berikut: MD = DPK(S) (5) 2. Pengirim kemudian mengubah pesan M menjadi message digest MD’ menggunakan fungsi hash satu-arah yang sama dengan fungsi hash yang digunakan oleh pengirim. 3. Jika MD’ = MD, berarti pesan yang diterima otentik dan berasal dari pengirim yang benar. Skema otentikasi dengan sidik digital ditunjukkan pada Gambar 43. • Keotentikan ini dijelaskan sebagai berikut: a. b. Apabila pesan M yang diterima sudah berubah, maka MD’ yang dihasilkan dari fungsi hash berbeda dengan MD semula. Ini berarti pesan tidak asli lagi. Apabila pesan M tidak berasal dari orang yang sebenarnya, maka message digest MD yang dihasilkan dari persamaan 3 berbeda dengan message digest MD’ yang dihasilkan pada proses verifikasi (hal ini karena kunci publik yang digunakan oleh penerima pesan tidak berkoresponden dengan kunci rahasia pengirim). Bila MD = MD’, ini berarti pesan yang diterima adalah pesan yang asli (message authentication) dan orang yang mengirim adalah orang yang sebenarnya (user authentication).

c.

S ig n e r M e ssa g e M essa g e S ig n a tu r e F u n g si H ash

V e r ifie r M e ssa g e S ig n a tu re M e ssa g e

S ig n a tu re M e ssa g e D ig e st P u b lic Key V e r ify F ungsi H ash

S ec ret K ey

S ig n in g

S ig n a tu r e

M e ssa g e D ig e st

? =

M e ssa g e D ig e s t

Gambar 43. Otentikasi dengan sidik-digital menggunakan fungsi hash satu-arah • Dua algoritma signature yang digunakan secara luas adalah RSA dan Elgamal. Pada RSA, algoritma enkripsi dan dekripsi identik, sehingga proses signature dan verifikasi juga identik. • Selain RSA, terdapat algoritma yang dikhususkan untuk sidik digital, yaitu Digital Signature Algorithm (DSA), yang merupakan bakuan (standard) untuk Digital Dignature Standard (DSS). Pada DSA, algoritma signature dan verifikasi berbeda Fungsi Hash Satu-Arah (One-way Hash) • • Sembarang pesan M berukuran bebas dikompresi oleh fungsi hash H melalui persamaan h = H(M) Sifat-sifat fungsi hash adalah sebagai berikut: 1. Fungsi H dapat diterapkan pada blok data berukuran berapa saja. 2. H menghasilkan nilai (h) dengan panjang tetap (fixed-length output). 3. H(x) mudah dihitung untuk setiap nilai x yang diberikan. 4. Untuk setiap h yang dihasilkan, tidak mungkin dikembalikan nilai x sedemikian sehingga H(x) = h. Itulah sebabnya fungsi H dikatakan fungsi hash satu-arah (one-way hash function). 5. Untuk setiap x yang diberikan, tidak mungkin mencari y ≠ x sedemikian sehingga H(y) = H(x). 6. Tidak mungkin mencari pasangan x dan y sedemikian sehingga H(x) = H(y). (6)

Nilai fungsi hash satu arah biasanya berukuran kecil, sedangkan pesan

berukuran besar

• Ada beberapa fungsi hash satu-arah yang sudah dibuat orang, antara lain: MD2, MD4, MD5, Secure Hash Function (SHA), Snefru, N-hash, RIPE-MD, dan lain-lain (Catatan: MD adalah singkatan dari Message Digest, dibuat oleh Ron Rivest). • Masukan fungsi hash adalah blok pesan (M) dan keluaran dari hashing blok pesan sebelumnya, hi = H(Mi, hi – 1) Skema fungsi hash ditunjukkan pada Gambar 44.

Mi hi – 1

Fungsi hash satu-arah

hi

Gambar 44. Fungsi hash satu-arah Algoritma MD5 • • • MD5 adalah fungsi hash satu-arah yang dibuat oleh Ron Rivest. MD5 merupakan perbaikan dari MD4 setelah MD4 berhasil diserang oleh kriptanalis. Algoritma MD5 menerima masukan berupa pesan dengan ukuran sembarang dan menghasilkan message digest yang panjangnya 128 bit. Gambaran pembuatan message digest dengan algoritma MD5 diperlihatkan pada Gambar 45.

L x 5 1 2 b it K b it P esan
P a d d in g b its ( 1 - 5 1 2 b it)

K m o d 62 4
P e sa n

1 0 0 0 .. .0 0 0P a n ja n g

512

512

512

512

Y0
512 AB C D
H H

Y1
512

...
128 128
H

Yq
512

...
128 128

YL

- 1

512
H

128

M D 5

128

M D 5

M D 5

M D 5

128 M e s s a g e D ig e s t

Gamba

r 45. Pembuatan message digest dengan algoritma MD5

Langkah-langkah pembuatan message digest secara garis besar adalah sebagai berikut: 1. Penambahan bit-bit pengganjal (padding bits). 2. Penambahan nilai panjang pesan semula. 3. Inisialisasi penyangga (buffer) MD. 4. Pengolahan pesan dalam blok berukuran 512 bit. 1. Penambahan Bit-bit Pengganjal • Pesan ditambah dengan sejumlah bit pengganjal sedemikian sehingga panjang pesan (dalam satuan bit) kongruen dengan 448 modulo 512. Ini berarti panjang pesan setelah ditambahi bitbit pengganjal adalah 64 bit kurang dari kelipatan 512. Angka 512 ini muncul karena MD5 memperoses pesan dalam blok-blok yang berukuran 512. Pesan dengan panjang 448 bit pun tetap ditambah dengan bit-bit pengganjal. Jika panjang pesan 448 bit, maka pesan tersebut ditambah dengan 512 bit menjadi 960 bit. Jadi, panjang bit-bit pengganjal adalah antara 1 sampai 512. Bit-bit pengganjal terdiri dari sebuah bit 1 diikuti dengan sisanya bit 0. Pesan yang telah diberi bit-bit pengganjal selanjutnya ditambah lagi dengan 64 bit yang menyatakan panjang pesan semula. Jika panjang pesan > 264 maka yang diambil adalah panjangnya dalam modulo 264. Dengan kata lain, jika panjang pesan semula adalah K bit, maka 64 bit yang ditambahkan menyatakan K modulo 264. Setelah ditambah dengan 64 bit, panjang pesan sekarang menjadi 512 bit. MD5 membutuhkan 4 buah penyangga (buffer) yang masing-masing panjangnya 32 bit. Total panjang penyangga adalah 4 × 32 = 128 bit. Keempat penyangga ini menampung hasil antara dan hasil akhir. Keempat penyangga ini diberi nama A, B, C, dan D. Setiap penyangga diinisialisasi dengan nilai-nilai (dalam notasi HEX) sebagai berikut: A = 01234567 B = 89ABCDEF C = FEDCBA98 D = 76543210 4. Pengolahan Pesan dalam Blok Berukuran 512 bit. • • Pesan dibagi menjadi L buah blok yang masing-masing panjangnya 512 bit (Y0 sampai YL – 1). Setiap blok 512-bit diproses bersama dengan penyangga MD menjadi keluaran 128-bit, dan ini disebut proses HMD5. Gambaran proses HMD5 diperlihatkan pada Gambar 46. •

• • •

2. Penambahan Nilai Panjang Pesan Semula

• •

3. Inisialisai Penyangga MD

Y

q

M D
512

q

ABC D ← f F ( ABC , Yq , T [1.. 16 ]) D

A

B

C

D

ABC D ← f G ( ABC , Yq , T [17 .. 32 ]) D

A

B

C

D

A D ← f H ( ABC , Yq , T [33 .. 48 ]) BC D

A

B

C

D

ABC D ← f I ( ABC , Yq , T [ 49 .. 64 ]) D

+

+

+

+

128

MD

q +

1

Gambar 46. Pengolahan blok 512 bit (Proses HMD5) • Proses HMD5 terdiri dari 4 buah putaran, dan masing-masing putaran melakukan operasi dasar MD5 sebanyak 16 kali dan setiap operasi dasar memakai sebuah elemen T. Jadi setiap putaran memakai 16 elemen Tabel T. Pada Gambar 46, Yq menyatakan blok 512-bit ke-q dari pesan yang telah ditambah bit-bit pengganjal dan tambahan 64 bit nilai panjang pesan semula. MDq adalah nilai message digest 128-bit dari proses HMD5 ke-q. Pada awal proses, MDq berisi nilai inisialisasi penyangga MD. Fungsi-fungsi fF, fG, fH, dan fI masing-masing berisi 16 kali operasi dasar terhadap masukan, setiap operasi dasar menggunakan elemen Tabel T. Operasi dasar MD5 diperlihatkan pada Gambar 47.

a

b

c

d

g

+

+

X [k ]

+

T [i]

C LS

s

+
Gambar 47. Operasi dasar MD5 • Operasi dasar MD5 yang diperlihatkan pada Gambar 47 dapat ditulis dengan sebuah persamaan sebagai berikut: a ← b + CLSs(a + g(b, c, d) + X[k] + T[i]) (7)

yang dalam hal ini, a, b, c, d = empat buah peubah penyangga 32-bit (berisi nilai penyangga A, B, C, D) g = salah satu fungsi F, G, H, I CLSs = circular left shift sebanyak s bit X[k] = kelompok 32-bit ke-k dari blok 512 bit message ke-q. Nilai k = 0 sampai 15. T[i] = elemen Tabel T ke-i (32 bit) + = operasi penjumlahan modulo 232 Fungsi fF, fG, fH, dan fI adalah fungsi untuk memanipulasi masukan a, b, c, dan d dengan ukuran 32bit. Masing-masing fungsi dapat dilihat pada Tabel 9. Tabel 9. Fungsi-fungsi dasar MD5 Nama fF fG fH fI Notasi F(b, c, d) G(b, c, d) H(b, c, d) I(b, c, d) g(a, b, c, d) (b ∧ c) ∨ (~b ∧ d) (b ∧ d) ∨ (c ∧ ~d) b⊕ c⊕ d c ⊕ (b ∧ ~ d)

Catatan: operator logika AND, OR, NOT, XOR masing-masing dilambangkan dengan ∧,

∨, ~, ⊕

Nilai T[i] dapat dilihat pada Tabel 10. Tabel ini disusun oleh fungsi 2 32 × abs(sin(i)), i dalam radian.

Tabel 10. Nilai T[i] T[1] = D76AA478 T[2] = E8C7B756 T[3] = 242070DB T[4] = C1BDCEEE T[5] = F57C0FAF T[6] = 4787C62A T[7] = A8304613 T[8] = FD469501 T[9] = 698098D8 T[10] = 8B44F7AF T[11] = FFFF5BB1 T[12] = 895CD7BE T[13] = 6B901122 T[14] = FD987193 T[15] = A679438E T[16] = 49B40821 T[17] = F61E2562 T[18] = C040B340 T[19] = 265E5A51 T[20] = E9B6C7AA T[21] = D62F105D T[22] = 02441453 T[23] = D8A1E681 T[24] = E7D3FBCB T[25] = 21E1CDE6 T[26] = C33707D6 T[27] = F4D50D87 T[28] = 455A14ED T[29] = A9E3E905 T[30] = FCEFA3F8 T[31] = 676F02D9 T[32] = 8D2A4C8A T[33] = FFFA3942 T[34] = 8771F681 T[35] = 69D96122 T[36] = FDE5380C T[37] = A4BEEA44 T[38] = 4BDECFA9 T[39] = F6BB4B60 T[40] = BEBFBC70 T[41] = 289B7EC6 T[42] = EAA127FA T[43] = D4EF3085 T[44] = 04881D05 T[45] = D9D4D039 T[46] = E6DB99E5 T[47] = 1FA27CF8 T[48] = C4AC5665 T[49] = F4292244 T[50] = 432AFF97 T[51] = AB9423A7 T[52] = FC93A039 T[53] = 655B59C3 T[54] = 8F0CCC92 T[55] = FFEFF47D T[56] = 85845DD1 T[57] = 6FA87E4F T[58] = FE2CE6E0 T[59] = A3014314 T[60] = 4E0811A1 T[61] = F7537E82 T[62] = BD3AF235 T[63] = 2AD7D2BB T[64] = EB86D391

Dari persamaan sebelumnya dapat dilihat bahwa masing-masing fungsi fF, fG, fH, dan fI melakukan 16 kali operasi dasar. Misalkan notasi [abcd k s i] menyatakan operasi a ← b + ((a + g(b, c, d) + X[k] + T[i])<<<s) yang dalam hal ini <<<s melambangkan operasi circular left shift 32-bit, maka operasi dasar pada masing-masing putaran dapat ditabulasikan sebagai berikut: Putaran 1: 16 kali operasi dasar dengan g(b, c, d) = F(b, c, d) dapat dilihat pada Tabel 11.

Tabel 11. Rincian operasi pada fungsi F(b, c, d) No. 1 2 3 4 5 6 7 8 9 10 11 [abcd k s i] [ABCD 0 7 1] [DABC 1 12 2] [CDAB 2 17 3] [BCDA 3 22 4] [ABCD 4 7 5] [DABC 5 12 6] [CDAB 6 17 7] [BCDA 7 22 8] [ABCD 8 7 9] [DABC 9 12 10] [CDAB 10 17 11]

12 13 14 15 16

[BCDA 11 22 12] [ABCD 12 7 13] [DABC 13 12 14] [CDAB 14 17 15] [BCDA 15 22 16]

Putaran 2: 16 kali operasi dasar dengan g(b, c, d) = G(b, c, d) dapat dilihat pada Tabel 12. Tabel 12. Rincian operasi pada fungsi G(b, c, d) No. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 [abcd k s i ] [ABCD 1 5 17] [DABC 6 9 18] [CDAB 11 14 19] [BCDA 0 20 20] [ABCD 5 5 21] [DABC 10 9 22] [CDAB 15 14 23] [BCDA 4 20 24] [ABCD 9 5 25] [DABC 14 9 26] [CDAB 3 14 27] [BCDA 8 20 28] [ABCD 13 5 29] [DABC 2 9 30] [CDAB 7 14 31] [BCDA 12 20 32]

Putaran 3: 16 kali operasi dasar dengan g(b, c, d) = H(b, c, d) dapat dilihat pada Tabel 13. Tabel 13. Rincian operasi pada fungsi H(b, c, d) No. 1 2 3 4 5 6 7 8 [abcd k s i ] [ABCD 5 4 33] [DABC 8 11 34] [CDAB 11 16 35] [BCDA 14 23 36] [ABCD 1 4 37] [DABC 4 11 38] [CDAB 7 16 39] [BCDA 10 23 40]

9 10 11 12 13 14 15 16

[ABCD 13 4 41] [DABC 0 11 42] [CDAB 3 16 43] [BCDA 6 23 44] [ABCD 9 4 45] [DABC 12 11 46] [CDAB 15 16 47] [BCDA 2 23 48]

Putaran 4: 16 kali operasi dasar dengan g(b, c, d) = I(b, c, d) dapat dilihat pada Tabel 14. Tabel 14. Rincian operasi pada fungsi I(b, c, d) No. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 [abcd k s i ] [ABCD 0 6 49] [DABC 7 10 50] [CDAB 14 15 51] [BCDA 5 21 52] [ABCD 12 6 53] [DABC 3 10 54] [CDAB 10 15 55] [BCDA 1 21 56] [ABCD 8 6 57] [DABC 15 10 58] [CDAB 6 15 59] [BCDA 13 21 60] [ABCD 4 6 61] [DABC 11 10 62] [CDAB 2 15 63] [BCDA 9 21 64]

Setelah putaran keempat, a, b, c, dan d ditambahkan ke A, B, C, dan D, dan selanjutnya algoritma memproses untuk blok data berikutnya (Yq+1). Keluaran akhir dari algoritma MD5 adalah hasil penyambungan bit-bit di A, B, C, dan D. Dari uraian di atas, secara umum fungsi hash MD5 dapat ditulis dalam persamaan matematis berikut: MD0 = IV (8) MDq + 1 = MDq + fI(Yq + fH(Yq + fG(YQ + fF(Yq + MDq)))) MD = MDL – 1 yang dalam hal ini, (9) (10)

IV = initial vector dari penyangga ABCD, yang dilakukan pada proses inisialisasi penyangga. Yq = blok pesan berukuran 512-bit ke-q L = jumlah blok pesan MD = nilai akhir message digest Digital Signature Algorithm (DSA) • Pada bulan Agustus 1991, NIST (The National Institute of Standard and Technology) mengumumkan algoritma sidik digital yang disebut Digital Signature Algorithm (DSA). DSA dijadikan sebagai bakuan (standard) dari Digital Signature Standard (DSS). DSS adalah standard, sedangkan DSA adalah algoritma. Standard tersebut menggunakan algoritma ini, sedangkan algoritma adalah bagian dari standard (selain DSA, DSS menggunakan Secure Hash Algorithm atau SHA sebagai fungsi hash) DSA termasuk ke dalam sistem kriptografi kunci-publik. Meskipun demikian, DSA tidak dapat digunakan untuk enkripsi. DSA mempunyai dua fungsi utama: 1. Pembentukan sidik digital (signature generation), dan 2. Pemeriksaan keabsahan sidik digital (signature verivication). • Sebagaimana halnya pada algoritma kriptografi kunci-publik, DSA menggunakan dua buah kunci, yaitu kunci publik dan kunci rahasia. Pembentukan sidik digital menggunakan kunci rahasia pengirim, sedangkan verifikasi sidik digital menggunakan kunci publik pengirim. • DSA menggunakan fungsi hash SHA (Secure Hash Algorithm) untuk mengubah pesan menjadi message digest yang berukuran 160 bit (SHA akan dijelaskan pada kuliah selanjutnya). Parameter DSA • DSA dikembangkan dari algoritma Elgamal. DSA menggunakan beberapa parameter sebagai berikut: 1. p, adalah bilangan prima dengan panjang L bit, yang dalam hal ini 512 ≤ L ≤ 1024 dan L harus kelipatan 64. Parameter p bersifat publik dan dapat digunakan bersama-sama oleh orang di dalam kelompok. 2. q, bilangan prima 160 bit, merupakan faktor dari p – 1. Dengan kata lain, (p – 1) mod q = 0. Parameter q berisfat publik. 3. g = h(p – 1)/q mod p, yang dalam hal ini h < p – 1 sedemikian sehingga h(p – 1)/q mod p > 1. Parameter g bersifat publik. 4. x, adalah bilangan bulat kurang dari q. Parameter x adalah kunci rahasia. 5. y = gx mod p, adalah kunci publik. 6. m, pesan yang akan diberi sidik digital. Pembentukan Sepasang Kunci 1. Pilih bilangan prima p dan q, yang dalam hal ini (p – 1) mod q = 0. 2. Hitung g = h(p – 1)/q mod p, yang dalam hal ini 1 < h < p – 1 dan h(p – 1)/q mod p > 1.

3. Tentukan kunci rahasia x, yang dalam hal ini x < q. 4. Hitung kunci publik y = gx mod p. Pembentukan Sidik Digital (Signing) 1. Ubah pesan m menjadi message digest dengan fungsi hash SHA, H. 2. Tentukan bilangan acak k < q. 3. Sidik digital dari pesan m adalah bilangan r dan s. Hitung r dan s sebagai berikut: r = (gk mod p) mod q s = (k– 1 (H(m) + x * r)) mod q 4. Kirim pesan m dan sidik digital r dan s. Verifikasi Keabsahan Sidik Digital (Verifying) 1. Hitung w = s– 1 mod q u1 = (H(m) * w) mod q u2 = (r * w) mod q v = ((gu1 * yu2) mod p) mod q) 2. Jika v = r, maka sidik digital sah, yang berarti bahwa pesan masih asli dan dikirim oleh pengirim yang benar.

Contoh Perhitungan DSA a. Pembentukan Sepasang Kunci 1. Pilih bilangan prima p dan q, yang dalam hal ini (p – 1) mod q = 0. p = 59419 q = 3301 (memenuhi 3301 * 18 = 59419 – 1) 2. Hitung g = h(p – 1)/q mod p, yang dalam hal ini 1 < h < p – 1 dan h(p – 1)/q mod p > 1. g = 18870 (dengan h = 100)

3. Tentukan kunci rahasia x, yang dalam hal ini x < q. x = 3223 4. Hitung kunci publik y = gx mod p. y = 29245 b. Pembentukan Sidik Digital (Signing) 1. Hitung nilai hash dari pesan, misalkan H(m) = 4321 2. Tentukan bilangan acak k < q. k = 997 k– 1 = 2907 (mod 3301)

3. Hitung r dan s sebagai berikut: r = (gk mod p) mod q = 848 s = (k– 1 (H(m) + x * r)) mod q = 7957694475 mod 3301 = 183 4. Kirim pesan m dan sidik digital r dan s. c. Verifikasi Keabsahan Sidik Digital 1. Hitung s– 1 = 469 (mod 3301) w = s– 1 mod q = 469 u1 = (H(m) * w) mod q 2026549 mod 3301 = 3036 u2 = (r * w) mod q = 397712 mod 3301 = 1592 v = ((gu1 * yu2) mod p) mod q) = 848 mod 3301 = 848 2. Karena v = r, maka sidik digital sah. Implementasi DSA • Adanya batasan bahwa nilai p mempunyai panjang 512 sampai 1024 bit dan q 160bit, menyebabkan DSA hampir tidak mungkin diimplementasikan dalam perangkat lunak. Panjang bit yang besar ini dimaksudkan agar upaya untuk memecahkan parameter yang lain sangat sulit dilakukan • Compiler C hanya sanggup menyatakan bilangan bulat hingga 232. Oleh karena itu, bila DSA diimplementasikan dalam perangkat lunak, batasan panjang bit p dan q diubah hingga maksimum nilai p dan q adalah 232. Secure Hash Algorithm (SHA) • SHA adalah fungsi hash satu-arah yang dibuat oleh NIST dan digunakan bersama DSS (Digital Signature Standard). Oleh NSA, SHA dinyatakan sebagai standard fungsi hash satuarah. SHA didasarkan pada MD4 yang dibuat oleh Ronald L. Rivest dari MIT. SHA disebut aman (secure) karena ia dirancang sedemikian sehingga secara komputasi tidak mungkin menemukan pesan yang berkoresponden dengan message digest yang diberikan. Algoritma SHA menerima masukan berupa pesan dengan ukuran maksimum 264 bit (2.147.483.648 gigabyte) dan menghasilkan message digest yang panjangnya 160 bit, lebih panjang dari message digest yang dihasilkan oleh MD5

• •

Gambaran pembuatan message digest dengan algoritma SHA diperlihatkan pada Gambar 48. Langkah-langkah pembuatan message digest secara garis besar adalah sebagai berikut: 1. Penambahan bit-bit pengganjal (padding bits). 2. Penambahan nilai panjang pesan semula. 3. Inisialisasi penyangga (buffer) MD. 4. Pengolahan pesan dalam blok berukuran 512 bit.

L x 5 1 2 b i t =N x 3 2 b i t K b i t < 26 4 P esan
P a d d in g b its (1 - 5 1 2 b it)

K
P a n ja n g P e s a n

1 0 0 0 ...0 0 0

512

512

512

512

Y

0

Y
512

1

...
512 160 160
H

Y

q

...
512 160 160

Y

L - 1

512
H

A BC D

160

H

SH A

160

H

S H A

S H A

S H A

160 M e s s a g e D ig e s t

Gambar 48. Pembuatan message digest dengan algoritma SHA

1. Penambahan Bit-bit Pengganjal • Pesan ditambah dengan sejumlah bit pengganjal sedemikian sehingga panjang pesan (dalam satuan bit) kongruen dengan 448 modulo 512. Ini berarti panjang pesan setelah ditambahi bitbit pengganjal adalah 64 bit kurang dari kelipatan 512. Angka 512 ini muncul karena SHA memperoses pesan dalam blok-blok yang berukuran 512. Pesan dengan panjang 448 bit pun tetap ditambah dengan bit-bit pengganjal. Jika panjang pesan 448 bit, maka pesan tersebut ditambah dengan 512 bit menjadi 960 bit. Jadi, panjang bit-bit pengganjal adalah antara 1 sampai 512. Bit-bit pengganjal terdiri dari sebuah bit 1 diikuti dengan sisanya bit 0. Pesan yang telah diberi bit-bit pengganjal selanjutnya ditambah lagi dengan 64 bit yang menyatakan panjang pesan semula. Setelah ditambah dengan 64 bit, panjang pesan sekarang menjadi 512 bit. SHA membutuhkan 5 buah penyangga (buffer) yang masing-masing panjangnya 32 bit (MD5 hanya mempunyai 4 buah penyangga). Total panjang penyangga adalah 5 × 32 = 160 bit. Keempat penyangga ini menampung hasil antara dan hasil akhir. Kelima penyangga ini diberi nama A, B, C, D, dan E. Setiap penyangga diinisialisasi dengan nilai-nilai (dalam notasi HEX) sebagai berikut: A = 67452301 B = EFCDAB89 C = 98BADCFE D = 10325476 E = C3D2E1F0 4. Pengolahan Pesan dalam Blok Berukuran 512 bit. •

• • • •

2. Penambahan Nilai Panjang Pesan Semula

3. Inisialisai Penyangga MD

• • •

Pesan dibagi menjadi L buah blok yang masing-masing panjangnya 512 bit (Y0 sampai YL – 1). Setiap blok 512-bit diproses bersama dengan penyangga MD menjadi keluaran 128-bit, dan ini disebut proses HSHA. Gambaran proses HSHA diperlihatkan pada Gambar 48. Proses HSHA terdiri dari 80 buah putaran (MD5 hanya 4 putaran), dan masing-masing putaran menggunakan bilangan penambah Kt, yaitu: Putaran 0 ≤ t ≤ 19 Putaran 20 ≤ t ≤ 39 Putaran 40 ≤ t ≤ 59 Putaran 60 ≤ t ≤ 79 Kt = 5A827999 Kt = 6ED9EBA1 Kt = 8F1BBCDC Kt = CA62C1D6

Pada Gambar 49, Yq menyatakan blok 512-bit ke-q dari pesan yang telah ditambah bit-bit pengganjal dan tambahan 64 bit nilai panjang pesan semula. MDq adalah nilai message digest 160-bit dari proses HSHA ke-q. Pada awal proses, MDq berisi nilai inisialisasi penyangga MD.

Y

q

M D
512

q

A

B

C

D

E

ABCDE ← f ( ABCDE , Yq , K 0 )

A

B

C

D

E

ABCDE ← f ( ABCDE , Yq , K 1 )

...
A B C D E
ABCDE ← f ( ABCDE , Yq , K 79 )

+

+

+

+

160

M D

q + 1

Gambar 49. Pengolahan blok 512 bit (Proses HSHA) • Setiap putaran menggunakan operasi dasar yang sama (dinyatakan sebagai fungsi f). Operasi dasar SHA diperlihatkan pada Gambar 50.

a

i-1

b

i-1

c i-1 ft

d

i-1

e i-1 +

CLS

5

+

W CLS
30

t

+

K

t

+

a

i

b

i

ci

d

i

ei

Gambar 50. Operasi dasar SHA dalam satu putaran (fungsi f) • Operasi dasar SHA yang diperlihatkan pada Gambar 50 dapat ditulis dengan persamaan sebagai berikut: a, b, c, d, e ← (CLS5(a) + ft(b, c, d) + e + Wt + Kt), a, CLS30(b), c, d yang dalam hal ini, a, b, c, d, e = lima buah peubah penyangga 32-bit (berisi nilai penyangga A, B, C, D, E) t ft CLSs Wt Kt + = putaran, 0 ≤ t ≤ 79 = fungsi logika = circular left shift sebanyak s bit = word 32-bit yang diturunkan dari blok 512 bit yang sedang diproses = konstanta penambah = operasi penjumlahan modulo 232

atau dapat dinyatakan dalam kode program berikut: for t ← 0 to 79 do TEMP ← (a <<< 5) + ft(b, c, d) + e + Wt + Kt) e ←d d ←c c ← b <<< 30 b ←a a ← TEMP endfor yang dalam hal ini, <<< menyatakan operasi pergeseran circular left shift.

Fungsi ft adalah fungsi logika yang melakukan operasi logika bitwise. Operasi logika yang dilakukan dapat dilihat pada Tabel 15. Tabel 15. Fungsi logika ft pada setiap putaran Putaran 0 .. 19 20 .. 39 40 .. 59 60 .. 79 ft(b, c, d) (b ∧ c) ∨ (~b ∧ d) b⊕ c⊕ d (b ∧ c) ∨ (b ∧ d) ∨ (c ∧ d) b⊕ c⊕ d

Catatan: operator logika AND, OR, NOT, XOR masing-masing dilambangkan dengan ∧,

∨, ~, ⊕
• Nilai W1 sampai W16 berasal dari 16 word pada blok yang sedang diproses, sedangkan nilai Wt berikutnya didapatkan dari persamaan Wt = Wt – 16 ⊕ Wt – 14 ⊕ Wt – 8 ⊕ Wt – 3 • Setelah putaran ke-79, a, b, c, d, dan e ditambahkan ke A, B, C, D, dan E dan selanjutnya algoritma memproses untuk blok data berikutnya (Yq+1). Keluaran akhir dari algoritma SHA adalah hasil penyambungan bit-bit di A, B, C, D, dan E.

Algoritma-algoritma Pendukung Kriptografi 1. Algoritma untuk Perpangkatan-Modulo • Algoritma kunci-publik seperti RSA, Elgamal, DSA, dan sebagainya, sederhana dalam perhitungannya namun sulit dalam implementasinya dalam perangkat lunak. Hal ini karena algoritma tersebut melakukan operasi perpangkatan dengan bilangan yang besar. Misalnya, pada algoritma RSA, setiap blok xi dienkripsi menjadi blok yi dengan rumus yi = xi PK mod r dan blok cipherteks yi didekripsi kembali menjadi blok xi dengan rumus xi = yi SK mod r Pada algoritma DSA, kunci publik y dihitung dengan rumus y = gx mod p dan sidik digital dihitung dengan rumus r = (gk mod p) mod q • • Karena bilangan bulat yang dioperasikan bisa sangat besar, maka kita perlu membuat algoritma perpangkatan semangkus mungkin. Sebagai contoh, kita akan menghitung 5123 mod 713. Jika dilakukan secara konvensional, maka 5123 mod 713 = (5 × 5 × … × 5) mod 713 = 9.403954806578300063749892297778e+85 mod 713 = 435 Algoritma konvensional untuk menghitung an mod m: function Expo1(a, n, m : LongInt):LongInt { Mengembalikan an mod m } var i : integer; H : LongInt;

begin H:=1; for i:=1 to n do H:=H*a; {endfor} Expo1:= H mod m; { return value } end; Dengan algoritma Expo1 di atas, dibutuhkan n kali operasi perkalian dalam perpangkatannya. Untuk n yang besar, algoritma membutuhkan waktu yang lebih lama. Selain itu, nilai antara yang dihasilkan selama perkalian meningkat tajam, sehingga ada kemungkinan tipe integer yang digunakan tidak sanggup menampunya. Kesulitan di atas dapat diatasi dengan mengingat bahwa ab mod m = [(a mod m)(b mod m)] mod m (1) Contoh. Sebagai ilustrasi, untuk menghitung 57237 mod 713 dapat dilakukan sebagai berikut: 57237 = 57236 ⋅ 572 = 57232 ⋅ 5724 ⋅ 572 5722 mod 713 = 327184 mod 713 = 630 5724 mod 713 = 5722 . 5722 mod 713 = [(5722 mod 713)(5722 mod 713)] mod 713 = 6302 mod 713 = 396900 mod 713 = 472 5728 mod 713 = 5724 . 5724 mod 713 = [(5724 mod 713)(5724 mod 713)] mod 713 = 4722 mod 713 = 222784 mod 713 = 328

57216 mod 713 = 5728 . 5728 mod 713 = [(5728 mod 713)(5728 mod 713)] mod 713 = 3282 mod 713 = 107584 mod 713 = 634 57232 mod 713 = 57216 . 57216 mod 713 = [(57216 mod 713)(57216 mod 713)] mod 713 = 6342 mod 713 = 401956 mod 713 = 537 57236 mod 713 = 57232 . 5724 mod 713 = [(57232 mod 713)(5724 mod 713)] mod 713 = 537 . 472 mod 713 = 253464 mod 713 = 349 57237 mod 713 = 57236 . 572 mod 713 = [(57236 mod 713)(572 mod 713)] mod 713 = 349 . 572 mod 713 = 199628 mod 713 = 701 Jadi, 57237 mod 713 = 701 • Teknik divide and conquer dapat digunakan untuk membagi berukuran kecil. Misalnya, dua pemangkatnya sampai

a8 mod m = (a4 ⋅ a4) mod m = ((a4 mod m)(a4 mod m)) mod m = (a4 mod m)2 mod m = (a2 ⋅ a2 mod m)2 mod m = ((a2 mod m)2 mod m)2 mod m atau dengan kata lain, a8 mod m = ((a2)2)2 mod m = ((a2 mod m)2 mod m)2 mod m Contoh-contoh lainnya, a16 mod m = (((a2)2)2)2 mod m = (((a2 mod m)2 mod m)2 mod m)2 mod m { hanya membutuhkan 4 operasi perkalian } a25 mod m = (a12)2 ⋅ a mod m = ((a6)2)2 ⋅ a mod m = (((a3)2)2)2 ⋅ a mod m = (((a2 ⋅ a)2)2)2 ⋅ a mod m = (((((((a2 mod m) ⋅ a)2 mod m)2 mod m)2 mod m)2 mod m) ⋅ a) mod m { hanya membutuhkan 7 operasi perkalian } • Metode perhitungan an mod m di atas disebut juga metode addition chaining karena hasil perkalian antara langsung dirangkai dengan operasi modulo. Dengan teknik ini, hasil antara tidak akan mencapai bilangan yang besar. Algoritma addition chaining dengan teknik divide and conquer untuk menghitung an mod m: function Expo2(a, n, m : LongInt):LongInt { Mengembalikan an mod m } var i : integer; H : LongInt; begin if n = 0 then Expo2:=1 else if odd(n) then { n ganjil } Expo2:=SQR(Expo2(a, n div 2, p))*a mod m else Expo2:=SQR(Expo2(a, n div 2, p)) mod m; {endif} {endif} end; • Metode addition chaining dapat diterapkan secara biner sehingga disebut juga metode binary sqaure. Dalam hal ini, pemangkat (n) diubah ke dalam bentuk biner baru kemudian dioperasikan.

Algoritmanya adalah sebagai berikut: function Expo3(a, n, m : LongInt):LongInt { Mengembalikan an mod m } var i : integer; H : LongInt; begin { Konversi n dalam biner, misalkan bit-bit binernya disimpan di dalam string b } ConvertToBiner(n, b); H:=1; for i:=1 to Length(b) do begin H:=H*H mod m; if b[i] = 1 then H:=(H*a) mod m {endif} end; {for} Expo3:=H; end; Misalkan algoritma Expo3 akan digunakan untuk menghitung 2129 mod 29 maka 129 diubah dulu ke dalam biner menjadi 10000001. Tabel berikut memperlihatkan hasil perhitungan dengan algoritma Expo3: Tabel 16. Perhitungan dengan Algoritma Expo3 i 1 2 3 4 b[i] 1 0 0 0 H 2 4 16 24 2 1 1 1 ∑× Ket: ∑ × menyatakan jumlah operasi perkalian 5 0 25 1 6 0 16 1 7 0 24 1 8 1 21 2

Dengan algoritma Expo3, maka perhitungan 2129 mod 29 hanya membutuhkan 10 operasi perkalian dan hasil antara tidak mencapai bilangan yang besar sebab hasil antara langsung di-modulo-kan dengan m. 2. Tipe Data Bilangan Bulat yang Besar • Masalah lain yang muncul adalah penggunaan bilangan bulat yang sangat besar. Nilai-nilai parameter di dalam algoritma kriptografi kunci-publik (seperti bilangan prima p dan q)

disarankan adalah bilangan bulat yang sangat besar (panjang). Semua bahasa pemrograman tidak menyediakan tipe data bilangan bulat yang panjang. • Satu cara untuk mengatasi tipe data tersebut adalah membuat primitif aritmetika bilangan bulat yang besar. Kita dapat menggunakan tipe string untuk menyimpan bilangan bulat yang setiap angkanya diperlakukan sebagai karakter. Misalnya, bilangan 4568732459909876451245890 akan disimpan sebagai string ‘4568732459909876451245890’ • Selanjutnya, kita harus membuat primitif operasi aritmetika seperti a – b, a + b, a × b, a div b, a mod b, dan ab mod c.

3. Pembangkitan Bilangan Prima • Sebagian besar algoritma kunci-publik menggunakan bilangan prima sebagai salah satu nilai parameternya. Bilangan prima yang disarankan berkuran besar sehingga penggunaan tipe data bilangan bulat yang besar mutlak diperlukan. Cara lain untuk membangkitkan bilangan prima adalah: 1. Bangkitkan bilangan acak p sepanjang n angka. 2. Uji brute force terhadap p dengan membagi p dengan bilangan prima kurang dari 256. Pengujian ini akan menghilangan bilangan bukan prima sebesar 80%. Yang paling mangkus adalah membagi p dengan bilangan prima yang lebih kecil dari 2000. 3. Jika p berhasil melewati uji brute force, uji p dengan algoritma Lehmann. Algoritma Lehmann { Masukan: p (yang akan diuji keprimaannya) Keluaran: p adalah prima atau tidak prima } (a) Bangkitkan bilangan acak a yang lebih kecil dari p. (b) Hitung a(p – 1)/2 mod p. (c) (d) 4. Jika a(p – 1)/2 ≡ / 1 atau –1 (mod p), maka p tidak prima. Jika a(p – 1)/2 ≡ 1 atau –1 (mod p), maka peluang p bukan prima adalah 50%. Ulangi pengujian dengan algoritma Lehmann di atas sebanyak t kali (dengan nilai a yang berbeda). Jika hasil perhitungan langkah (b) sama dengan 1 atau –1, tetapi tidak selalu sama dengan 1, maka peluang p adalah prima mempunyai kesalahan tidak lebih dari 1/2t.

• •

Bilangan acak a yang digunakan pada algoritma Lehmann dapat dipilih nilai yang kecil agar perhitungan lebih cepat. Sedangkan jumlah pengujian yang disarankan adalah lima kali. Selain algoritma Lehmann, metode lain yang banyak digunakan untuk menguji bilangan prima adalah Rabin-Miller. Algoritma Rabin-Miller { Sebelum algoritma ini dijalankan, lakukan prosedur berikut:

1. Bangkitkan bilanagn p yang akan diuji keprimaannya. 2. Hitung b, yang dalam hal ini 2b adalah nilai pangkat 2 terbesar yang habis membagi p – 1. 3. Hitung m sedemikian sehingga p = 1 + 2bm. Masukan: p, m, dan b Keluaran: p adalah prima atau tidak prima. } (a) (b) (c) (d) (e) (f) Bangkitkan bilangan acak a yang lebih kecil dari p. Nyatakan j = 0 dan hitung z = am mod p. Jika z = 1 atau z = p – 1, maka p lolos dari pengujian dan mungkin prima. Jika z > 0 dan z = 1, maka p bukan prima. Nyatakan j = j + 1. Jika j < b dan z ≠ p – 1, nyatakan z = z2 mod p dan kembali ke langkah (d). Jika z = p – 1, maka p lolos pengujian dan mungkin prima. Jika j = b dan z ≠ p – 1, maka p tidak prima.

• Ulangi pengujian dengan algoritma Rabin-Miller di atas sebanyak t kali (dengan nilai a yang berbeda). 4. Tabel Bilangan Prima dari 2 – 256 Tabel 17. Tabel Bilangan Prima (2 – 256) 2 31 79 131 191 251 3 41 83 139 193 5 43 89 149 199 7 47 97 151 211 11 53 101 157 223 13 59 103 163 227 17 61 107 167 229 19 67 109 173 233 23 71 113 179 239 29 73 127 181 241

Sidik Digital pada Dokumen Elektronis • Dokumen elektronis (file) yang tersimpan di dalam komputer dapat diberi sidik digital untuk keperluan otentikasi. Dalam hal ini, pemilik dokumen mempunyai sepasang kunci, yaitu kunci publik dan kunci rahasia. Sidik digital dapat ditambahkan (embedded) di awal atau di akhir dokumen. Sidik digital selanjutnya digunakan untuk membuktikan keaslian isi dokumen dan keaslian pemilik dokumen. Dokumen harus dapat diekstraksi kembali dari arsip yang sudah diberi sidik digital sehingga dokumen dapat dibuka dan diproses oleh program aplikasi yang bersesuaian. Struktur arsip yang diberi sidik digital dengan algoritma DSA diperlihatkan pada Gambar 51. Nilai r Nilai s #10 #13 #10 #7

Isi dokumen semula #26 ← akhir arsip (EOF)

Keterangan: #13 berarti karakter 13 (desimal) dalam pengkodean ASCII

Gambar 51. Struktur arsip yang diberi sidik digital

Pasangan karakter #10 #13 (2 byte) digunakan sebagai pembatas antara nilai r dan s, sedangkan pasangan karakter #10 #7 (2 byte) digunakan sebagai pembatas antara nilai s dengan isi dokumen. Dengan karakter pembatas di atas, timbul masalah jika sidik digital juga mengandung karakter pembatas tersebut. Masalah ini dapat diatasi dengan character stuffing pada sidik digital. Caranya, bila ditemukan karakter #10 di dalam sidik digital, maka karakter tersebut diikuti dengan karakter #0. Bila arsip yang mengandung sidik digital dibaca kembali, maka bila menemui pasangan karakter #10 #0 maka karakter #0 dihilangkan sehingga akan terbaca sebagai karakter #10. Contoh: (i) Jika sidik digital adalah barisan karakter … #8 #15 #10 #17 # 12 … maka yang ditulis ke dalam arsip adalah … #8 #15 #10 #0 #17 # 12 … (ii) Jika sidik digital adalah barisan karakter … #8 #15 #10 #0 # 12 … maka yang ditulis ke dalam arsip adalah … #8 #15 #10 #0 #0 # 12 … (iii) Jika sidik digital adalah barisan karakter … #8 #15 #10 #13 # 12 … maka yang ditulis ke dalam arsip adalah … #8 #15 #10 #0 #13 # 12 …

Protokol Kriptografi • • Protokol: aturan yang berisi rangkaian langkah-langkah, yang melibatkan dua atau lebih orang, yang dibuat untuk menyelesaikan suatu kegiatan. Protokol kriptografi: protokol yang menggunakan kriptografi. Orang yang berpartisipasi dalam protokol kriptografi memerlukan protokol tersebut misalnya untuk: - berbagi komponen rahasia untuk menghitung sebuah nilai, - membangkitkan rangkaian bilangan acak, • • meyakinkan identitas orang lainnya (otentikasi), dll

Protokol kriptografi dibangun dengan melibatkan beberapa algoritma kriptografi. Sebagian besar protokol kriptografi dirancang untuk dipakai oleh kelompok yang terdiri dari 2 orang pemakai, tetapi ada juga beberapa protokol yang dirancang untuk dipakai oleh kelompok yang terdiri dari lebih dari dua orang pemanaki (misalnya pada aplikasi teleconferencing) Untuk mendemonstrasikan protokol kriptografi, kita menggunakan nama-nama pemain sebagai berikut: Anto : orang pertama (dalam semua protokol) Badu : orang kedua (dalam semua protokol)

Carol Dave Erni Toto

: orang ketiga dalam protokol tiga- atau empat- orang : orang keempat dalam protokol empat-orang : penyadap (eavesdropper) : juru penengah (arbitrator) yang dipercaya

1. Protokol Komunikasi dengan Sistem Kriptografi Simetri. Protokol 1: (1) (2) (3) (4) (5) Anto dan Badu menyepakati algoritma kriptografi simetri yang akan digunakan. Anto dan Badu menyepakati kunci yang akan digunakan. Anto menulis pesan plainteks dan mengenkripsinya dengan kunci menjadi cipherteks. Anto mengirim pesan cipherteks kepada Badu. Badu mendekripsi pesan cipherteks dengan kunci yang sama dan membaca plainteksnya. • ini. - jika Erni mendengar semua percakapan antara Anto dan Badu pada protokol Erni menyadap transmisi pesan pada langkah (4), ia harus mencoba

mengkriptanalisis cipherteks untuk memperoleh plainteks tanpa mengetahui kunci. jika ia mendengar pembicaraan pada langkah (1)dan (2), maka ia mengetahui algoritma dan kunci yang digunakan, sehingga ia dapat mendekripsi cipherteks dengan kunci tsb.

• Protokol kriptografi di atas tidak bagus karena kunci harus tetap rahasia sebelum, sepanjang, dan setelah protokol. Langkah (1) dapat dilakukan dalam mode publik, namun langkah (2) harus dilakukan dalam mode rahasia. Sistem kriptografi kunci-publik dapat memecahkan masalah distribusi kunci ini. 2. Protokol Komunikasi dengan Sistem Kriptografi Kunci-Publik. Protokol 2: (1) (2) (3) (4) Anto dan Badu menyepakati algoritma kriptografi kunci-publik yang akan digunakan. Badu mengirimi Anto kunci publiknya (kunci publik Badu). Anto mengenkripsi pesannya dengan kunci publik Badu kemudian mengirimkannya ke Badu Badu mendekripsi pesan dari Anto dengan kunci rahasia miliknya (kunci rahasia Badu).

• Pada umumnya, pengguna di jaringan menyepakati algoritma kriptografi kunci-publik yang digunakan. Setiap pengguna jaringan mempunyai kunci publik dan kunci rahasia, yang dalam hal ini kunci publik dipublikasikan melalui basisdata yang dapat diakses bersama. Dengan demikian, protokol kriptografi kunci-publik menjadi lebih sederhana sebagai berikut: Protokol 3: (1) Anto mengambil kunci publik Badu dari basisdata kunci-publik. (2) Anto mengenkripsi pesannya dengan kunci publik Badu kemudian mengirimkannya kepada Badu. (3) Badu mendekripsi pesan dari Anto dengan kunci rahasia miliknya (kunci rahasia Badu). • Erni yang mendengar pembicaraan selama protokol ini akan mendapatkan kunci publik Badu, tetapi Erni tidak dapat mendekripsi cipherteks karena ia tidak mengetahui kunci rahasia Badu. • Dalam dunia nyata, sistem kriptografi kunci-publik bukanlah pengganti sistem kriptografi sismetri. Sistem kriptografi kunci-publik tidak digunakan untuk mengenkripsi pesan, melainkan untuk mengenkripsi kunci pada sistem kriptografi simetri.

• Dengan sistem kriptogfai kunci-publik, maka pertukaran kunci pada sistem kriptografi simetri dapat dilakukan dengan protokol kriptografi kunci-publik sebagai berikut: Protokol 4: (1) Badu mengirimi Anto kunci publiknya. (2) Anto membangkitkan kunci simetri K, mengenkripsikannya dengan kunci publik (PK) Badu, dan mengirimkannya ke Badu, EPK(K)

(3) (4)

Badu mendekripsi pesan dari Anto dengan menggunakan kunci rahasianya (SK)

untuk mendapatkan kembali kunci simetri K, DSK(EPK(K)) = K Baik Anto dan Badu dapat saling berkirim pesan dengan sistem kriptografi simetri dengan menggunakan kunci K. • Dua gabungan sistem kriptografi yang digunakan pada protokol 4 di atas disebut hybrid cryptosystem dan kunci sismetri yang dipertukarkan disebut session key. • Dengan protokol 4 di atas, kita katakan bahwa sistem kriptografi kunci-publik berhasil memecahkan masalah manajemen kunci yang sangat penting, yaitu pertukaran kunci. Protokol untuk Sidik Digital (Digital Signature) a. Menandatangani Dokumen dengan Sistem Kriptografi Simetri dan Seorang Juru Penengah. Anto ingin menandatangani dokumen digital (pesan atau arsip) dan mengirimkannya ke Badu. Ia meminta Toto sebagai juru penengah (misalnya pengacara) antara Anto dan Badu (diperlukan jika sewaktu-waktu ada pertengkaran antara Anto dan Badu). Toto akan memberikan sidik berupa sertifikasi terhadap dokumen yang dikirim oleh Anto. Sistem kriptografi yang digunakan adalah simetri. Toto memberikan kunci rahasia KA kepada Anto dan kunci rahasia KB kepada Badu (KA dan KB berbeda). Protokol 5: (1) Anto mengenkripsi dokumen dengan KA dan mengirimkannya kepada Toto. (2) Toto mendekripsi dokumen dari Anto dengan KA. (3) Toto menambahkan pada dokumen yang sudah didekripsi sebuah pernyataan sertifikasi bahwa dia telah menerima dokumen itu dari Anto, kemudian mengenkripsi keseluruhannya dengan KB. (4) Toto mengirim cipherteks yang dihasilkan kepada Badu. (5) Badu mendekripsi cipherteks dengan KB. Ia membaca dokumen dan sertifikasi dari Toto bahwa Anto yang mengirimkan dokumen tersebut. • Karakteristik pemberian tanda tangan dengan prtotokol 5 adalah sbb: 1. Sidik (signature) pasti otentik, karena Toto adalah juru penegah yang dipercaya, Toto mengetahui bahwa dokumen dari Anto. Sertifikasi dari Toto berlaku sebagai bukti bagi Badu. 2. Sidik tidak dapat digunakan lagi untuk dokumen yang lain. Jika Badu menggunakan sertifikasi dari Toto untuk dokumen yang lain, maka kecurangan Bon ini dapat diketahui oleh Toto sbb: Toto meminta dokumen tersebut dari Badu.

3.

-

Toto

mengenkripsi

dokumen

tersebut

dengan

KA

dan

membandingkannya dengan cipherteks dari Anto. Jika hasil enkripsi dokumen dari Badu tidak sama dengan

cipherteks dari Anto, maka Badu telah mekakukan kecurangan. 3. Dokumen yang sudah ditandatangani tidak dapat diubah. Toto dapat membuktikan bahwa dokumen sudah berubah dengan cara yang sama seperti 2 di atas. 4. Sidik tidak dapat disangkal. Jika Anto menyangkal bahwa dia yang mengirim dokumen, sertifikasi dari Toto dapat menyanggah sangkalan Anto. • Protokol 5 di atas tidak praktis karena membutuhkan pihak ketiga (Toto) untuk memberikan sertifikasi keabsahan dokumen dan prosesnya memakan waktu. b. Menandatangani Dokumen dengan Sistem Kriptografi Kunci-Publik. Protokol 6: (1) Anto mengenkripsi dokumen dengan kunci rahasianya. Ini sekaligus juga berarti Anto telah memberikan sidik (signature) pada dokumennya. (2) Anto mengirim dokumen yang terenkripsi kepada Badu. (3) Badu mendekripsi dokumen dengan kunci publik Anto. Ini sekaligus juga berarti Badu telah memverifikasi sidik pada dokumen. • Protokol 6 tidak membutuhkan pihak ketiga (Toto) untuk memberikan tandatangan (Toto hanya diperlukan untuk mensertifikasi bahwa kunci publik Anto memang benar milik Anto). • protokol 5. Protokol 6 memiliki karakteristik yang sama seperti pada

c. Menandatangani Dokumen dengan Sistem Kriptografi Kunci-Publik dan Fungsi Hash SatuArah Protokol 7: (1) Anto meringkas dokumennya menjadi message digest dengan fungsi hash satu-arah. (2) Anto mengenkripsi message digest dengan kunci rahasianya. Hasil enkripsinya disertakan (embedded) pada dokumen. Ini berarti Anto telah memberi sidik digital pada dokumennya. (3) Anto mengirim dokumen yang sudah diberi sidik digital kepada Badu. (4) Badu meringkas dokumen dari Anto menjadi mesaage digest dengan fungsi hash yang sama. Badu mendekripsi sidik digital yang disertakan pada dokumen Anto. Jika hasil dekripsinya sama dengan message digest yang dihasilkan, maka sidik digital tersebut sah.

Jika dokumen yang sama ingin ditandatangani oleh dua orang (Anto dan Badu),

maka orang ketiga, Carol, dibutuhkan pada proses verifikasi. Protokolnya adalah sebagai berikut: Protokol 8:

(1) (2) (3) (4) (5)
4.

Anto memberi sidik digital pada message digest dari dokumen. Badu memberi sidik digital pada message digest dari dokumen. Badu mengirimkan sidik digitalnya kepada Anto. Anto mengirim dokumen yang sudah diberi sidik digitalnya dan sidik digital dari Badu Carol memverifikasi sidik digital Anto dan sidik digital Badu (Carol mengetahui kunci

kepada Carol. publik Anto dan kunci publik Badu). Protokol untuk Sidik Digital dengan Enkripsi • Protokol ini dapat dianalogikan seperti pengiriman surat yang menggunakan amplop tertutup. Tanda tangan pada surat memberikan bukti kempemilikan, hal ini sama dengan fungsi sidik digital pada pada dokumen elektrinis. Sedangkan amplop memberikan perlindungan keamanan (privacy), hal ini sama dengan fungsi enkripsi pada dokumen. • Sidik digital diberikan dengan menggunakan kunci rahasia pengirim (lihat protokol 6) dan dokumen dienkripsi dengan kunci publik penerima. Protokolnya adalah sbb: Protokol 9: (1) Anto menandatangi dokumen atau pesan (M) dengan (SK-A). SSK-A(M) (2) Anto mengenkripsi dokumen yang sudah ditandatangi dengan kunci publik Badu (PK-B) dan mengirimkannya kepada Badu EPK-B(SSK-A(M)) menggunakan kunci rahasianya

(3) (4)

Badu mendekripsi cipherteks yang diterima dengan kunci rahasianya (SK-B). DSK-B(EPK-B(SSK-A(M))) = SSK-A(M)) Badu melakukan verifikasi dengan mendekripsi hasil pada langkah 3 dengan

menggunakan kunci publik Anto dan sekaligus mendapatkan kembali dokumen yang belum dienkripsi. VPK-A( SSK-A(M)) = M

Menandatangani dokumen sebelum mengenkripsikannya adalah cara yang alamiah.

Dalam kehidupan sehari-hari, kita menulis surat, menandatanganinya, dan memasukkannya ke dalam amplop. Bila Anto memasukkan surat ke dalam amplop, kemudian menandatangani amplop, maka keabsahannya diragukan. Jika Badu memperlihatkan surat Anto tersebut kepada Carol, maka Carol mungkin menuduh Badu berbohong tentang isi surat tersebut.

Anto tidak harus menggunakan menggunakan kunci publik/kunci rahasia yang sama

untuk enkripsi dan tanda tangan. Anto dapat menggunakan dua pasang kunci: sepasang untuk enkripsi dan sepasang untuk pemberian tanda tangan.

Misalkan Badu ingin mengkonfirmasi bahwa dia telah menerima dokumen dari Anto.

Maka, Badu mengirimkan konfirmasi “tanda terima” kepada Anto. Protokol pengiriman pesan tanda terima adalah sebagai berikut: Protokol 10: (1) Anto menandatangi dokumen atau pesan (M) dengan menggunakan kunci rahasianya (SK-A), mengenkripsikannya dengan kunci publik Badu (PK-B) dan mengirimkannya kepada Badu EPK-B(SSK-A(M))

(2)

Badu mendekripsi cipherteks yang diterima dengan kunci rahasianya (SK-B),

memverifikasi sidik digital dengan kunci publik Anto dan sekaligus mendapatkan kembali dokumen yang belum dienkripsi. VPK-A(DSK-B(EPK-B(SSK-A(M)))) = M

(3)

Badu

menandatangani

dokumen

(M)

dengan

kunci

rahasianya

(SK-B),

mengenkripsikannya dengan kunci publik Anto (PK-A), dan mengirimkannya ke Anto. EPK-A(SSK-B(M))

(4)

Anto mendekripsi dokumen dengan kunci rahasianya (SK-A) dan memverifikasi sidik

digital dengan kunci publik Badu (PK-B). VPK-B(DSK-A(EPK-A(SSK-B(M)))) = M ’ Jika M ’ yang dihasilkan sama dengan dokumen yang dikirim oleh Anto (M), maka Anto tahu bahwa Badu menerima dokumennya dengan benar. Masih Mengenai Protokol Kriptografi Pertukaran Kunci • • Seperti yang sudah disebutkan pada bab sebelum ini, session key adalah kunci simetri yang digunakan untuk mengenkripsi pesan selama berkomunikasi saja. Protokol 4 pada bab sebelum ini menyebutkan bahwa Anto (atau Badu) mengirimkan kunci publiknya terlebih dahulu sebelum mengenkripsi session key. Dalam praktek, kunci publik disimpan di dalam basisdata. Hal ini membuat pertukaran kunci menjadi lebih mudah dengan protokol berikut: Protokol 11: (1) (2) Anto mengambil kunci publik Badu dari basisdata. Anto membangkitkan session key K, mengenkripsikannya dengan kunci publik (PK) Badu, dan mengirimkannya ke Badu, EPK(K) Badu mendekripsi pesan dari Anto dengan menggunakan kunci rahasianya (SK) untuk mendapatkan kembali session key K,

(3)

(4) •

DSK(EPK(K)) = K Baik Anto dan Badu dapat saling berkirim pesan dengan sistem kriptografi simetri dengan menggunakan kunci K.

Pertukaran kunci dan pengiriman pesan dapat dilakukan bersamaan. Jadi, Anto dan Badu tidak perlu menyelesaikan protokol pertukaran kunci sebelum bertukar pesan. Protokol 12: (1) Anto membangkitkan session key K, dan mengenkripsi pesan M dengan menggunakan K, EK(M) (2) (3) Anto mengambil kunci publik Badu dari basisdata. Anto mengenkripsi K dengan dengan kunci publik (PK) Badu, EPK(K)

(4)

Anto mengirim pesan terenkripsi bersama-sama dengan kunci terbenkripsi kepada Badu, EK(M), EPK(K)

(5)

Badu mendekripsi menggunakan kunci rahasianya (SK) untuk mendapatkan kembali session key K, DSK(EPK(K)) = K

(6)

Badu mendekripsi pesan dengan menggunakan kunci K, DK(EK(M)) = M

Jika Anto ingin mengirim pesannya tidak hanya kepada Badu, tetapi juga kepada Carol dan Dave, maka protokol pertukaran kunci dan pengiriman pesan dilakukan secara broadcast dengan protokol berikut: Protokol 12: (1) Anto membangkitkan session key K, dan mengenkripsi pesan M dengan menggunakan K, EK(M) (2) (3) Anto mengambil kunci publik Badu, Carol, dan Dave dari basisdata. Anto mengenkripsi K masing-masing dengan dengan kunci publik Carol (PK-C), (PK-D), EPK-B(K), EPK-C(K), EPK-D(K) Badu (PK-B),

(4)

Anto mengirim pesan terenkripsi bersama-sama dengan kunci terbenkripsi masingmasing kepada Badu, Carol, dan Dave, EPK-B(K), EPK-C(K), EPK-D(K), EK(M),

(5)

Hanya Badu, Carol, dan Dave yang dapat mendekripsi kunci K dengan menggunakan kunci rahasianya (SK) masing-masing.

(6) •

Hanya Badu, Carol, dan Dave yang dapat mendekripsi pesan dengan menggunakan kunci K. Protokol 12 di atas dapat diimplementasikan pada jaringan store-and-forward. pesan terenkripsi dan kunci terenkripsi dari Anto

Dalam hal ini, server memforwardkan kepada Badu, Carol, dan Dave.

• Diffie-Hellman membuat algoritma pertukaran kunci yang keamanannya didasarkan pada fakta bahwa menghitung logaritma diskrit sangat sulit. Mula-mula Anto dan Badu menyepakati bilangan prima yang besar, n dan g, sedemikian sehingga g < n. Bilangan n dan g tidak perlu rahasia. Bahkan, Anto dan Badu dapat membicarakannya melalui saluran yang tidak aman sekalipun. Protokol pertukaran kunci Diffie-Hellman dinyatakan dalam protokol 13 berikut: Protokol 13: (1) Anto memilih bilangan bulat acak yang besar x dan mengirim hasil perhitungan berikut kepada Badu: X = gx mod n (2) Badu memilih bilangan bulat acak yang besar y dan mengirim hasil perhitungan berikut kepada Anto: Y = gy mod n (3) Anto menghitung K = Yx mod n (4) Badu menghitung K’ = Xy mod n • Jika perhitungan dilakukan dengan benar, maka K = K’. Baik K dan K’ sama dengan gxy mod n. Erni yang mendengarkan semua hal selama protokol berlangsung tidak dapat menghitung kunci K. Ia hanya memiliki informasi n, g, X dan Y, tetapi ia tidak mempunyai informasi nilai x dan y. Untuk mengetahui x atau y, ia perlu melakukan perhitungan logaritma diskrit, yang mana sangat sulit dikerjakan. • (1) (2) Varian dari algoritma Diffie-Hellman dikemukakan oleh Hughes sebagai berikut: Anto memilih bilangan bulat acak yang besar x dan menghitung: K = gx mod n Badu memilih bilangan bulat acak yang besar y dan mengirim hasil perhitungan berikut kepada Anto: Y = gy mod n Anto mengirim hasil perhitungan berikut kepada Badu X = Yx mod n (4) Badu menghitung z = y-1 (balikan y dalam modulo n)

Protokol 14:

(3)

K’ = Xz mod n

• Jika perhitungan dilakukan dengan benar, maka K = K’. Keuntungan dari protokol ini, Anto dapat langsung mendapatkan kunci rahasia K sebelum interaksi dengan Badu. Anto dapat mengenkripsi pesannya kepada Badu sebelum protokol pertukaran kunci selesai.

Otentikasi 1. Otentikasi dengan menggunakan sandi-lewat dan fungsi hash satu-arah. • Misalkan Anto log on ke komputer host (misalnya automatic teller machine). Bagaimana host tahu bahwa yang masuk adalah Anto? Secara tradisionil, sandi-lewat (password) digunakan untuk otentikasi. Host tidak perlu menyimpan sandi-lewat, ia hanya perlu menyimpan nilai hash dari sandi-lewat dengan fungsi hash satu-arah. Protokol otentikasinya adalah sebagai berikut: Protokol 15 (1) (2) (3) Anto mengirim sandi-lewatnya ke host. Host mengkompresi sandi-lewat dengan fungsi hash satu-arah. Host membandingkan hasil dari fungsi hash dengan nilai hash yang disimpan sebelumnya di dalam tabel (basisdata).

• Kelemahan otentikasi dengan protokol 15 ini adalah rentan terhadap serangan dictionary attack. Misalkan Mallory (seorang penyerang aktif yang sangat dengki) berhasil meng-hack komputer host dan mencuri tabel data sandi-lewat yang sudah dikompres dengan fungsi hash satu-arah. Selanjutnya Mallory menggunakan kamus yang berisi 1.000.000 sandi-lewat yang sangat umum dipakai orang (nama jalan, tanggal kelahiran, nama anak, dsb). Ia mengkompres seluruh entry di dalam kamus dengan fungsi hash satu-arah dan menyimpan hasilnya. Kemudian ia membandingkan tabel data sandi-lewat yang dicuri dari host dengan hasil hash terhadap isi kamus, dan melihat kecocokannya. • Untuk membuat dictionary attack lebih sulit, sistem keamanan komputer biasanya menambahkan garam (salt). Salt adalah rangkaian bit yang dibangkitkan secara acak dan disambungkan dengan sandi-lewat. Kemudian sandi-lewat yang sudah disambung dengan salt dikompres dengan fungsi hash dan hasilnya disimpan di dalam tabel. Semakin panjang salt semakin bagus. Sistem UNIX menggunakan salt 12-bit. 2. Otentikasi dengan menggunakan sistem kriptografi kunci-publik. • Host menyimpan tabel yang berisi kunci publik semua pengguna. Setiap pengguna memiliki kunci rahasia yang bersesuaian dengan kunci publiknya. Protokol otentikasinya adalah sebagai berikut: Protokol 16 (1) (2) (3) Host mengirimi Anto sebuah string acak. Anto mengenkripsi string dengan kunci rahasianya dan mengirimkannya kembali ke host beserta user-id-nya. Host mencari kunci publik Anto berdasarkan user-id yang diberikan dan mendekripsi cipherteks dari Anto dengan kunci publik tersebut.

(4)

Jika hasil dekripsi sama dengan string yang semula dikirim oleh host, maka host mengizinkan Anto mengakses sistem.

Manajemen Kunci 1. Pendahuluan • • Kekuatan sistem kriptografi secara total bergantung pada keamanan kunci. Kunci perlu dilindungi selama fase daur hidupnya. Daur hidup kunci dimulai dari pembangkitan kunci (generation) sampai kunci tidak diperlukan lagi untuk kemudian dihancurkan (destruction). Secara garis besar, daur hidup kunci digambarkan pada Gambar 52 berikut:
G e n e r a tio n

D e s tr u c tio n

D i s tr i b u t i o n

C hange

S to r a g e

U sa g e

Gambar 52. Daur hidup kunci • Tujuan manajemen kunci adalah menjaga keamanan dan integritas kunci pada semua fase di dalam daur hidupnya. Pada umumnya setiap kunci akhirnya diganti dengan kunci lain. Jadi, keseluruhan fase membentuk siklus (lingkaran) karena penghancuran kunci biasanya diikuti dengan penggantiannya dengan kunci baru (garis putus-putus).

Manajemen kunci yang dibahas difokuskan pada algoritma kriptografi simetri karena manajemen kunci untuk algoritma kunci-publik sangat berbeda dengan algoritma simetri. 2. Pembangkitan Kunci (Key Generation) • Pembangkitan kunci pada algoritma simetri jauh lebih mudah daripada pembangkitan kunci pada algoritma kunci-publik. Karena kunci simetri umumnya rangkaian bii atau rangkaian karakter, maka setiap pengguna dapat membangkitkan kuncinya sendiri. Masalah utama yang muncul pada pembangkitan kunci adalah bagaimana membuat kunci yang tidak dapat diprediksi. Metode yang dapat digunakan untuk menjawab hal ini adalah dengan teknik manual (misalnya pelemparan koin/dadu), pembangkitan dari data pribadi (misalnya PIN), atau menggunakan pembangkit bilangan acak. Pada algoritma kunci-publik, pembangkitan kunci merupakan masalah tersendiri, karena pembangkitan kunci membutuhkan perhitungan matematis yang rumit. Selain itu, pembangkitan bilangan prima yang besar juga dibutuhkan untuk membentuk kunci. Oleh karena itu, pada algoritma kunci-publik dibutuhkan program khusus untuk membangkitkan kunci. Masalah yang timbul di sini adalah kepercayaan pengguna terhadap

program tersebut. Pada RSA misalnya, bila program hanya dapat membangkitkan bilangan prima yang terbatas, maka pihak lawan dapat membangkitkan sendiri bilangan-bilangan prima yang terbatas itu dan menggunakannya sebagai faktor dari salah satu parameter RSA. 3. Penyebaran Kunci (Key Distribution) • • • Jika pengguna menggunakan kunci untuk melindungi informasi yang disimpan di dalam storage, maka tidak ada kebutuhan untuk menyebarkan kunci. Tetapi, untuk kebutuhan komunikasi secara aman, maka diperlukan kebutuhan untuk mengirimkan kunci. Protokol pertukaran kunci dengan menggunakan algoritma kunci-publik (lihat pembaBadu Protokol Kriptografi) dapat digunakan untuk mendistribusikan kunci.

4. Penyimpanan Kunci (Key Storage) • Kunci disimpan di tempat yang aman yang tidak memungkinkan pihak lawan mengaksesnya. Oleh karena itu, penyimpanan kunci mungkin memerlukan perlindungan secara fisik (misalnya disimpan di dalam lemari besi). Alternatif lain, kunci dapat disimpan di dalam smart card yang hanya dapat dibaca dengan menggunakan kode rahasia. Kunci sebaiknya disimpan tidak dalam bentuk jelas. Ada dua solusi alternatif untuk masalah ini. 1. kunci disimpan dengan mengenkripsinya dengan menggunakan kunci lain. Konsep ini mengarah pada konsep key hierarchy, yang dalam hal ini setiap kunci di dalam hirarkhi digunakan untuk melindungi kunci di bawahnya. 2. kunci dipecah menjadi beberapa komponen, setiap komponen disimpan di tempat terpisah. Jika kunci akan digunakan, maka setiap komponen direkonstruksi kembali. • Misalkan kunci K dibagi menjadi dua komponen, K1 dan K2. Membagi dua langsung K sedemikian sehingga setengah bagian pertama menjadi K1 dan setengah bagian sisanya menjadi K2 tidak dianjurkan, karena dapat memungkinkan pihak lawan menemukan K jika ia hanya mengetahui salah satu dari K1 dan K2. Misalkan K panjangnya 64 bit, dan lawan mengetahui K1, maka K dapat ditentukan dengan hanya 232 percobaaan untuk menemukan K2 secara exhaustive search (lebih sedikit dibandingkan 264 percobaan). • Solusi pemecahan yang lebih baik adalah membentuk kunci K dari K1 dan K2 sedemikian sehingga K = K1 ⊕ K2. Dalam hal ini, ukuran K1 dan K2 sama dengan ukuran K, sehingga jika salah satu dari komponen K1 atau K2 diketahui, maka K relatif lebih sukar ditentukan. 5. Penggunaan Kunci (Key Usage) • • Setiap kunci digunakan sesuai tujuannya. Misalnya ada kunci yang digunakan untuk mengenkripsi pesan, dan ada kunci yang digunakan untuk mengenkripsi kunci lainnya. Supaya setiap kunci mempunyai penggunaan yang unik, maka kita perlu membeli label pada setiap kunci, yang dalam hal ini label menspesifikasikan penggunaan kunci. Misalnya, label tersebut menspesifikasikan ‘kunci untuk mengenkripsi data’, ‘kunci untuk mengenkripsi kunci’, ‘kunci untuk pembangkitan bilangan acak’, dan sebagainya. Untuk algoritma kunci-publik, pengguna perlu memberi label untuk dua pasang kunci yang setiap pasang terdiri dari kunci publik dan kunci rahasia. Satu pasang kunci untuk enkripsi dan satu pasang lagi untuk sidik digital.

• •

6. Perubahan Kunci (Key Change) • • • • Kunci sebaiknya diubah secara periodik dan teratur. Sistem kriptografi harus mempunyai kemampuan untuk mengubah kunci. Kunci diubah secara teratur untuk membatasi lama keberadaanya dan mengurangi nilainya dimata penyerang. Pada sistem EFTPOS (Electronic Funds Transfer at Point of Sale), kunci diubah setiap kali setelah selesai satu transaksi. Tidak ada aturan seberapa sering kunci seharusnya diubah. Tetapi cukup jelas dimengerti bahwa setiap kunci seharusnya diubah jauh sebelum ia dapat ditemukan dengan cara exhaustive search.

7. Penghancuran Kunci (Key Destruction) • • • Kunci yang tidak dibutuhkan lagi seharusnya dihancurkan dengan cara yang aman. Jika kunci dicatat pada media kertas, maka cara penghancurannya misalnya menggunakan alat pemotong kertas (crosscut), membakarnya, atau menguburnya. Jika kunci disimpan di dalam media elektronik (seperti CD), maka cara penghancurannya bisa dengan menghapusnya atau menimpanya (overwritten) sedemikian sehingga tidak meninggalkan jejak yang bisa dilacak oleh penyerang. Kunci yang yang disimpan pada material lain dihancurkan sedemikian rupa sehingga ia tidak mungkin ditemukan kembali secara fisik maupun secara elektronik.

1.

Kriptografi dalam Kehidupan Sehari-hari Transaksi lewat Anjungan Tunai mandiri (ATM) • Anjungan Tunai Mandiri atau Automatic Teller Machine (ATM) digunakan nasabah bank untuk melakukan transaski perbankan. Utamanya, kegunaan ATM adalah untuk menarik uang secara tunai (cash withdrawal), namun saat ini ATM juga digunakan untuk transfer uang (pemindahbukuan), mengecek saldo, membayar tagihan kartu ponsel, membeli tiket kereta api, dan sebagainya. Transaksi lewat ATM memerlukan kartu magnetik (disebut juga kartu ATM) yang terbuat dari plastik dan kode PIN (Personal Information Number) yang berasosiasi dengan kartu tersebut. PIN terdiri dari 4 angka yang harus dijaga kerahasiannya oleh pemilik kartu ATM, sebab orang lain yang mengetahui PIN dapat menggunakan kartu ATM yang dicuri atau hilang untuk melakukan penarikan uang. PIN digunakan untuk memverifikasi kartu yang dimasukkan oleh nasabah di ATM. Proses verifikasi dilakukan di komputer pusat (host) bank, oleh karena itu harus ada komunikasi dua arah antara ATM dan komputer host. ATM mengirim PIN dan informasi tambahan pada kartu ke komputer host, host melakukan verifikasi dengan cara membandingkan PIN yang di-entrykan oleh nasabah dengan PIN yang disimpan di dalam basisdata komputer host, lalu mengirimkan pesan tanggapan ke ATM yang menyatakan apakah transaksi dapat dilanjutkan atau ditolak. Selama transmisi dari ATM ke komputer host, PIN harus dilindungi dari penyadapan oleh orang yang tidak berhak. Bentuk perlindungan yang dilakukan selama transmisi adalah dengan mengenkripsikan PIN. Di sisi bank, PIN yang disimpan di dalam basisdata juga dienkripsi.

• •

• •

Algoritma enkripsi yang digunakan adalah DES dengan mode ECB. Karena DES bekerja dengan mengenkripsikan blok 64-bit, maka PIN yang hanya terdiri dari 4 angka (32 bit) harus ditambah dengan padding bits sehingga panjangnya menjadi 64 bit. Padding bits yang ditambahkan berbeda-beda untuk setiap PIN, bergantung pada informasi tambahan pada setiap kartu ATM-nya. Karena panjang PIN hanya 4 angka, maka peluang ditebak sangat besar. Seseorang yang memperoleh kartu ATM curian atau hilang dapat mencoba semua kemungkinan kode PIN yang mungkin, sebab hanya ada 10 × 10 × 10 × 10 = 10.000 kemungkinan kode PIN 4angka. Untuk mengatasi masalah ini, maka kebanyakan ATM hanya membolehkan pengentry-an PIN maksimum 3 kali, jika 3 kali tetap salah maka ATM akan ‘menelan’ kartu ATM. Masalah ini juga menunjukkan bahwa kriptografi tidak selalu dapat menyelesaikan masalah keamanan data.

2. •

Pay TV Pay TV adalah siaran TV yang hanya dapat dinikmati oleh pelanggan yang membayar saja, sedangkan pemilik TV yang tidak berlangganan tidak dapat menikmati siarannya (Di Indonesia Pay TV dikelola oleh PT. IndoVision). Siaran Pay TV dipancarkan secara broadcast, namun hanya sejumlah pesawat TV yang berhasil menangkap siaran tersebut yang dapat ‘mengerti’ isinya. Pada sistem Pay TV, sinyal broadcast dienkripsi dengan kunci yang unik. Orang-orang yang berlangganan Pay TV pada dasarnya membayar untuk mengetahui kunci tersebut. Bagaimana mengetahui bahwa kunci tersebut dimiliki oleh pelanggan yang sah, dan bukan orang yang mengetahui kunci tersebut dari pelanggan lainnya? Solusi yang umum adalah setiap pelanggan diberikan smart card yang mengandung kunci rahasia (private key) yang unik dalam konteks algoritma kriptografi kunci-publik. Smart card dimasukkan ke dalam card reader yang dipasang pada pesawat TV. Selanjutnya, pelanggan Pay TV dikirimi kunci simetri yang digunakan untuk mengenkripsi siaran. Kunci simetri ini dikirim dalam bentuk terenkripsi dengan menggunakan kunci publik pelanggan. Smart card kemudian mendekripsi kunci simetri ini dengan kunci rahasia pelanggan. Selanjutnya, kunci simetri digunakan untuk mendekripsi siaran TV. Komunikasi dengan Telepon Seluler (GSM mobile phone) • Penggunaan telepon seluler (ponsel) yang bersifat mobile memungkinkan orang berkoumikasi dari tempat mana saja. • Telepon seluler bersifat nirkabel (wireless), sehingga pesan yang dikirim dari ponsel ditransmisikan melalui gelombang mikro (microwave) atau radio sampai ia mencapai base station (BST) terdekat, selanjutnya ditransfer melalui saluran kabel fixed. • Karena menyadap sinyal radio jauh lebih mudah daripada menyadap sinyal pada saluran kabel, maka ini berarti GSM tidak lebih aman daripada telepon fixed konvensional. • Untuk membuat komunikasi lewat ponsel aman, maka pesan dienkripsi selama transmisi dari ponsel ke BST terdekat. Metode enkripsi yang digunakan adalah metode cipher aliran (stream cipher). • Masalah keamanan lain adalah identitas penelpon. Operator seluler harus dapat mengidentifikasi suatu panggilan (call) dan mengetahui siapa yang melakukan panggilan tersebut. Jadi, pada GSM diperlukan dua kebutuhan keamanan lainnya, yaitu kerahasiaan

• • •

3.

(confidentiality), yang merupakan kebutuhan bagi pelanggan, dan otentikasi pengguna (user authentication), yang merupakan kebutuhan bagi sistem. • Dua kebutuhan ini dipenuhi dengan penggunaan smart card yang disebut SIM card. SIM card disediakan oleh operator seluler (service provider). SIM card berisi nilai otentikasi rahasia sepanjang 128-bit yang diketahui hanya oleh operator. Nilai ini digunakan sebagai kunci pada protokol otentikasi dengan menggunakan algoritma yang dipilih oleh operator. • Ketika pengguna ponsel melakukan panggilan (call), identitasnya dikirim ke komputer host via BST untuk keperluan otentikasi. Komputer host melakukan verifikasi pengguna lalu membangkitkan pesan (challenge) dan mengirimnya ke BST. • Program otentikasi menerima masukan 128-bit dan mengeluarkan response 128-bit, yang bergantung pada kunci otentikasi di dalam kartu. Dari 128-bit keluaran, hanya 32 bit yang dikirim dari SIM card ke BST sebagai response. Jadi, masih ada 96 bit yang hanya diketahui hanya oleh SIM card, BST, dan komputer host. • SIM card juga berisi program stream cipher untuk mengenkripsi pesan dari ponsel ke BST. Kunci enkripsi panjangnya 64 bit, yang diambil dari 96 bit sisa dari response SIM card. Transaksi E-commerce di Internet • Sekarang banyak orang berbelanja melalui web di internet. Pembayaran barang dilakukan dengan menggunakan kartu kredit, yang berarti bahwa pembeli harus mengirimkan kode PIN kartu kredit dan informasi lainnya melalui internet. Karena alasan keamanan yang menyangkut informasi kartu kredit maka transaksi barang lewat internet tidak terlalu populer. • Browsing web secara aman adalah fitur paling penting pada e-commerce. Secure Socket Layer (SSL) adalah protokol yang digunakan untuk browsing web secara aman. Kedua protokol ini memfasilitasi penggunaan enkripsi untuk data yang rahasia dan membantu menjamin integritas informasi yang dipertukarkan antara website dan web brwoser (misalnya Netscape, Interner Explorer, dsb). • SSL adalah contoh protokol client-server, yang dalam hal ini web browser adalah client dan website adalah server. Client yang memulai komunikasi, sedangkan server memberi respon terhadap permintaan client. Fungsi paling dasar yang digunakan SSL adalah membentuk saluran untuk mengirimkan data terenkripsi, seperti data kartu kredit, dari browser ke website yang dituju.

4.