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.
enkripsi c dekripsi
Ee(P) = c jalur tak Dd(c) = P
aman
P P
sumber
plaintext
tujuan
Anto 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.
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
Keystream Keystream
Generator Generator
Keystream ki Keystream ki
ci
pi ⊕ ⊕ pi
Plainteks Enkripsi Cipherteks Dekripsi Plainteks
U Keystream U Keystream
Generator Generator
Keystream ki Keystream ki
ci
pi ⊕ ⊕ pi
Plainteks Enkripsi Cipherteks Dekripsi 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-aliran-
kunci yang panjang.
Contoh: Misalkan U adalah kunci empat-bit yang dipilih sembarang, kecuali 0000. Bit-aliran-
kunci 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 U Keystream
Generator Generator
Keystream ki Keystream ki
ci
pi ⊕ ⊕ pi
• 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.
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-aliran-
kunci yang tidak dapat diprediksi sehingga mengetahui sebagian dari bit-aliran-kunci tidak
memungkinkan kriptanalis dapat mendeduksi bagian sisanya.
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).
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: Dekripsi:
Blok Plainteks P Blok Cipherteks C
P = (p1, p2, …, pm) C = (c1, c2, …, cm)
Kunci K E Kunci K D
• Algoritma blok cipher menggabungkan beberapa teknik kriptografi klasik dalam proses
enkripsi. Dengan kata lain, cipher blok dapat diacu sebagai super-enkripsi.
• Teknik kriptografi klasik yang digunakan adalah:
1. Substitusi.
Teknik ini mengganti satu atau sekumpulan bit pada blok plainteks tanpa mengubah urutannya.
Secara matematis, teknik substitusi ini ditulis sebagai
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 (S-
box).
C = PM
yang dalam hal ini C adalah blok cipherteks, P adalah blok plainteks, dan M adalah fungsi
transposisi.
• 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.
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.
• 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.
Kunci K E Kunci K E
• 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.
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 arsip-
arsip 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.
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.
Ci – 2 ⊕ ⊕
EK EK DK DK
Ci – 2 ⊕ ⊕
Ci – 1 Ci
Pi – 1 Pi
Enkripsi Dekripsi
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.
K Enkripsi K Enkripsi
ki ki
pi ⊕ ci ci ⊕ pi
Pi – 1 Pi Pi+1
⊕ Ek ⊕ Ek ⊕
Ci – 1 Ci Ci+1
Gambar 32. Skema umpan-balik yang diterapkan pada mode CFB
Ci = Pi ⊕ Ek (Ci – 1 )
Pi = Ci ⊕ Ek (Ci – 1 )
Li = Ri+1
Ri = Li – 1 ⊕ f(Ri – 1, Ki)
⊕ f
Li – 1 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.
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 1 10 15 9 2 6 8 0 13 3 4 14 7 5 11
10 15 4 2 7 12 9 5 6 1 13 14 0 11 3 8
9 14 15 5 2 8 12 3 7 0 4 10 1 13 11 6
4 3 2 12 9 5 15 10 11 14 1 7 6 0 8 13
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.
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. Blok plainteks dipermutasi dengan matriks permutasi awal (initial permutation atau IP).
2. 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-XOR-
kan 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 )
f K 16
-1
IP
C ip h e r te k s
Li -1 Ri −1
f K i
⊕
Li Ri
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 12 4
62 54 46 38 30 22 14 6 64 56 48 40 32 24 16 8
57 49 41 33 25 17 9 1 59 51 43 35 27 19 11 3
61 53 45 37 29 21 13 5 63 55 47 39 31 23 15 7
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
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:
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 17 11 24 1 5 3 28 15 6 21 10
23 19 12 4 26 8 16 7 27 20 13 2
41 52 31 37 47 55 30 40 51 45 33 48
44 49 39 56 34 53 46 42 50 36 29 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 0 D 0
L e ft S h ift L e ft S h ift
C 1 D 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 L e ft S h ift
C 16
D 16
P e r m u ta s i
P C -2 K 16
E (R i-1
)
4 8 b it
⊕ K i
4 8 b it 4 8 b it
E ( Ri −1 ) ⊕ K i = A
S 1
... S 8
M a trik s s u b s titu s i
B
3 2 b it
P (B )
3 2 b it
14 4 13 1 2 15 11 8 3 10 6 12 5 9 0 7
0 15 7 4 14 2 13 1 10 6 12 11 9 5 3 8
4 1 14 8 13 6 2 11 15 12 9 7 3 10 5 0
15 12 8 2 4 9 1 7 5 11 3 14 10 0 6 13
S2:
15 1 8 14 6 11 3 4 9 7 2 13 12 0 5 10
3 13 4 7 15 2 8 14 12 0 1 10 6 9 11 5
0 14 7 11 10 4 13 1 5 8 12 6 9 3 2 15
13 8 10 1 3 15 4 2 11 6 7 12 0 5 14 9
S3:
10 0 9 14 6 3 15 5 1 13 12 7 11 4 2 8
13 7 0 9 3 4 6 10 2 8 5 14 12 11 15 1
13 6 4 9 8 15 3 0 11 1 2 12 5 10 14 7
1 10 13 0 6 9 8 7 4 15 14 3 11 5 2 12
S4:
7 13 14 3 0 6 9 10 1 2 8 5 11 12 4 15
13 8 11 5 6 15 0 3 4 7 2 12 1 10 14 9
10 6 9 0 12 11 7 13 15 1 3 14 5 2 8 4
3 15 0 6 10 1 13 8 9 4 5 11 12 7 2 14
S5:
2 12 4 1 7 10 11 6 8 5 3 15 13 0 14 9
14 11 2 12 4 7 13 1 5 0 15 10 3 9 8 16
4 2 1 11 10 13 7 8 15 9 12 5 6 3 0 14
11 8 12 7 1 14 2 13 6 15 0 9 10 4 5 3
S6:
12 1 10 15 9 2 6 8 0 13 3 4 14 7 5 11
10 15 4 2 7 12 9 5 6 1 13 14 0 11 3 8
9 14 15 5 2 8 12 3 7 0 4 10 1 13 11 6
4 3 2 12 9 5 15 10 11 14 1 7 6 0 8 13
S7:
4 11 2 14 15 0 8 13 3 12 9 7 5 10 6 1
13 0 11 7 4 9 1 10 14 3 5 12 2 15 8 6
1 4 11 13 12 3 7 14 10 15 6 8 0 5 9 2
6 11 13 8 1 4 10 7 9 5 0 15 14 2 3 12
S8:
13 2 8 4 6 15 11 1 10 9 3 14 5 0 12 7
1 15 13 8 10 3 7 4 12 5 6 11 0 14 9 2
7 11 4 1 9 12 14 2 0 6 10 13 15 3 5 8
2 1 14 7 4 10 8 13 15 12 9 0 3 5 6 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:
16 7 20 21 29 12 28 17 1 15 23 26 5 8 31 10
2 8 24 14 32 27 3 9 19 13 30 6 22 11 4 25
Ri = Li – 1 ⊕ P(B)
• Jadi, keluaran dari putaran ke-i adalah
L i-1
3 2 b it
R i
3 2 b it
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.
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 menjadi 56 bit. Alasan pengurangan tidak
diumumkan.
• 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 konstanta-
konstanta di dalam kotak itu.
• 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
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 Merkle-
Hellman Scheme.
Setiap cryptosytem yang baik harus memiliki karakteristik sebagai berikut :
• Keamanan sistem terletak pada kerahasiaan kunci dan bukan pada kerahasiaan algoritma
yang digunakan.
• 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
2. Ukuran cipherteks lebih besar daripada plainteks (bisa dua sampai empat kali ukuran
plainteks).
3. 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.
e
tempat kunci
jalur tak aman
d
enkripsi c dekripsi
Ee(m) = c Dd(c) = m
jalur tak aman
p p
sumber
plaintext
tujuan
Anto Badu
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 : (1 × 1) + (1 × 5) + (1 × 6) + (1 × 20) = 32
Blok plainteks ke-2 : 010110
Knapsack : 1, 5, 6, 11, 14, 20
Kriptogram : (1 × 5) + (1 × 11) + (1 × 14) = 30
Blok plainteks ke-3 : 000000
Knapsack : 1, 5, 6, 11, 14, 20
Kriptogram :0
Blok plainteks ke-4 : 011000
Knapsack : 1, 5, 6, 11, 14, 20
Kriptogram : (1 × 5) + (1 × 6) = 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) Bandingkan 70 dengan Baduot terbesar, yaitu 52. Karena 52 ≤ 70, maka 52 dimasukkan ke
dalam knapsack.
(ii) 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.
(iii) Bandingkan 18 dengan Baduot terbesar berikutnya, yaitu 13.
Karena 13 ≤ 18, maka 13 dimasukkan ke dalam knapsack.
(iv) Baduot total sekarang menjadi 18 – 13 = 5.
(v) Bandingkan 5 dengan Baduot terbesar kedua, yaitu 6. Karena 6 >
5, maka 6 tidak dimasukkan ke dalam knapsack.
(vi) Bandingkan 5 dengan Baduot terbesar berikutnya, yaitu 3.
Karena 3 ≤ 5, maka 3 dimasukkan ke dalam knapsack.
(vii) Baduot total sekarang menjadi 5 – 3 = 2.
(viii) Bandingkan 2 dengan Baduot terbesar berikutnya, yaitu 2. Karena
2 ≤ 2, maka 2 dimasukkan ke dalam knapsack.
(ix) Baduot total sekarang menjadi 2 – 2 = 0.
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.
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 : (1 × 93) + (1 × 81) = 174
Blok plainteks ke-2 : 110101
Kunci publik : 62, 93, 81, 88, 102, 37
Kriptogram : (1 × 62) + (1 × 93) + (1 × 88) + (1 × 37) = 280
Blok plainteks ke-3 : 101110
Kunci publik : 62, 93, 81, 88, 102, 37
Kriptogram : (1 × 62) + (1 × 81) + (1 × 88) + (1 × 102) = 333
Jadi, cipherteks yang dihasilkan : 174, 280, 333
Dekripsi
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:
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 (rahasia)
2. r = p ⋅ q (tidak rahasia)
3. φ (r) = (p – 1)(q – 1) (rahasia)
4. PK (kunci enkripsi) (tidak rahasia)
5. SK (kunci dekripsi) (rahasia)
6. X (plainteks) (rahasia)
7. Y (cipherteks) (tidak rahasia)
• Algoritma RSA didasarkan pada teorema Euler (lihat bahan kuliah Teori Bilangan Bulat) yang
menyatakan bahwa
φ
a (r) ≡ 1 (mod r) (1)
yang dalam hal ini,
1. a harus relatif prima terhadap r
2. φ (r) = r(1 – 1/p1)(1 – 1/p2) … (1 – 1/pn), yang dalam hal ini p1, p2, …, pn adalah
faktor prima dari r.
1 + mφ ( r )
SK = (12)
PK
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.
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
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-ke-
satu).
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.
• Keamanan algoritma RSA terletak pada tingkat kesulitan dalam memfaktorkan bilangan non
prima menjadi faktor primanya, yang dalam hal ini r = p × q.
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. Bilangan prima, p (tidak rahasia)
2. Bilangan acak, g ( g < p) (tidak rahasia)
3. Bilangan acak, x (x < p) (rahasia)
4. M (plainteks) (rahasia)
5. a dan b (cipherteks) (tidak rahasia)
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:
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.
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.
a. Apabila pesan M yang diterima sudah berubah, maka MD’ yang dihasilkan dari fungsi
hash berbeda dengan MD semula. Ini berarti pesan tidak asli lagi.
b. 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).
c. Bila MD = MD’, ini berarti pesan yang diterima adalah pesan yang asli (message
authentication) dan orang yang mengirim adalah orang yang sebenarnya (user
authentication).
S ig n e r V e r ifie r
S ig n a tu r e S ig n a tu re
F u n g si
H ash
S ig n a tu re
M e ssa g e F ungsi
D ig e st H ash
P u b lic
V e r ify
S ec ret Key
S ig n in g
K ey
M e ssa g e ? M e ssa g e
S ig n a tu r e D ig e st = D ig e s t
• 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
• Sembarang pesan M berukuran bebas dikompresi oleh fungsi hash H melalui persamaan
h = H(M) (6)
• Sifat-sifat fungsi hash adalah sebagai berikut:
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).
• 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 Fungsi hash hi
hi – 1 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 a d d in g b its K m o d 62 4
( 1 - 5 1 2 b it)
P esan 1 0 0 0 .. .0 0 0P a n ja n g P e sa n
512 512
512 512
Y0 Y1 ... Yq ... YL - 1
AB C D H M D 5
H M D 5
H M D 5
H M D 5
128 128 128 128 128 128
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.
M D q
512
A B C D
ABCD ← f G ( ABCD , Yq , T [17 .. 32 ])
A B C D
ABCD ← f H ( ABCD , Yq , T [33 .. 48 ])
A B C D
ABCD ← f I ( ABCD , Yq , T [ 49 .. 64 ])
+ + + +
128
MD q + 1
+ X [k ]
+ T [i]
C LS s
• 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 32-
bit. Masing-masing fungsi dapat dilihat pada Tabel 9.
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.
• 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:
No. [abcd k s i]
1 [ABCD 0 7 1]
2 [DABC 1 12 2]
3 [CDAB 2 17 3]
4 [BCDA 3 22 4]
5 [ABCD 4 7 5]
6 [DABC 5 12 6]
7 [CDAB 6 17 7]
8 [BCDA 7 22 8]
9 [ABCD 8 7 9]
10 [DABC 9 12 10]
11 [CDAB 10 17 11]
12 [BCDA 11 22 12]
13 [ABCD 12 7 13]
14 [DABC 13 12 14]
15 [CDAB 14 17 15]
16 [BCDA 15 22 16]
No. [abcd k s i ]
1 [ABCD 1 5 17]
2 [DABC 6 9 18]
3 [CDAB 11 14 19]
4 [BCDA 0 20 20]
5 [ABCD 5 5 21]
6 [DABC 10 9 22]
7 [CDAB 15 14 23]
8 [BCDA 4 20 24]
9 [ABCD 9 5 25]
10 [DABC 14 9 26]
11 [CDAB 3 14 27]
12 [BCDA 8 20 28]
13 [ABCD 13 5 29]
14 [DABC 2 9 30]
15 [CDAB 7 14 31]
16 [BCDA 12 20 32]
Putaran 3: 16 kali operasi dasar dengan g(b, c, d) = H(b, c, d)
No. [abcd k s i ]
1 [ABCD 5 4 33]
2 [DABC 8 11 34]
3 [CDAB 11 16 35]
4 [BCDA 14 23 36]
5 [ABCD 1 4 37]
6 [DABC 4 11 38]
7 [CDAB 7 16 39]
8 [BCDA 10 23 40]
9 [ABCD 13 4 41]
10 [DABC 0 11 42]
11 [CDAB 3 16 43]
12 [BCDA 6 23 44]
13 [ABCD 9 4 45]
14 [DABC 12 11 46]
15 [CDAB 15 16 47]
16 [BCDA 2 23 48]
No. [abcd k s i ]
1 [ABCD 0 6 49]
2 [DABC 7 10 50]
3 [CDAB 14 15 51]
4 [BCDA 5 21 52]
5 [ABCD 12 6 53]
6 [DABC 3 10 54]
7 [CDAB 10 15 55]
8 [BCDA 1 21 56]
9 [ABCD 8 6 57]
10 [DABC 15 10 58]
11 [CDAB 6 15 59]
12 [BCDA 13 21 60]
13 [ABCD 4 6 61]
14 [DABC 11 10 62]
15 [CDAB 2 15 63]
16 [BCDA 9 21 64]
MD = MDL – 1 (10)
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.
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.
3. Sidik digital dari pesan m adalah bilangan r dan s. Hitung r dan s sebagai berikut:
u1 = (H(m) * w) mod q
u2 = (r * w) mod q
2. Jika v = r, maka sidik digital sah, yang berarti bahwa pesan masih asli dan dikirim oleh
pengirim yang benar.
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.
x = 3223
y = 29245
k = 997
1. Hitung
w = s– 1 mod q = 469
Implementasi DSA
• Adanya batasan bahwa nilai p mempunyai panjang 512 sampai 1024 bit dan q 160-
bit, 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.
K b i t < 26 4 P a d d in g b its K
(1 - 5 1 2 b it)
P esan 1 0 0 0 ...0 0 0 P a n ja n g P e s a n
512 512
512 512
Y 0 Y 1 ... Y q ... Y L - 1
A BC D H SH A H S H A H S H A H S H A
160 160 160 160 160 160
160
M e s s a g e D ig e s t
Y q
M D q
512
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
• 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 d i-1 e i-1
ft +
CLS 5 +
W t
+
CLS 30
K t
+
a i b i ci d i ei
• 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 = putaran, 0 ≤ t ≤ 79
ft = fungsi logika
CLSs = circular left shift sebanyak s bit
Wt = word 32-bit yang diturunkan dari blok 512
bit yang sedang diproses
Kt = konstanta penambah
+ = operasi penjumlahan modulo 232
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.
Contoh. Sebagai ilustrasi, untuk menghitung 57237 mod 713 dapat dilakukan sebagai berikut:
Contoh-contoh lainnya,
• 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:
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
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.
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) Jika a(p – 1)/2 ≡ / 1 atau –1 (mod p), maka p tidak prima.
(d) Jika a(p – 1)/2 ≡ 1 atau –1 (mod p), maka peluang p bukan prima adalah 50%.
4. 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. }
… #8 #15 #10 #0 # 12 …
… #8 #15 #10 #0 #0 # 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 : orang ketiga dalam protokol tiga- atau empat- orang
Dave : orang keempat dalam protokol empat-orang
Erni : penyadap (eavesdropper)
Toto : juru penengah (arbitrator) yang dipercaya
(1) Anto dan Badu menyepakati algoritma kriptografi simetri yang akan digunakan.
(2) Anto dan Badu menyepakati kunci yang akan digunakan.
(3) Anto menulis pesan plainteks dan mengenkripsinya dengan kunci menjadi cipherteks.
(4) Anto mengirim pesan cipherteks kepada Badu.
(5) Badu mendekripsi pesan cipherteks dengan kunci yang sama dan membaca plainteksnya.
• Erni mendengar semua percakapan antara Anto dan Badu pada protokol
ini.
- jika 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) Anto dan Badu menyepakati algoritma kriptografi kunci-publik yang akan digunakan.
(2) Badu mengirimi Anto kunci publiknya (kunci publik Badu).
(3) Anto mengenkripsi pesannya dengan kunci publik Badu kemudian mengirimkannya ke Badu
(4) Badu mendekripsi pesan dari Anto dengan kunci rahasia miliknya (kunci rahasia Badu).
Protokol 4:
Protokol 5:
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 6 memiliki karakteristik yang sama seperti pada
protokol 5.
c. Menandatangani Dokumen dengan Sistem Kriptografi Kunci-Publik dan Fungsi Hash Satu-
Arah
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) Anto memberi sidik digital pada message digest dari dokumen.
(2) Badu memberi sidik digital pada message digest dari dokumen.
(4) Anto mengirim dokumen yang sudah diberi sidik digitalnya dan sidik digital dari Badu
kepada Carol.
(5) Carol memverifikasi sidik digital Anto dan sidik digital Badu (Carol mengetahui kunci
publik Anto dan kunci publik Badu).
Protokol 9:
(1) Anto menandatangi dokumen atau pesan (M) dengan menggunakan kunci rahasianya
(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))
(3) Badu mendekripsi cipherteks yang diterima dengan kunci rahasianya (SK-B).
DSK-B(EPK-B(SSK-A(M))) = SSK-A(M))
(4) 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
• 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
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.
EK(M)
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
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:
EK(M)
(2) Anto mengambil kunci publik Badu, Carol, dan Dave dari basisdata.
(3) Anto mengenkripsi K masing-masing dengan dengan kunci publik Badu (PK-B),
Carol (PK-C), (PK-D),
(4) Anto mengirim pesan terenkripsi bersama-sama dengan kunci terbenkripsi masing-
masing kepada Badu, Carol, dan Dave,
(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.
• 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) Anto memilih bilangan bulat acak yang besar x dan menghitung:
K = gx mod n
(2) Badu memilih bilangan bulat acak yang besar y dan mengirim hasil perhitungan
berikut kepada Anto:
Y = gy mod n
X = Yx mod n
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.
Protokol 15
Protokol 16
(2) Anto mengenkripsi string dengan kunci rahasianya dan mengirimkannya kembali ke
host beserta user-id-nya.
(3) 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
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.