algoritma kriptografi modern

97
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: n C 2 = n . (n-1) -------- 2 dengan n menyatakan banyaknya pengguna. 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 Badu Anto jalur tak aman jalur aman c e P P e Pihak tak dikenal sumber kunci enkripsi Ee(P) = c sumber plaintex t dekripsi Dd(c) = P tujuan

Upload: athye

Post on 18-Jun-2015

2.245 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: Algoritma Kriptografi Modern

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.

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.

BaduAnto

jalur tak aman

jalur aman

c

e

PP

e

Pihak tak dikenal

sumber kunci

enkripsi Ee(P) = c

sumber plaintext

dekripsi Dd(c) = P

tujuan

Page 2: Algoritma Kriptografi Modern

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

Page 3: Algoritma Kriptografi Modern

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.

Page 4: Algoritma Kriptografi Modern

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.

Page 5: Algoritma Kriptografi Modern

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

Page 6: Algoritma Kriptografi Modern

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

Page 7: Algoritma Kriptografi Modern

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.

Page 8: Algoritma Kriptografi Modern

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

Page 9: Algoritma Kriptografi Modern

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)

Page 10: Algoritma Kriptografi Modern

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

Page 11: Algoritma Kriptografi Modern

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)

Page 12: Algoritma Kriptografi Modern

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.

Page 13: Algoritma Kriptografi Modern

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

Page 14: Algoritma Kriptografi Modern

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

Page 15: Algoritma Kriptografi Modern

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

Page 16: Algoritma Kriptografi Modern

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

Page 17: Algoritma Kriptografi Modern

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

Page 18: Algoritma Kriptografi Modern

10 15 4 2 7 12 9 5 6 1 13 14 0 11 3 89 14 15 5 2 8 12 3 7 0 4 10 1 13 11 64 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

Page 19: Algoritma Kriptografi Modern

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

Page 20: Algoritma Kriptografi Modern

Gambar 35. Algoritma Enkripsi dengan DES

Catatlah bahwa satu putaran DES merupakan model jaringan Feistel (lihat Gambar 36).

Gambar 36. Jaringan Feistel untuk satu putaran DES

Page 21: Algoritma Kriptografi Modern

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 462 54 46 38 30 22 14 6 64 56 48 40 32 24 16 857 49 41 33 25 17 9 1 59 51 43 35 27 19 11 361 53 45 37 29 21 13 5 63 55 47 39 31 23 15 7Cara 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 1810 2 59 51 43 35 27 19 11 3 60 52 44 3663 55 47 39 31 23 15 7 62 54 46 38 30 2214 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:

Page 22: Algoritma Kriptografi Modern

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 1023 19 12 4 26 8 16 7 27 20 13 241 52 31 37 47 55 30 40 51 45 33 4844 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.

Page 23: Algoritma Kriptografi Modern

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.

Gambar 38. Rincian komputasi fungsi f

Page 24: Algoritma Kriptografi Modern

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 98 9 10 11 12 13 12 13 14 15 16 1716 17 18 19 20 21 20 21 22 23 24 2524 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 70 15 7 4 14 2 13 1 10 6 12 11 9 5 3 84 1 14 8 13 6 2 11 15 12 9 7 3 10 5 015 12 8 2 4 9 1 7 5 11 3 14 10 0 6 13S2:

15 1 8 14 6 11 3 4 9 7 2 13 12 0 5 103 13 4 7 15 2 8 14 12 0 1 10 6 9 11 50 14 7 11 10 4 13 1 5 8 12 6 9 3 2 1513 8 10 1 3 15 4 2 11 6 7 12 0 5 14 9S3:

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 1513 8 11 5 6 15 0 3 4 7 2 12 1 10 14 910 6 9 0 12 11 7 13 15 1 3 14 5 2 8 43 15 0 6 10 1 13 8 9 4 5 11 12 7 2 14S5:

2 12 4 1 7 10 11 6 8 5 3 15 13 0 14 914 11 2 12 4 7 13 1 5 0 15 10 3 9 8 164 2 1 11 10 13 7 8 15 9 12 5 6 3 0 1411 8 12 7 1 14 2 13 6 15 0 9 10 4 5 3S6:

12 1 10 15 9 2 6 8 0 13 3 4 14 7 5 1110 15 4 2 7 12 9 5 6 1 13 14 0 11 3 89 14 15 5 2 8 12 3 7 0 4 10 1 13 11 64 3 2 12 9 5 15 10 11 14 1 7 6 0 8 13S7:

Page 25: Algoritma Kriptografi Modern

4 11 2 14 15 0 8 13 3 12 9 7 5 10 6 113 0 11 7 4 9 1 10 14 3 5 12 2 15 8 61 4 11 13 12 3 7 14 10 15 6 8 0 5 9 26 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 71 15 13 8 10 3 7 4 12 5 6 11 0 14 9 27 11 4 1 9 12 14 2 0 6 10 13 15 3 5 82 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 102 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))

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 3138 6 46 14 54 22 62 30 37 5 45 13 53 21 61 2936 4 44 12 52 20 60 28 35 3 43 11 51 19 59 2734 2 42 10 50 18 58 26 33 1 41 9 49 17 57 25

Page 26: Algoritma Kriptografi Modern

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

Page 27: Algoritma Kriptografi Modern

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

Page 28: Algoritma Kriptografi Modern

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

Page 29: Algoritma Kriptografi Modern

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

Page 30: Algoritma Kriptografi Modern

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.

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.

BaduAnto

jalur tak aman

jalur tak aman

c

e

pp

d

Pihak tak dikenal

tempat kunci

enkripsi Ee(m) = c

sumber plaintext

dekripsi Dd(c) = m

tujuan

Page 31: Algoritma Kriptografi Modern

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.

Page 32: Algoritma Kriptografi Modern

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.

Page 33: Algoritma Kriptografi Modern

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.

Page 34: Algoritma Kriptografi Modern

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

Page 35: Algoritma Kriptografi Modern

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

a m(r) 1m (mod r)

atau

am(r) 1 (mod r) (2)

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

Xm(r) 1 (mod r) (3)

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

Xm(r) + 1 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:

X SK PK 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.

Page 36: Algoritma Kriptografi Modern

Berdasarkan persamaan (8), maka enkripsi dan dekripsi dirumuskan sebagai berikut:

EPK(X) = Y XPK mod r (9)

DSK(Y) = X YSK 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 XPK mod r (X + mr)PK mod r untuk sembarang bilangan bulat m, maka tiap

plainteks X, X + r, X + 2r, …, menghasilkan cipherteks yang sama. Dengan kata lain,

transformasinya dari banyak ke satu. Agar transformasinya satu-ke-satu, maka X harus

dibatasi dalam himpunan {0, 1, 2, …, r – 1} sehingga enkripsi dan dekripsi tetap benar seperti

pada persamaan (8) dan (9).

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

(12)

Akan terdapat bilangan bulat m yang menyebabkan memberikan bilangan bulat SK.

Catatan: PK dan SK dapat dipertukarkan urutan pembangkitannya. Jika langkah 4 diganti

dengan “Pilih kunci rahasia, SK, yang …”, maka pada langkah 5 kita menghitung kunci publik

dengan rumus yang sama.

Contoh 1. Misalkan p = 47 dan q = 71 (keduanya prima). Selanjutnya, hitung nilai

r = p q = 3337

dan

(r)= (p – 1)(q – 1) = 3220.

Pilih kunci publik SK = 79, karena 79 relatif prima dengan 3220. PK dan r dapat dipublikasikan ke

umum.

Selanjutnya akan dihitung kunci dekripsi SK seperti yang dituliskan pada langkah instruksi 5 dengan

menggunakan persamaan (12),

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.

Page 37: Algoritma Kriptografi Modern

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

Page 38: Algoritma Kriptografi Modern

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.

Page 39: Algoritma Kriptografi Modern

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.

