Anda di halaman 1dari 55

Algoritma Kriptografi modern

Pendahuluan
 Kriptografi modern menggunakan gagasan dasar yang
sama seperti kriptografi klasik (permutasi dan transposisi)
tetapi penekanannya berbeda.

 Pada kriptografi klasik, kriptografer menggunakan


algoritma yang sederhana, yang memungkinkan cipherteks
dapat dipecahkan dengan mudah (melalui penggunaan
statistik, terkaan, intuisi, dan sebagainya).
Pendahuluan
 Algoritma kriptografi modern dibuat sedemikian
kompleks sedemikian sehingga kriptanalis sangat sulit
memecahkan cipherteks tanpa mengetahui kunci.

 Algoritma kriptografi modern umumnya beroperasi dalam


mode bit ketimbang mode karakter (seperti yang
dilakukan pada cipher substitusi atau cipher transposisi dari
algoritma kriptografi klasik).
Pendahuluan
 Operasi dalam mode bit berarti semua data dan informasi
(baik kunci, plainteks, maupun cipherteks) dinyatakan
dalam rangkaian (string) bit biner, 0 dan 1. Algoritma
enkripsi dan dekripsi memproses semua data dan
informasi dalam bentuk rangkaian bit. Rangkaian bit yang
menyatakan plainteks dienkripsi menjadi cipherteks dalam
bentuk rangkaian bit, demikian sebaliknya.

 Perkembangan algoritma kriptografi modern berbasis bit


didorong oleh penggunaan komputer digital yang
merepresentasikan data dalam bentuk biner.
Diagram blok kriptografi modern
Rangkaian Bit
 Rangkaian bit yang dipecah menjadi blok-blok bit dapat
ditulis dalam sejumlah cara bergantung pada panjang
blok.
Rangkaian Bit
 Bila panjang rangkaian bit tidak habis dibagi dengan ukuran
blok yang ditetapkan, maka blok yang terakhir ditambah
dengan bit-bit semu yang disebut padding bits.
Misalnya rangkaian bit di atas dibagi menjadi blok 5-bit
menjadi

10011 10101 00010

Blok yang terakhir telah ditambahkan 3 bit 0 di bagian


awal (dicetak tebal) agar ukurannya menjadi 5 bit. Padding
bits dapat mengakibatkan ukuran plainteks hasil dekripsi
lebih besar daripada ukuran plainteks semula.
Rangkaian Bit
 Cara lain untuk menyatakan rangkaian bit adalah dengan
notasi heksadesimal (HEX). Rangkaian bit dibagi menjadi
blok yang berukuran 4 bit dengan representasi dalam HEX
adalah:
Rangkaian Bit
 Misalnya, plainteks 100111010110 dibagi menjadi blok bit
yang panjangnya 4 menjadi

1001 1101 0110

yang dalam notasi HEX adalah

9D6
Operator XOR
 Operator biner yang sering digunakan dalam cipher yang
yang beroperasi dalam mode bit adalah XOR atau
exclusive-or.

 Notasi matematis untuk operator XOR adalah  (dalam


Bahasa C, operator XOR dilambangkan dengan ^).
Operator XOR
 Operator XOR diperasikan pada dua bit dengan aturan sebagai berikut:

00=0
01=1
10=1
11=0

Perhatikan bahwa operator XOR identik dengan penjumlahan modulo 2:

0 + 0 (mod 2) = 0
0 + 1 (mod 2) = 1
1 + 0 (mod 2) = 1
1 + 1 (mod 2) = 0
Operator XOR
Operator XOR
Operator XOR
 Algoritma enkripsi XOR sederhana pada prinsipnya sama
seperti Vigenere cipher dengan penggunaan kunci yang
berulang secara periodik. Setiap bit plainteks di-XOR-kan
dengan setiap bit kunci.
Operator XOR
 Program komersil yang berbasis DOS atau Macintosh
menggunakan algoritma XOR sederhana ini.

 Sayangnya, algoritma XOR sederhana tidak aman karena


