Implementasi Algoritma Rijndael KESIMPULAN DAN SARAN 4.1

F merupakan fungsi penggunaan kotak-S dan penambahan konstanta ronde. Penjadwalan kunci dapat diimplementasikan tanpa eksplisit menggunakan array W. Jika jumlah yang tersedia kecil, maka kunci per ronde dapat dihitung on-the-fly dan hanya membutuhkan buffer sebesar 64 byte. Ini berarti bahwa mengetahui 4 word 64 byte berurutan dari kunci terekspansi akan dapat membangkitkan seluruh tabel subkey. Konstanta per ronde menghilangkan sifat simetri.

3.2 Implementasi Algoritma Rijndael

Implementasi Algoritma Rijndael dirancang dalam bahasa pemrograman Visual Basic 6.0. Berikut tahap implementasi algoritma Rijndael. 1. Pembentukan Kotak Substitusi S-Box 2. Proses MixColumns 3. Proses enkripsi 4. Proses dekripsi

3.2.1 Pembentukan Kotak Substitusi S-Box

Kotak substitusi untuk ByteSub dibentuk dari fungsi inversi perkalian pada GF2 8 dan kemudian ditambahkan operasi XOR terhadap fungsi affine semacam fungsi linear. Berikut implementasi kotak substitusi ke dalam bahasa pemrograman. ltab0 = 0 ltab1 = 0 ltab3 = 1 ptab0 = 1 ptab1 = 3 For i = 2 To 255 ptabi = ptabi - 1 Xor Xtimeptabi - 1 If ptabi - 1 And H80 Then ptabi = ptabi - 1 Xor ptabi - 1 And 127 2 Xor H1B Else ptabi = ptabi - 1 Xor ptabi - 1 2 End If ltabptabi = i Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009 Next i Te40 = H63636363 Td4H63 = 0 For i = 1 To 255 y = ptab255 - ltabi multiplicative inverse ib = y If ib And H80 Then ib = ib And 127 2 Or 1 Else ib = ib 2 y = y Xor ib If ib And H80 Then ib = ib And 127 2 Or 1 Else ib = ib 2 y = y Xor ib If ib And H80 Then ib = ib And 127 2 Or 1 Else ib = ib 2 y = y Xor ib If ib And H80 Then ib = ib And 127 2 Or 1 Else ib = ib 2 y = y Xor ib Xor H63 s0 = y s1 = s0 s2 = s0 s3 = s0 CopyMemory Te4i, s0, 4 s0 = i s1 = s0 s2 = s0 s3 = s0 CopyMemory Td4y, s0, 4 Next i y = 1 For i = 0 To UBoundrco rcoi = y If y And H80 Then y = Xtimey y = y And 127 2 Xor H1B Else y = y 2 End If Next i For i = 0 To 255 y = Te4i And HFF If y And H80 Then s0 = y And 127 2 Xor H1B s3 = y Xor s0 Else s0 = y 2 s3 = y Xor s0 End If s2 = y s1 = y CopyMemory s4, s0, 4 CopyMemory Te0i, s0, 4 CopyMemory Te1i, s3, 4 CopyMemory Te2i, s2, 4 CopyMemory Te3i, s1, 4 y = Td4i And HFF Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009 If y = 0 Then s3 = 0 s2 = 0 s1 = 0 s0 = 0 Else s3 = ptabCLngltabHB + CLngltaby Mod 255 s2 = ptabCLngltabHD + CLngltaby Mod 255 s1 = ptabCLngltabH9 + CLngltaby Mod 255 s0 = ptabCLngltabHE + CLngltaby Mod 255 End If CopyMemory s4, s0, 4 CopyMemory Td0i, s0, 4 CopyMemory Td1i, s3, 4 CopyMemory Td2i, s2, 4 CopyMemory Td3i, s1, 4 Next i Implementasi S-Box kunci ekspansi dalam bahasa pemrograman. rco0=H1:rco1=H2:rco2=H4:rco3=H8:rco4=H10 rco5=H20:rco6=H40:rco7=H80:rco8=H1B:rco9 = H36 If SUPPORT_LEVEL Then rco10=H6C:rco11=HD8:rco12=HAB:rco13=H4D:rco14=H9A rco15=H2F:rco16=H5E:rco17=HBC:rco18=H63:rco19=HC6 rco20=H97:rco21=H35:rco22=H6A:rco23=HD4:rco24=HB3 rco25=H7D:rco26=HFA:rco27=HEF:rco28=HC5 End If Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009

3.2.2 Proses MixColumns

