Anda di halaman 1dari 75

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 e jalur aman


kunci

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.

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-bit-
kunci (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 Keystream
Generator Generator

Keystream ki Keystream ki

ci

pi ⊕ ⊕ pi
Plainteks Enkripsi Cipherteks Dekripsi Plainteks

Gambar 25. Konsep Cipher Aliran

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 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

Plainteks Enkripsi Cipherteks Dekripsi 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-aliran-
kunci 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: Dekripsi:
Blok Plainteks P Blok Cipherteks C
P = (p1, p2, …, pm) C = (c1, c2, …, cm)

Kunci K E Kunci K D

Blok Cipherteks C Blok Plainteks P


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

Gambar 28. Skema Enkripsi dan Dekripsi pada Cipher Blok

Teknik Kriptografi Klasik yang Digunakan pada Cipher Blok

• 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

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 (S-
box).

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: 0001 1001 1000 0001 0010


Geser 1 bit ke kiri: 0010 0011 0001 0010 0100
Dalam notasi HEX: 2 3 1 2 4
Jadi, hasil enkripsi plainteks
10100010001110101001 (A23A9 dalam notasi HEX)
adalah
00100011000100100100 (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 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.

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 Antrian

Last 8-byte Last 8-byte

K Enkripsi K Enkripsi

Left-most byte Left-most byte

ki ki

pi ⊕ ci ci ⊕ 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 = 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).
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 masing-
masing 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 Ri – 1

Gambar 33. Jaringan Feistel

• 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 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

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. 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 )

L 15 = R 14 R15 = L14 ⊕ f ( R14 , K 15 )

f K 16

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


16 15

-1
IP

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 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

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:
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

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 i-1
3 2 b it E k sp a n si m e n ja d i 4 8 b it

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

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 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

• 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 i-1
3 2 b it

R i
3 2 b it

Gambar 39. Skema Perolehan Ri

Permutasi Terakhir (Inverse Initial Permutation)


• 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:
40 8 48 16 56 24 64 32 39 7 47 15 55 23 63 31
38 6 46 14 54 22 62 30 37 5 45 13 53 21 61 29
36 4 44 12 52 20 60 28 35 3 43 11 51 19 59 27
34 2 42 10 50 18 58 26 33 1 41 9 49 17 57 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 bit-
bit 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 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.

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 berturut-
turut 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) Kunci sebenarnya

0101 0101 0101 0101 0000000 0000000


1F1F 1F1F 1F1F 1F1F 0000000 FFFFFFF
E0E0 E0E0 F1F1 F11F FFFFFFF 0000000
FEFE FEFE FEFE FEFE 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 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

plainteks chiperteks plainteks semula


enkripsi dekripsi

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. Enkripsi dan dekripsi data umumnya lebih lambat daripada sistem simetri, karena enkripsi
dan dekripsi melibatkan operasi perpangkatan yang besar.

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.

Pihak tak dikenal

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

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 : (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

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) 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.

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 : (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

• 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 (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.

• φ (r) adalah fungsi yang menentukan berapa banyak dari bilangan-


bilangan 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
φ (r)
am ≡ 1m (mod r)
atau
φ (r)
am ≡ 1 (mod r) (2)
• Bila a diganti dengan X, maka persamaan (2) menjadi
φ (r)
Xm ≡ 1 (mod r) (3)
• Berdasarkan sifat ac ≡ bc (mod r), maka bila persamaan (3) dikali dengan X menjadi:
φ (r) + 1
Xm ≡ X (mod r) (4)
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 (6)
• Sulihkan (6) ke dalam persamaan (4) menjadi:
⋅ PK
X SK ≡ X (mod r) (7)
Persamaan (7) dapat ditulis kembali menjadi
(X PK)SK ≡ X (mod r) (8)
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 (9)
DSK(Y) = X ≡ Y SK
mod r (10)
• 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
PK PK

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).

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

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.

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. PK dan r dapat dipublikasikan ke
umum.
Selanjutnya akan dihitung kunci dekripsi SK seperti yang dituliskan pada langkah instruksi 5 dengan
menggunakan persamaan (12),
1 + ( m × 3220 )
SK =
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-ke-
satu).

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 kawan-
kawan, 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. 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)

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. 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

M e ssa g e M essa g e M e ssa g e M e ssa g e

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

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) (6)
• 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).

• 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

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 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

512 512 512 512

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.

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 bit-
bit 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.
2. Penambahan Nilai Panjang Pesan Semula
• 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.
3. Inisialisai Penyangga MD
• 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.
Y q

M D q

512

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

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

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

