Kriptografi Week10 Algoritma Simetri DES
Data Encryption Standard - DES
Outline
Sejarah DES
Enkripsi DES
Implementasi Hardware dan Software DES
Keamanan 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
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 (subkey).
Kunci internal dibangkitkan dari kunci eksternal (external key) yang panjangnya 64 bit.
Skema global dari algoritma DES adalah sebagai berikut : Skema global dari algoritma DES adalah sebagai berikut :
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 -1
permutasi balikan (invers initial permutation atau IP ) menjadi blok cipherteks
Skema
DES yang
lebih rinci
Enkripsi
DES P = 0123456789ABCDEFK = 133457799BBCDFF1
P = 0123456789ABCDEF
Dalam binary menjadi:
P = 0000 0001 0010 0011 0100 0101 0110 0111
1000 1001 1010 1011 1100 1101 1110 1111Langkah 1 : Encoding setiap 64 bit data pada
Plaintext dengan IP (Initial Permutation)
50
46
8
16
24
32
40
48
56
64
6
14
22
30
38
54
49
62
4
12
20
28
36
44
52
60
2
10
18
26
34
57
41
50
37
Urutan bit pada plaintext urutan ke 50 ditaruh di posisi 2, dst
7 Urutan bit pada plaintext urutan ke 58 ditaruh diposisi 1,
15
23
31
39
47
55
63
5
13
21
29
45
33
53
61
3
11
19
27
35
43
51
59
1
9
17
25
42
58
42
46
8
16
24
32
40
48
56
64
6
14
22
30
38
54
49
62
4
12
20
28
36
44
52
60
2
10
18
26
34
57
41
58
37
1010 1011 1100 1101 1110 1111
P = 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001
7 IP
15
23
31
39
47
55
63
5
13
21
29
45
33
53
61
3
11
19
27
35
43
51
59
1
9
17
25
IP = 1
Langkah 1 (Cont’d) : Encoding setiap 64 bit
data pada Plaintext dengan IP (Initial Permutation)62
24
32
40
48
56
64
6
14
22
30
38
46
54
4
8
12
20
28
36
44
52
60
2
10
18
26
34
42
50
16
57
IP = 1
53
15
23
31
39
47
55
63
5
13
21
29
37
45
61
49
3
11
19
27
35
43
51
59
1
9
17
25
33
41
58
1010 1011 1100 1101 1110 1111
58
62
24
32
40
48
56
64
6
14
22
30
38
46
54
4
8
12
20
28
36
44
52
60
2
10
18
26
34
42
50
16
57
P = 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001
53
7 IP
15
23
31
39
47
55
63
5
13
21
29
37
45
61
49
3
11
19
27
35
43
51
59
1
9
17
25
33
41
7 IP = 11
Langkah 1 (Cont’d) : Encoding setiap 64 bit
data pada Plaintext dengan IP (Initial Permutation)62
24
32
40
48
56
64
6
14
22
30
38
46
54
4
8
12
20
28
36
44
52
60
2
10
18
26
34
42
50
16
57
IP = 1100 1100 0000 0000 1100 1100 1111 1111 1111 0000
53
15
23
31
39
47
55
63
5
13
21
29
37
45
61
49
3
11
19
27
35
43
51
59
1
9
17
25
33
41
58
1010 1011 1100 1101 1110 1111
58
62
24
32
40
48
56
64
6
14
22
30
38
46
54
4
8
12
20
28
36
44
52
60
2
10
18
26
34
42
50
16
57
P = 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001
53
7 IP
15
23
31
39
47
55
63
5
13
21
29
37
45
61
49
3
11
19
27
35
43
51
59
1
9
17
25
33
41
7 Pecah menjadi L dan R 0...!!! Pecah IP menjadi bagian kiri sebanyak 32 bit (L ) dan kanan sebanyak 32 bit (R )
IP = 1100 1100 0000 0000 1100 1100 1111 1111 1111 0000 1010 1010 1111 0000 1010 1010
LR
Jadi
L = 1100 1100 0000 0000 1100 1100 1111 1111 R = 1111 0000 1010 1010 1111 0000 1010 1010
K = 133457799BBCDFF1 K dalam binary:
1 = 0001 3 = 0011 Ditulis berkelompok setiap 8 bit menjadi
00010011 Sehingga K menjadi
Membangkitkan kunci eksternal
2
44
52
60
3
11
19
27
35
43
51
59
10
63
18
26
34
42
50
58
1
9
17
25
33
41
36
55
57
61
4 K= 00010011 00110100 01010111 01111001 10011011 10111100 11011111 11110001
12
20
28
5
13
21
29
37
45
53
16
47
14
22
30
38
46
54
62
7
15
23
31
39
49
4
Gunakan permutasi PC-1
18
60
3
11
19
27
35
43
51
59
2
10
26
44
34
42
50
58
1
9
17
25
33
41
49
57
52
36
12
14
20
28
5
13
21
29
37
45
53
61
16
22
63
30
38
46
54
62
7
15
23
31
39
47
55
Maka:
30
63
55
47
39
31
23
15
7
62
54
46
38
22
44
14
16
61
53
45
37
29
21
13
5
28
20
12
36
52
Gunakan permutasi PC-1
50
K+ =1 K+ =11
K= 00010011 00110100 01010111 01111001 10011011 10111100
11011111 11110001
57
49
41
33
25
17
9
1
58
42
60
34
26
18
10
2
59
51
43
35
27
19
11
3
4 Maka:
59
36
44
52
60
3
11
19
27
35
43
51
2
55
10
18
26
34
42
50
58
1
9
17
25
33
63
47
49
53
K dipermutasi menggunakan tabel PC-1 di atas sehingga 64 bit key
menjadi hanya 56 bit key
4 K= 00010011 00110100 01010111 01111001 10011011 10111100 11011111 11110001
12
20
28
5
13
21
29
37
45
61
39
16
14
22
30
38
46
54
62
7
15
23
31
41
57
Gunakan permutasi
18
60
3
11
19
27
35
43
51
59
2
10
26
44
34
42
50
58
1
9
17
25
33
41
49
57
52
36
4 PC-1
14
12
20
28
5
13
21
29
37
45
53
61
16
22
63
30
38
46
54
62
7
15
23
31
39
47
55
K+ =1111000 0110011 0010101 0101111 0101010 1011001
Selanjutnya bagi Key menjadi 2 bagian kanan dan kiri,C
dan D yang setiap bagian 28 bit panjangnya Dari K+ =1111000 0110011 0010101 0101111 0101010 1011001 1001111 0001111C D
Kita mendapatkan
C = 1111000 0110011 0010101 0101111 D = 0101010 1011001 1001111 0001111
Setelah mendapatkan C0 dan D0, sekarang kita membuat 6 blok Cn dan Dn yang setiap blok berasal dari Cn-1 dan Dn-1.
Selanjutnya, kedua bagian digeser ke kiri (left shift) sepanjang satu atau dua bit bergantung pada tiap putaran.
Operasi pergeseran bersifat wrapping atau round-shift.
Pergeseran tiap putaran berdasarkan tabel di bawah ini Putaran Jumlah pergeseran ke bit
1
1
2
1
3
2
4
2
5
2
6
2
7
2
9
1
10
2
11
2
12
2
14
2
14
2
15
2 Dari C dan D awal kita mendapatkan : C = 1111000011001100101010101111 D = 0101010101100110011110001111
Dari keterangan tabel sebelumnya maka kita geser C dan D ke kiri sebanyak 1 kali (berdasarkan slide di halaman sebelumnya)
C C = 1110000110011001010101011111 = 1111000011001100101010101111
1 D D = 0101010101100110011110001111 = 1010101011001100111100011110
1 Dan lakukan seterusnya sampai C16 dan D16
C = 1100001100110010101010111111 C C C C C C C C C C C C C C C = 0011001100101010101111111100 = 1110000110011001010101011111 = 0000110011001010101011111111 = 1100101010101111111100001100 = 1100110010101010111111110000 = 0011001010101011111111000011 = 0101010101111111100001100110 = 0010101010111111110000110011 = 1111100001100110010101010111 = 0101010111111110000110011001 = 111100001100110010101010111 = 0101011111111000011001100101 = 0101111111100001100110010101 = 1111111000011001100101010101 = 0111111110000110011001010101
2
16
7
3
1
6
10
8
14
9
5
15
11
13
4
D D D D D D D D D D D D D D D = 1001100111100011110101010101 = 1001111000111101010101011001 = 0110011001111000111101010101 = 0101011001100111100011110101 = 0011110001111010101010110011 = 1010101011001100111100011110 = 0101100110011110001111010101 = 0110011110001111010101010110 = 1100011110101010101100110011 = 0111101010101011001100111100 = 0001111010101010110011001111 = 1111000111101010101011001100 = 1010101010110011001111000111 = 1110101010101100110011110001 = 010101010110011001111000111
2
Gunakan permutasi PC-2
56
55
30
40
51
45
33
48
44
49
39
34
37
53
46
42
50
36
29
32 Untuk C 1 D 1 kita mendapatkan
C 1 D 1 = 1110000 1100110 0101010 1011111 1010101 0110011 0011110 0011110
Dipermutasi menjadi
K 1 = 000110 110000 001011 101111 111111 000111 000001 110010
47
14
17
23
11
24
1
5
3
28
15
6
21
10
19
52
12
4
26
8
16
7
27
20
13
2
41
31 Untuk subkey yang lain kita mendapatkan
K 2
K 10
K 16
= 101111 111001 000110 001101 001111 010011 111100 001010
K 15
= 010111 110100 001110 110111 111100 101110 011100 111010
K 14
= 100101 111100 010111 010001 111110 101011 101001 000001
K 13
= 011101 010111 000111 110101 100101 000110 011111 101001
K 12
= 001000 010101 111111 010011 110111 101101 001110 000110
K 11
= 101100 011111 001101 000111 101110 100100 011001 001111
= 111000 001101 101111 101011 111011 011110 011110 000001
= 011110 011010 111011 011001 110110 111100 100111 100101
K 9
= 111101 111000 101000 111010 110000 010011 101111 111011
K 8
= 111011 001000 010010 110111 111101 100001 100010 111100
K 7
= 011000 111010 010100 111110 010100 000111 101100 101111
K 6
= 011111 001110 110000 000111 111010 110101 001110 101000
K 5
= 011100 101010 110111 010110 110110 110011 010100 011101
K 4
= 010101 011111 110010 001010 010000 101100 111110 011001
K 3
= 110010 110011 110110 001011 000011 100001 011111 110101
Enchipering
Setiap blok plainteks mengalami 16 kali putaran
enciphering .Setiap putaran enciphering merupakan jaringan Feistel yang secara matematis dinyatakan sebagai L i
= R i – 1
R i
= L i – 1
f(R i – 1
, K i
)
Untuk menghitung fungsi f , pertama kita perluas setiap blok dari Ri-1 dari 32 bit menjadi 48 bit dengan menggunakan tabel yang mengulang beberapa bit daridi Rn-1. Tabel ini dikenal dengan fungsi E.
E-Bit Selection Table
25
20
21
20
21
22
23
24
25
24
26
18
27
28
29
28
29
30
31
32
1 R = 1111 0000 1010 1010 1111 0000 1010 1010 menjadi
E(R ) = 011110 100001 010101 010101 011110 100001 010101
19
32
1
8
2
3
4
5
4
5
6
7
8
9
9
16
10
11
12
13
12
13
14
15
16
17
17
Selanjutnya untuk menghitung f XOR hasil dari
n-1n
E(R ) dengan Key K K = 000110 110000 001011 101111 111111 000111 000001 110010 1 E(R ) = 011110 100001 010101 010101 011110 100001 010101 010101 K E(R ) = 011000 010001 011110 111010 100001 100110 010100 100111 1 Langkah 12
Selanjutnya gunakan setiap 6 bit hasil dari K E(R ) untuk menjadi 1 alamat tabel yang dinamakan S-Box. Setiap kelompok 6 bit akan memberikan alamat pada masing-masing S-box yang berbeda.
Jika ditulis dengan matematis
S (B )S (B )S (B )S (B )S (B )S (B )S (B )S (B ) 1 1 2 2 3 3 4 4 5
5
6 6 7 7 8 8Kedelapan S-box
1 7 5 11 3 14 10 0 6 13
S2
9 3 2 15
13 8 10 1 3 15 4 2 11 6 7 12 0 5 14 9
9 7 2 13 12 0 5 10
3 13 4 7 15 2 8 14 12 0 1 10 6 9 11 5
0 14 7 11 10 4 13 1 5 8 12 64
15 1 8 14 6 11 3
S1
14 4 13 1 2 15 11 8 3 10 6 12 5
9
4
2
8 4 1 14 8 13 6 2 11 15 12 9 7 3 10 5 15 12 8
3
5
7 0 15 7 4 14 2 13 1 10 6 12 11 9
9
10 0 9 14 6 3 15 5 1 13 12 7 11 4
9
9 4 5 11 12 7 2 14
8
4 3 15 6 10 1 13
8
2
5
6 9 0 12 11 7 13 15 1 3 14
10
4 7 2 12 1 10 14
2
3
2 8 5 11 12 4 15 13 8 11 5 6 15
1
8 7 4 15 14 3 11 5 2 12 7 13 14 3 6 9 10
9
6
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
9
8 13 7
S3 S4
2 12 4 1 7 10 11 6
5 6 1 13 14 0 11
7 6 8 13
1
4 3 2 12 9 5 15 10 11 14
6
3 7 4 10 1 13 11
8 9 14 15 5 2 8 12
3
9
8 5 3 15 13 0 14 9 14 11 2 12 4 7 13 1 5 0 15 10 3 9 8 16
6 8 0 13 3 4 14 7 5 11 10 15 4 2 7 12
2
9
3 12 1 10 15
5
6 3 0 14 11 8 12 7 1 14 2 13 6 15 0 9 10 4
4 2 1 11 10 13 7 8 15 9 12 5
S5 S6
4
3
14
11
6
5
12
4
7
10
2
8
7 1 15 13
12
5
14
3
9
10
9
7
4 6 15 11
7
11 S7
6
5
3
9
10
8 13 15 12
4
14
11
1
2
8
5
3
2 6 10 13 15
1 9 12 14
4
1
8
11 2 14 15
1
5
3
9 1 10 14
4
7
11
13
6
2
10
5
7
9
12
3
13
8
12
15
2
1
13
12
3
2
9 5 15 14
7
10
4
8
8
2 6 11 13
9
5
8
6
3
7 14 10 15
1 4 11 13 12
6
S8 Cara Menggunakan S-Box
Misal kita menghitung S
9
9
1 7 5 11 3 14 10 0 6 13 14 4 13 1 2 15 11 8 3 10 6 12 5
9
7 0 15 7 4 14 2 13 1 10 6 12 11 9
5
3
8 4 1 14 8 13 6 2 11 15 12 9 7 3 10 5 15 12 8
2
4
1 7 5 11 3 14 10 0 6 13
2
3. Gunakan perpotongan baris dan kolom sebagai
14 4 13 1 2 15 11 8 3 10 6 12 5
9
7 0 15 7 4 14 2 13 1 10 6 12 11 9
5
3
8 4 1 14 8 13 6 2 11 15 12 9 7 3 10 5 15 12 8
2
4
9
4
8 4 1 14 8 13 6 2 11 15 12 9 7 3 10 5 15 12 8
1
8 4 1 14 8 13 6 2 11 15 12 9 7 3 10 5 15 12 8
(B) dengan B = 011011 dan menggunakan tabel S
1
1. Gunakan bit awal dan akhir sebagai penanda baris. Dalam hal ini dengan 01 dimana desimalnya adalah 1 jadi ambil baris 1
2. Gunakan bit pertengahan antara bit awal dan akhir sebagai penanda kolom. Dalam hal ini 1101 dimana desimalnya adalah 13 jadi ambil kolom ke 13
14 4 13 1 2 15 11 8 3 10 6 12 5
9
7 0 15 7 4 14 2 13 1 10 6 12 11 9
5
3
2
3
4
9
1 7 5 11 3 14 10 0 6 13 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1
2
3
14 4 13 1 2 15 11 8 3 10 6 12 5
9
7 0 15 7 4 14 2 13 1 10 6 12 11 9
5
1 7 5 11 3 14 10 0 6 13
K 1
3
2
8
24
14
32
27
9
31
19
13
30
6
22
11
4
10
18
E(R ) = 011000 010001 011110 111010 100001 100110 010100 100111. Sehingga kita mendapatkan
21
S 1 (B 1 )S 2 (B 2 )S 3 (B 3 )S 4 (B 4 )S
5
(B 5 )S 6 (B 6 )S 7 (B 7 )S 8 (B 8 ) =0101 1100 1000 0010 1011 0101 1001 0111
Langkah akhir perhitungan f adalah dengan melakukan permutasi pada output dari S-Box dengan tabel P
16
7
20
29
5
12
28
17
1
15
23
26
25 Langkah 14 Jadi R
1 = L + f(R , K
1 )
= 1100 1100 0000 0000 1100 1100 1111 1111
0010 0011 0100 1010 1010 1001 1011 1011
= 1110 1111 0100 1010 0110 0101 0100 0100
L =1100 1100 0000 0000 1100 1100 1111 1111 f(R , K
1 ) =
0010 0011 0100 1010 1010 1001 1011 1011
Kita mendapatkan Dalam putaran selanjutnya kita mendapatkan L
2 =R
1 Dan menghitung R
- f(R
2 = L
1
1
, K2 ) dan seterusnya selama
16 putaran Langkah 15
Setelah 16 putaran kita akan mendapatkan L 16 dan R 16 , kemudian lakukan reverse menjadi R 16 L 16 dan lakukan permutasi terakhir yaitu IP -1
2
12
52
20
60
28
35
3
43
11
51
19
59
27
34
42
4
10
50
18
58
26
33
1
41
9
49
17
57
25 Jika kita telah menyelesaikan 16 putaran maka akan mendapatkan
L 16 = 0100 0011 0100 0010 0011 0010 0011 0100 R 16 = 0000 1010 0100 1100 1101 1001 1001 0101 Kita reverse menjadi : R 16 L 16 = 00001010 01001100 11011001 10010101 01000011 01000010
44
38
40
31
8
48
16
56
24
64
32
39
7
47
15
55
23
63
38
29
6
46
14
54
22
62
30
37
5
45
13
53
21
61
00110010 00110100 Langkah 16
Hasil Akhir
- -1
IP = 10000101 11101000 00010011 01010100
00001111 00001010 10110100 00000101 Jika dalam format hexadecimal menjadi
85E813540F0AB405.
Jadi enkripsi dari P = 0123456789ABCDEF Menjadi C = 85E813540F0AB405.
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
Keamanan DES
# 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 permintaan NSA, panjang kunci diperkecil menjadi 56 bit. Alasan pengurangan tidak diumumkan. 56
Tetapi, dengan panjang kunci 56 bit akan terdapat 2 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 Foundation (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.Keamanan DES
#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 cepat daripada dengan brute force attack.
Keamanan DES
#Kotak-S
Pengisian kotak-S DES masih menjadi misteri tanpa ada alasan mengapa memilih konstanta-konstanta di dalam kotak itu. Referensi :
Miles E Smid & Dennis K Brandstad (1988).The Data
Encryption Standart Past and Future. National Institute
of Standards and Technology
Coppersmith,D (1994). The Data Encryption Standart
(DES) and Its Strength Against Attack .IBM
Seung-Jo Han (1996).The improved Data Encryption
Standard (DES) Algorithm. Heang-Soo Oh, Jongan Park