Page 40: Algoritma Kriptografi Modern

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:

Page 41: Algoritma Kriptografi Modern

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

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:

Page 42: Algoritma Kriptografi Modern

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.

Page 43: Algoritma Kriptografi Modern

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

Page 44: Algoritma Kriptografi Modern

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.

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.

Page 45: Algoritma Kriptografi Modern

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.

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 dfI I(b, c, d) c (b ~ d)

Page 46: Algoritma Kriptografi Modern

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

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

radian.

Tabel 10. Nilai T[i]

T[1] = D76AA478T[2] = E8C7B756T[3] = 242070DBT[4] = C1BDCEEET[5] = F57C0FAFT[6] = 4787C62AT[7] = A8304613T[8] = FD469501T[9] = 698098D8T[10] = 8B44F7AFT[11] = FFFF5BB1T[12] = 895CD7BET[13] = 6B901122T[14] = FD987193T[15] = A679438ET[16] = 49B40821

T[17] = F61E2562T[18] = C040B340T[19] = 265E5A51T[20] = E9B6C7AAT[21] = D62F105DT[22] = 02441453T[23] = D8A1E681T[24] = E7D3FBCBT[25] = 21E1CDE6T[26] = C33707D6T[27] = F4D50D87T[28] = 455A14EDT[29] = A9E3E905T[30] = FCEFA3F8T[31] = 676F02D9T[32] = 8D2A4C8A

T[33] = FFFA3942T[34] = 8771F681T[35] = 69D96122T[36] = FDE5380CT[37] = A4BEEA44T[38] = 4BDECFA9T[39] = F6BB4B60T[40] = BEBFBC70T[41] = 289B7EC6T[42] = EAA127FAT[43] = D4EF3085T[44] = 04881D05T[45] = D9D4D039T[46] = E6DB99E5T[47] = 1FA27CF8T[48] = C4AC5665