Operasi ini merupakan suatu operasi dari penambahan kunci dengan operasi XOR. Berikut implementasi operasi MixColumns ke dalam bahasa pemrograman. i = 4 CopyMemory fkey0, pass0, 4 i For j = 0 To 9 CopyMemory s0, fkeyi - 1, 4 fkeyi = fkeyi - 4 Xor Te4s0 And HFF000000 _ Xor Te4s3 And HFF0000 _ Xor Te4s2 And HFF00 _ Xor Te4s1 And HFF _ Xor rcoj fkeyi + 1 = fkeyi - 3 Xor fkeyi fkeyi + 2 = fkeyi - 2 Xor fkeyi + 1 fkeyi + 3 = fkeyi - 1 Xor fkeyi + 2 i = i + 4 Next j Nr = 10

3.2.3 Proses Enkripsi

Dalam proses enkripsi ini terdapat proses enkripsi teks dan enkripsi file. 1. Proses enkripsi teks Public Sub BlockEncryptplaintext As Byte, ciphertext As Byte, p As Long, q As Long Dim i As Long Dim k As Long Dim t0 As Long Dim t1 As Long Dim t2 As Long Dim t3 As Long Dim s15 As Byte CopyMemory t0, plaintextp + 0, 4 CopyMemory t1, plaintextp + 4, 4 CopyMemory t2, plaintextp + 8, 4 CopyMemory t3, plaintextp + 12, 4 t0 = t0 Xor fkey0 t1 = t1 Xor fkey1 t2 = t2 Xor fkey2 t3 = t3 Xor fkey3 k = 4 Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009 For i = 1 To Nr - 1 Nr is number of rounds CopyMemory s0, t0, 4 CopyMemory s4, t1, 4 CopyMemory s8, t2, 4 CopyMemory s12, t3, 4 t0 = Te0s0 Xor Te1s5 Xor Te2s10 Xor Te3s15 Xor fkeyk + 0 t1 = Te0s4 Xor Te1s9 Xor Te2s14 Xor Te3s3 Xor fkeyk + 1 t2 = Te0s8 Xor Te1s13 Xor Te2s2 Xor Te3s7 Xor fkeyk + 2 t3 = Te0s12 Xor Te1s1 Xor Te2s6 Xor Te3s11 Xor fkeyk + 3 k = k + 4 Next i Final round CopyMemory s0, t0, 4 CopyMemory s4, t1, 4 CopyMemory s8, t2, 4 CopyMemory s12, t3, 4 t0 = Te4s0 And HFF Xor Te4s5 And HFF00 Xor Te4s10 And HFF0000 Xor Te4s15 And HFF000000 Xor fkeyk + 0 t1 = Te4s4 And HFF Xor Te4s9 And HFF00 Xor Te4s14 And HFF0000 Xor Te4s3 And HFF000000 Xor fkeyk + 1 t2 = Te4s8 And HFF Xor Te4s13 And HFF00 Xor Te4s2 And HFF0000 Xor Te4s7 And HFF000000 Xor fkeyk + 2 t3 = Te4s12 And HFF Xor Te4s1 And HFF00 Xor Te4s6 And HFF0000 Xor Te4s11 And HFF000000 Xor fkeyk + 3 CopyMemory ciphertextq + 0, t0, 4 CopyMemory ciphertextq + 4, t1, 4 CopyMemory ciphertextq + 8, t2, 4 CopyMemory ciphertextq + 12, t3, 4 End Sub 2. Proses enkripsi file Public Function FileEncryptPlaintextFileName As String, CiphertextFileName As String, BlockBits As Long As Long Else Public Function FileEncryptPlaintextFileName As String, CiphertextFileName As String As Long End If Dim FileNum As Integer Dim FileNum2 As Integer Dim i As Long Dim m As Long ciphertext file size Dim n As Long plaintext file size Dim data As Byte If SUPPORT_LEVEL = 0 Then Const BlockSize As Long = 16 bytes Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009 Const MaxBlocks As Long = MaxFileChunkSize \ BlockSize Else Dim BlockSize As Long Dim MaxBlocks As Long Select Case BlockBits Case 128: BlockSize = 16 Case 192: BlockSize = 24 Case 256: BlockSize = 32 If SUPPORT_LEVEL = 2 Then Case 160: BlockSize = 20 Case 224: BlockSize = 28 End If Case Else: Err.Raise 1, , cRijndael.FileEncrypt - Illegal BlockBits value End Select MaxBlocks = MaxFileChunkSize \ BlockSize End If n = FileLenPlaintextFileName If SUPPORT_LEVEL Then m = n + BlockSize \ BlockSize BlockSize Else m = n + BlockSize And -BlockSize BlockSize=16 specific End If FileNum = FreeFile Open PlaintextFileName For Binary Access Read As FileNum FileNum2 = FreeFile Open CiphertextFileName For Binary Access Write As FileNum2 For large files, encrypt in pieces no larger than MaxFileChunkSize If m MaxBlocks BlockSize Then ReDim dataMaxBlocks BlockSize - 1 Do Get FileNum, , data If SUPPORT_LEVEL Then Select Case BlockBits Case 128 End If For i = 0 To MaxBlocks - 1 BlockSize Step BlockSize BlockEncrypt data, data, i, i Next i If SUPPORT_LEVEL Then Case 192 For i = 0 To MaxBlocks - 1 BlockSize Step BlockSize Block192Encrypt data, data, i, i Next i Case 256 For i = 0 To MaxBlocks - 1 BlockSize Step BlockSize Block256Encrypt data, data, i, i Next i If SUPPORT_LEVEL = 2 Then Case 160 For i = 0 To MaxBlocks - 1 BlockSize Step BlockSize Block160Encrypt data, data, i, i Next i Case 224 For i = 0 To MaxBlocks - 1 BlockSize Step BlockSize Block224Encrypt data, data, i, i Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009 Next i End If End Select End If Put FileNum2, , data m = m - MaxBlocks BlockSize Loop While m MaxBlocks BlockSize End If Encrypt the last piece of the file ReDim datam - 1 Get FileNum, , data datam - 1 = n Mod BlockSize If SUPPORT_LEVEL Then Select Case BlockBits Case 128 End If For i = 0 To m - BlockSize Step BlockSize BlockEncrypt data, data, i, i Next i If SUPPORT_LEVEL Then Case 192 For i = 0 To m - BlockSize Step BlockSize Block192Encrypt data, data, i, i Next i Case 256 For i = 0 To m - BlockSize Step BlockSize Block256Encrypt data, data, i, i Next i If SUPPORT_LEVEL = 2 Then Case 160 For i = 0 To m - BlockSize Step BlockSize Block160Encrypt data, data, i, i Next i Case 224 For i = 0 To m - BlockSize Step BlockSize Block224Encrypt data, data, i, i Next i End If End Select End If Put FileNum2, , data Close FileNum Close FileNum2 End Function Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009

