Upload
danganh
View
251
Download
0
Embed Size (px)
Citation preview
Makalah IF3058 Kriptografi – Sem. II Tahun 2010/2011
Perbandingan Keamanan
Algoritma Kriptografi Klasik Berlapis
dengan Algoritma Kriptografi Modern Sederhana
Bobby H. Suryanaga - 13508022
Program Studi Teknik Informatika
Sekolah Teknik Elektro dan Informatika
Institut Teknologi Bandung, Jl. Ganesha 10 Bandung 40132, Indonesia [email protected]
Abstraksi— Enkripsi teks secara umum dapat dilakukan
dengan menggunakan dua jenis algoritma, yaitu algoritma
kriptografi klasik yang melakukan enkripsi teks dengan
enkripsi tiap karakter, dan algoritma kriptografi modern
yang melakukan enkripsi pada bit-bit dari plaintext.
Algoritma kriptografi klasik tentu saja lebih sederhana
bila dibandingkan dengan algoritma kriptografi modern.
Namun, dengan adanya teknologi komputer, algoritma
enkripsi klasik dapat menjadi lebih sulit dipecahkan dengan
adanya penggantian karakter yang lebih luas dengan
menggunakan mode extended (ASCII).
Pada makalah ini akan dijelaskan mengenai beberapa
algoritma kriptografi klasik dan algoritma kriptografi
modern. Algoritma kriptografi klasik akan dilakukan secara
berlapis dan dengan teknik memodifikasi kunci yang
digunakan sehingga kunci tidak mudah ditebak.
Perbandingan dilakukan dengan berbagai jenis algoritma
kriptografi modern.
Kata kunci—algoritma kriptografi klasik dengan
modifikasi kunci, algoritma kriptografi modern sederhana,
perbandingan keamanan, statistik.
I. PENDAHULUAN
Pada saat ini, informasi dapat menyebar dengan begitu
cepat dan mudahnya dengan mendunianya teknologi
internet. Sering kali informasi pribadi seseorang, seperti
nomor telepon, alamat, gambar dan video pribadi,
diketahui dan didapatkan oleh orang lain dan digunakan
tidak semestinya, seperti untuk melakukan penipuan,
penyebaran informasi pribadi, dan lain-lain. Untuk itu
pengenkripsian data menjadi sangat penting untuk
melindungi data-data pribadi.
Enkripsi merupakan proses mengubah informasi
(sering disebut plaintext) menggunakan suatu algoritma
dengan suatu kunci tertentu untuk membuatnya tidak
dapat dibaca (ciphertext). Hanya orang yang mengetahui
kunci tersebut yang dapat mengembalikan (dekripsi) teks
yang tidak terbaca tersebut dengan sebuah algoritma ke
bentuk yang dapat terbaca lagi seperti semula.
Enkripsi telah lama digunakan militer dan pemerintah
untuk mengirim pesan dan berkomunikasi secara rahasia.
Enkripsi merakyat dengan berkembangnya komputer
sehingga diperlukan cara untuk melindungi data-data
yang terdapat dalam komputer dari orang lain.
Enkripsi menjadi bagian yang sangat penting dalam
transaksi jual beli dalam jaringan. Data-data yang
dikirimkan dalam transaksi dalam jaringan seperti nomor
kartu kredit harus dienkripsi untuk mencegah pencurian
data tersebut.
II. ALGORITMA KRIPTOGRAFI KLASIK
Algoritma kriptografi klasik pada dasarnya
mengimplementasikan substitusi, yaitu mengganti suatu
elemen pada plaintext menjadi elemen yang terdapat pada
ciphertext, dan transposisi, yaitu mengubah urutan
kemunculan elemen plaintext. Salah satu algoritma
enkripsi klasik yang ditemukan paling awal adalah Caesar
Cipher. Caesar Cipher menggunakan prinsip substitusi.
Pada Caesar Cipher, setiap karakter digantikan oleh 3
karakter sebelumnya pada abjad alphabet. Algoritma versi
umum dari Caesar Cipher adalah sebagai berikut:
C = E( k, p ) = (p + k) mod 26
C : karakter hasil enkripsi dengan representasi bilangan (a
= 0, b = 1, dst.)
p: karakter plaintext yang dienkripsi dengan representasi
bilangan
k: jumlah pergeseran yang digunakan
Algoritma dekripsinya adalah sebagai berikut:
p = D( k, C ) = (C - k) mod 26
Pengembangan algoritma kriptografi yang
menggunakan substitusi adalah monoalphabetic cipher,
yaitu penggantian tiap karakter dari plaintext
menggunakan kunci dengan urutan karakter yang random.
Algoritma ini memerlukan kunci sepanjang 26 karakter
pengganti a sampai z.
Algoritma substitusi lainnya contohnya cipher
substitusi homofonik, cipher abjad majemuk, cipher
substitusi poligram.
Pada cipher substitusi homofonik Setiap huruf
plainteks dipetakan ke dalam salah satu huruf cipherteks
yang mungkin. Fungsi ciphering memetakan satu-ke-
Makalah IF3058 Kriptografi – Sem. II Tahun 2010/2011
banyak (one-to-many). Tujuannya adalah untuk
menyembunyikan hubungan statistik antara plainteks
dengan cipherteks.[1]
Pada cipher abjad majemuk, setiap huruf menggunakan
kunci berbeda. Cipher abjad-majemuk dibuat dari
sejumlah cipher abjad-tunggal, masing-masing dengan
kunci yang berbeda. [1]
Pada cipher substitusi poligram, blok huruf plainteks
disubstitusi dengan blok cipherteks. Misalnya AS diganti
dengan RT, BY diganti dengan SL Jika unit huruf
plainteks/cipherteks panjangnya 2 huruf, maka ia disebut
digram (biigram), jika 3 huruf disebut ternari-gram, dst.
Tujuannya adalah distribusi kemunculan poligram
menjadi flat (datar), dan hal ini menyulitkan analisis
frekuensi.Contoh algoritma kriptografi cipher substitusi
poligram adalah playfair cipher.[1]
Dari semua algoritma kriptografi klasik tersebut, yang
akan dipakai dalam pembuatan algoritma kriptografi
klasik berlapis pada makalah ini adalah cipher abjad
majemuk dalam bentuk Vigenere Cipher dan cipher
transposisi.
Pada algoritma enkripsi Vigenere Cipher, ciphertext
dienkripsi menggunakan sebuah kunci berjenis string.
Setiap karakter pada plaintext dienkripsi berdasarkan
urutan karakter pada kunci. Bila kunci lebih pendek dari
plaintext, kunci akan diulang. Rumus penghitungan
karakter hasil ciphertext adalah sebagai berikut.
C = P + K mod 26
C: karakter pada ciphertext dalam representasi integer
P: karakter pada plaintext dalam representasi integer
K: karakter pada kunci dalam representasi integer
Dalam makalah ini Vigenere yang digunakan adalah
versi extended sehingga rumusnya menjadi
C = P + K mod 256
III. ALGORITMA KRIPROGRAFI MODERN
Perkembangan algoritma kriptografi modern didorong
oleh berkembangnya komputer digital. Algoritma
kriptografi modern beroperasi pada level bit (biner).
Kebanyakan algoritma kriptografi modern menggunakan
operasi XOR dalam melakukan enkripsinya karena pada
operasi XOR dapat diketahui kembali sumber bit yang
dioperasikan bila hasil operasi dan sebuah bit sumber
operasi (kunci) diketahui.
Enkripsi: C = P K
Dekripsi: P = C K
Secara umum, algoritma kriptografi berbasis bit dibagi
menjadi 2, cipher aliran (stream cipher) dan cipher blok
(block cipher). Pada cipher aliran, algoritma beroperasi
pada bit tunggal dan proses enkripsi dan dekripsi
dilakukan secara bit per bit. Pada cipher blok, algoritma
beroperasi pada blok bit dan proses enkripsi dan dekripsi
dilakukan blok per blok. Pada makalah ini, perbandingan
akan dilakukan dengan algoritma kriptografi modern
berjenis cipher block.
Algoritma kriptografi modern cipher block ada 4 mode,
yaitu: Electronic Code Book (ECB), Cipher Block
Chaining (CBC), Cipher Feedback (CFB), Output
Feedback (OFB).
Pada ECB, setiap blok plainteks Pi dienkripsi secara
individual dan independen menjadi blok cipherteks Ci .
[2]
Enkripsi: Ci = EK(Pi)
Dekripsi: Pi = DK(Ci)
Pada mode ECB, blok plainteks yang sama selalu
dienkripsi menjadi blok cipherteks yang sama[2].
Kelemahan pada ECB adalah setiap blok yang sama akan
menghasilkan ciphertext yang sama juga sehingga mudah
diserang secara statistik. Selain itu, pihak lawan juga
dapat mengelabui penerima pesan dengan memanipulasi
ciphertext.[2]
Pada mode ECB, setiap blok cipherteks bergantung
tidak hanya pada blok plainteksnya tetapi juga pada
seluruh blok plainteks sebelumnya, hasil enkripsi blok
sebelumnya di-umpan-balikkan ke dalam enkripsi blok
yang current.[2]
Kelemahan mode CBC adalah 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). [2]
Pada CFB, Data dienkripsikan dalam unit yang lebih
kecil daripada ukuran blok. Unit yang dienkripsikan dapat
berupa bit per bit (jadi seperti cipher aliran), 2 bit, 3-bit,
dan seterusnya.[2]
Mode OFB mirip dengan mode CFB, kecuali n-bit dari
hasil enkripsi terhadap antrian disalin menjadi elemen
posisi paling kanan di antrian. Dekripsi dilakukan sebagai
kebalikan dari proses enkripsi.[2]
IV. ALGORITMA KRIPTOGRAFI KLASIK BERLAPIS
DENGAN MODIFIKASI KUNCI
A. Enkripsi
Algoritma kriptografi klasik yang akan dipakai pada
pembuatan algoritma kriptografi klasik berlapis dengan
modifikasi kunci pada makalah ini adalah algoritma
vigenere cipher. Pemilihan algoritma Vigenere Cipher
karena memiliki kunci yang mudah diingat dan
pemodifikasian kunci dapat dilakukan dengan beragam.
Selain itu algoritma Vigenere Cipher juga tidak
membutuhkan kunci yang panjang, menghasilkan
ciphertext yang panjangnya sama dengan plaintext, dan
mudah diimplementasikan dalam mode extended
(ASCII).
Algoritma ini terdiri dari 3 tahap enkripsi. Tahap
pertama dan kedua mengaplikasikan algoritma cipher
substitusi dalam bentuk algoritma Vigenere Cipher.
Tahap ketiga mengaplikasikan cipher transposisi. Tahap
pertama merupakan enkripsi dengan algoritma Vigenere
Cipher biasa dalam mode extended dengan pengulangan
Makalah IF3058 Kriptografi – Sem. II Tahun 2010/2011
kunci.
Pada tahap kedua, dilakukan enkripsi dengan algoritma
Vigenere Cipher, tetapi kali ini dengan modifikasi kunci.
Ciphertext yang dihasilkan dari tahap pertama dipecah-
pecah menjadi blok-blok teks dengan panjang sama
dengan panjang kunci. Kemudian blok pertama dienkripsi
menggunakan algoritma Vigenere Cipher dengan kunci
semula. Namun, pada blok kedua, teks dienkripsi dengan
algoritma Vigenere Cipher menggunakan kunci yang
berasal dari hasil enkripsi blok pertama. Begitu juga
dengan blok ketiga yang dienkripsi menggunakan hasil
enkripsi dari blok kedua dan seterusnya.
Pada tahap ketiga dilakukan transposisi pada setiap
blok yang dihasilkan pada tahap kedua. Transposisi
dilakukan dengan menggeser karakter pada blok sebanyak
nilai integer dari ASCII pada kunci dimodulo dengan
panjang dari kunci tersebut ke arah kiri. Pada blok
terakhir, jumlah pergeseran mungkin lebih besar dari
panjang blok tersebut. Jika hal tersebut terjadi, pergeseran
yang dilakukan tidaklah sebanyak jumlah pergeseran
seperti pada blok lainnya, melainkan jumlah pergeseran
yang dilakukan sebanyak jumlah pergeseran pada blok
lain dimodulo dengan panjang dari blok tersebut.
Terakhir, ciphertext dapat dihasilkan dengan
menggabung semua karakter yang terdapat pada blok-
blok yang dihasilkan pada tahap ketiga.
Berikut ini adalah pseudo-code dari algoritma
kriptografi klasik berlapis dengan modifikasi kunci yang
digunakan.
function EncryptVigenere(array of byte
B, array of byte Key) array of byte
{menghasilkan ciphertext dari
plaintext B dengan kunci Key
menggunakan algoritma Vigenere Cipher
dengan pengulangan kunci,
Masukan: B, Key}
Deklarasi:
result: array of byte
i, temp:integer
Algoritma:
for i 0 to B.Length – 1 do
temp B[i] + (int)(Key[(i mod
K.Length)])
result[i] (byte)(temp mod 256)
endfor
result
function MainEncryptAlgorithm(array of
byte Plain, array of byte Key)array
of byte
{menghasilkan ciphertext dari
plaintext Plain dengan kunci Key
menggunakan algoritma kriptografi
klasik berlapis.
Masukan: Plain, Key}
Deklarasi:
s, temp, temp2: array of array of
byte
result: array of byte
i, j, k, N: integer
Algoritma:
s
ByteToListOfByte(EncryptVigenere(Plain
, Key),Key.Length)
for i 0 to s.Count - 1 do
if (i = 0)
temp[i] EncryptVigenere(s[i],
Key)
else
temp[i] EncryptVigenere(s[i],
temp[i-1])
endif
endfor
N 0
for i 0 to Key.Length – 1 do
N N + (int)(Key[i])
endfor
N N mod Key.Length
for i 0 to temp.Count – 1 do
temp2[i] transpose(N, temp[i])
endfor
k 0
for i 0 to temp2.Count – 1 do
for j 0 to temp2[i].Length – 1 do
result[k] temp2[i][j]
k k + 1
endfor
endfor
result
{NB: fungsi ByteToListOfByte dan
transpose disediakan pada lampiran
dalam bahasa C#.}
Berikut ini adalah diagram dari proses enkripsi.
Makalah IF3058 Kriptografi – Sem. II Tahun 2010/2011
Gambar 1. Diagram proses enkripsi
B. Dekripsi
Pendekripsian ciphertext yang dienkripsi menggunakan
algoritma kriptografi klasik berlapis dengan modifikasi
kunci pada poin A memiliki tahap yang serupa dengan
algoritma enkripsinya namun dalam urutan yang dibalik.
Pertama-tama ciphertext dikelompokkan menjadi blok-
blok dengan panjang sama dengan panjang kunci.
Kemudian dilakukan penghitungan pergeseran yang akan
dilakukan dari masukan kunci. Setiap blok digeser
sebanyak hasil perhitungan tadi ke arah kanan. Sama
seperti pada proses enkripsi, blok terakhir digeser ke arah
kanan sebanyak hasil perhitungan dimodulo dengan
panjang blok bila panjang blok lebih kecil dari hasil
perhitungan jumlah pergeseran.
Pada tahap kedua, dilakukan iterasi blok-blok dari
belakang untuk didekripsi. Pendekripsian dilakukan
menggunakan algoritma pendekripsian Vigenere Cipher
dengan kunci blok sebelumnya. Tahap pendekripsian
untuk ciphertext dengan jumlah blok n adalah dengan
iterasi dari blok n hingga blok pertama dengan kunci
setiap blok merupakan blok yang akan didekripsi
setelahnya atau blok sebelum blok tersebut pada urutan
blok ciphertext. Blok pertama didekripsi menggunakan
kunci yang diberikan.
Tahap ketiga, gabungkan semua blok yang didapatkan
dari tahap kedua menjadi sebuah teks sepanjang plaintext
semula. Kemudian lakukan pendekripsian dengan
algoritma dekripsi Vigenere Cipher sehingga didapatkan
plaintext hasil akhir dekripsi.
Berikut ini adalah pseudo code dari algoritma dekripsi
di atas.
function DecryptVigenere(array of byte
B, array of byte Key) array of byte
{menghasilkan plaintext dari
ciphertext B dengan kunci Key
menggunakan algoritma Vigenere Cipher
dengan pengulangan kunci,
Masukan: B, Key}
Deklarasi:
result: array of byte
i, n:integer
Algoritma:
for i 0 to B.Length – 1 do
if ((int)(B[i]) < (int)(key[(i mod
Key.Length)]))
n (int)(B[i]) + 256 -
(int)(key[(i mod Key.Length)])
else
n (int)(B[i]) - (int)(key[(i
mod Key.Length)])
endif
result[i] (byte)n
endfor
result
function MainDecryptAlgorithm(array of
byte Ciphertext, array of byte
Key)array of byte
{menghasilkan plaintext dari
Ciphertext dengan kunci Key
menggunakan algoritma kriptografi
klasik berlapis.
Masukan: Ciphertext, Key}
Deklarasi:
s, temp, temp2, temp3: array of
array of byte
result: array of byte
i, j, k, N: integer
Algoritma:
s ByteToListOfByte(Ciphertext,
Key.Length)
N 0
for i 0 to Key.Length 1 do
N N + (int)(Key[i])
endfor
N N mod Key.Length
Makalah IF3058 Kriptografi – Sem. II Tahun 2010/2011
for i 0 to s.Count - 1 do
temp[i] transpose(-N, s[i]))
endfor
i s.Count - 1
while i >= 0 do
if (i = 0)
temp2[i]
DecryptVigenere(temp[i], Key)
else
temp2[i]
DecryptVigenere(temp[i], temp[i - 1])
endif
i i - 1
endwhile
for i 0 to temp.Count - 1 do
temp3[i]
DecryptVigenere(temp2[i],Key)
endfor
k 0
for i 0 to temp3.Count - 1 do
for j 0 to temp3[i].Length - 1 do
result[k] temp3[i][j]
k k + 1
endfor
endfor
result
{NB: fungsi ByteToListOfByte dan
transpose disediakan pada lampiran
dalam bahasa C#.}
Berikut ini adalah diagram proses dekripsi.
Gambar 2. Diagram proses dekripsi
V. ANALISA PERBANDINGAN KEAMANAN
Ciphertext hasil enkripsi algoritma kriptografi klasik
dapat diserang dengan teknik penghitungan statistik untuk
kemunculan suatu huruf dan kelompok huruf. Oleh
karena itu, untuk menguji keamanan ciphertext hasil
enkripsi algoritma kriptografi klasik berlapis pada bagian
IV, akan digunakan serangan dengan menggunakan
statistik. Plaintext yang digunakan berbahasa Inggris
(terdapat pada lampiran) dienkripsi menggunakan kunci
„worldmystery‟. Program yang digunakan untuk
melakukan enkripsi dibuat menggunakan kakas Visual
Studio 2010 dan ditulis dalam bahasa C#. Berikut ini
adalah tampilan dari program yang dibut.
Makalah IF3058 Kriptografi – Sem. II Tahun 2010/2011
Gambar 3. Tampilan program enkripsi dekripsi yang dibuat
Dari hasil penghitungan frekuensi kemunculan
karakter pada ciphertext (terdapat pada lampiran)
didapatkan hasil sebagai berikut.
ASCII Karakter Jumlah Lokasi
162 ¢ 23 54, 102, 224, 378, 527, 642,
656, 1288, 1345, 1416,
1518, 1632, 1664, 1752,
1833, 2304, 2370, 2380,
2395, 3116, 3219, 3235,
3241
163 £ 23 35, 57, 468, 645, 938,
1115, 1131, 1167, 1273,
1305, 1545, 1626, 1633,
1934, 2239, 2453, 2540,
2723, 2904, 2966, 2988,
3060, 3185
210 Ò 22 89, 133, 324, 472, 780,
1025, 1259, 1544, 1603,
1617, 1799, 1908, 2185,
2482, 2650, 2732, 2739,
2844, 2892, 2984, 3023,
3100
6 21 2, 58, 73, 450, 493, 658,
971, 1186, 1314, 1349,
1417, 1777, 2426, 2456,
2489, 2502, 2544, 2564,
2601, 2715, 2716
16
21 80, 103, 172, 218, 308,
368, 475, 506, 547, 576,
881, 1074, 1589, 1624,
1687, 1783, 1931, 1964,
2114, 2199, 2572
69 E 21 56, 169, 225, 551, 842,
1077, 1148, 1169, 1485,
1558, 1611, 1825, 1937,
2111, 2188, 2236, 2275,
2518, 2523, 2549, 2870
132 „ 21 22, 94, 390, 491, 591, 800,
810, 932, 1024, 1285,
1437, 1455, 1491, 1847,
2198, 2204, 2508, 2709,
3092, 3120, 3215 Tabel 1. Jumlah kemunculan karakter dalam ciphertext beserta
lokasinya
Seperti tampak pada tabel, frekuensi kemunculan
karakter yang paling besar adalah karakter dengan ASCII
162 (¢) ,163 (£), 210 (Ò), 6 ( [bukan -]), 16 ( ), 69 (E),
132 („). Berikut ini adalah tabel jumlah kemunculan
karakter yang terbesar beserta lokasi kemunculannya
(dimulai dari 0).
Untuk mengetahui kesulitan pemecahan ciphertext
dengan serangan statistik, akan dilihat kembali karakter
pada plaintext yang menghasilkan karakter pada
ciphertext tersebut. Hal tersebut akan direpresentasikan
dalam tabel, lokasi menunjukkan tempat kemunculan
ASCII dalam ciphertext, isi menunjukkan karakter pada
lokasi tersebut di plaintext (karakter sebelum dienkripsi
menjadi ASCII dengan nilai tersebut).
Lokasi
(162)
Isi Lokasi
(163)
Isi Lokasi
(210)
Isi
54 (spasi) 35 h 89 i
102 r 57 (spasi) 133 y
224 m 468 o 324 t
Makalah IF3058 Kriptografi – Sem. II Tahun 2010/2011
378 r 645 h 472 o
527 a 938 (spasi) 780 t
642 h 1115 d 1025 o
656 i 1131 i 1259 y
1288 (spasi) 1167 s 1544 s
1345 n 1273 (spasi) 1603 e
1416 (spasi) 1305 c 1617 a
1518 i 1545 t 1799 (spasi)
1632 e 1626 u 1908 (spasi)
1664 r 1633 y 2185 (spasi)
1752 n 1934 v 2482 (spasi)
1833 c 2239 h 2650 a
2304 l 2453 w 2732 u
2370 , 2540 n 2739 a
2380 a 2723 r 2844 (spasi)
2395 e 2904 F 2892 u
3116 t 2966 d 2984 a
3219 p 2988 m 3023 (spasi)
3235 w 3060 (spasi) 3100 e
3241 (spasi) 3185 m
Lokasi
(6)
Isi Lokasi
(16)
Isi Lokasi
(69)
Isi
2 w 80 u 56 s
58 a 103 n 169 s
73 y 172 d 225 u
450 a 218 k 551 i
493 i 308 e 842 (spasi)
658 u 368 (spasi) 1077 h
971 a 475 s 1148 (spasi)
1186 r 506 t 1169 d
1314 o 547 h 1485 (spasi)
1349 (spasi) 576 , 1558 i
1417 d 881 (spasi) 1611 m
1777 i 1074 w 1825 (spasi)
2426 (spasi) 1589 n 1937 d
2456 a 1624 h 2111 t
2489 g 1687 e 2188 o
2502 T 1783 a 2236 t
2544 r 1931 (spasi) 2275 c
2564 a 1964 (spasi) 2518 g
2601 f 2114 b 2523 a
2715 d 2199 a 2549 n
2716 i 2572 l 2870 t Tabel 2. Karakter asal (plaintext) dari karakter yang
kemunculannya terbanyak pada ciphertext
Dari tabel di atas, terlihat bahwa karakter pada
plaintext yang menghasilkan karakter terbanyak pada
ciphertext sangat beragam sehingga tidak dapat
menggunakan statistik kemunculan huruf dalam bahasa
Inggris. Peggunaan metode Kasiski juga kurang efektif
karena ditemukan bahwa karakter plaintext yang sama
dari suatu karakter ciphertext tidak memiliki indeks kunci
yang sama.
Gambar 3. Frekuensi kemunculan huruf dalam bahasa Inggris
Dengan hasil pengamatan di atas, penghitungan
frekuensi kemunculan bigraf dan trigraf juga menjadi
trivial karena kemunculan karakter terbanyak pada
ciphertext berasal dari karakter yang berbeda-beda pada
plaintext.
Jika dibandingkan dengan algoritma kriptografi modern
block cipher dengan mode ECB dengan algoritma
enkripsi sederhana seperti operasi XOR saja, ciphertext
hasil enkripsi menggunakan algoritma kriptografi berlapis
dengan modifikasi kunci di atas lebih sulit dipecahkan
karena karakter yang sama belum tentu dienkripsi
menjadi karakter yang sama pada ciphertext.
Jika dibandingkan dengan CBC dengan algoritma
enkripsi sederhana seperti operasi XOR saja, tingkat
keamanan ciphertext hampir setara, namun pada
penggunaan algoritma kriptografi klasik berlapis tidak
diperlukan menambah plaintext jika blok tidak lengkap.
Jika dibandingkan dengan CFB dan OFB dengan
Makalah IF3058 Kriptografi – Sem. II Tahun 2010/2011
algoritma enkripsi sederhana seperti operasi XOR saja,
tingkat keamanan algoritma kriptografi klasik berlapis
dapat disejajarkan.
Namun, jika dibandingkan dengan penggunaan
algoritma yang rumit pada algoritma kriptografi modern
seperti algoritma Rijndael, tentu saja algoritma kriptografi
klasik berlapis tidak dapat menyaingi keamanan algoritma
kriptografi modern.
Kelebihan algoritma kriptografi klasik berlapis di atas
adalah kecepatannya dalam melakukan enkripsi dan
dekripsi. Selain itu panjang kunci tidak dibatasi. Kunci
dapat bekerja sebagaimana mestinya jika memiliki
panjang maksimal sepanjang plaintext yang akan
dienkripsi. Jika panjang kunci melebihi panjang plaintext,
sisa karakter pada kunci akan tidak digunakan.
Misalnya, jika kita memilki plaintext “ini plaintext”,
kemudian kita memasukkan kunci
“kuncikriptografiklasik”, maka kunci yang sebenarnya
dipakai adalah “kuncikriptogr”, potongan kunci semula
dengan panjang sama dengan panjang plaintext.
VI. KESIMPULAN
Algoritma kriptografi klasik berlapis memiliki
keamanan yang setara dengan algoritma kriptografi
modern sederhana. Untuk kehidupan sehari-hari,
algoritma kriptografi klasik sederhana sudah cukup aman
untuk digunakan.
Algoritma kriptografi modern dengan algoritma yang
rumit seperti AES memiliki tingkat keamanan yang lebih
baik dari pada algoritma kriptografi klasik berlapis
dengan modifikasi kunci pada makalah ini.
VII. UCAPAN TERIMA KASIH
Atas terselesaikannya makalah ini, saya mengucapkan
terima kasih kepada dosen pembimbing dalam
perkuliahan Kriptografi, Pak Rinaldi Munir, karena telah
memberikan pengetahuan dasar yang memungkinkannya
dibuatnya makalah ini.
REFERENCES
[1] Munir, Rinaldi, Algoritma Kriptografi Klasik [2] Munir, Rinaldi, Algoritma Kriptografi Modern
[3] Munir, Rinaldi, Advanced Encryption Standard (AES)
[4] http://www.ascii.cl/htmlcodes.htm Waktu akses: 16 Maret 2011 [5] http://www.stealthcopter.com/blog/wp-
content/uploads/2009/12/letter_freq.png Waktu akses: 18 Maret
2011
PERNYATAAN
Dengan ini saya menyatakan bahwa makalah yang saya
tulis ini adalah tulisan saya sendiri, bukan saduran, atau
terjemahan dari makalah orang lain, dan bukan plagiasi.
Bandung, 19 Maret 2011
ttd
Bobby H. Suryanaga – 13508022
Makalah IF3058 Kriptografi – Sem. II Tahun 2010/2011
Lampiran – Plaintext
How The Bermuda Triangle Works
The Bermuda Triangle is a strange and mysterious place in the southern Atlantic Ocean. It is roughly the shape of a
triangle and it is said to have sucked planes and boats into its dark and murky waters. No one knows what happened to
the planes and boats. When some enter the waters of the triangle they disappear forever.
For over forty years the Bermuda Triangle has been popularly known for supposedly paranormal disappearances of
boats and aircraft. This imaginary triangle, also known as devils triangle, has its three points at Miami, Puerto Rico, and
Bermuda, actually, despite several factors which should contribute to higher rates of accidents in the region, the
Bermuda Triangle has been found to be no more statistically dangerous than other areas of the open ocean.
The popular legend of the Bermuda Triangle began with a nineteen sixty four article in the magazine Argosy that
described and named the triangle. Further articles and reports in such magazines, as National Geographic and Playboy,
merely repeated the legend without additional research. Many of the disappearances discussed in these articles and
others did not even occur in the area of the triangle. You won‟t find it on any official map and you won‟t know when
you cross the line, but according to some people, the Bermuda Triangle is a very real place where dozen of ships,
planes, and people have disappeared with no good explanation.
Since a magazine first coined the phrase Bermuda Triangle in nineteen sixty four, the mystery has continued to attract
attention. When you dig deeper into most cases, though they‟re much less mysterious either they were never in the area
to begin with, they were actually found or there‟s a reasonable explanation for their disappearance. Does this mean
there‟s nothing to the claims of so many who have had odd experiences in the Bermuda Triangle, not necessarily
scientists have documented deviations from, then, or min the area and have found some interesting formations on the
seafloor within the Bermuda Triangles boundaries?
So, for those who like to believe in it, there is plenty fuel for the fire in this article. Well, look at the facts surrounding
what we do know about the area as well as some of the most commonly recited stories. Well, also explore the bizarre
theories like aliens and space portals, as well as the mundane explanations. Many think of the Bermuda Triangle, also
known as the devils triangle, as an imaginary area. The US board of geographic names does not recognize the Bermuda
Triangle and does not maintain an official file on it however within this imaginary area many real vessels and the
people aboard them have seemingly disappeared without explanation.
The Bermuda Triangle is located off the southeastern coast of the United States in the Atlantic Ocean with its apexes in
the vicinities of Bermuda, Miami, Florida, and San Juan, Puerto Rico. It covers roughly five hundred thousands square
miles. The area may have been named after its Bermuda apex since Bermuda was once known as the isle of devils
treacherous reefs that have ensnared ships sailing too close to its shores surround Bermuda and there are hundreds of
ship wrecks in the waters that surround it.
Ciphertext (dalam bentuk screenshot dari notepad karena beberapa karakter ASCII akan merusak tampilan jika
dimasukkan ke Ms. Word) kunci: worldmystery
Makalah IF3058 Kriptografi – Sem. II Tahun 2010/2011
NB: Beberapa karakter ASCII tidak dapat ditampilkan sehingga tampak seperti spasi
Hasil perhitungan frekuensi kemunculan huruf dan lokasi kemunculannya (hanya ditampilkan yang kemunculannya
lebih dari 20 kali / 11 terbesar)
ASCII 6 Jumlah: 21
Posisi: 2, 58, 73, 450, 493, 658, 971, 1186, 1314, 1349, 1417, 1777, 2426, 2456, 2489,
2502, 2544, 2564, 2601, 2715, 2716
ASCII 15 Jumlah: 20
Posisi: 33, 248, 265, 413, 557, 794, 915, 945, 960, 1093, 1134, 1155, 1519, 1703, 1902,
2160, 2405, 2827, 2845, 3179
ASCII 16 Jumlah: 21
Posisi: 80, 103, 172, 218, 308, 368, 475, 506, 547, 576, 881, 1074, 1589, 1624, 1687, 1783,
1931, 1964, 2114, 2199, 2572
ASCII 47 Jumlah: 20
Posisi: 4, 328, 364, 570, 1083, 1232, 1428, 1674, 1681, 1764, 2038, 2253, 2458, 2562, 2604,
2731, 2879, 2913, 2999, 3206
ASCII 69 Jumlah: 21
Posisi: 56, 169, 225, 551, 842, 1077, 1148, 1169, 1485, 1558, 1611, 1825, 1937, 2111, 2188,
2236, 2275, 2518, 2523, 2549, 2870
ASCII 132 Jumlah: 21
Posisi: 22, 94, 390, 491, 591, 800, 810, 932, 1024, 1285, 1437, 1455, 1491, 1847, 2198,
2204, 2508, 2709, 3092, 3120, 3215
ASCII 139 Jumlah: 20
Makalah IF3058 Kriptografi – Sem. II Tahun 2010/2011
Posisi: 445, 554, 574, 733, 760, 774, 1478, 1612, 1691, 1712, 2402, 2486, 2659, 2736, 2771,
2826, 2924, 2978, 3024, 3167
ASCII 162 Jumlah: 23
Posisi: 54, 102, 224, 378, 527, 642, 656, 1288, 1345, 1416, 1518, 1632, 1664, 1752, 1833,
2304, 2370, 2380, 2395, 3116, 3219, 3235, 3241
ASCII 163 Jumlah: 23
Posisi: 35, 57, 468, 645, 938, 1115, 1131, 1167, 1273, 1305, 1545, 1626, 1633, 1934, 2239,
2453, 2540, 2723, 2904, 2966, 2988, 3060, 3185
ASCII 208 Jumlah: 20
Posisi: 262, 585, 937, 990, 1033, 1085, 1103, 1126, 1323, 1336, 1613, 1963, 2045, 2234,
2308, 2363, 2897, 2962, 2982, 3173
ASCII 210 Jumlah: 22
Posisi: 89, 133, 324, 472, 780, 1025, 1259, 1544, 1603, 1617, 1799, 1908, 2185, 2482, 2650,
2732, 2739, 2844, 2892, 2984, 3023, 3100
Kode yang digunakan untuk memproses teks dalam C#
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ClassicCryptographyModified { class TextProcessing { public TextProcessing() { } public byte[] GetPlaintext() { return Plaintext; } public byte[] GetCiphertext() { return Ciphertext; } public void SetPlaintext(byte[] b) { Plaintext = b; } public void SetCiphertext(byte[] b) { Ciphertext = b; } public void SetPlaintext(string S) { Plaintext = StringToByte(S); } public void SetCiphertext(string S) { Ciphertext = StringToByte(S); } public void SetKey(string S) { Key = S; } private byte[] Plaintext; private byte[] Ciphertext; public string Key; public byte[] StringToByte(string S) { char[] AC = S.ToCharArray(); byte[] b = new byte[S.Length]; for (int i = 0; i < S.Length; i++) { b[i] = (byte)(AC[i]); } return b; } public string ByteToString(byte[] b) { string S = ""; for (int i = 0; i < b.Length; i++) { S += ((char)(b[i])).ToString(); } return S; } public List<byte[]> ByteToListOfByte(byte[] B, int N) {
Makalah IF3058 Kriptografi – Sem. II Tahun 2010/2011
List<byte[]> LB = new List<byte[]>(); if (B.Length % N == 0) { for (int i = 0; i < (B.Length / N); i++) { byte[] b = new byte[N]; for (int j = 0; j < N; j++) { b[j] = B[i*N+j]; } LB.Add(b); } return LB; } else { for (int i = 0; i < (B.Length / N + 1); i++) { if (i != B.Length / N) { byte[] b = new byte[N]; for (int j = 0; j < N; j++) { b[j] = B[i * N + j]; } LB.Add(b); } else { int n = B.Length % N; byte[] b = new byte[n]; for (int j = 0; j < n; j++) { b[j] = B[i * N + j]; } LB.Add(b); } } return LB; } } public byte[] transpose(int N, byte[] B) { byte[] result = new byte[B.Length]; if (N > 0) { if (N < B.Length) { for (int i = N; i < B.Length; i++) { result[i - N] = B[i]; } for (int i = 0; i < N; i++) { result[B.Length - N + i] = B[i]; } return result; } else { return transpose(N % B.Length, B); }
Makalah IF3058 Kriptografi – Sem. II Tahun 2010/2011
} else if (N < 0) { if (-N < B.Length) { for (int i = - N; i < B.Length; i++) { result[i] = B[i + N]; } for (int i = 0; i < -N; i++) { result[i] = B[B.Length + N + i]; } return result; } else { return transpose(0 - (-N % B.Length), B); } } else { return B; } } public byte[] EncryptVigenere(byte[] source, string K) { byte[] hasil = new byte[source.Length]; char[] key = K.ToCharArray(); for (int i = 0; i < source.Length; i++) { int temp; temp = source[i] + key[(i % K.Length)]; hasil[i] = (byte)(temp % 256); } return hasil; } public byte[] EncryptVigenere(byte[] source, byte[] K) { byte[] hasil = new byte[source.Length]; for (int i = 0; i < source.Length; i++) { int temp; temp = source[i] + (int)(K[(i % K.Length)]); hasil[i] = (byte)(temp % 256); } return hasil; } public byte[] DecryptVigenere(byte[] source, string K) { byte[] temp = new byte[source.Length]; char[] key = K.ToCharArray(); for (int i = 0; i < source.Length; i++) { int n; if ((int)(source[i]) < (int)(key[(i % K.Length)])) { n = (int)(source[i]) + 256 - (int)(key[(i % K.Length)]); } else
Makalah IF3058 Kriptografi – Sem. II Tahun 2010/2011
{ n = (int)(source[i]) - (int)(key[(i % K.Length)]); } temp[i] = (byte)n; } return temp; } public byte[] DecryptVigenere(byte[] source, byte[] K) { byte[] temp = new byte[source.Length]; for (int i = 0; i < source.Length; i++) { int n; if ((int)(source[i]) < (int)(K[(i % K.Length)])) { n = (int)(source[i]) + 256 - (int)(K[(i % K.Length)]); } else { n = (int)(source[i]) - (int)(K[(i % K.Length)]); } temp[i] = (byte)n; } return temp; } public void MainEncryptionAlgorithm() { List<byte[]> s = ByteToListOfByte(EncryptVigenere(Plaintext, Key),Key.Length); List<byte[]> temp = new List<byte[]>(); for (int i = 0; i < s.Count; i++) { if (i == 0) { temp.Add(EncryptVigenere(s.ElementAt(i), Key)); } else { temp.Add(EncryptVigenere(s.ElementAt(i), temp.ElementAt(i-1))); } } List<byte[]> temp2 = new List<byte[]>(); int N = 0; for (int i = 0; i < Key.Length; i++) { N += (int)(Key[i]); } N = N % Key.Length; for (int i = 0; i < temp.Count; i++) { temp2.Add(transpose(N, temp.ElementAt(i))); } byte[] result = new byte[Plaintext.Length]; int k = 0; for (int i = 0; i < temp2.Count; i++) { for (int j = 0; j < temp2.ElementAt(i).Length; j++) { result[k] = temp2.ElementAt(i)[j]; k++; } }
Makalah IF3058 Kriptografi – Sem. II Tahun 2010/2011
Ciphertext = result; } public void MainDecryptionAlgorithm() { List<byte[]> s = ByteToListOfByte(Ciphertext, Key.Length); List<byte[]> temp = new List<byte[]>(); int N = 0; for (int i = 0; i < Key.Length; i++) { N += (int)(Key[i]); } N = N % Key.Length; for (int i = 0; i < s.Count; i++) { temp.Add(transpose(-N, s.ElementAt(i))); } List<byte[]> temp2 = new List<byte[]>(); for (int i = s.Count - 1; i >= 0; i--) { if (i == 0) { temp2.Add(DecryptVigenere(temp.ElementAt(i), Key)); } else { temp2.Add(DecryptVigenere(temp.ElementAt(i), temp.ElementAt(i - 1))); } } temp2.Reverse(); List<byte[]> temp3 = new List<byte[]>(); for (int i = 0; i < temp.Count; i++) { temp3.Add(DecryptVigenere(temp2.ElementAt(i),Key)); } byte[] result = new byte[Ciphertext.Length]; int k = 0; for (int i = 0; i < temp3.Count; i++) { for (int j = 0; j < temp3.ElementAt(i).Length; j++) { result[k] = temp3.ElementAt(i)[j]; k++; } } Plaintext = result; } } }