1
ABSTRACT
Nowadays in the age of information, many people using internet for communication and transferring data. The security aspect in data transaction is one of the most important aspect. One of the solutions to handle this is with data encoding or encryption.
The encryption method encodes the data, so anyone can not read the information of data except the owner. There are two general types of encryption algorithm, symmetric algorithm and asymmetric algorithm. The Algorithm which used in this book is symmetric algorithm. Symmetric algorithm encodes and decodes with the same key.
4
DAFTAR ISI
ABSTRACT... i
ABSTRAK ... ii
KATA PENGANTAR ... iii
DAFTAR ISI... v
DAFTAR GAMBAR ...ix
DAFTAR TABEL... xi
BAB I PENDAHULUAN ... 1
1.1 Latar Belakang ... 1
1.2 Identifikasi Masalah ... 1
1.3 Tujuan ... 2
1.4 Pembatasan Masalah ... 2
1.5 Spesifikasi Hardware ... 2
1.6 Spesifikasi Software... 2
1.7 Sistematika Pembahasan ... 3
BAB II TEORI PENUNJANG ... 4
2.1 Kriptografi... 4
2.1.1 Tujuan Kriptografi ... 7
2.2 Enkripsi dan Dekripsi Menggunakan Kunci ... 8
2.3 Algoritma Simetri Dan Algoritma Asimetri ... 9
2.3.2 Algoritma Asimetri ... 10
2.4 Mode Operasi Enkripsi Blok Cipher... 12
2.5 Teori Matematika ... 13
2.5.1 Bilangan Prima... 14
2.5.2 Operasi Modulus ... 15
2.5.3 Algoritma Euclidean ... 16
2.5.4 Algoritma Extended Euclidean... 16
2.5.5 Eksponensial Modulus ... 17
2.5.6 Fungsi XOR ... 20
2.6 Enkripsi Dengan Algoritma CAST-128... 20
2.6.1 Pasangan Kunci Round ... 22
2.6.2 Non-Identical Rounds... 22
2.6.3 Subtitution Box ... 23
2.6.4 Pengolahan Kunci ... 23
2.6.5 Masking dan Rotasi Sub Kunci... 27
2.6.6 Panjang dari Kunci Yang Bervariasi... 27
2.7 Algoritma Validasi Data ... 28
2.8 Tanda Tangan Digital... 28
2.8.1 Algoritma Pembangkit Kunci Tanda Tangan Digital ... 29
2.8.2 Algoritma Tanda Tangan Digital ... 29
2.8.3 Algoritma Verifikasi Tanda Tangan Digital ... 29
3.1 Pengolahan Kunci CAST-128... 30
3.2 Program Enkripsi ... 32
3.3 Program Dekripsi ... 35
3.4 Program Pembangkit Kunci Tanda Tangan Digital ... 38
3.4.1 Sub Program rdmprime ... 39
3.4.2 Sub Program gcd ... 40
3.4.3 Sub Program Euclid ... 40
3.4.4 Program Tanda Tangan Digital... 42
3.4.5 Program Validasi... 42
3.4.6 Sub Program Pangkatmod... 43
3.5 Realisasi Program ... 45
3.5.1 Tampilan Menu Utama ... 45
3.5.2 Program Enkripsi ... 46
3.5.3 Program Dekripsi ... 47
3.5.4 Program Timer... 48
BAB IV Data Pengamatan ... 49
4.1 Hasil Pengamatan Sederhana Program Enkripsi dan Dekripsi CAST-128 ... 49
4.1.1 Pengamatan Enkripsi CAST-128 Dengan Kunci Yang Sama ... 49
4.1.2 Pengamatan Enkripsi CAST-128 Dengan Kunci Yang Berbeda.. 52
4.2.1 Proses Enkripsi CAST-128 Dengan Menggunakan File... 55
4.2.2 Proses Dekripsi CAST-128 Dengan Menggunakan File ... 59
4.3 Hasil Pengamatan Waktu Dan Ukuran File Proses Enkripsi Dan Dekripsi CAST-128 ... 62
4.3.1 Pengamatan Enkripsi Dan Dekripsi Dengan Menggunakan Kunci Yang Sama ... 62
4.3.2 Pengamatan Enkripsi Dan Dekripsi Dengan Menggunakan Kunci Yang Berbeda... 63
4.4 Hasil Pengamatan Proses Tanda Tangan Digital ... 65
4.5 Pengamatan Hasil Proses Validasi ... 66
4.6 Analisa Hasil Pengamatan ... 70
BAB V Kesimpulan Dan Saran... 72
5.1 Kesimpulan ... 72
5.2 Saran... 72
5
DAFTAR GAMBAR
Gambar 2.1.... Kriptografi dengan proses enkripsi dan dekripsi ... 6
Gambar 2.3 Kriptografi Asimetri ... 11
Gambar 3.1 Diagram Alur Pengolahan Plaintext ... 32
Gambar 3.2 Diagram Alur Proses Enkripsi ... 34
Gambar 3.3 Diagram Alur Proses Dekripsi ... 37
Gambar 3.4 Diagram Alur Program Pembangkit Kunci Tanda Tangan Digital ... 38
Gambar 3.5 Diagram Alir Sub Program RdmPrime ... 39
Gambar 3.6 Diagram Alir Sub Program gcd ... 40
Gambar 3.7 Diagram Alir Sub Program Euclid ... 41
Gambar 3.8 Diagram Alir Program Tanda Tangan Digital ... 42
Gambar 3.9 Diagram Alir Program Validasi ... 43
Gambar 3.10 Diagram Alir Sub Program pangkatmod ... 44
Gambar 3.11 Tampilan Menu Utama ... 45
Gambar 3.12 Tampilan Program Enkripsi ... 46
Gambar 3.13 Tampilan Program Dekripsi ... 47
Gambar 4.1 Tampilan program enkripsi algoritma CAST-128 dengan plaintext “industri” kunci “enkripsi” ... 50
Gambar 4.3 Tampilan program enkripsi algoritma CAST-128 dengan plaintext
“Algoritma”, kunci “test” ... 53
Gambar 4.4 Tampilan program enkripsi algoritma CAST-128 dengan plaintext
“Algoritma”, kunci “test” ... 54
Gambar 4.5 Tampilan program enkripsi dari file plain.txt dengan menggunakan
kunci “cast-128”, disimpan dalam file cipher.cip ... 57
Gambar 4.6 Tampilan program dekripsi dari file cipher.cip dengan
menggunakan kunci “cast-128”, disimpan dalam file
plain1.txt ... 60
6
DAFTAR TABEL
Tabel 2.1 Nilai Extended Euclidean ... 17
Tabel 4.1 Enkripsi dan dekripsi menggunakan kunci yang sama, plaintext
yang berbeda-beda ... 49
Tabel 4.2 Enkripsi dan dekripsi menggunakan kunci yang sama, plaintext
yang berbeda-beda ... 52
Tabel 4.3 Hasil Pengamatan Proses Enkripsi CAST-128 ... 61
Tabel 4.4 Hasil Pengamatan Proses Dekripsi CAST-128 ... 62
Tabel 4.5 Hasil pengamatan Enkripsi file menggunakan kunci yang berbeda,
plaintext yang sama ... 63
Tabel 4.6 Hasil pengamatan Enkripsi file menggunakan kunci yang berbeda,
Listing UMain.pas
unit UMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Menus;
type
procedure Label1MouseEnter(Sender: TObject); procedure Label1MouseLeave(Sender: TObject); procedure Label2MouseEnter(Sender: TObject); procedure Label2MouseLeave(Sender: TObject); procedure Label1Click(Sender: TObject);
procedure Keluar1Click(Sender: TObject); procedure Label2Click(Sender: TObject); procedure Enkripsi1Click(Sender: TObject); procedure Dekripsi1Click(Sender: TObject); procedure About1Click(Sender: TObject); private
frmDekripsi.ShowModal; end;
procedure TMain.About1Click(Sender: TObject); begin
frmAbout.ShowModal; end;
Listing UEnkripsi.pas
unit UEnkripsi;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, StdCtrls;
type
Signtx: TEdit; Signature: TEdit; Label12: TLabel;
procedure btOpenClick(Sender: TObject); procedure btSaveClick(Sender: TObject); procedure edPassChange(Sender: TObject); procedure btCloseClick(Sender: TObject); procedure btEncryptClick(Sender: TObject); procedure FormShow(Sender: TObject); procedure BtGenKeyClick(Sender: TObject); procedure BtSignClick(Sender: TObject); private
frmEnkripsi: TfrmEnkripsi;
implementation
uses StrUtils, Cast128, RSATools;
{$R *.dfm}
procedure TfrmEnkripsi.btOpenClick(Sender: TObject); begin
if EOpen.Execute then begin
Plain.Lines.LoadFromFile(EOpen.FileName); end;
Cipher.Lines.SaveToFile(ESave.FileName); ShowMessage('Cipher Text telah disimpan dengan nama'+chr(10)+chr(13)+ESave.FileName);
procedure TfrmEnkripsi.edPassChange(Sender: TObject); begin
if Length(edPass.Text) > 16 then begin
ShowMessage('Kata Kunci Maksimal Terdiri Dari 16 Karakter'); edPass.Text:=LeftStr(edPass.Text,16);
end;
awal,akhir,lama:TDateTime; begin
if edPass.Text = '' then
ShowMessage('Password Belum Terisi') else
if Plain.Text = '' then
ShowMessage('Plain Text Belum Terisi') else
if Signtx.Text = '' then
if Application.MessageBox('Anda belum menambahkan Digital Signature'+chr(10)+chr(13)
begin
Cipher.Clear; awal:=Time;
Start.Text:=TimeToStr(awal);
Cipher.Lines.Add(Encrypt(Signtx.Text+Plain.Text,edPass.Text)); akhir:=Time;
edPass.Clear; Start.Clear; Plain.Clear; Finished.Clear; Cipher.Clear; times.Clear; Signtx.Clear;
Signature.Clear;
PrivD.Clear; PrivN.Clear; PubE.Clear; PubN.Clear; end;
p := RdmPrime;
//random selection of e ulang:
//select e that is prime
For i1 := 2 To Round(Sqrt(temp4)) do begin
PubE.Text := IntToStr(temp4);
Listing Udekripsi.pas
unit UDekripsi;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, StdCtrls;
type
TfrmDekripsi = class(TForm) Label1: TLabel;
procedure FormShow(Sender: TObject); procedure edPassChange(Sender: TObject); procedure Button1Click(Sender: TObject); private
frmDekripsi: TfrmDekripsi;
implementation
uses StrUtils, Cast128, RSATools;
{$R *.dfm}
Cipher.Lines.LoadFromFile(DOpen.FileName); end;
i,j,k,pjg:integer;
awal,akhir,lama:TDateTime; begin
if edPass.Text = '' then
ShowMessage('Password Belum Terisi') else
Plain.Clear;
if Length(edPass.Text) > 16 then begin
ShowMessage('Kata Kunci Maksimal Terdiri Dari 16 Karakter'); edPass.Text:=LeftStr(edPass.Text,16);
end;
ShowMessage('Dekripsi dokumen terlebih dahulu') else
if sign = '' then
k:=j+2;
signtxt:=signtxt+chr(pangkatmod(StrToInt(tmp),e,n)); end;
inc(j); end;
ShowMessage('Digital Signature :'+chr(10)+chr(13)+'"'+signtxt+'"'); end;
end; end;
Listing Uabout.pas
unit UAbout; interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;
type
TfrmAbout = class(TForm) Panel1: TPanel;
Label1: TLabel; Label5: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label6: TLabel; Label7: TLabel; Button1: TButton;
procedure Button1Click(Sender: TObject); private
{ Private declarations } public
{ Public declarations } end;
var
frmAbout: TfrmAbout; implementation
{$R *.dfm}
procedure TfrmAbout.Button1Click(Sender: TObject); begin
frmAbout.Close; end;
Listing Cast128.pas
unit Cast128;
interface
uses StrUtils, SysUtils, Tools;
function Encrypt(data: string; key: string) : string; function Decrypt(data: string; key: string) : string;
implementation
{$I Cast128.inc} {$R-}
function Encrypt(data: string; key: string) : string; var
x, t, z: array[0..3] of DWord; key1: array[0..15] of byte;
i,j,k,len,plainlen,cipherlen,add,Rounds: integer; xKey: array[0..31] of DWord;
u, l, r, valid: DWord;
OutData, InData: array[0..7] of byte; Ciphertext,chip: string;
begin
{pengolahan kunci} len:=length(key);
if (Len<= 0) or (Len> 16) then
raise Exception.Create('Panjang Kunci antara 1 sampai 16 huruf'); if Len<= 10 then
Rounds:= 12 else
Rounds:= 16;
cast_sbox7[(t[2] shr 8) and $FF] xor cast_sbox8[t[2] and $FF];
plainlen:=length(data);
plainlen:=length(data); {enkripsi}
for k:=1 to (plainlen div 8) do begin
l:= StrtoDWord(data[(((k-1)*8)+1)]+data[(((k-1)*8)+2)]+ data[(((k-1)*8)+3)]+data[(((k-1)*8)+4)]);
cast_sbox3[(u shr 8) and $FF]) - cast_sbox4[u and $FF]);
ciphertext := ciphertext + DwordToStr(r) + DWordToStr(l); end;
{pengolahan ciphertext} cipherlen:=length(ciphertext); j:=1;
while j<cipherlen+1 do begin
if ciphertext[j] = chr(0) then begin
chip:=copy(ciphertext,1,j-1)+'nilstr'+copy(ciphertext,j+1,cipherlen-j); ciphertext:=chip;
end else
chip:=copy(ciphertext,1,j-1)+'notret'+copy(ciphertext,j+1,cipherlen-j);
chip:=copy(ciphertext,1,j-1)+'bknret'+copy(ciphertext,j+1,cipherlen-j); ciphertext:=chip;
end;
cipherlen:=length(ciphertext); inc(j);
end;
ciphertext:=ciphertext+IntToStr(add)+DWordToStr(valid); Encrypt:=ciphertext;
end;
function Decrypt(data: string; key: string) : string; var
x, t, z: array[0..3] of DWord; key1: array[0..15] of byte;
i,j,k,p,Len,cipherlen,add,Rounds: integer; xKey: array[0..31] of DWord;
u, l, r, valid, validt: DWord;
OutData, InData: array[0..7] of byte; Plain,Ciphertext,chip,tmp,s: string; adds: array[0..9] of string;
raise Exception.Create('Panjang Kunci antara 1 sampai 16 huruf'); if Len<= 10 then
Rounds:= 12 else
Rounds:= 16;
{pengolahan cipher text} cipherlen:=length(data); ciphertext:=data;
chip:=copy(ciphertext,1,j-1)+chr(0)+copy(ciphertext,j+6,cipherlen); ciphertext:=chip;
end else
if tmp = 'notret' then begin
chip:=copy(ciphertext,1,j-1)+chr(10)+copy(ciphertext,j+6,cipherlen); ciphertext:=chip;
end else
if tmp = 'bknret' then begin
chip:=copy(ciphertext,1,j-1)+chr(13)+copy(ciphertext,j+6,cipherlen); ciphertext:=chip;
end;
cipherlen:=length(ciphertext); inc(j);
end;
{validasi}
valid:=StrToDWord(RightStr(Ciphertext,4)); for p:=0 to 9 do
adds[p]:=chr(p+48);
s:=(LeftStr(RightStr(Ciphertext,5),1)); for p:=0 to 9 do
begin
if s = adds[p] then goto N; end;
Raise Exception.Create('Data Tidak Valid'); Exit;
N: try
Raise Exception.Create('Data Tidak Valid'); end;
data:=LeftStr(ciphertext,length(ciphertext)-5); cipherlen:=length(data);
validt:=0;
for k:=1 to (cipherlen div 8) do begin
validt:=validt xor (StrtoDWord(data[(((k-1)*8)+1)]+data[(((k-1)*8)+2)]+ data[(((k-1)*8)+3)]+data[(((k-1)*8)+4)]) xor
r:= StrtoDWord(data[(((k-1)*8)+1)]+data[(((k-1)*8)+2)]+ data[(((k-1)*8)+3)]+data[(((k-1)*8)+4)]);
cast_sbox3[(u shr 8) and $FF]) - cast_sbox4[u and $FF]);
plain:=plain+DWordToStr(l)+DWordToStr(r); end;
Decrypt:=LeftStr(plain,length(plain)-add); end;
Listing Tools.pas
function LRot16(X: word; c: integer): word; assembler; function RRot16(X: word; c: integer): word; assembler; function LRot32(X: dword; c: integer): dword; assembler; function RRot32(X: dword; c: integer): dword; assembler; procedure XorBlock(I1, I2, O1: PByteArray; Len: integer); procedure IncBlock(P: PByteArray; Len: integer);
function StrToDWord(s : string) : DWord; function DWordToStr(wo : DWord) : string;
implementation
function LRot16(X: word; c: integer): word; assembler; asm
function RRot16(X: word; c: integer): word; assembler; asm
mov ecx, edx rol eax, cl end;
function RRot32(X: dword; c: integer): dword; register; assembler; asm
mov ecx, edx ror eax, cl end;
procedure XorBlock(I1, I2, O1: PByteArray; Len: integer); var
procedure IncBlock(P: PByteArray; Len: integer); begin
Inc(P[Len-1]);
if (P[Len-1]= 0) and (Len> 1) then IncBlock(P,Len-1);
end;
function StrToDWord(s : string) : DWord; var cely : Dword;
var vysl : string; rr,ll : word;
Si1,Si2,Si3,Si4 : byte; begin
rr:=(wo shl 16) shr 16; ll:=(wo shr 16); Si2:=(ll shl 8) shr 8; Si1:=(ll shr 8); Si4:=(rr shl 8) shr 8; Si3:=(rr shr 8);
vysl:=chr(Si1)+chr(Si2)+chr(Si3)+chr(Si4); DWordToStr:=vysl;
end;
Listing RSATools
unit RSATools; interface
uses SysUtils, StrUtils, IdGlobal, Math;
Function Euclid(nilai1 : Longint; nilai2 : Longint) : Longint ; Function gcd(p : longint; q : longint) : Longint;
Function RdmPrime() : Longint;
Function pangkatmod(num1 : longint;num2 : longint;num3 : longint) : longint; implementation
Function Euclid(nilai1 : Longint; nilai2 : Longint) : Longint ; var mex,bex,A1,A2,A3,Qex,T1,T2,T3,B1,B2,B3,hasil:Longint; label itung, selesai;
begin
mex := nilai1; bex := nilai2; A1 := 1; B1 := 0; A2 := 0; B2 := 1; A3 := mex; B3 := bex; itung:
if B3 = 0 then begin hasil := 0; GoTo selesai; end;
if B3 = 1 then begin
hasil := B2; GoTo selesai; end;
A1 := B1; B1 := T1;
Function gcd(p : longint; q : longint) : Longint; var A11,B11,R11 : Longint;
label balik;
Function RdmPrime() : Longint;
var iRandom : integer; // holds random long result i2 : longint; // checkprime loop counter
//trap handler
Function pangkatmod(num1 : longint;num2 : longint;num3 : longint) : longint; var a22,b22,n22,nilaimod,nilaic,nilaid,nilaii,nilaik,naik : longint;
end; end;
pangkatmod := nilaid; End;
Subtitution Box 1
cast_sbox1: array[0..255]of DWord= (
Subtitution Box 2
cast_sbox2: array[0..255] of DWord = (
Subtitution Box 3
cast_sbox3: array[0..255] of DWord = (
Subtitution Box 4
cast_sbox4: array[0..255] of DWord = (
Subtitution Box 5
cast_sbox5: array[0..255] of DWord = (
Subtitution Box 6
cast_sbox6: array[0..255] of DWord = (
Subtitution Box 7
cast_sbox7: array[0..255] of DWord = (
Subtitution Box 8
cast_sbox8: array[0..255] of DWord = (
Gambar Tampilan Program Utama
1
BAB I
PENDAHULUAN
Pada bab ini akan dijelaskan mengenai latar belakang, perumusan
masalah, tujuan, pembatasan masalah, serta sistematika penulisan laporan tugas
akhir.
1.1
Latar Belakang
Pada saat ini informasi komputer dan interkoneksinya melalui jaringan
sangat meningkat, tentu saja dalam hal ini sangat dibutuhkan keamanan data yang
handal agar supaya terhindar dari penyadapan yang tidak diinginkan. Dalam hal
ini keamanan data merupakan permasalahan yang sangat penting. Sistem enkripsi
mempunyai kode-kode pengamanan untuk mengacak data dan juga mempunyai
kode-kode untuk mengembalikan data yang teracak ke data yang sebenarnya.
Metoda yang dibahas pada tugas akhir ini adalah algoritma CAST.
1.2
Identifikasi Masalah
1. Bagaimana mengimplementasikan algoritma CAST ?
2. Bagaimana membuat program enkripsi dan dekripsi menggunakan
1.3
Tujuan
Tugas akhir ini bertujuan untuk merancang program menggunakan
algoritma CAST sebagai pengamanan file data.
1.4
Pembatasan Masalah
• Enkripsi yang digunakan hanya dengan menggunakan metoda CAST
dengan panjang kunci maksimal 128 bit atau lebih dikenal dengan nama
CAST-128.
• Enkripsi yang digunakan hanya untuk file yang berformat txt (berisi
teks).
1.5
Spesifikasi Hardware
Program diuji dengan menggunakan CPU Atlhon 1800 Mhz dengan
memory sebesar 512 MB.
1.6
Spesifikasi Software
Program dibuat dengan menggunakan bahasa pemrograman Borland
1.7
Sistematika Pembahasan
Materi pembahasan dalam laporan Tugas Akhir ini adalah
BAB I PENDAHULUAN
Bab ini menjelaskan mengenai latar belakang Tugas Akhir, tujuan Tugas
Akhir, pembatasan masalah dan sistematika pembahasan.
BAB II TEORI PENUNJANG
Bab ini berisi berbagai macam landasan teori yang bersangkutan dengan
enkripsi dan dekripsi algoritma CAST-128, yaitu antara lain : teori dasar
kriptografi, algoritma simetrik dan asimetrik, mode enkripsi blok cipher, dan
algoritma CAST-128.
BAB III PERANCANGAN DAN REALISASI
Bab ini berisi perancangan dan realisasi dari program enkripsi dan dekripsi
algoritma CAST-128
BAB IV HASIL PENGAMATAN
Bab ini berisi tentang data hasil pengamatan dari proses enkripsi dan
dekripsi algoritma CAST-128.
BAB V KESIMPULAN DAN SARAN
Bab ini berisi kesimpulan dan saran yang mungkin berguna dalam
6
Daftar Pustaka
Adams, C., “Constructing Symmetric Chipers using the CAST Design
Procedure”, Design, Codes, and Cryptography.
Knused, L, “Block Cipher – analysis design and application”. Phd Dissertation :
Aarhus University, 1994.
Kurniawan, Yusuf , Ir. MT.,Kriptografi Keamanan Internet dan Jaringan
Komunikasi, Penerbit Informatika, Bandung, 2004.
Http://www.entrust.com/library.htm., “Constructing Symmetric Chipers using the
CAST Design Procedure”
Http://www.adonis.ee.queensu.ca:8000/cast/cast.html., “CAST Encryption
Algorithm Related Publications”.
Schneier, Bruce, Applied Cryptography Second edition: protocols, Algorithms,