6/8/2013
Algoritma Kriptografi Modern (Bagian 1) Bahan kuliah Kriptografi Sumber : Rinaldi Munir
FTSI Unipdu
1
Pendahuluan
Beroperasi dalam mode bit (algoritma kriptografi klasik beroperasi dalam mode karakter) kunci, plainteks, cipherteks, dalam rangkaian bit
diproses
operasi bit xor paling banyak digunakan
FTSI Unipdu Kriptografi
2
1
6/8/2013
Tetap menggunakan gagasan pada algoritma klasik: substitusi dan transposisi, tetapi lebih rumit (sangat sulit dipecahkan)
Perkembangan algoritma kriptografi modern didorong oleh penggunaan komputer digital untuk keamanan pesan.
Komputer digital merepresentasikan data dalam biner.
FTSI Unipdu Kriptografi
3
Tabel karakter ASCII
2
6/8/2013
Diagram Blok Kriptografi Modern Secure Network Protocols
Confidentiality
Encryption
Symmetric Key Cryptography
Block Cipher
Stream Cipher
Data Integrity
MACs MICs
Message Digest
Hash Function
NonRepudiation
Authentication
Challenge Responses
IVs
Nonces
Pseudo Random
FTSI Unipdu Kriptografi
Smart Cards
Secret Keys
Random Source
Digital Signatures
Public Key Cryptography
Elliptic Curve
DH RSA
6
3
6/8/2013
Rangkaian bit
Pesan (dalam bentuk rangkaian bit) dipecah menajdi beberapa blok
Contoh: Plainteks 100111010110 Bila dibagi menjadi blok 4-bit 1001 1101 0110 maka setiap blok menyatakan 0 sampai 15: 9 13 6
FTSI Unipdu Kriptografi
7
Bila plainteks dibagi menjadi blok 3-bit: 100
111
010
110
maka setiap blok menyatakan 0 sampai 7: 4
7
2
6
FTSI Unipdu Kriptografi
8
4
6/8/2013
Padding bits: bit-bit tambahan jika ukuran blok terakhir tidak mencukupi panjang blok
Contoh: Plainteks 100111010110 Bila dibagi menjadi blok 5-bit: 10011 10101 00010
Padding bits mengakibatkan ukuran plainteks hasil dekripsi lebih besar daripada ukuran plainteks semula. FTSI Unipdu Kriptografi
9
Representasi dalam Heksadesimal
Pada beberapa algoritma kriptografi, pesan dinyatakan dalam kode Hex: 0000 = 0
0001 = 1
0010 = 2
0011 = 3
0100 = 4 1000 = 8 1100 = C
0101 = 5 1011 = 9 1101 = D
0011 = 6 1010 = A 1101 = E
0111 = 7 1011 = B 1111 = F
Contoh: plainteks 100111010110 dibagi menjadi blok 4-bit: 1001
1101
0110
dalam notasi HEX adalah 9 D 6 FTSI Unipdu Kriptografi
10
5
6/8/2013
Operasi XOR
Notasi: ⊕ Operasi: 0⊕0=0 1⊕0=1
0⊕1=1 1⊕1=0
Operasi XOR = penjumlahan modulo 2: 0 ⊕ 0 = 0 ⇔ 0 + 0 (mod 2) = 0 0 ⊕ 1 = 1 ⇔ 0 + 1 (mod 2) = 1 1 ⊕ 0 = 1 ⇔ 0 + 1 (mod 2) = 1 1 ⊕ 1 = 1 ⇔ 1 + 1 (mod 2) = 0
FTSI Unipdu Kriptografi
11
Hukum-hukum yang terkait dengan operator XOR: (i) a ⊕ a = 0 (ii) a ⊕ b = b ⊕ a (iii) a ⊕ (b ⊕ c) = (a ⊕ b) ⊕ c
FTSI Unipdu Kriptografi
12
6
6/8/2013
Operasi XOR Bitwise • Jika dua rangkaian dioperasikan dengan XOR, maka operasinya dilakukan dengan meng-XOR-kan setiap bit yang berkoresponden dari kedua rangkaian bit tersebut. Contoh: 10011 ⊕ 11001 = 01010 yang dalam hal ini, hasilnya diperoleh sebagai berikut: 1 0 0 1 1 1 1 0 0 1 ⊕ 1 ⊕ 1 0 ⊕ 1 0 ⊕ 0 1⊕ 0 1 ⊕ 1 0 1 0 1 0 FTSI Unipdu Kriptografi
13
Algoritma Enkripsi dengan XOR
Enkripsi: C = P ⊕ K
Dekripsi: P = C ⊕ K
Contoh:
plainteks kunci
01100101 00110101 ⊕
(karakter ‘e’) (karakter ‘5’)
cipherteks kunci
01010000 00110101 ⊕
(karakter ‘P’) (karakter ‘5’)
plainteks
01100101
(karakter ‘e’)
FTSI Unipdu Kriptografi
14
7
6/8/2013
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.
FTSI Unipdu Kriptografi
15
/* Enkripsi sembarang berkas dengan algoritma XOR sederhana. */ #include <stdio.h> main(int argc, char *argv[]) { FILE *Fin, *Fout; char p, c, K[100]; int i, n; Fin = fopen(argv[1], "rb"); if (Fin == NULL) printf("Kesalahan dalam membuka %s sebagai berkas masukan/n", argv[1]); Fout = fopen(argv[2], "wb"); printf("\nEnkripsi %s menjadi %s ...\n", argv[1], argv[2]); printf("\n"); printf("Kata kunci : "); gets(K); n = strlen(K); /*panjang kunci*/ i = 0; while ((p = getc(Fin)) != EOF) { c = p ^ K[i]; /* operasi XOR */ putc(c, Fout); i++; if (i > (n - 1)) i = 0; } fclose(Fin); fclose(Fout); }
FTSI Unipdu Kriptografi
16
8
6/8/2013
/* Dekripsi sembarang berkas dengan */
algoritma XOR sederhana.
#include <stdio.h> main(int argc, char *argv[]) { FILE *Fin, *Fout; char p, c, K[100]; int i, n; Fin = fopen(argv[1], "rb"); if (Fin == NULL) printf("Kesalahan dalam membuka %s sebagai berkas masukan/n",
argv[1]);
Fout = fopen(argv[2], "wb"); printf("\nEnkripsi %s menjadi %s ...\n", argv[1], argv[2]); printf("\n"); printf("Kata kunci : "); gets(K); n = strlen(K); /*panjang kunci*/ i = 0; while ((c = getc(Fin)) != EOF) { p = c ^ K[i]; /* operasi XOR */ putc(p, Fout); i++; if (i > (n - 1)) i = 0; } fclose(Fin); fclose(Fout); }
FTSI Unipdu Kriptografi
P a da w is u d a s a r ja n a b a ru , te r n ya t a ad a s e or a n g w i su d a w an y an g p a li n g m u d a. U m ur n y a b a ru 2 1 t a hu n . In i b e ra r t i d i a m a s uk I TB p a da u mu r 17 t a hu n . Z a ma n se k a ra n g ba n y ak s a rj a n a m a si h b er u s ia m u da b el i a .
7
S IS
H
S A
S H H
17
o
G KS=
b
E A YA
F A.
E S
A
H
G ( : 'y @ES2 b
A
S
FTSI Unipdu Kriptografi
N E A
G P YE H
K
18
9
6/8/2013
Program komersil yang berbasis DOS atau Macintosh menggunakan algoritma XOR sederhana ini.
Sayangnya, algoritma XOR sederhana tidak aman karena cipherteksnya mudah dipecahkan.
FTSI Unipdu Kriptografi
19
10