cipherteksnya mudah dipecahkan.
Operator XOR
 Cara memecahkannya adalah sebagai berikut (asumsi:
panjang kunci adalah sejumlah kecil byte):
1. Cari panjang kunci dengan prosedur counting
coincidence sbb: XOR-kan cipherteks terhadap dirinya
sendiri setelah digeser sejumlah byte, dan hitung jumlah
byte yang sama. Jika pergeseran itu kelipatan dari
panjang kunci (yang tidak diketahui), maka 6% dari byte
akan sama. Jika tidak, maka 0.4% akan sama. Angka
persentase ini disebut index of coincidence. Pergeseran
terkecil mengindikasikan panjang kunci yang dicari.
Operator XOR
2. Geser cipherteks sejauh panjang kunci dan XOR-kan
dengan dirinya sendiri. Operasi ini menghasilkan
plainteks yang ter-XOR dengan plainteks yang digeser
sejauh panjang kunci tersebut.
Kategori Algoritma (cipher) Berbasis
Bit
1. Cipher Aliran (Stream Cipher)
- beroperasi pada bit tunggal
- enkripsi/dekripsi bit per bit

2. Cipher Blok (Block Cipher)


- beroperasi pada blok bit
(contoh: 64-bit/blok = 8 karakter/blok)
- enkripsi/dekripsi blok per blok
Cipher Aliran
 Enkripsikan plainteks menjadi chiperteks bit per bit (1
bit setiap kali transformasi).

 Diperkenalkan oleh Vernam melalui algoritmanya,


Vernam Cipher.

 Vernam cipher diadopsi dari one-time pad cipher, yang


dalam hal ini karakter diganti dengan bit (0 atau 1).
 Enkripsi pada Vernam Cipher:
ci = (pi + ki) mod 2 = pi  ki
pi : bit plainteks
ki : bit kunci
ci : bit cipherteks

 Dekripsi pada Vernam Cipher:


pi = (ci + ki) mod 2 = ci  ki

 Perhatikan bahwa
ci  ki = (pi  ki)  ki
= pi  (ki  ki)
= pi  0 = pi
Keystream Keystream
Generator Generator

Keystream ki Keystream ki

ci
pi   pi
Plainteks Enkripsi Cipherteks Dekripsi Plainteks

Gambar 9.1 Konsep cipher aliran


 Bit-bit kunci untuk enkripsi/dekripsi disebut keystream

 Keystream dibangkitkan oleh keystream generator.

 Keystream di-XOR-kan dengan bit-bit plainteks, p1, p2,


…, menghasilkan aliran bit-bit cipherteks:
ci = pi  ki

 Di sisi penerima dibangkitkan keystream yang sama


untuk mendekripsi aliran bit-bit cipherteks:
pi = ci  ki
 Contoh:
Plainteks: 1100101
Keystream: 1000110
Cipherteks: 0100011

 Keamanan sistem cipher aliran bergantung seluruhnya pada


keystream generator.

 Tinjau 3 kasus yang dihasilkan oleh keystream generator:


1. Keystream seluruhnya 0
2. Keystream berulang secara perodik
3. Keystream benar-benar acak
 Kasus 1: Jika pembangkit mengeluarkan aliran-bit-kunci yang
seluruhnya nol, maka cipherteks = plainteks,
ci = pi  0 = pi
dan proses enkripsi menjadi tak-berarti

 Kasus 2: Jika pembangkit mengeluarkan kesytream yang ebrulang


secara periodik, maka algoritma enkripsinya = algoritma enkripsi
dengan XOR sederhana yang memiliki tingkat keamanan yang tidak
berarti.

 Kasus 3: Jika pembangkit mengeluarkan keystream benar-benar acak


(truly random), maka algoritma enkripsinya = one-time pad dengan
tingkat keamanan yang sempurna.
Pada kasus ini, panjang keystream = panjang plainteks, dan kita
mendapatkan cipher aliran sebagai unbreakable cipher.
 Tingkat keamanan cipher aliran terletak antara algoritma
XOR sederhana dengan one-time pad.

 Semakin acak keluaran yang dihasilkan oleh pembangkit