T[49] = F4292244T[50] = 432AFF97T[51] = AB9423A7T[52] = FC93A039T[53] = 655B59C3T[54] = 8F0CCC92T[55] = FFEFF47DT[56] = 85845DD1T[57] = 6FA87E4FT[58] = FE2CE6E0T[59] = A3014314T[60] = 4E0811A1T[61] = F7537E82T[62] = BD3AF235T[63] = 2AD7D2BBT[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

2

3

4

5

6

7

8

9

[ABCD 0 7 1]

[DABC 1 12 2]

[CDAB 2 17 3]

[BCDA 3 22 4]

[ABCD 4 7 5]

[DABC 5 12 6]

[CDAB 6 17 7]

[BCDA 7 22 8]

[ABCD 8 7 9]

Page 47: Algoritma Kriptografi Modern

10

11

12

13

14

15

16

[DABC 9 12 10]

[CDAB 10 17 11]

[BCDA 11 22 12]

[ABCD 12 7 13]

[DABC 13 12 14]

[CDAB 14 17 15]

[BCDA 15 22 16]

Putaran 2: 16 kali operasi dasar dengan g(b, c, d) = G(b, c, d)

dapat dilihat pada Tabel 12.

Tabel 12. Rincian operasi pada fungsi G(b, c, d)

No. [abcd k s i ]

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

[ABCD 1 5 17]

[DABC 6 9 18]

[CDAB 11 14 19]

[BCDA 0 20 20]

[ABCD 5 5 21]

[DABC 10 9 22]

[CDAB 15 14 23]

[BCDA 4 20 24]

[ABCD 9 5 25]

[DABC 14 9 26]

[CDAB 3 14 27]

[BCDA 8 20 28]

[ABCD 13 5 29]

[DABC 2 9 30]

[CDAB 7 14 31]

[BCDA 12 20 32]

Putaran 3: 16 kali operasi dasar dengan g(b, c, d) = H(b, c, d)

dapat dilihat pada Tabel 13.

Tabel 13. Rincian operasi pada fungsi H(b, c, d)

No. [abcd k s i ]

1

2

3

4

5

6

[ABCD 5 4 33]

[DABC 8 11 34]

[CDAB 11 16 35]

[BCDA 14 23 36]

[ABCD 1 4 37]

[DABC 4 11 38]

Page 48: Algoritma Kriptografi Modern

7

8

9

10

11

12

13

14

15

16

[CDAB 7 16 39]

[BCDA 10 23 40]

[ABCD 13 4 41]

[DABC 0 11 42]

[CDAB 3 16 43]

[BCDA 6 23 44]

[ABCD 9 4 45]

[DABC 12 11 46]

[CDAB 15 16 47]

[BCDA 2 23 48]

Putaran 4: 16 kali operasi dasar dengan g(b, c, d) = I(b, c, d)

dapat dilihat pada Tabel 14.

Tabel 14. Rincian operasi pada fungsi I(b, c, d)

No. [abcd k s i ]

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

[ABCD 0 6 49]

[DABC 7 10 50]

[CDAB 14 15 51]

[BCDA 5 21 52]

[ABCD 12 6 53]

[DABC 3 10 54]

[CDAB 10 15 55]

[BCDA 1 21 56]

[ABCD 8 6 57]

[DABC 15 10 58]

[CDAB 6 15 59]

[BCDA 13 21 60]

[ABCD 4 6 61]

[DABC 11 10 62]

[CDAB 2 15 63]

[BCDA 9 21 64]

Setelah putaran keempat, a, b, c, dan d ditambahkan ke A, B, C, dan D, dan selanjutnya

algoritma memproses untuk blok data berikutnya (Yq+1). Keluaran akhir dari algoritma MD5

adalah hasil penyambungan bit-bit di A, B, C, dan D.

Dari uraian di atas, secara umum fungsi hash MD5 dapat ditulis dalam persamaan matematis

berikut:

MD0 = IV (8)

MDq + 1 = MDq + fI(Yq + fH(Yq + fG(YQ + fF(Yq + MDq)))) (9)

Page 49: Algoritma Kriptografi Modern

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.

Page 50: Algoritma Kriptografi Modern

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

Page 51: Algoritma Kriptografi Modern

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.

Page 52: Algoritma Kriptografi Modern

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.

Page 53: Algoritma Kriptografi Modern

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.

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.

Page 54: Algoritma Kriptografi Modern

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.

Page 55: Algoritma Kriptografi Modern

Tabel 15. Fungsi logika ft pada setiap putaran

Putaran ft(b, c, d)0 .. 19 (b c) (~b d)20 .. 39 b c d40 .. 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;

Page 56: Algoritma Kriptografi Modern

{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

Page 57: Algoritma Kriptografi Modern

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

Page 58: Algoritma Kriptografi Modern

{ 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 8b[i] 1 0 0 0 0 0 0 1H 2 4 16 24 25 16 24 21 2 1 1 1 1 1 1 2Ket: 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.

Page 59: Algoritma Kriptografi Modern

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.

Page 60: Algoritma Kriptografi Modern

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 2931 41 43 47 53 59 61 67 71 7379 83 89 97 101 103 107 109 113 127131 139 149 151 157 163 167 173 179 181191 193 199 211 223 227 229 233 239 241251

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

Page 61: Algoritma Kriptografi Modern

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

Page 62: Algoritma Kriptografi Modern

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:

Page 63: Algoritma Kriptografi Modern

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

Page 64: Algoritma Kriptografi Modern

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.

Page 65: Algoritma Kriptografi Modern

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

Page 66: Algoritma Kriptografi Modern

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

Page 67: Algoritma Kriptografi Modern

(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

Page 68: Algoritma Kriptografi Modern

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

Page 69: Algoritma Kriptografi Modern

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:

Page 70: Algoritma Kriptografi Modern

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.

Page 71: Algoritma Kriptografi Modern

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)

Page 72: Algoritma Kriptografi Modern

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

Page 73: Algoritma Kriptografi Modern

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.

Page 74: Algoritma Kriptografi Modern

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.