26 Juli 2013 Tugas Akhir – KI091391 1
IMPLEMENTASI ALGORITMA RIJNDAEL DENGAN MENGGUNAKAN KUNCI ENKRIPSI YANG
BERUKURAN MELEBIHI 256 BIT (Kata kunci: Advanced Encryption Standard, Algoritma Rijndael, cipher key,
enkripsi)
PRESENTASI TUGAS AKHIR – KI091391
Penyusun Tugas Akhir :
Gracius Cagar Gunawan
(NRP : 5109100168)
Dosen Pembimbing :
Ahmad Saikhu, S.Si., M.T.
Rully Soelaiman, S.Kom., M.Kom.
26 Juli 2013 Tugas Akhir – KI091391 2
AGENDA
Pendahuluan
• Latar Belakang
• Rumusan Masalah
• Batasan Masalah
• Tujuan
Dasar Teori
• Advanced Encryption Standard (AES)
• Inverse AES
• Electronic Codebook (ECB)
Desain Aplikasi
Uji Coba dan Evaluasi
• Skenario Uji Coba
• Kesimpulan
• Saran
AES dan hubungannya dengan Algoritma Rijndael
Perkembangan teknologi berdasarkan Hukum Moore
26 Juli 2013 Tugas Akhir – KI091391 3
LATAR BELAKANG
Dapatkah fungsi key expansion pada Algoritma Rijndael menerima cipher key yang berukuran melebihi 256 bit?
Bagaimana implementasinya?
Bagaimana kecepatannya?
26 Juli 2013 Tugas Akhir – KI091391 4
RUMUSAN MASALAH
Kebenaran dari proses enkripsi adalah berdasarkan www.spoj.com/problems/AES64KE.
• Ukuran cipher key dan data dibatasi hingga 64 kilobit.
• Ukuran cipher key dan data selalu merupakan kelipatan 128 bit.
Kebenaran dari proses dekripsi adalah berdasarkan kembalinya informasi semula yang telah terenkripsi.
26 Juli 2013 Tugas Akhir – KI091391 5
BATASAN MASALAH
Tujuan dari tugas akhir ini adalah membuat sebuah perangkat lunak yang dapat melakukan enkripsi Rijndael menggunakan kunci enkripsi yang berukuran 32 bit sampai dengan 64 kilobit.
26 Juli 2013 Tugas Akhir – KI091391 6
TUJUAN
Data = masukan yang akan dienkripsi
State = keadaan data saat dalam proses enkripsi AES
Word = 4 byte
Nb = ukuran data dalam satuan word, pada AES, Nb = 4
Nk = ukuran cipher key dalam satuan word
Nr = banyaknya Transformasi Round yang akan dijalankan, pada AES, Nr = Nk+6
26 Juli 2013 Tugas Akhir – KI091391 7
AES
26 Juli 2013 Tugas Akhir – KI091391 8
AES
Data dan cipher key Key expansion Add round key i = 1
Round i++ = Nr-1 Final round Cipher text
Y
N
Data dibentuk dalam matriks 4xNb yang nomor barisnya adalah 0 sampai 3 dan nomor kolomnya adalah 0 sampai Nb-1.
Pengisian data dilakukan dengan cara memenuhi sebuah kolom terlebih dahulu dan dimulai dari kolom ke-0 baris ke-0.
26 Juli 2013 Tugas Akhir – KI091391 9
DATA DAN CIPHER KEY
00 11 22 33 44 55 66 77 88 99 aa bb cc dd ee ff
00 44 88 cc 11 55 99 dd 22 66 aa ee 33 77 bb ff
Cipher key dibentuk dalam matriks 4xNk yang nomor barisnya adalah 0 sampai 3 dan nomor kolomnya adalah 0 sampai Nk-1.
Cara pengisian matriks cipher key sama dengan cara pengisian matriks data.
26 Juli 2013 Tugas Akhir – KI091391 10
DATA DAN CIPHER KEY
00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f
00 04 08 0c 10 14 18 1c 01 05 09 0d 11 15 19 1d 02 06 0a 0e 12 16 1a 1e 03 07 0b 0f 13 17 1b 1f
Key expansion yang digunakan adalah key expansion pada Algoritma Rijndael.
Key expansion menambahkan ukuran matriks cipher key dari 4*Nk manjadi matriks expanded key (W) yang berukuran 4*(Nb*(Nr+1)).
Expanded key terdiri dari Nr+1 bagian dimulai dari bagian ke-0 sampai bagian ke-Nr dengan setiap bagian berupa matriks 4xNb.
Kegunaan expanded key adalah sebagai matriks penjumlah dalam proses add round key.
26 Juli 2013 Tugas Akhir – KI091391 11
RIJNDAEL KEY EXPANSION
Bagian awal dari expanded key merupakan cipher key itu sendiri.
26 Juli 2013 Tugas Akhir – KI091391 12
Expanded Key 0 00 04 08 0c 01 05 09 0d 02 06 0a 0e 03 07 0b 0f
Cipher Key
00 04 08 0c 10 14 18 1c 01 05 09 0d 11 15 19 1d 02 06 0a 0e 12 16 1a 1e 03 07 0b 0f 13 17 1b 1f
Expanded Key 1 10 14 18 1c 11 15 19 1d 12 16 1a 1e 13 17 1b 1f
RIJNDAEL KEY EXPANSION
Untuk selanjutnya, asumsikan i mewakili baris dan j mewakili kolom.
Jika j merupakan kelipatan dari Nk, maka W[0][j] = W[0][j-Nk] ⨁ sub_byte(W[1][j-1]) ⨁ RCon(j/Nk)
Untuk i = 1 sampai 3, W[i][j] = W[i][j-Nk] ⨁ sub_byte(W[(i+1)%4][j-1])
26 Juli 2013 Tugas Akhir – KI091391 13
Expanded Key 2 a5 a1 a9 a5 73 76 7f 72 c2 c4 ce c0 9f 98 93 9c
Cipher Key
00 04 08 0c 10 14 18 1c 01 05 09 0d 11 15 19 1d 02 06 0a 0e 12 16 1a 1e 03 07 0b 0f 13 17 1b 1f
Expanded Key 1 10 14 18 1c 11 15 19 1d 12 16 1a 1e 13 17 1b 1f
SubByte(1d) = a4, RCon(110) = 00 SubByte(1e) = 72 SubByte(1f) = c0 SubByte(1c) = 9c
RIJNDAEL KEY EXPANSION
Khusus untuk Nk>6, ketika j modulo Nk bernilai 4, W[i][j] = W[i][j-Nk] ⨁ sub_byte(W[i][j-1])
26 Juli 2013 Tugas Akhir – KI091391 14
Expanded Key 2 a5 a1 a9 a5 73 76 7f 72 c2 c4 ce c0 9f 98 93 9c
Expanded Key 1 10 14 18 1c 11 15 19 1d 12 16 1a 1e 13 17 1b 1f
SubByte(a5) = 06 SubByte(72) = 40 SubByte(c0) = ba SubByte(9c) = de
Expanded Key 3 16 02 1a 06 51 44 5d 40 a8 be a4 ba cd da c1 de
RIJNDAEL KEY EXPANSION
Selain itu, W[i][j] = W[i][j-Nk] ⨁ W[i][j-1]
26 Juli 2013 Tugas Akhir – KI091391 15
Expanded Key 2 a5 a1 a9 a5 73 76 7f 72 c2 c4 ce c0 9f 98 93 9c
Expanded Key 0 00 04 08 0c 01 05 09 0d 02 06 0a 0e 03 07 0b 0f
RIJNDAEL KEY EXPANSION
RCon merupakan fungsi perpangkatan dua dengan satu kurangnya dari masukannya dengan satu kurangnya dari nol adalah 255.
Perpangkatan pada RCon dilakukan pada polinomial GF(28) dengan m(x) = x8 + x4 + x3 + x + 1.
26 Juli 2013 Tugas Akhir – KI091391 16
RCON
RCon(1210) = x11 % (x8 + x4 + x3 + x + 1) = x7 + x6 + x4 + x3 = d8
Sub byte adalah transformasi linear terhadap invers dari byte masukan berdasarkan persamaan:
26 Juli 2013 Tugas Akhir – KI091391 17
SUB BYTE
𝑏`7𝑏`6𝑏`5𝑏`4𝑏`3𝑏`2𝑏`1𝑏`0
=
1 10 1
1 11 1
0 00 0
1 10 1
1 01 1
0 00 0
1 11 1
1 01 1
1 01 1
0 00 0
1 11 1
1 01 1
1 10 1
1 11 1
0 00 0
1 10 1
𝑏7𝑏6𝑏5𝑏4𝑏3𝑏2𝑏1𝑏0
+
01100011
SubByte(1d) = ? (1d)-1 = 40 = 010000002
10100100
=
1 10 1
1 11 1
0 00 0
1 10 1
1 01 1
0 00 0
1 11 1
1 01 1
1 01 1
0 00 0
1 11 1
1 01 1
1 10 1
1 11 1
0 00 0
1 10 1
01000000
+
01100011
SubByte(1d) = 101001002 = a4
Add round key merupakan penjumlahan state dengan bagian tertentu dari expanded key.
Add round key yang dilakukan pertama kali menjumlahkan state dengan expanded key bagian ke-0.
26 Juli 2013 Tugas Akhir – KI091391 18
ADD ROUND KEY
State
00 40 80 c0 10 50 90 d0 20 60 a0 e0 30 70 b0 f0
State
00 44 88 cc 11 55 99 dd 22 66 aa ee 33 77 bb ff
Expanded Key 0 00 04 08 0c 01 05 09 0d 02 06 0a 0e 03 07 0b 0f
26 Juli 2013 Tugas Akhir – KI091391 19
Round
Sub bytes
Shift rows
Mix columns
Add round key
Sub bytes adalah transformasi sub byte untuk setiap byte pada state
00 40 80 c0 10 50 90 d0 20 60 a0 e0 30 70 b0 f0
63 09 cd ba ca 53 60 70 b7 d0 e0 e1 04 51 e7 8c
Shift rows adalah penggeseran setiap baris pada state seperti:
63 09 cd ba ca 53 60 70 b7 d0 e0 e1 04 51 e7 8c
63 09 cd ba 53 60 70 ca e0 e1 b7 d0 8c 04 51 e7
Mix columns didefinsikan sebagai transformasi mix column untuk setiap kolom pada state melalui persamaan: 𝑏`0,𝑗𝑏`1,𝑗𝑏`2,𝑗𝑏`3,𝑗
=
0𝑥02 0𝑥030𝑥01 0𝑥02
0𝑥01 0𝑥010𝑥03 0𝑥01
0𝑥01 0𝑥010𝑥03 0𝑥01
0𝑥02 0𝑥030𝑥01 0𝑥02
𝑏0,𝑗𝑏1,𝑗𝑏2,𝑗𝑏3,𝑗
63 09 cd ba 53 60 70 ca e0 e1 b7 d0 8c 04 51 e7
5f 57 f7 1d 72 f5 be b9 64 bc 3b f9 15 92 29 1a
Add round key yang dilakukan pada round
ke-i menjumlahkan state dengan expanded key
pada bagian i.
4f 43 ef 01 63 e0 a7 a4 76 aa 21 e7 06 85 32 05
5f 57 f7 1d 72 f5 be b9 64 bc 3b f9 15 92 29 1a
Expanded Key 1 10 14 18 1c 11 15 19 1d 12 16 1a 1e 13 17 1b 1f
26 Juli 2013 Tugas Akhir – KI091391 20
Final Round
Sub bytes Shift rows Add round key
62 99 c9 23 7b 9d 45 f5 ce 5a ec 6d b9 aa f4 a5
aa ee dd 26 21 5e 6e e6 8b be ce 3c 56 ac bf 06
aa ee dd 26 5e 6e e6 21 ce 3c 8b be 06 56 ac bf
8e 51 ea 4b a2 67 fc 49 b7 45 49 60 ca bf 90 89
Expanded Key 14 24 bf 37 6d fc 09 1a 68 79 79 c2 de cc e9 3c 36
Inverse AES merupakan algoritma dekripsi untuk cipher text keluaran AES.
Struktur dari inverse AES hampir sama dengan AES.
26 Juli 2013 Tugas Akhir – KI091391 21
INVERSE AES
26 Juli 2013 Tugas Akhir – KI091391 22
PERBEDAAN INVERSE AES DENGAN AES
Add round key pertama
Inverse round
• Inverse shift rows
• Inverse sub bytes
• Add round key
• Inverse mix columns
Inverse final round
• Inverse shift rows
• Inverse sub bytes
• Add round key
Add round key pertama pada inverse AES menggunakan expanded key bagian ke-Nr
𝑏7𝑏6𝑏5𝑏4𝑏3𝑏2𝑏1𝑏0
=
0 10 0
0 11 0
1 00 1
0 10 0
0 01 0
1 00 1
0 11 0
0 01 0
0 01 0
1 00 1
0 11 0
0 01 0
0 10 0
0 11 0
1 00 1
0 10 0
𝑏`7𝑏`6𝑏`5𝑏`4𝑏`3𝑏`2𝑏`1𝑏`0
+
01100011
Expanded key yang digunakan pada setiap round dimulai dengan expanded key bagian ke Nr-1 sampai dengan bagian ke-1
𝑏0,𝑗𝑏1,𝑗𝑏2,𝑗𝑏3,𝑗
=
0𝑥0𝐸 0𝑥0𝐵0𝑥09 0𝑥0𝐸
0𝑥0𝐷 0𝑥090𝑥0𝐵 0𝑥0𝐷
0𝑥0𝐷 0𝑥090𝑥0𝐵 0𝑥0𝐷
0𝑥0𝐸 0𝑥0𝐵0𝑥09 0𝑥0𝐸
𝑏`0,𝑗𝑏`1,𝑗𝑏`2,𝑗𝑏`3,𝑗
Expanded key yang digunakan oleh inverse final round adalah bagian ke-0
26 Juli 2013 Tugas Akhir – KI091391 23
ECB
00 11 22 33 44 55 66 77 88 99 aa bb cc dd ee ff 00 11 22 33 44 55 66 77 88 99 aa bb cc dd ee ff
00 44 88 cc 11 55 99 dd 22 66 aa ee 33 77 bb ff
00 44 88 cc 11 55 99 dd 22 66 aa ee 33 77 bb ff
8e 51 ea 4b a2 67 fc 49 b7 45 49 60 ca bf 90 89
8e 51 ea 4b a2 67 fc 49 b7 45 49 60 ca bf 90 89
8e 51 ea 4b a2 67 fc 49 b7 45 49 60 ca bf 90 89 8e 51 ea 4b a2 67 fc 49 b7 45 49 60 ca bf 90 89
Key expansion tidak diletakkan dalam AES, tetapi dalam ECB.
RCon dan sub byte diimplementasikan sebagai sebuah larik.
26 Juli 2013 Tugas Akhir – KI091391 24
DESAIN APLIKASI
1. Uji kebenaran enkripsi : pengumpulan di SPOJ
2. Uji kebenaran dekripsi : setelah dekripsi = sebelum enkripsi
3. Uji kecepatan : pengaruh Nb dan Nk
SKENARIO UJI COBA
26 Juli 2013 Tugas Akhir – KI091391 25
SKENARIO 1 DAN 2
26 Juli 2013 Tugas Akhir – KI091391 26
SKENARIO 3
26 Juli 2013 Tugas Akhir – KI091391 27
Percobaan Ukuran Cipher Key (byte) Waktu (milidetik)
1 1024 296
2 2048 592
3 3072 873
4 4096 1170
5 5120 1450
6 6144 1731
7 7168 2028
8 8192 2293
9 9216 2589
10 10240 2886
Percobaan Ukuran Data (byte) Waktu (milidetik)
1 65536 327
2 131072 624
3 196608 905
4 262144 1216
5 327680 1544
6 393216 1825
7 458752 2106
8 524288 2449
9 589824 2730
10 655360 3010
Ukuran cipher key tetap : 4096 bit
Ukuran data tetap : 262144 bit
Algoritma Rijndael dapat menerima ukuran cipher key yang lebih besar daripada 256 bit dan kebenaran enkripsi terjamin ketika ukuran cipher key kurang dari atau sama dengan 64 kbit.
Kecepatan enkripsi AES dipengaruhi secara linear oleh besar data dan besar cipher key sehingga kompleksitas waktunya adalah
Q(Nb*Nk) .
Penambahan cipher key lebih berefek terhadap waktu proses daripada penambahan data.
KESIMPULAN
26 Juli 2013 Tugas Akhir – KI091391 28
Algoritma enkripsi yang memiliki blok masukan yang besar dibutuhkan agar tingkat keamanan terhadap dictionary attack juga lebih terjamin.
Dengan alasan optimasi memori, dibutuhkan fungsi key schedule yang dapat digunakan pada berbagai macam ukuran cipher key agar expanded key tidak perlu disimpan dalam memori.
SARAN
26 Juli 2013 Tugas Akhir – KI091391 29
26 Juli 2013 Tugas Akhir – KI091391 30
TERIMA KASIH