aliran-bit-kunci, semakin sulit kriptanalis memecahkan
cipherteks.
Keystream Generator
 Keystream generator diimplementasikan sebagai
prosedur yang sama di sisi pengirim dan penerima
pesan.

 Keystream generator dapat membangkitkan keystream


berbasis bit per bit atau dalam bentuk blok-blok bit.

 Jika keystream berbentuk blok-blok bit, cipher blok dapat


digunakan untuk untuk memperoleh cipher aliran.
 Prosedur menerima masukan sebuah kunci U. Keluaran
dari prosedur merupakan fungsi dari U (lihat Gambar
9.2).

 Pengirim dan penerima harus memiliki kunci U yang


sama. Kunci U ini harus dijaga kerahasiaanya.

 Pembangkit harus menghasilkan bit-bit kunci yang kuat


secara kriptografi.
U Keystream U Keystream
Generator Generator

Keystream ki Keystream ki

ci
pi   pi
Plainteks Enkripsi Cipherteks Dekripsi Plainteks

Gambar 9.2 Cipher aliran dengan pembangkit aliran-bit-kunci


yang bergantung pada kunci U.
 Contoh: U = 1111
(U adalah kunci empat-bit yang dipilih sembarang, kecuali
0000)

Cara sederhana memperoleh keystream: XOR-kan bit


pertama dengan bit terakhir dari empat bit
sebelumnya:

111101011001000

dan akan berulang setiap 15 bit.


 Secara umum, jika panjang kunci U adalah n bit, maka bit-
bit kunci tidak akan berulang sampai 2n – 1 bit.

 Karena U konstan, maka keystream yang dihasilkan pada


setiap lelaran tidak berubah jika bergantung hanya pada
U.

 Ini berarti pembangkit aliran-bit-kunci tidak boleh mulai


dengan kondisi awal yang sama supaya tidak
menghasilkan kembali keystream yang sama pada setiap
lelaran.
 Untuk mengatasinya, pembangkit menggunakan umpan
(seed) agar diperoleh kondisi awal yang berbeda pada
setiap lelaran (lihat Gambar 9.3).

 Umpan disimbolkan dengan Z atau IV (Initialization Vector)


Z Z

U Keystream U Keystream
Generator Generator

Keystream ki Keystream ki

ci
pi   pi
Plainteks Enkripsi Cipherteks Dekripsi Plainteks

Gambar 9.3 Cipher aliran dengan pembangkit bit-aliran-


kunci yang bergantung pada kunci U dan umpan Z.
 Jadi, bit-bit kunci K dinyatakan sebagai hasil dari fungsi g
dengan parameter kunci U dan masukan umpan Z:

K = gU(Z)

Enkripsi dan dekripsi didefinisikan sebagai:

C = P  K = P  gU(Z)
P = C  K = C  gU(Z)
 Nilai Z yang berbeda-beda pada setiap lelaran
menghasilkan bit-bit kunci yang berbeda pula.

 Karena bit-bit kunci hanya bergantung pada Z dan U,


maka bit-bit kunci ini tidak terpengaruh oleh kesalahan
transmisi di dalam cipherteks.

 Jadi, kesalahan 1-bit pada transmisi cipherteks hanya


menghasilkan kesalahan 1-bit pada plainteks hasil
dekripsi.
Serangan pada Cipher Aliran
1. Known-plaintext attack
Kriptanalis mengetahui potongan P dan C yang
berkoresponden.
Hasil: K untuk potongan P tersebut, karena
P  C = P  (P  K)
= (P  P)  K
=0K
=K
Contoh 9.3:
P 01100101 (karakter ‘e’)
K 00110101  (karakter ‘5’)

C 01010000 (karakter ‘P’)


P 01100101  (karakter ‘e’)

K 00110101 (karakter ‘5’)


2. Ciphertext-only attack
Terjadi jika keystream yang sama digunakan dua kali terhadap
potongan plainteks yang berbeda (keystream reuse attack)

Contoh: Kriptanalis memiliki dua potongan cipherteks berbeda