3.2.4 Proses Dekripsi

Dalam proses dekripsi ini terdapat proses dekripsi teks dan dekripsi file. 1. Proses dekripsi teks Public Sub BlockDecryptplaintext As Byte, ciphertext As Byte, p As Long, q As Long Dim i As Long Dim k As Long Dim t0 As Long Dim t1 As Long Dim t2 As Long Dim t3 As Long Dim s15 As Byte CopyMemory t0, ciphertextq + 0, 4 CopyMemory t1, ciphertextq + 4, 4 CopyMemory t2, ciphertextq + 8, 4 CopyMemory t3, ciphertextq + 12, 4 t0 = t0 Xor rkey0 t1 = t1 Xor rkey1 t2 = t2 Xor rkey2 t3 = t3 Xor rkey3 k = 4 For i = 1 To Nr - 1 Nr is number of rounds CopyMemory s0, t0, 4 CopyMemory s4, t1, 4 CopyMemory s8, t2, 4 CopyMemory s12, t3, 4 t0 = Td0s0 Xor Td1s13 Xor Td2s10 Xor Td3s7 Xor rkeyk + 0 t1 = Td0s4 Xor Td1s1 Xor Td2s14 Xor Td3s11 Xor rkeyk + 1 t2 = Td0s8 Xor Td1s5 Xor Td2s2 Xor Td3s15 Xor rkeyk + 2 t3 = Td0s12 Xor Td1s9 Xor Td2s6 Xor Td3s3 Xor rkeyk + 3 k = k + 4 Next i Final round CopyMemory s0, t0, 4 CopyMemory s4, t1, 4 CopyMemory s8, t2, 4 CopyMemory s12, t3, 4 t0 = Td4s0 And HFF Xor Td4s13 And HFF00 Xor Td4s10 And HFF0000 Xor Td4s7 And HFF000000 Xor rkeyk + t1 = Td4s4 And HFF Xor Td4s1 And HFF00 Xor Td4s14 And HFF0000 Xor Td4s11 And HFF000000 Xor rkeyk + 1 Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009 t2 = Td4s8 And HFF Xor Td4s5 And HFF00 Xor Td4s2 And HFF0000 Xor Td4s15 And HFF000000 Xor rkeyk + 2 t3 = Td4s12 And HFF Xor Td4s9 And HFF00 Xor Td4s6 And HFF0000 Xor Td4s3 And HFF000000 Xor rkeyk + 3 CopyMemory plaintextp + 0, t0, 4 CopyMemory plaintextp + 4, t1, 4 CopyMemory plaintextp + 8, t2, 4 CopyMemory plaintextp + 12, t3, 4 End Sub 2. Proses dekripsi file Public Function FileDecryptPlaintextFileName As String, CiphertextFileName As String, BlockBits As Long As Long Else Public Function FileDecryptPlaintextFileName As String, CiphertextFileName As String As Long End If Dim FileNum As Integer Dim FileNum2 As Integer Dim i As Long Dim m As Long ciphertext file size Dim n As Long plaintext file size Dim data As Byte If SUPPORT_LEVEL = 0 Then Const BlockSize As Long = 16 bytes Const MaxBlocks As Long = MaxFileChunkSize \ BlockSize Else Dim BlockSize As Long Dim MaxBlocks As Long Select Case BlockBits Case 128: BlockSize = 16 Case 192: BlockSize = 24 Case 256: BlockSize = 32 If SUPPORT_LEVEL = 2 Then Case 160: BlockSize = 20 Case 224: BlockSize = 28 End If Case Else: Err.Raise 1, , cRijndael.FileDecrypt - Illegal BlockBits value End Select MaxBlocks = MaxFileChunkSize \ BlockSize End If m = FileLenCiphertextFileName If SUPPORT_LEVEL Then If m = 0 Or m Mod BlockSize 0 Then Else If m = 0 Or m And BlockSize - 1 0 Then BlockSize=16 specific End If Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009 MsgBox File Size Error - ciphertext file not a multiple of block size FileDecrypt = 1 Else FileNum = FreeFile Open CiphertextFileName For Binary Access Read As FileNum FileNum2 = FreeFile Open PlaintextFileName For Binary Access Write As FileNum2 For large files, decrypt in pieces no larger than MaxFileChunkSize If m MaxBlocks BlockSize Then ReDim dataMaxBlocks BlockSize - 1 Do Get FileNum, , data If SUPPORT_LEVEL Then Select Case BlockBits Case 128 End If For i = 0 To MaxBlocks - 1 BlockSize Step BlockSize BlockDecrypt data, data, i, i Next i If SUPPORT_LEVEL Then Case 192 For i = 0 To MaxBlocks - 1 BlockSize Step BlockSize Block192Decrypt data, data, i, i Next i Case 256 For i = 0 To MaxBlocks - 1 BlockSize Step BlockSize Block256Decrypt data, data, i, i Next i If SUPPORT_LEVEL = 2 Then Case 160 For i = 0 To MaxBlocks - 1 BlockSize Step BlockSize Block160Decrypt data, data, i, i Next i Case 224 For i = 0 To MaxBlocks - 1 BlockSize Step BlockSize Block224Decrypt data, data, i, i Next i End If End Select End If Put FileNum2, , data m = m - MaxBlocks BlockSize Loop While m MaxBlocks BlockSize End If Decrypt the last piece of the file ReDim datam - 1 Get FileNum, , data If SUPPORT_LEVEL Then Select Case BlockBits Case 128 End If Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009 For i = 0 To m - BlockSize Step BlockSize BlockDecrypt data, data, i, i Next i If SUPPORT_LEVEL Then Case 192 For i = 0 To m - BlockSize Step BlockSize Block192Decrypt data, data, i, i Next i Case 256 For i = 0 To m - BlockSize Step BlockSize Block256Decrypt data, data, i, i Next i If SUPPORT_LEVEL = 2 Then Case 160 For i = 0 To m - BlockSize Step BlockSize Block160Decrypt data, data, i, i Next i Case 224 For i = 0 To m - BlockSize Step BlockSize Block224Decrypt data, data, i, i Next i End If End Select End If Recover length field If datam - 1 BlockSize Then n = m - BlockSize + CLngdatam - 1 Else If SUPPORT_LEVEL Then MsgBox warning - incorrect length field in decrypted file. vbCrLf Wrong key, keysize, or blocksize? Else MsgBox warning - incorrect length field in decrypted file. vbCrLf Wrong key or keysize? End If n = m End If If n 0 Then ReDim Preserve datan - 1 Put FileNum2, , data End If Close FileNum Close FileNum2 End If End Function Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009

3.3 Flowchart Program