LANDASAN TEORI
ATmega32 memiliki 32 general purpose register, dan register ini terhubung langsung
dengan dengan ALU (Arithmatic Logic Unit) sehingga dua register dapat sekaligus
diakses dalam satu instruksi yang dieksekusi tiap clock-nya. Sehingga arsitektur
seperti ini lebih efisien dalam eksekusi kode program dan dapat mencapai eksekusi
sepuluh kali lebih cepat dibandingkan mikrokontroler CISC (Complete Instruction Set
Computer) (Atmel, 2009). Gambar 2.1, 2.2, dan 2.3 masing-masing menunjukkan
desain memori, susunan pin, dan arsitektur mikrokontroler ATmega32.
(a)
(b)
ini software yang digunakan adalah WinAVR. Program dibuat dalam bahasa C dan
menambahkan file header untuk ATmega32 yang berisi register-register pada
ATmega32. Setelah program di-compile akan menghasilkan file dengan tipe Intel hex
(.hex). File inilah yang nantinya akan di-programkan ke ATmega32 melalui interface
bsd programmer (Brian Dean's Programmer) yang terhubung ke komputer melalui
port paralel. Koneksi antara ATmega32 dan port paralel untuk bsd programmer
diberikan oleh tabel 2.1.
ATmega32
No pin
Nama pin
No pin
Nama pin
D5
Reset
D6
SCK
D7
MOSI
10
S6
MISO
19
Ground
11
Ground
Koneksi antara keyboard dan mikrokontroler hanya menggunakan dua jalur sinyal
yaitu data dan clock, dan koneksi lain yang dibutuhkan adalah kutub positif dan
negatif tegangan 5V DC yang dapat diambil dari tegangan yang diberikan untuk
mikrokontroler. Antar muka keyboard dan mikrokontroler ditunjukkan gambar 2.4.
Konektor yang digunakan keyboard ada dua macam yaitu konektor 5-pin DIN
dan konektor 6-pin mini DIN (Deutsches Institut fuer Norm). Sampai sekarang ini
konektor yang sering dipakai adalah 6-pin mini DIN. Perbedaan antara kedua tipe
konektor ini dan defenisi pin-pinnya ditunjukkan tabel 2.2.
(Sumber: http://www.scienceprog.com)
Setiap suatu tombol ditekan keyboard akan mengirimkan scancode melalui pin
data. Jika tombol masih ditekan untuk beberapa saat maka scancode tombol tersebut
akan terus dikirimkan sampai tombol tersebut dilepas. Setelah tombol dilepas
keyboard akan mengirimkan sinyal byte F0 dan diikuti dengan scancode-nya.
Sedangkan jika tombol extended keys dilepas keyboard akan mengirimkan byte E0
terlebih dahulu kemudian diikuti byte F0 dan selanjutnya diikuti byte scancode
belakangnya setelah byte E0. Scancode untuk keyboard ditunjukkan gambar 2.5 dan
2.6.
Scancode keyboard dikirimkan secara serial dengan format sebelas bit yang
dimulai dengan bit awal 0 diikuti dengan delapan bit scancode, satu bit parity dan
diakhiri satu bit terakhir 1. Delapan bit scancode yang dikirimkan dimulai dengan
LSB (Least Significant Bit) dan diakhiri dengan MSB (Most Significant Bit). Setiap bit
dari format serial ini nilainya valid saat perubahan clock dari high ke low. Format data
serial ini ditunjukkan gambar 2.7.
LMB162A adalah piranti output berupa LCD untuk sistem komputer atau
mikrokontroler yang dapat menampilkan karakter standar yang telah tersimpan dalam
ROM pada LCD tersebut. Karakter yang dapat ditampilkan sebanyak 32 karakter yang
tersusun dalam 16 kolom dan dua baris, sehingga sering disebut LCD 16x2. LCD ini
memiliki 16 pin dan memerlukan tegangan 5V DC. Gambar 2.8 menunjukkan bentuk
dan susunan pin LCD dan keterangan dari setiap pin diberikan pada tabel 2.3.
Nama pin
Level
Fungsi
Vss
Ground
Vdd
Vo
0V 5V
RS
H/L
Register Selection
R/W
H/L
HL
Enable
DB0
H/L
Data Bit 0
DB1
H/L
Data Bit 1
DB2
H/L
Data Bit 2
10
DB3
H/L
Data Bit 3
11
DB4
H/L
Data Bit 4
12
DB5
H/L
Data Bit 5
13
DB6
H/L
Data Bit 6
14
DB7
H/L
Data Bit 7
15
LEDA
16
LEDK
Untuk menampilkan karakter pada LCD ada beberapa algoritma yang harus
dijalankan. Algoritma ini dilakukan dengan memberikan nilai logika 0 atau 1 pada pin
yang bersangkutan. Algoritma untuk penampilan karakter ini antara lain:
1. Mengatur display LCD, cursor dan blink.
RS
R/W
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
10
Keterangan:
D: D=0 display mati dan D=1 display hidup
C: C=0 cursor mati dan C=1 cursor hidup
B: B=0 blink mati dan B=1 blink hidup
RS
R/W
10
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
Keterangan:
Nilai dari DB0 sampai DB7 yang dimasukkan nantinya akan mengatur tampilan
karakter yang berkorespondensi dengan kode karakter CGROM pada chip LCD. Kode
karakter CGROM diberikan pada gambar 2.10 yang terdiri dari kolom yang
menunjukkan DB6 DB7 dan baris yang menunjukkan DB0 DB3.
Menurut Schneier (1996) dalam Munir (2006) kriptografi adalah seni dan ilmu untuk
menjaga kerahasiaan pesan dengan cara menyandikannya ke dalam bentuk yang tidak
dapat dimengerti lagi maknanya. Pengertian lain tentang kriptografi diungkapkan oleh
Menezes (1996) dalam Munir (2006) yang menyatakan bahwa kriptografi adalah ilmu
yang mempelajari teknik-teknik matematika yang berhubungan dengan aspek
keamanan informasi seperti kerahasiaan, integritas data, serta otentikasi. Dalam
kriptografi pesan atau disebut plainteks disandikan menggunakan algoritma tertentu
dan menggunakan suatu kunci (cipher key) dan menghasilkan pesan yang telah
tersandi (cipherteks).
AES adalah algoritma kriptografi kunci simetri yang berbasis cipher blok.
Kunci simetri maksudnya adalah dalam proses enkripsi dan dekripsi algoritma AES
menggunakan kunci atau cipher key yang sama dan cipher blok yaitu baik dalam
proses enkripsi dan dekripsi plainteks atau cipherteksnya diolah dalam bentuk blok
dengan ukuran blok 128 bit (16 karakter). Cipher key yang digunakan dalam AES
bervariasi yaitu 128 bit, 192 bit, atau 256 bit. Untuk selanjutnya plainteks dan cipher
key akan diolah dalam bentuk blok state. AES menggunakan jumlah putaran
(perulangan algoritma) yang berbeda untuk tiap panjang cipher key-nya seperti tabel
2.6.
Tabel 2.6 Hubungan Panjang Kunci dan Jumlah Putaran AES
Panjang kunci
Ukuran blok
Jumlah putaran
AES-128
128 bit
128 bit
10
AES-192
192 bit
128 bit
12
AES-256
256 bit
128 bit
14
Input (plainteks) dan output (cipherteks) dalam algoritma AES adalah urutan
biner 128 bit dengan nilai 0 atau 1. Urutan biner ini yang disebut blok 128 bit.
Sedangkan cipher key yang digunakan memiliki panjang yang bervariasi yaitu 128 bit,
192 bit, atau 256 bit. Untuk selanjutnya plainteks dan cipher key akan diolah dalam
bentuk blok state.
Input (plainteks)
in0
in1
in2
in3
in4
in5
in6
in7
in8
in9
State
State adalah suatu larik dua dimensi dari bilangan biner dalam bentuk matriks
4x4, setiap elemen matriksnya sebesar 8 bit (1 byte). Jadi dalam proses enkripsi
plainteks dan cipher key diubah kedalam format state. State juga dapat
direpresentasikan dalam larik satu dimensi yaitu larik dari kolom state tersebut dengan
panjang 32 bit setiap elemennya sehingga terdapat empat elemen state yaitu w0, w1,
w2, dan w3, dengan ketentuan:
w0=s0,0 s1,0 s2,0 s3,0
Representasi seperti ini digunakan pada proses AddRoundKey pada enkripsi AES.
Untuk algoritma AES, panjang blok input, blok output, dan state adalah 128
bit yang direpresentasikan sebagai Nb = 4 yang merupakan representasi larik kolom
dengan panjang 32 bit dan jumlah elemennya adalah empat elemen. Panjang kunci
atau cipher key K adalah 128 bit, 192 bit, atau 256 bit yang direpresentasikan sebagai
Nk = 4, 6, atau 8 yang merupakan representasi larik kolom dengan panjang 32 bit dari
cipher key. Jumlah putaran dalam algoritma ditentukan berdasarkan panjang kunci
yang digunakan dan jumlah putaran ini disimbolkan dengan Nr. Hubungan antara
panjang kunci (Nk), ukuran blok state (Nb), dan jumlah putaran (Nr) diberikan tabel
2.7.
Tabel 2.7 Hubungan antara Nk, Nb, dan Nr
Panjang kunci
Ukuran blok
Jumlah putaran
(Nk)
(Nb)
(Nr)
AES-128
10
AES-192
12
AES-256
14
Proses AddRoundKey mengoperasikan tiap kolom dari state. Tiap kolom diXOR-kan dengan cipher key yang telah diekspansi. Total kunci yang diekspansi
adalah Nb(Nr+1) sehingga menghasilkan kunci dalam bentuk larik kolom 32 bit
w0,w1, w2, , w43 untuk Nb = 4 dan Nr = 10. Operasi AddRoundKey pada tiap
putaran melakukan operasi XOR terhadap larik kolom 32 bit dari state dengan kunci
hasil ekspansi berdasarkan persamaan:
[s0,c s1,c s2,c s3,c] = [s0,c s1,c s2,c s3,c] XOR [wl+c]
Dengan, l = round * Nb dan 0 <= c < Nb
2. SubBytes
Algoritma ini melakukan substitusi state menggunakan tabel substitusi S-box.
Misalnya state yang akan disubstitusi adalah S0,0 = $EC, maka S0,0[x,y]=$EC.
Nilai dari x adalah E dan nilai dari y adalah C. Sehingga hasil substitusi state adalah
nilai pertemuan antara baris E dan kolom C, yaitu S0,0 = $CE.
3. ShiftRows
Algoritma ini melakukan pergeseran secara wrapping (siklik) pada 3 baris terakhir
dari state. Untuk baris pertama digeser sejauh satu byte, baris kedua digeser sejauh
dua byte, dan untuk baris ketiga digeser sejauh 3 byte.
4. MixColumns
Algoritma ini mengoperasikan tiap kolom dari state dan memperlakukan kolomkolom ini sebagai bilangan polinomial empat suku. Tiap elemen kolom adalah
polinomial dengan koefisien GF(28) yang kemudian dilakukan operasi modulur
produk dengan polinomial {03}x3+{01}x2+{01}x+{02}.
Operasi ini dapat dinotasikan sebagai s(x)=a(x) s(x). Dengan s(x) adalah
kolom dalam state dan a(x) adalah bilangan polinomial {03}x3+{01}x2+{01}x+{02}.
Operasi ini dapat diilustrasikan sebagai perkalian matriks seperti berikut:
x7
(x6+x4+x2+x+1) (1) =
x6
x13+x11+x9+x8
Menghasilkan
+x5
+x3+x2+x
+x4
+x2+x+1
+x6+x5+x4+x3
+1
Hasil sementara ini dilakukan operasi sisa hasil bagi (modulur) dengan {01}{1b} atau
100011011b atau x8+x4+x3+x+1.
x13+x11+x9+x8
(x8+x4+x3+x+1) x5 = x13
+x9+x8
x11
(x8+x4+x3+x+1) x3 =
x11
+x6+x5+x4+x3
+1 modulur x8+x4+x3+x+1
+x6+x5
+x4+x3
+x7+x6
x7+x6
+1
+x4+x3
+1
= 0110001b = {c1}
Pada algoritma enkripsi AES dalam proses pembangkitan kuncinya, dari kunci
asal cipher key K sepanjang 128 bit (Nk=4), 192 bit (Nk=6), atau 256 bit (Nk=8) akan
diekspansi kunci sebanyak Nb(Nr+1) dalam bentuk larik kolom 32 bit. Hasil dari
pembangkitan kunci ini adalah suatu penjadwalan kunci yang terdiri dari larik kolom
32 bit (4 byte) yang dinotasikan sebagai [wi], dengan 0<=i<Nb(Nr+1). Hasil ekspansi
kunci ini adalah:
w0 ... w43
untuk Nr = 10
w0 ... w51
untuk Nr = 12
w0 ... w59
untuk Nr = 14
w0
w1
w2
......
wNb(Nr+1)-1
(4 byte)
Untuk 0<=i<Nk, wi diisi dengan cipher key asal dan panjang wi adalah 32 bit.
Misalkan cipher key = 2b 7e 15 16 28 ae d2 a6 ab f7 15 88 09 cf 4f 3c, maka:
w0 = 2b 7e 15 16
w2 = ab f7 15 88
w1 = 28 ae d2 a6
w3 = 09 cf 4f 3c
Proses yang sama dilakukan untuk panjang kunci 192 bit dan 256 bit.
SubWord
Operasi substitusi dari hasil RotWord sebelumnya menggunakan tabel S-box
yang juga dipergunakan pada proses SubBytes.
cf
S-box
8a
4f
84
3c
eb
09
01
Rcon[i/Nk]
Operasi Rcon[a] memenuhi nilai yang diberikan [xa-1,{00},{00},{00}] dalam
bilangan polinomial. Nilai polinomial x dinotasikan sebagai {02} dalam
GF(28) atau 00000010b.
Misalnya untuk i = 4 sehingga i/Nk = 1.
Rcon[a] = Rcon[1]
= [x1-1,{00},{00},{00}]
= [x0,{00},{00},{00}]
= [{01},{00},{00},{00}]
8a
01
8b
84
00
84
00
eb
00
01
eb
01
XOR
Rcon[i/Nk]
Gambar 2.23 Operasi Rcon[i/Nk] pada Pembangkitan Kunci
Berikut ini diberikan contoh proses pembangkitan kunci 128 bit (Nk = 4)
dengan cipher key = 2b 7e 15 16 28 ae d2 a6 ab f7 15 88 09 cf 4f 3c.
w0 = 2b7e1516
w1 = 28aed2a6
w2 = abf71588
w3 = 09cf4f3c