(C1 dan C2) yang dienkripsi dengan bit-bit kunci yang sama.

XOR-kan kedua cipherteks tersebut:


C1  C2 = (P1  K )  (P2  K)
= (P1  P2 )  (K  K)
= (P1  P2 )  0
= (P1  P2 )
 Jika P1 atau P2 diketahui atau dapat diterka, maka XOR-kan
salah satunya dengan cipherteksnya untuk memperoleh K
yang berkoresponden:

P1  C1 = P1  (P1  K) = K

P2 dapat diungkap dengan kunci K ini.


C2  K = P2
 Jika P1 atau P2 tidak diketahui, dua buah plainteks yang
ter-XOR satu sama lain ini dapat diketahui dengan
menggunakan nilai statistik dari pesan.

 Misalnya dalam teks Bahasa Inggris, dua buah spasi ter-


XOR, atau satu spasi dengan huruf ‘e’ yang paling sering
muncul, dsb.

 Kriptanalis cukup cerdas untuk mendeduksi kedua


plainteks tersebut.
3. Flip-bit attack
Tujuan: mengubah bit cipherteks tertentu sehingga hasil
dekripsinya berubah.

Pengubahan dilakukan dengan membalikkan (flip) bit


tertentu (0 menjadi 1, atau 1 menjadi 0).
Contoh 9.5:

P : QT-TRNSFR US $00010,00 FRM ACCNT 123-67 TO


C: uhtr07hjLmkyR3j7Ukdhj38lkkldkYtr#)oknTkRgh
00101101
 Flip low-bit
00101100

C: uhtr07hjLmkyR3j7Tkdhj38lkkldkYtr#)oknTkRgh
P : QT-TRNSFR US $10010,00 FRM ACCNT 123-67 TO

Pengubahan 1 bit U dari cipherteks sehingga menjadi T.


Hasil dekripsi: $10,00 menjadi $ 10010,00
 Pengubah pesan tidak perlu mengetahui kunci, ia
hanya perlu mengetahui posisi pesan yang diminati
saja.

 Serangan semacam ini memanfaatkan karakteristik


cipher aliran yang sudah disebutkan di atas, bahwa
kesalahan 1-bit pada cipherteks hanya menghasilkan
kesalahan 1-bit pada plainteks hasil dekripsi.
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. Mengenkripsikan suara pada jaringan telepon mobile


GSM.

 Alasan: 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.
Cipher aliran – RC4 -
Pendahuluan
 Chiper aliran mengenkripsikan plainteks menjadi
chiperteks bit per bit (1 bit setiap kali transformasi).
Cipher Aliran RC4

 stream cipher symmetric key


 Dibuat oleh Ron Rivest dari Laboratorium RSA.

 RC4 memiliki panjang kunci 256 byte (2048 bit).
ALGORITHM
Langkah-langkah algoritma RC4 adalah sebagai berikut
:
1. Inisialisasi S-Box pertama, S[0], S[1], … ,S[255],
dengan bilangan 0 sampai 255
2. Isi secara berurutan S[0]=0, S[1]=1, … , S[255]=255
3. Inisialisasi array lain (S-Box) lain misalnya dengan
array K dengan panjang 256.
4. Isi array K dengan kunci yang diulangi sampai
seluruh array K[0], K[1], … , K[255] terisi
seluruhnya.
5. Lakukan pengacakan S-Box
6. Buat pseudo random byte.
ALGORITHM
 misalkan : Digunakan 4 bytes state, and 2 bits key
 Inisialisasi S-Box dengan S[0]=0, S[1]=1, S[2]=2, S[3]=3, sehingga
S=[0,1,2,3]
 Inisialisasi 4 byte array kunci misalkan 1 dan 7 → K=[1,7,1,7]

 Populasi S-Box :