+ 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 32-
bit. Masing-masing fungsi dapat dilihat pada Tabel 9.

Tabel 9. Fungsi-fungsi dasar MD5

Nama Notasi g(a, b, c, d)


fF F(b, c, d) (b ∧ c) ∨ (~b ∧ d)
fG G(b, c, d) (b ∧ d) ∨ (c ∧ ~d)
fH H(b, c, d) b⊕ c⊕ d
fI I(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[17] = F61E2562 T[33] = FFFA3942 T[49] = F4292244


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

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. [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)

dapat dilihat pada Tabel 13.

Tabel 13. Rincian operasi pada fungsi 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]

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. [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]

• 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)))) (9)

MD = MDL – 1 (10)

yang dalam hal ini,


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 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.

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 satu-
arah. 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 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

512 512 512 512

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

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 bit-
bit 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.
2. Penambahan Nilai Panjang Pesan Semula
• 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.
3. Inisialisai Penyangga MD
• 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.
• 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 Kt = 5A827999
Putaran 20 ≤ t ≤ 39 Kt = 6ED9EBA1
Putaran 40 ≤ t ≤ 59 Kt = 8F1BBCDC
Putaran 60 ≤ t ≤ 79 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 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

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 d i-1 e i-1

ft +

CLS 5 +

W t
+
CLS 30

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 = 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

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 ft(b, c, d)
0 .. 19 (b ∧ c) ∨ (~b ∧ d)
20 .. 39 b⊕ c⊕ d
40 .. 59 (b ∧ c) ∨ (b ∧ d) ∨ (c ∧ d)
60 .. 79 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 dua pemangkatnya sampai
berukuran kecil. Misalnya,
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 5 6 7 8
b[i] 1 0 0 0 0 0 0 1
H 2 4 16 24 25 16 24 21
∑× 2 1 1 1 1 1 1 2
Ket: ∑ × menyatakan jumlah operasi perkalian

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) 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. }

(a) Bangkitkan bilangan acak a yang lebih kecil dari p.


(b) Nyatakan j = 0 dan hitung z = am mod p.
(c) Jika z = 1 atau z = p – 1, maka p lolos dari pengujian dan mungkin prima.
(d) Jika z > 0 dan z = 1, maka p bukan prima.
(e) 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.
(f) 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 3 5 7 11 13 17 19 23 29
31 41 43 47 53 59 61 67 71 73
79 83 89 97 101 103 107 109 113 127
131 139 149 151 157 163 167 173 179 181
191 193 199 211 223 227 229 233 239 241
251

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 #10 #13
Nilai s #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 : 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. Protokol Komunikasi dengan Sistem Kriptografi Simetri.


Protokol 1:

(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).

• 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) Badu mendekripsi pesan dari Anto dengan menggunakan kunci rahasianya (SK)
untuk mendapatkan kembali kunci simetri K,
DSK(EPK(K)) = K
(4) 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.
3. 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.
- 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 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.

(3) Badu mengirimkan sidik digitalnya kepada Anto.

(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).

4. 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 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

• 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) Anto mengambil kunci publik Badu dari basisdata.


(2) Anto membangkitkan session key K, mengenkripsikannya dengan kunci publik (PK)
Badu, dan mengirimkannya ke Badu,
EPK(K)
(3) Badu mendekripsi pesan dari Anto dengan menggunakan kunci rahasianya (SK) untuk
mendapatkan kembali session key K,
DSK(EPK(K)) = K
(4) 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) Anto mengambil kunci publik Badu dari basisdata.


(3) 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) 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),

EPK-B(K), EPK-C(K), EPK-D(K)

(4) Anto mengirim pesan terenkripsi bersama-sama dengan kunci terbenkripsi masing-
masing 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.


Dalam hal ini, server memforwardkan pesan terenkripsi dan kunci terenkripsi dari Anto
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.

• Varian dari algoritma Diffie-Hellman dikemukakan oleh Hughes sebagai berikut:


Protokol 14:

(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

(3) Anto mengirim hasil perhitungan berikut kepada Badu

X = Yx mod n

(4) Badu menghitung

z = y-1 (balikan y dalam modulo 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.

• 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) Anto mengirim sandi-lewatnya ke host.


(2) Host mengkompresi sandi-lewat dengan fungsi hash satu-arah.
(3) 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) Host mengirimi Anto sebuah string acak.

(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

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.

Kriptografi dalam Kehidupan Sehari-hari


1. 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-entry-
kan 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 4-
angka. Untuk mengatasi masalah ini, maka kebanyakan ATM hanya membolehkan peng-
entry-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.

3. 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
(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.
4. 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.