Modifikasi Playfair Cipher dengan Pembangkitan Kunci
yang Dienkripsi dengan Vigenere Cipher
Wico Chandra - 13509094
Program Studi Teknik Informatika
Sekolah Teknik Elektro dan Informatika
Institut Teknologi Bandung, Jl. Ganesha 10 Bandung 40132, Indonesia
13509094@std.stei.itb.ac.id
Abstract—Playfair Cipher merupakan metoda enkripsi klasik yang sangat sulit untuk dikriptanalisis secara manual. Meskipun demikian Playfair dapat dipecahkan dengan menggunakan informasi frekuensi kemunculan bigram. Makalah ini menyajikan modifikasi dari playfair cipher dengan memanfaatkan metoda vigenere cipher pada kunci yang akan digunakan pada tiap bigram dengan harapan dapat menghilangkan frekensi kemunculan bigram. Hasil eksperimen menunjukkan keunggulan hasil modifikasi dibandingkan dengan yang sebelumnya dan kelemahan dari hasil modifikasi terhadap serangan yang terjadi pada hasil modifikasi.
Index Terms—Playfair cipher, vigenere Cipher
I.
P
ENDAHULUANSekarang ini banyak jenis kriptografik klasik, salah satunya adalah playfair cipher. Dulunya, playfair cipher digunakan dalam pengiriman pesan pada saat peperangan. Algoritma playfair cipher dipilih karena sangat mudah digunakan dan tidak membutuhkan mesin tertentu untuk mengenkripsi atau mendekripsi, cukup secara manual saja untuk mendekripsi pesan. Sayangnya karena perkembangan jaman playfair sudah tidak digunakan lagi akbiat munculnya teknologi digital yang dapat memecahkan hasil enkripsi playfair cipher. Oleh karena itu, sekarang ini, playfair cipher digunakan hanya untuk pengenalan terhadapa kriptografi klasik atau permainan puzzle.
Hasil enkripsi playfair cipher dapat didekripsi dengan memanfaatkan frekuensi kemunculan bigram. Dengan mendapatkan informasi tersebut maka kriptanalisis dapat menduga-duga subusitusi yang dilakukan untuk mendapatkan kunci yang ada. Ditambah dengan kunci hanya terdiri dari 25 huruf yang berada pada tabel 5x5.
Oleh karena itu, pada makalah ini dibuat modifikasi dari playfair cipher dengan menggabungkan dengan vigenere cipher sehingga tidak frekuensi kemunculan bigram tidak dapat digunakan lagi untuk mendekripsi pesan.
II.
PLAYFAIR CIPHERPlayfair cipher merupakan teknik kriptografi klasik yang memanfaatkan subsitusi bigram. Plainteks yang
akan dienkripsi dipecah menjadi dua huruf (bigram) dengan aturan sebagai berikut:
Apabila dalam bigram terdapat dua huruf yang sama maka huruf kedua diganti dengan huruf Z dan huruf yang diganti dipindahkan ke bigram selanjutnya Apabila terdapat huruf ‘I’ maka diganti dengan huruf ‘J’.
Apabila hanya terdiri dari satu huruf maka ditambahkan huruf ‘Z’ setelah huruf tersebut. Contoh:
POSSIBLE PO SZ SJ BL EZ
Plainteks tersebut akan dienkripsi dengan menggunakan kunci yang akan dimasukkan dalam tabel 5x5, yang berisi huruf ‘A’ hingga huruf ‘Z’ kecuali huruf ‘I’, yang memiliki aturan sebagai berikut:
Tidak boleh ada huruf yang berulang Huruf ‘I’ pada kunci akan dihilangkan
Apabila masih terdapat sisa pada table maka maukkan huruf secara berurut sesuai dengan ke-dua aturan sebelumnya. Contoh: Kunci: wicochandra Tabel 5x5:
W
C
O
H
A
N
D
R
B
E
F
G
J
K
L
M
P
Q
S
T
U
V
X
Y
Z
Dengan memanfaatkan table 5x5 tersebut, masing-masing bigram dari plainteks disubsitusi dengan aturan-aturan tertentu sehingga terbentuk bigram baru yang merupakan hasil enkripsi. Aturan-aturan subsitusi yang diterapkan adalah sebagai berikut:
Apabila huruf pertama dan huruf kedua bigram berada pada kolom yang sama maka huruf pertama disubsitusi dengan huruf yang ada disebelah bawahnya dan huruf kedua disubsitusi dengan huruf disebelah bawahnya
Gambar 1 Plainteks ED disubsitusi menjadi DO
Apabila huruf pertama dan huruf kedua bigram berada pada baris yang sama maka huruf pertama disubsitusi dengan huruf yang ada disebelah kanannya dan huruf kedua disubsitusi dengan huruf disebelah kanannya
Gambar 2 Plainteks EX disubsitusi menjadi XM
Apabila huruf pertama dan huruf kedua bigram tidak berada pada baris dan kolom yang sama maka huruf pertama disubsitusi dengan huruf yang berada pada baris yang sama dan kolom dari huruf kedua, dan huruf kedua disubsitusi dengan huruf yang berada pada baris yang sama dan kolom dari huruf pertama yang belum subsitusi.
Gambar 3 Plainteks HI disubsitusi menjadi BM Contoh:
kunci yang digunakan adalah wicochandra Plainteks : PO SZ SJ BL EZ
Hasil subsitusi: QC TY QK EK LA
Proses dekripsi playfair cipher adalah hampir sama dengan proses enkripsi, yang berbeda adalah semua aturan yang digunakan pada enkripsi dibalikkan kecuali aturan ke-tiga.
III.
V
IGENEREC
IPHERVigenere Cipher merupakan metoda kriptografi klasik yang memanfaatkan subsitusi polialpabetik. Vigenere cipher hanya dapat mengenkripsi huruf alfabetik dan tidak membedakan antara huruf hapital dan huruf
kecil. Oleh karena itu, plainteks dari vigenere cipher tidak boleh terdapat spasi ataupun tanda baca lainnya, karena tidak dapat dienkripsi, jika ada, maka algoritma vigenere cipher harus dimodifikasi sedemikian sehingga dapat menhiraukan spasi atau tanda baca lainnya.
Kunci yang digunakan dalam algoritma vigenere cipher biasanya adalah satu kata atau satu kalimat agar mudah diingat. Apabila kunci lebih pendek dari panjang plainteks maka kunci akan diulang hingga kunci memiliki panjang yang lebih besar atau sama dengan panjang plainteks.
Pada jaman dulu proses enkripsi vigenere cipher masih mengguanakan tabel subsitusi alpabet seperti pada
Gambar 4 karena masih belum ditemukan mesin digital
yang dapat mengoperasikannya. Dengan menggunakan tabel tersebut orang-orang dapat menenkripsi suatu plainteks dengan mudah.
Gambar 4 tabel subsitusi alpabet
Untuk meperjelas penggunaan tabel tersebut maka lihat contoh berikut :
Plainteks : ATTACKATDAWN Kunci : LEMONLEMONLE Cipherteks : LXFOPVEFRNHR
Proses dekripsi untuk vigenere cipher menggunakan tabel yang sama. Dengan baris pertama adalah plainteks dan kolom pertama adalah kunci.
Sekarang ini tabel yang digunakan sebelumnya dapat diganti dengan menggunakan rumus yang ada yaitu
Dengan memanfaatkan rumus tersebut maka untuk melakukan enkripsi dan dekripsi vigenere cipher semakin cepat .
IV.
M
ODIFIKASIA
LGORITMAP
LAYFAIR Algoritma menerima plainteks yang dapat terdiri dari apapun termasuk bilangan. Kemudian plainteks tersebut dibuat kumpulan bigram yang mengabaikan karakter yang bukan huruf dan memilah-milah plainteks sesuai dengan aturan-aturan yang ada pada playfair cipher.Kunci yang digunakan pada bigram bergantung pada bigram plainteks sebelumnya, yaitu dengan mengambil huruf dari bigram tersebut kemudian melakukan algoritma enkripsi vigenere cipher pada masing-masing isi tabel dengan kunci adalah huruf yang diambil, aturan dalam pengambilan huruf untuk dijadikan kunci vigenere cipher adalah apabila huruf kedua adalah huruf ‘A’ maka huruf yang diambil adalah huruf yang pertama dari bigram plainteks, jika tidak maka diambil huruf kedua dari bigram plainteks.
Enkripsi Playfair Pi-1 Keyi-0 Ci-1 Enkripsi Vigenere Enkripsi Playfair Pi Ci Enkripsi Vigenere
Gambar 5 Skema enkripsi algoritma modifikasi
Dekripsi Playfair Ci-1 Keyi-0 Pi-1 Enkripsi Vigenere Dekripsi Playfair Pi Ci Enkripsi Vigenere
Gambar 6 Skema dekripsi algoritma modifikasi
a. Enkripsi
Masukkan : plainteks, key
Keluaran : teks yang sidah dienkripsi
Langkah 1: Ambil satu bigram dari plainteks
Langkah 2: Subsitusi bigram tersebut dengan key, kemudian masukkan dalam teks keluaran
Langkah 3: Perikasa apakah huruf kedua dari bigram yang belom terenkripsi tersebut adalah ‘A’, jika benar maka ambil huruf pertama untuk dijadikan kunci vigenere cipher, jika tidak ambil huruf kedua
Langkah 4: Enkripsi tiap-tiap isi tabel pada key menggunakan algoritma vigenere cipher dengan kunci huruf yang diambil pada langkah 3
Langkah 5: Lakukan langkah 2 hingga langkah 4 untuk sisa bigram yang ada pada plainteks
Langkah 6: Hasil terakhir pada teks keluaran adalah plainteks yang sudah terenkripsi
b. Dekripsi
Masukkan : teks, key
Keluaran : teks yang sidah didekripsi
Langkah 1: Ambil satu bigram dari teks
Langkah 2: Subsitusi bigram tersebut dengan key, kemudian masukkan dalam teks keluaran
Langkah 3: Perikasa apakah huruf kedua dari bigram yang sudah didekripsi terakhir adalah ‘A’, jika benar maka ambil huruf pertama untuk dijadikan kunci vigenere cipher, jika tidak ambil huruf kedua
Langkah 4: Enkripsi tiap-tiap isi tabel pada key menggunakan algoritma vigenere cipher dengan kunci huruf yang diambil pada langkah 3
Langkah 5: Lakukan langkah 2 hingga langkah 4 untuk sisa bigram yang ada pada teks
Langkah 6: Hasil terakhir pada teks keluaran adalah plainteks yang sudah terenkripsi
V.
H
ASILE
XPERIMENUntuk mengetahui perbandingan antar algoritma sebelum modifikasi dengan algoritma setelah modifikasi maka dilakukan ujicoba untuk teks yang memiliki pengulangan bigram. Kunci yang digunakan pada semua ujicoba adalah PLAYFAIR.
Plainteks untuk masing-masing algoritma adalah sebagai berikut Plainteks: TO EN CR YP TA TA BL EO FA LP HA BE TS CA NB EU SE DT ER ME DA TA BU LA RE CT AV JG EN ÈR ES QU AR EO RV JG EN ÈR ET AB LE JT CO NS JS TS OF TH EA LP HA BE TW RJ TZ TE NO UT TJ ME SJ ND JF FE RE NT RO WS EA CH AL PH AB ET SH JF TE DC YC LJ CA LZ LY TO TH EL EF TC OM PA RE DT OT HE PR EV JO US AL PH AB ET CO RZ RE SP ON DJ NG TO TH EP OS SJ BL EC AE SA RC JP HE RS AT DJ FZ FE RE NT PO JN TS JN TH EZ EN CR YP TJ ON PR OC ES ST HE CJ PH ER US ES AD JF FE RE NT AL PH AB ET FR OM ON EO FT HE RO WS TH EA LP HA BE TU SE DA TE AC HP OJ NT DE PE ND SO NA RE PE AT JN GK EY WO RD
Plainteks tersebut banyak memiliki pengulangan bigram sehingga dapat dibandingkan dengan hasil enkripsinya. Bigram yang akan diperhatikan adalah TO.
Hasil enkripsi untuk algorima biasa adalah sebagai berikut :
Cipherteks:
NQ RT DB FL QF QF HB BT PY AL JL CR NT JC OR RZ TD ES RB TM CY QF RV AY BR EQ LW KH
RT UE DT NW PC BT BU KH RT UE MZ LC FB MQ BQ OT KQ NT TL OM CF AL JL CR QZ CG ZF ZM OQ ZN QM TM QK SR MA EM BR ON BN XQ CF BJ YA LG LC MZ OK MA ZM ED AD AH JC FV AF NQ OM BF ME QE TH LY BR ES QN MB RG BZ HQ XN YA LG LC MZ BQ EU BR NY QO CK UN NQ OM RF QT QK HB RD FC QY BD GA MB DN FQ CK EF EM BR ON LN GQ NT GQ OM MF RT DB FL QM QO RG QB DT TN MB JQ LG RB XN DT YC MA EM BR ON YA LG LC MZ PE TH QO BT EZ MB BN XQ OM CF AL JL CR NZ TD CY ZM CJ GL QH ON ER FR SR TQ QP BR FR FQ GQ HM DF VQ BE
Hasil endkripsi untuk algoritma hasil modifikasi adalah sebagai berikut:
Cipherteks: NQ HK DP CA AG HF RG CN TJ EQ CH TU BW DC UD BO WZ MJ KA UQ CR NX UO TO LK XP FQ WH RX LG MF RQ PT JF MC MZ WP XX PF SV ZG WV PC GU AH MD FZ KN US PO RP CP FM AW WG ZP OE DZ KT GJ LS SN FG VD DZ ZD VP QV KR DS VS HM BV LO TF FU RF OW ZX QT XH MN XN FT PT HJ BY DV JS NQ SA SO AU BT VQ YA RA OK ZP WM WM JS PW PS EZ FY DM YB CX OM DX QM JO MU KR TW YA OM XN BZ UR JK ZP XV UX OR CD WR GX WH OP AJ XV JX ZK ZD PJ AO TC YB FM AV GM NY HO JZ RO YC JC DT XP EP CU TL MT LY YP MF CK GF EL TE YV PO NG DX FA AB SJ GL TS FD EX CY SQ GV JG XC DH OX KO JZ DN UM TN GL FR HL LE JN KT CJ
Berdasarkan hasil enkripsi kedua algoritma dapat dilihat bahwa algoritma biasa, untuk bigram yang sama akan menghasilkan bigram yang sama juga dan untuk bigram yang berbeda akan menghasilkan bigram yang berbeda juga. Sedangkan untuk algoritma hasil modifikasi, untuk bigram yang sama akan menhasilkan bigram yang berbeda satu sama lain, dan untuk bigram yang berbeda dapat menhasilkan bigram yang sama.
Untuk menunjukan kapan algoritma hasil modifikasi tersebut mengalami pengulangan digunakan kunci
PLAYFAIR dan plainteks sebagai berikut:
Plainteks: HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO HO
Hasil dari enkripsi dengan algoritma haisl modifikasi dapat dilihat sebagai berikut:
Cipherteks: OV ET GV TF OK SA XB CH FB BX GQ CH XH JL NH RH TY UB JH XN KN NW YM UN FQ KX JW WT CQ UA VB JF JK NL GB MX FS EQ LT AL KQ SB AF VE GF MX MQ UQ XR KM MW JX JQ WN RB OD SB XJ AM CL DB OM JM AQ JT JV BN RG TD OV YF OJ OQ KN BD ON OQ OJ AV BG GV RH AQ MJ NB EJ NB QB CK WS CH JH BH OW AD QH DF QR NW FN CD JH AC CT SK NW YV RT FS DM GN WJ FQ SR JF EF JK WB BQ MQ RD QM XW JR KY AF LR CE SM LN JM CQ NV QF GM DX JN WA OD LD GH WM GM JB BQ RM GW AH CY UB OJ CG GK JN OG UN OV ET GV TF OK SA XB CH FB BX GQ CH XH JL NH RH TY UB JH XN KN NW YM UN FQ KX JW WT CQ UA VB JF JK NL GB MX FS EQ LT AL KQ SB AF VE GF MX MQ UQ XR KM MW JX JQ WN RB OD SB XJ AM CL DB OM JM AQ JT JV BN RG
Dari hasil enkripsi dapat dilihat bahwa pengulangan mulai terjadi apabila bigram yang berulang terjadi minimal sebanyak 157 kali. Dan sebelum pengulangan tersebut terjadi ada bigram yang berulang juga.
VI.
A
NALISISK
ELEMAHANUntuk mengetahui kelemahan dilakukan percobaan perusakan satu bigram pada cipherteks untuk melihat apa yang terjadi. Percobaan ini menggunakan kunci
PLAYFAIR dan plainteks sebagai berikut:
Plainteks: FO RE XA MP LE TH EF JR ST LE TZ TE RO FT HE PL AJ NT EX TA JS PA JR ED WJ TH LT HE FJ RS TL ET TE RO FT HE KE YS OU SE RO WL AN DC OL UM NA OF TH EV JG EN ÈR ES QU AR EN AM EL YL SJ MJ LA RL YF OR TH ES EC ON
Hasil enkripsi dengan algoritma hasil modifikasi dapat dilihat sebagai berikut:
cipherteks: LT QG HR LN NP ND UC SC RG QF XJ QM VC WM XY JH BH AS FB ZH GA GU GE UE LZ KM EQ LX YB ER JE OD JT BS PH GU PR ER VQ ZY YU FO UH AV LD DP WU TM QY XM PB UO XX ZA WB RZ TL GA QE EW QR HV YG LS HY LB UG VM KP AK
Apabila bigram pertama, LT, diubah menjadi LZ, maka hasil dekripsi yang dihasilkan adalah sebagai berikut: Plainteks: FV JQ FU WL UD GZ PB PF BR RD KW LO LY ZJ MQ LJ HK FA HC HM YS JM YJ YD QR SJ QK TF MX RW FD NQ ZG WU BF ZG TW BW CV PN DL WV OY TA WP FG CD PK UH QY ND VW QH SX XO ZE
Dapat dilihat dari tiga bigram terakhir hasil dekripsi, SX XO ZE, berbeda dengan tiga bigram terakhir plainteks sebenarnya, ES EC ON. Hal ini disebabkan karena hasil enkripsi bergantung pada plainteks sebelumnya sehingga apabila plainteks sebelumnya diubah maka hasil enkripsi untuk bigram selanjutnya akan berbeda dari sebelumnya.
Jika dibandingkan dengan algoritma sebelumnya yang berubah hanya satu bigram pertama saja. Berikut
adalah hasil dekripsi dengan algoritma biasa dengan bigram pertama dari hasil enkripsi diubah.
cipherteks: FV RE XA MP LE TH EF JR ST LE TZ TE RO FT HE PL AJ NT EX TA JS PA JR ED WJ TH LT HE FJ RS TL ET TE RO FT HE KE YS OU SE RO WL AN DC OL UM NA OF TH EV JG EN ZR ES QU AR EN AM EL YL SJ MJ LA RL YF OR TH ES EC ON
Dapat dilihat bahwa yang berubah hanya satu bigram pertama saja. Jadi, serangan yang merusak cipherteks merupakan kelemahan algoritma hasil modifikasi jika dibandingakan dengan algoritma biasa.
VII.
K
ESIMPULANBerdasarkan hasil eksperimen dapat disimpulkan bahwa algoritma hasil modifikasi dapat menghilangkan penggunakan frekuensi kemunculan bigram pada teks bahasa inggris, yang biasa digunakan oleh kriptanalisis untuk mendekripsi pesan yang dienkripsi dengan algoritma playfair biasa. Hasil eksperimen menujukkan bahwa bigram akan mulai berulang apabila memiliki bigram yang sama sebanyak 157 kali.
Algoritma hasil modifikasi memiliki keunggulan sehingga menghilangkan penggunaan frekuensi kemunculan bigram, tetapi memiliki kelemahan yaitu apabila bigram pertama dari hasil enkripsi diubah maka pada saat didekripsi, seluruh plainteks akan hancur dan tidak dapat dibaca lagi oleh penerima.
VIII.
U
CAPANT
ERIMAK
ASIHSaya mengucapakan terima kasih kepada Tuhan Yang Maha Esa atas berkat-Nya sehingga saya dapat menyelesaikan makalah ini, saya juga mengucapkan terima kasih kepada dosen IF3058-Kriptografi karena sudah memberi kesempatan sehingga saya dapat menulis makalah ini. Saya berterima kasih kepada teman-teman saya yang membantu saya dalam proses penyelesaian makalah ini, sehingga makalah ini dapat selesai dengan tepat waktu.
R
EFERENCES[1] Munir, Rinaldi. 2006. Kriptografi. Bandung: Informatika.
[2] http://en.wikipedia.org/wiki/Playfair_cipher Diakses tanggal 18 maret 2012 pukul 08.00 WIB [3] http://en.wikipedia.org/wiki/Vigenere_cipher
Diakses tanggal 18 maret 2012 pukul 09.00 WIB
P
ERNYATAANDengan 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 2012
L
AMPIRAN1. Tampilan program
2. Source code
a. encriptWithVigenere
public String encriptWithVigenere() {
String result = new String();
for (int i = 0 ; i < plainTeks.length(); i+=3) {
result += substitute(plainTeks.substring(i, i+2)) + " ";
if (plainTeks.charAt(i+1) == 'A') updateKey(plainTeks.charAt(i)); else updateKey(plainTeks.charAt(i+1)); } result = result.substring(0,result.length()); return result; }
b. decriptWithVigenere
public String decriptWithVigenere() {
String result = new String();
for (int i = 0 ; i < plainTeks.length(); i+=3) {
result += substituteDecript(plainTeks.substring(i, i+2)) + " "; if (result.charAt(i+1) == 'A') updateKey(result.charAt(i)); else updateKey(result.charAt(i+1)); } result = result.substring(0,result.length()); return result; }
c. updateKey
protected void updateKey(char in) {
for (int i = 0; i < 5; i++) for (int j = 0; j < 5; j++) {
char temp = (char)((key[j][i] + in - 2*'A')%26 + 'A');
if (temp == 'I') key[j][i] = (char) (('I' + in - 2*'A')%26 + 'A'); else key[j][i] = temp;
} }
d. substitute
e. substituteDecript
protected String substituteDecript(String in) {
String result = new String();
Point char01 = getPosKey(in.charAt(0)); Point char02 = getPosKey(in.charAt(1)); if (char01.x == char02.x)
{
result += key[char01.x][(char01.y+4)%5]; result += key[char01.x][(char02.y+4)%5]; }
else if (char01.y == char02.y) {
result += key[(char01.x + 4)%5][char01.y]; result += key[(char02.x + 4)%5][char01.y]; } else { result += key[char02.x][char01.y]; result += key[char01.x][char02.y]; } return result; }
f. getPosKey
protected Point getPosKey(char in) {
Point result = new Point(); all:
for (int i = 0; i < 5; i++) for (int j = 0; j < 5; j++)
if (key[result.x = j][result.y = i] == in) break all; return result;
}
g. Varibel Global
private char[][] key; //sebagai tabel 5x5
private String plainTeks; //teks yang akan dienkripsi ataupun didekkripsi protected String substitute(String in)
{
String result = new String();
Point char01 = getPosKey(in.charAt(0)); Point char02 = getPosKey(in.charAt(1));
if (char01.x == char02.x) {
result += key[char01.x][(char01.y+1)%5]; result += key[char01.x][(char02.y+1)%5]; }
else if (char01.y == char02.y) {
result += key[(char01.x + 1)%5][char01.y]; result += key[(char02.x + 1)%5][char01.y]; } else { result += key[char02.x][char01.y]; result += key[char01.x][char02.y]; } return result; }