• S=[S0,S1,S2,S3] = [0,1,2,3] dan K= [K0,K1,K2,K3] = [2,5,2,5]
Iterasi 1 (i=0, j=0)
Because j = (j + S[i] + K[i]) mod 4 = (0 + S[0] + K[0] mod 4
j = (0+0+2) mod 4
j=2

Then swap S[i] dan S[j] → swap S[0] dengan S[2] → [0,1,2,3]
new array → S = [2,1,0,3]

i=i+1 = 0+1 =1
 S=[S0,S1,S2,S3] = [2,1,0,3] dan K= [K0,K1,K2,K3] =
[2,5,2,5]
iterasi 2 (i=1 dan j = 2)
Because j = (j + S[i] + K[i]) mod 4 = (j + S[1] + K[1]) mod 4
j = (2 + 1 + 5) mod 4
j=0

Then swap S[i] dan S[j] → swap S[1] dan S[0]


swap [2,1,0,3]
new array : S = [1,2,0,3]

i = i + 1 = 1+1 =2
 S=[S0,S1,S2,S3] = [1,2,0,3] dan K= [K0,K1,K2,K3] =
[2,5,2,5]
iterasi 3 (i=2 dan j = 0)
Because j = (j + S[i] + K[i]) mod 4
j = (0 + 0 + 2) mod 4
j=2

Then swap S[i] dan S[j] → swap S[2] dan S[2]


swap [1,2,0,3]
new array : S = [1,2,0,3]

i = i + 1 = 2+1 =3
 S=[S0,S1,S2,S3] = [1,2,0,3] dan K= [K0,K1,K2,K3] =
[2,5,2,5]
iterasi 4 (i=3 dan j = 2)
Because j = (j + S[i] + K[i]) mod 4
j = (2 + 3 + 5) mod 4
j=2

Then swap S[i] dan S[j] → swap S[3] dan S[2]


swap [1,2,0,3]
new array : S = [1,2,3,0]

i=i+1 =
 Berikutnya adalah proses enkripsi yaitu meng XOR kan pseudorandom byte dengan
plainteks misalnya “HI”.
 Oleh karena plainteks terdiri dari 2 karakter maka iterasi pun terjadi 2 kali.

 Iterasi 1 : S[] = [S0, S1, S2, S3] = [1,2,3,0]


i=0 dan j=0
i = (i+1) mod 4 = 1 mod 4 = 1
j = (j + S[i]) mod 4
= (0+2) mod 4 = 2
swap S[i] dan S[j] = swap S[1] dan S[2] → [1,2,3,0]
new array S = [1,3,2,0]
t = (S[i] + S[j]) mod 4
= (3+2) mod 4 = 1
pseudo = S[t] = S[1] = 3
XOR kan pseudo dengan “H” = 00000011 XOR 01001000
= 01001011
 Iterasi 2 : S[] = [S0, S1, S2, S3] = [1,3,2,0]
i=1 dan j=2
i = (1+1) mod 4 = 2 mod 4 = 2
j = (j + S[i]) mod 4
= (2+2) mod 4 = 0
swap S[i] dan S[j] → swap S[2] dan S[0]
new array S = [2,3,1,0]
t = (S[i] + S[j]) mod 4
= (1+2) mod 4 = 3
pseudo = S[t] = S[3] = 0
XOR kan pseudo dengan “I” = 00000000 XOR 01001001
= 01001001

❑ Result : Plaintext → 0100 1000 0100 1001


Ciphertext → 0100 1011 0100 1001
Serangan Terhadap Cipher Aliran
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

54
2. Ciphertext-only attack
Misalkan kriptanalis memiliki dua potongan cipherteks berbeda (C1
dan C2) yang dienkripsi dengan bit-aliran-kunci yang sama. Ia meng-
XOR-kan kedua cipherteks tersebut dan memperoleh dua buah
plainteks yang ter-XOR satu sama lain:

C1  C2 = (P1  K )  (P2  K)
= (P1  P2 )  (K  K)
= (P1  P2 )  0
= (P1  P2 )

P1 dan P2 dapat diperoleh dengan mudah. Selanjutnya, XOR-kan salah


satu plainteks dengan cipherteksnya untuk memperoleh bit-aliran-
kunci K yang berkoresponden:
P1  C1 = P1  (P1  K) = K

55

Anda mungkin juga menyukai