Nama : Noval Gandhi Sadewa
NIM : 201731236
Kelas : B
A.
Algoritma
1. Hubungan KSK dengan Kriptografi Algoritma Kelompok
Keamanan
Sistem Komputer merupakan sebuah upaya yang dilakukan untuk mengamankan kinerja
dan proses komputer.
Penerapan Keamanan Sistem Komputer dalam kehidupan sehari-hari
berguna sebagai penjaga sumber daya sistem agar tidak digunakan, modifikasi, interupsi, dan
diganggu oleh orang yang tidak berwenang.
Sasaran
keamanan sistem komputer antara lain adalah sebagai perlindungan informasi
terhadap pencurian atau korupsi, atau pemeliharaan ketersediaan, seperti
dijabarkan dalam kebijakan keamanan.
Sistem keamanan pengiriman
data (komunikasi data yang aman) dipasang untuk mencegah pencurian, kerusakan,
dan penyalahgunaan data yang terkirim melalui jaringan komputer. Dalam praktek,
pencurian data berwujud pembacaan oleh pihak yang tidak berwenang biasanya
dengan menyadap saluran publik. Teknologi jaringan komputer telah dapat
mengurangi bahkan membuang kemungkinan adanya kerusakan data akibat buruknya
konektivitas fisik, namun gangguan tetap bisa terjadi karena ada unsur
kesengajaan yang mengarah ke penyalahgunaan sistem dari pihak-pihak tertentu.
Makalah ini bertujuan untuk mengetahui teknik-teknik mengamankan
data dengan proses
Enkripsi dan Dekripsi. Enkripsi dan Dekripsi yang akan dibahas pada makalah ini adalah dengan menggunakan kriptografiInternational Data
Encryption Algorithm (IDEA).
2. Penjelasan Algoritma Kriptografi IDEA
·
Pengertian Kriptografi Algoritma IDEA
IDEA merupakan block cipher (cipher
blok), yang beroperasi pada blok plaintext 64 bit.
Panjang kuncinya 128bit. Algoritma yang sama digunakan untuk proses
enkripsi dan dekripsi. Sebagaimana algoritma enkripsi yang lain, IDEA
menggunakan confusion dan diffusion. IDEA menggunakan operasi aljabar yang tidak
kompatibel sebagai berikut,
a. XOR.
b. Penambahan modulo 216.
c.
Perkalian modulo 216+1
(operasi ini menggantikan kotak-S atau S-Box).
·
Sejarah
Kriptografi Algoritma IDEA
Metode IDEA diperkenalkan pertama kali oleh
Xuejia Lai dan James Massey pada tahun 1990 dengan nama PES (Proposed
Encryption Standard). Tahun berikutnya, setelah Biham dan Shamir
mendemonstrasikancryptanalysis yang berbeda, sang penemu memperkuat
algoritma mereka dari serangan dan algoritma hasil pengubahan tersebut diberi
nama IPES (Improved Proposed Encryption Algorithm). Kemudian pada tahun
1992, IPES diganti namanya menjadi IDEA (International Data Encryption
Algorithm). IDEA dirancang untuk menggantikan DES (Data Encryption
Standard).
·
Cara Kerja (Proses Enkripsi dan Proses
Deskripsi) Kriptografi Algoritma IDEA
Dalam proses metode IDEA memiliki input 128
bit kunci (key) yang identik dengan 32 digit heksadesimal ataupun 16
karakter yang diproses untuk menghasilkan 52 subkey dengan
perincian masing-masing 6 buahsubkey akan digunakan pada 8 putaran
dan 4 buah subkey untuk transformasi output. Algoritma IDEA
ini menggunakan kunci (key) simetris, dimana kunci yang digunakan
enkripsi sama dengan dekripsi.
Proses Enkripsi Kriptografi Algoritma IDEA
Proses enkripsi algoritma IDEA adalah sebagai
berikut, pertama–tama plaintext 64bit dibagi
menjadi 4 buah sub blok dengan panjang 16 bit, yaitu X1, X2, X3,
X4. Empat sub blok ini menjadi masukan bagi iterasi tahap pertama algoritma.
Total terdapat 8 iterasi. Pada setiap iterasi, 4 sub blok di-XOR-kan,
ditambahkan, dikalikan dengan yang lain dan dengan 6 buah subkey 16
bit. Diantara iterasi sub blok kedua dan ketiga saling dipertukarkan. Akhirnya
4 buah sub blok dikombinasikan dengan 4 subkey dalam
transformasi output. Pada setiap tahapan, urutan berikut ini dikerjakan,
1. Kalikan X1 dengan K1 mod
(216 + 1).
2. Tambahkan X2 dengan K2
mod 216.
3. Tambahkan X3 dengan K3
mod 216.
4. Kalikan X4 dengan K4
mod (216 + 1).
5. XOR hasil dari step 1 dan 3.
6. XOR hasil dari step 2 dan 4.
7. Kalikan hasil dari step 5
dengan K5 mod (216 + 1).
8. Tambahkan hasil dari step
6 dan 7 mod 216.
9. Kalikan hasil dari step 8
dengan K6 mod (216 + 1).
10. Tambahkan hasil dari
step 7 dan 9 mod 216.
11. XOR hasil dari step 1
dan 9.
12. XOR hasil dari step 3
dan 9.
13. XOR hasil dari step 2
dan 10.
14. XOR hasil dari step 4
dan 10.
Output dari setiap round adalah empat sub blok
yang dihasilkan pada langkah 11, 12, 13 dan 14. Sub blok 12 dan 13 di-swap (kecuali
untuk putaran terakhir) sehingga input dari putaran berikutnya
adalah hasil kombinasi dari langkah 11 13 12 14.Setelah 8 putaran, akan
dilakukan tranformasi output berikut,
1. Kalikan X1 dengan subkey
K1 mod (216 + 1).
2. Tambahkan X2 dengan
subkey K2 mod 216.
3. Tambahkan X3 dengan
subkey K3 mod 216.
4. Kalikan X4 dengan subkey
K4 mod (216 + 1).
Proses Deskripsi
Kriptografi Algoritma IDEA
Proses dekripsi sama persis dengan proses
enkripsi. Perbedaannya hanya terletak pada aturan dari subkey-nya. Urutan subkey terbalik
dengan proses enkripsi dan subkey-nya di-inverse-kan. Subkey pada
langkah transformasi output pada proses enkripsi di-inverse-kan dan
digunakan sebagai subkey pada putaran 1 pada proses
dekripsi. Subkey pada putaran 8 di-inverse-kan dan
digunakan sebagai subkey pada putaran 1 dan 2 pada proses
dekrips. Demikian seterusnya, agar lebih jelas lihatlah tabel berikut ini.
Round
|
Subkey
Enkripsi
|
Subkey
Dekripsi
|
1
|
K1(1)
K2(1) K3(1) K4(1) K5(1) K6(1)
|
K1(9)-1 -K2(9)-K3(9)
K4(9)-1 K5(8) K6(8)
|
2
|
K1(2)
K2(2) K3(2) K4(2) K5(2) K6(2)
|
K1(8)-1 -K3(8)
-K2(8) K4(8)-1 K5(7) K6(7)
|
3
|
K1(3)
K2(3) K3(3) K4(3) K5(3) K6(3)
|
K1(7)-1 -K3(7)
-K2(7) K4(7)-1 K5(6) K6(6)
|
4
|
K1(4)
K2(4) K3(4) K4(4) K5(4) K6(4)
|
K1(6)-1 -K3(6)
-K2(6) K4(6)-1 K5(5) K6(5)
|
5
|
K1(5)
K2(5) K3(5) K4(5) K5(5) K6(5)
|
K1(5)-1 -K3(5)
-K2(5) K4(5)-1 K5(4) K6(4)
|
6
|
K1(6)
K2(6) K3(6) K4(6) K5(6) K6(6)
|
K1(4)-1 -K3(4)
-K2(4) K4(4)-1 K5(3) K6(3)
|
7
|
K1(7)
K2(7) K3(7) K4(7) K5(7) K6(7)
|
K1(3)-1 -K3(3)
-K2(3) K4(3)-1 K5(2) K6(2)
|
8
|
K1(8)
K2(8) K3(8) K4(8) K5(8) K6(8)
|
K1(2)-1 -K3(2)
-K2(2) K4(2)-1 K5(1) K6(1)
|
Transfor masi
output
|
K1(9)
K2(9) K3(9) K4(9)
|
K1(1)-1 -K2(1)
-K3(1) K4(1)-1
|
·
Flowchart
dan Penjelasan Kriptografi Algoritma IDEA
Penjelasan :
IDEA menggunakan
proses iterasi yang terdiri dari 8 putaran dan 1
transformasi keluaran pada putaran ke 8,5. Algoritma IDEA ini
menggunakan 3 operasi aljabar utama, yakni : Xor,
operasi penjmlahan modulo 2 16 dan operasi perkalian modulo (216 + 1).
Operasi ini semuanya dilakukan pada subblok 16bit. IDEA
mendapatkan keamanannya dari operasi dari grup yang berbeda – penambahan
dan penjumlahan modular serta exclusive or dari bit —yang secara
aljabar tidak cocok dalam beberapa pengertian.
3. Studi Kasus
Tema : Industri
Jakarta, CNN Indonesia -- Telkomsel memberi
keterangan resmi mengenai peretasan terhadap situsnya. Dalam konferensi pers
yang digelar Telkomsel, Ririek Adriansyah, Direktur Utama Telkomsel menyebutkan
mengakui peretasan tersebut. "Web server kita diretas
sekitar 5.30 (WIB). (Lalu) kita ambil langkah matikan web kita," terang
Ririek kepada wartawan di Jakarta, Jumat (28/4).
Ririek mengaku situs
Telkomsel telah berangsur normal sejak pukul 15.00 WIB. "Kalau sekarang
diakses, sudah normal kembali," tambahnya. Berdasarkan pengamatan CNN
Indonesia.com, situs Telkomsel kembali tak bisa diakses dalam beberapa jam.
Namun, kini sudah bisa diakses kembali. Lebih lanjut Ririek menyebutkan
bahwa web server Telkomsel tersebut tidak terhubung dengan
sistem di dalam, sehingga tidak berimbas kepada akses data pelanggan.
"Jadi (situs itu) hanya untuk menyediakan informasi saja. Tidak mungkin
kena akses pelanggan."
Ririek juga menyebutkan
bahwa Telkomsel saat ini sedang dalam proses migrasi server. "Kita sudah
ambil langkah-langkah sebagai fokus agar tak terulang kembali."
Berdasarkan pantauan CNN Indonesia.com sepanjang hari ini, berikut kronologi
pembajakan situs Telkomsel.
05.30 WIB - Hacker retas
situs www.telkomsel.com
06.00 WIB - Laporan
peretasan muncul pertama kali di Twitter disertai tangkapan layar deface yang
dilakukan hacker di situs tersebut.
07.00 WIB - Situs www.telkomsel.com tak
bisa diakses. Netizen mulai ramai membicarakan peristiwa peretasan ini.
11.00 WIB - CNNIndonesia.com sempat
berhasil mengecek situs Telkomsel yang sudah kembali live.
15.00 WIB - Telkomsel
mengklaim situs sudah berangsur pulih dan sudah bisa diakses kembali.
17.30 WIB -
Pantauan CNNIndonesia.com situs Telkomsel masih dalam
perbaikan.
18.30 WIB
- Pantauan CNNIndonesia.com situs Telkomsel sudah
dapat diakses kembali.
Alfons Tanujaya, pakar keamanan digital,
menyebut ada dua kemungkinan situs Telkomsel kena retas. Pertama karena ada
celah keamanan yang berhasil dieksploitasi dan kedua karena username dan
password web hosting berhasil diketahui oleh peretas.
Soal kemungkinan
pertama, Alfons menyebut pihak keamanan Telkomsel tidak sigap dalam menambal
celah keamanan di sistem hosting yang telah terekspos para peretas. Alhasil
pelaku berhasil mengeksploitasi situs Telkomsel seperti yang terlihat sejak
pagi. Alfons mengatakan celah seperti itu bisa berujung pada risiko eksploitasi
database oleh pihak peretas yang imbasnya bisa sangat parah jika terjadi.
"Kemungkinan
kecil, tapi ceroboh banget kalau itu sampai terjadi," ujar Alfons ketika
ditelpon CNN Indonesia.com, Jumat (28/4).
Kemudian untuk
kemungkinan berikutnya, peretasan terjadi akibat peretas mengetahui nama
pengguna dan kata sandi untuk mengakses web hosting. Menurut
Alfons, Telkomsel seharusnya bisa menghindarinya dengan memasang
pengamanan two-factor authentication (TFA) atau pengamanan dua
pintu. Cara lain yang semestinya dipakai oleh Telkomsel adalah membatasi
Internet Protocol (IP) yang bisa mengakses dan mengganti web hosting mereka.
"Jadi harusnya sekelas Telkomsel melakukan hal-hal seperti itu dan itu
artinya belum dilakukan," ucap Alfons. Selain masalah deface yang mendera
situsnya Telkomsel juga harus menanggung malu lantaran hasil pencarian teratas
dengan kata kunci 'Telkomsel' di Google kena retas sehingga berisi kata-kata
kasar. Menanggapi hal ini, Alfons berujar Telkomsel bisa mengubahnya secepat
mungkin dengan menghubungi pihak Google. "Kalau adminnya peduli, bisa itu
diubah," imbuhnya.
Sampai tulisan ini
ditulis pada pukul 12.10 WIB, hasil pencarian dengan kata kunci 'Telkomsel' di
mesin Google masih kena retas. Alfons memperkirakan hal itu terjadi karena
mesin pencari Google bekerja lebih cepat dibanding mesin pencari lain seperti
Bing dan Yahoo karena dapat menangkap cache dari metadata kurang dari 12 jam.
Hal itu menjelaskan pencarian dengan kata kunci 'Telkomsel' di Bing dan Yahoo
tidak menampilkan hal yang sama seperti di Google.
Pada bagian username
dan password dari studi kasus tersebut dapat diterapkan Algoritma
Kriptografi IDEA sebagai sistem keamanan data pengguna.
4. Sintaks dari Algoritma Kriptografi IDEA
(Proses Enkripsi dan Deskripsi)
Proses Enkripsi
Algoritma IDEA
Sub Proses_Encryp() On Error Resume Next
Dim
i, cRow As Integer Dim jlhBaris As Integer Dim bTmp As Double
Dim tmpHasil As String Dim jlhx As Integer
Dim
X1, X2, X3, X4 As String Dim proses As Integer
jlhx
= (msfp.Rows - 1) * 2 proses = (jlhx / 8) * 14 L1 = ""
L2 = ""
L3 = ""
L4
= ""
L5 = ""
L6
= ""
L7 = ""
L8 = ""
L9
= ""
L10 = ""
L11
= ""
L12 = ""
L13 = ""
L14
= ""
bTmp
= 0 tmpHasil = ""
frmmaster.xF.Caption
= "Informasi Enkripsi Data:" 'frmmaster.txtinfo.Text = ""
i = 0
For i = 1 To val(txtjlh.Text)
frmmaster.txtinfo.Text = frmmaster.txtinfo.Text &
Chr(13) & " PUTARAN " & i & " " & Chr(13)
With frminfopkunci.msf jlhBaris = .Rows - 1
Screen.MousePointer
= vbHourglass For cRow = 1 To proses
Select Case cRow
Case 1
.TextMatrix(cRow, 1) = "(X1 * K1) mod (2^16 + 1)
=(" & msfp.TextMatrix(cRow, 1) & " * " &
msfk.TextMatrix(cRow, 1) & ") mod (2^16 + 1)"
bTmp = FBiner2Dec(msfp.TextMatrix(cRow, 1)) *
FBiner2Dec(msfk.TextMatrix(cRow, 1))
tmpHasil = FDec2Biner(FMod(bTmp, (2 ^ 16) + 1), 16) L1 =
tmpHasil
.TextMatrix(cRow, 2) = tmpHasil
Case 2
.TextMatrix(cRow, 1) = "(X2 + K2) mod 2^16 ="
& msfp.TextMatrix(cRow, 1) & " + " &
msfk.TextMatrix(cRow, 1) & ") mod (2^16)"
bTmp = FBiner2Dec(msfp.TextMatrix(cRow, 1)) +
FBiner2Dec(msfk.TextMatrix(cRow, 1))
tmpHasil
= FDec2Biner(FMod(bTmp, 2 ^ 16), 16) L2 = tmpHasil
.TextMatrix(cRow, 2) = tmpHasil
Case 3
.TextMatrix(cRow, 1) = "(X3 + K3) mod 2^16 ="
& msfp.TextMatrix(cRow, 1) & " + " & msfk.TextMatrix(cRow,
1) & ") mod (2^16)"
bTmp = FBiner2Dec(msfp.TextMatrix(cRow, 1)) +
FBiner2Dec(msfk.TextMatrix(cRow, 1))
tmpHasil
= FDec2Biner(FMod(bTmp, 2 ^ 16), 16) L3 = tmpHasil
.TextMatrix(cRow, 2) = tmpHasil
Case 4
.TextMatrix(cRow, 1) = "(X4 * K4) mod (2^16 + 1) =("
& msfp.TextMatrix(cRow, 1) & " * " &
msfk.TextMatrix(cRow, 1) & ") mod (2^16 + 1)"
bTmp = FBiner2Dec(msfp.TextMatrix(cRow, 1)) *
FBiner2Dec(msfk.TextMatrix(cRow, 1))
tmpHasil = FDec2Biner(FMod(bTmp, (2 ^ 16) + 1), 16) L4 =
tmpHasil
.TextMatrix(cRow, 2) = tmpHasi
Case 5
.TextMatrix(cRow, 1) = "L#1 XOR L#3 =" &
Trim(L1) & " XOR " & Trim(L3)
tmpHasil
= FXORBiner(Trim(L1), Trim(L3), 16) L5 = tmpHasil
.TextMatrix(cRow,
2) = tmpHasil
Case 6
.TextMatrix(cRow, 1) = "L#2 XOR L#4 =" &
Trim(L2) & " XOR " & Trim(L4)
tmpHasil
= FXORBiner(Trim(L2), Trim(L4), 16) L6 = tmpHasil
.TextMatrix(cRow, 2) = tmpHasil
Case 7
.TextMatrix(cRow, 1) = "(L#5 * K5) mod (2^16 + 1)
=" & L5 & "
* " & msfk.TextMatrix(cRow - 2, 1) & " mod (2^16 + 1)"
bTmp
= FBiner2Dec(Trim(L5)) * FBiner2Dec(msfk.TextMatrix(cRow - 2, 1))
tmpHasil
= FDec2Biner(FMod(bTmp, (2 ^ 16) + 1), 16) L7 = tmpHasil
.TextMatrix(cRow, 2) = tmpHasil
Case 8
.TextMatrix(cRow, 1) = "(L#6 + L#7)) mod 2^16
=" & L6 & " + " & L7 & "mod 2^16"
bTmp
= FBiner2Dec(Trim(L6)) + FBiner2Dec(Trim(L7)) tmpHasil = FDec2Biner(FMod(bTmp,
2 ^ 16), 16)
L8 = tmpHasil
.TextMatrix(cRow, 2) = tmpHasil
Case 9
.TextMatrix(cRow, 1) = "(L#8 * K6) mod (2^16 + 1)
=" & L8 & " * " & msfk.TextMatrix(cRow - 3, 1)
bTmp = FBiner2Dec(Trim(L8)) *
FBiner2Dec(msfk.TextMatrix(cRow - 3, 1))
tmpHasil
= FDec2Biner(FMod(bTmp, (2 ^ 16) + 1), 16) L9 = tmpHasil
.TextMatrix(cRow, 2) = tmpHasil
Case
10
.TextMatrix(cRow, 1) = "(L#7 + L#9)) mod 2^16
=" & L7 & " + " & L9 & "mod 2^16"
bTmp
= FBiner2Dec(Trim(L7)) + FBiner2Dec(Trim(L9)) tmpHasil = FDec2Biner(FMod(bTmp,
2 ^ 16), 16)
L10 = tmpHasil
.TextMatrix(cRow, 2) = tmpHasil
Case 11
.TextMatrix(cRow,
1) = "L#1 XOR L#9 =" & L1 & " XOR " & L9
tmpHasil
= FXORBiner(Trim(L1), Trim(L9), 16) L11 = tmpHasil
.TextMatrix(cRow, 2) = tmpHasil
Case 12
.TextMatrix(cRow, 1) = "L#3 XOR L#9 =" & L3
& " XOR " & L9
tmpHasil
= FXORBiner(Trim(L3), Trim(L9), 16) L12 = tmpHasil
.TextMatrix(cRow,
2) = tmpHasil
Case 13
.TextMatrix(cRow, 1) = "L#2 XOR L#10 =" & L2
& " XOR " & L10
tmpHasil
= FXORBiner(Trim(L2), Trim(L10), 16) L13 = tmpHasil
.TextMatrix(cRow,
2) = tmpHasil
Case 14
.TextMatrix(cRow, 1) = "L#4 XOR L#10 =" &
L4 & " XOR "
& L10
tmpHasil
= FXORBiner(Trim(L4), Trim(L10), 16) L14 = tmpHasil
.TextMatrix(cRow,
2) = tmpHasil End Select
Next
cRow d_Grid
End
With Next i
Screen.MousePointer
= vbDefault Call transForm
End Sub
Proses Dekripsi
Algoritma IDEA
Sub
Proses_Decryp() On Error Resume Next
Dim
i, cRow As Integer Dim jlhBaris As Integer Dim bTmp As Double
Dim tmpHasil As String Dim jlhx As Integer
Dim
X1, X2, X3, X4 As String Dim proses As Integer
jlhx
= (msfp.Rows - 1) * 2 proses = (jlhx / 8) * 14
L1 = ""
L2 = ""
L3
= ""
L4 = ""
L5
= ""
L6 = ""
L7 = ""
L8
= ""
L9 = ""
L10
= ""
L11 = ""
L12 = ""
L13
= ""
L14 = ""
bTmp
= 0 tmpHasil = ""
frmmaster.xF.Caption
= "Informasi Deskripsi Data:" 'frmmaster.txtinfo.Text = ""
i = 0
For i = 1 To val(txtjlh.Text)
frmmaster.txtinfo.Text = frmmaster.txtinfo.Text &
Chr(13) & "PUTARAN " & i & " " & Chr(13)
With frminfopkunci.msf jlhBaris = .Rows - 1
Screen.MousePointer
= vbHourglass For cRow = 1 To proses
Select Case cRow Case 1
.TextMatrix(cRow,
1) = "(X1 * K1) mod (2^16 + 1) =(" & msfp.TextMatrix(cRow, 1)
& " * " & msfk.TextMatrix(cRow, 1) & ") mod (2^16 +
1)"
bTmp
= FBiner2Dec(msfp.TextMatrix(cRow, 1)) * FBiner2Dec(msfk.TextMatrix(cRow, 1))
tmpHasil
= FDec2Biner(FMod(bTmp, (2 ^ 16) + 1), 16) L1 = tmpHasil
.TextMatrix(cRow, 2) = tmpHasil
Case 2
.TextMatrix(cRow,
1) = "(X2 + K2) mod 2^16 =" & msfp.TextMatrix(cRow, 1) &
" + " & msfk.TextMatrix(cRow, 1) & ") mod (2^16)"
bTmp
= FBiner2Dec(msfp.TextMatrix(cRow, 1)) + FBiner2Dec(msfk.TextMatrix(cRow, 1))
tmpHasil
= FDec2Biner(FMod(bTmp, 2 ^ 16), 16) L2 = tmpHasil
.TextMatrix(cRow,
2) = tmpHasil
Case 3
.TextMatrix(cRow,
1) = "(X3 + K3) mod 2^16 =" & msfp.TextMatrix(cRow, 1) &
" + " & msfk.TextMatrix(cRow, 1) & ") mod (2^16)"
bTmp
= FBiner2Dec(msfp.TextMatrix(cRow, 1)) + FBiner2Dec(msfk.TextMatrix(cRow, 1))
tmpHasil
= FDec2Biner(FMod(bTmp, 2 ^ 16), 16) L3 = tmpHasil
.TextMatrix(cRow, 2) = tmpHasil
Case 4
.TextMatrix(cRow,
1) = "(X4 * K4) mod (2^16 + 1) =(" & msfp.TextMatrix(cRow, 1)
& " * " & msfk.TextMatrix(cRow, 1) & ") mod (2^16 +
1)"
bTmp
= FBiner2Dec(msfp.TextMatrix(cRow, 1)) * FBiner2Dec(msfk.TextMatrix(cRow, 1))
tmpHasil
= FDec2Biner(FMod(bTmp, (2 ^ 16) + 1), 16) L4 = tmpHasil
.TextMatrix(cRow, 2) = tmpHasil
Case 5
.TextMatrix(cRow,
1) = "L#1 XOR L#3 =" & Trim(L1) & " XOR " &
Trim(L3)
tmpHasil
= FXORBiner(Trim(L1), Trim(L3), 16) L5 = tmpHasil
.TextMatrix(cRow, 2) = tmpHasil
Case 6
.TextMatrix(cRow,
1) = "L#2 XOR L#4 =" & Trim(L2) & " XOR " &
Trim(L4)
tmpHasil
= FXORBiner(Trim(L2), Trim(L4), 16) L6 = tmpHasil
.TextMatrix(cRow,
2) = tmpHasil
Case 7
.TextMatrix(cRow,
1) = "(L#5 * K5) mod (2^16 + 1) =" & L5 & " * "
& msfk.TextMatrix(cRow - 2, 1) & " mod (2^16 + 1)"
bTmp
= FBiner2Dec(Trim(L5)) * FBiner2Dec(msfk.TextMatrix(cRow - 2, 1))
tmpHasil
= FDec2Biner(FMod(bTmp, (2 ^ 16) + 1), 16) L7 = tmpHasil
.TextMatrix(cRow,
2) = tmpHasil
Case 8
.TextMatrix(cRow,
1) = "(L#6 + L#7)) mod 2^16 =" & L6 & " + " &
L7 & "mod 2^16"
bTmp
= FBiner2Dec(Trim(L6)) + FBiner2Dec(Trim(L7)) tmpHasil = FDec2Biner(FMod(bTmp,
2 ^ 16), 16)
L8
= tmpHasil
.TextMatrix(cRow, 2) = tmpHasil
Case 9
.TextMatrix(cRow,
1) = "(L#8 * K6) mod (2^16 + 1) =" & L8 & " * "
& msfk.TextMatrix(cRow - 3, 1)
bTmp
= FBiner2Dec(Trim(L8)) * FBiner2Dec(msfk.TextMatrix(cRow - 3, 1))
tmpHasil
= FDec2Biner(FMod(bTmp, (2 ^ 16) + 1), 16)
L9
= tmpHasil
.TextMatrix(cRow,
2) = tmpHasil
Case 10
.TextMatrix(cRow,
1) = "(L#7 + L#9)) mod 2^16 =" & L7 & " + " &
L9 & "mod 2^16"
bTmp
= FBiner2Dec(Trim(L7)) + FBiner2Dec(Trim(L9)) tmpHasil = FDec2Biner(FMod(bTmp,
2 ^ 16), 16)
L10 = tmpHasil
.TextMatrix(cRow, 2) = tmpHasil
Case
11
.TextMatrix(cRow,
1) = "L#1 XOR L#9 =" & L1 & " XOR " & L9
tmpHasil
= FXORBiner(Trim(L1), Trim(L9), 16) L11 = tmpHasil
.TextMatrix(cRow, 2) = tmpHasil
Case 12
.TextMatrix(cRow,
1) = "L#3 XOR L#9 =" & L3 & " XOR " & L9
tmpHasil
= FXORBiner(Trim(L3), Trim(L9), 16) L12 = tmpHasil
.TextMatrix(cRow, 2) = tmpHasil
Case 13
.TextMatrix(cRow,
1) = "L#2 XOR L#10 =" & L2 & " XOR " & L10
tmpHasil
= FXORBiner(Trim(L2), Trim(L10), 16) L13 = tmpHasil
.TextMatrix(cRow, 2) = tmpHasil
Case 14
.TextMatrix(cRow,
1) = "L#4 XOR L#10 =" & L4 & " XOR " & L10
tmpHasil
= FXORBiner(Trim(L4), Trim(L10), 16) L14 = tmpHasil
.TextMatrix(cRow, 2) = tmpHasil End Select
Next
cRow
d_Grid
End With Next i
Screen.MousePointer
= vbDefault Call transForm
End Sub
5. Link Blog Anggota Kelompok 7
- https://syahrulanwrr.wordpress.com/
- https://adiliyanisaputra.blogspot.com/
- https://verdhilife.home.blog/
- https://anisainformatics1731157.blogspot.com/
6. Referensi Sumber Kelompok 7
·
http://informatika.stei.itb.ac.id/~rinaldi.munir/Matdis/2007-2008/Makalah/MakalahIF2153-0708-102.pd
q
B. Analisa Algoritma
1. Hubungan KSK Kriptografi Algoritma IDEA
dan Kriptografi Algoritma DES
Algoritma yang memiliki kemiripan dengan algoritma IDEA
adalah Algoritma DES karena,
perkembangan teknologi informasi dan komunikasi sangat cepat dan pesat. Secara
tidak langsung, teknologi informasi telah menjadi bagian penting dari berbagai
bidang kehidupan. Seiring dengan kemajuan teknologi informasi maka sangat di
perlukan sebuah keamanan data terhadap kerahasiaan informasi yang bersifat
pribadi seperti halnya buku diary.
Oleh karena itu untuk
penulis membuat note diary berbasis android menggunakan algoritma kriptografi
DES (Data Encryption Standard) untuk proses enkripsi dan dekripsi data agar
informasi tersebut dapat terjaga keamanannya.
DES (Data Encryption
Standard) merupakan algoritma cipher blok yang popular karena dijadikan standar
algoritma enkripsi kunci-simetri. Sebenarnya DES adalah nama standar enkripsi
simetri, nama algoritma enkripsinya sendiri adalahDEA (Data Encryption
Algorithm), namun nama DES lebih popular dari pada DEA. Hubungan dari kedua ini
yaitu dimana algoritma DES dijadikan standard enkripsi data sebelum adanya IDEA
sehingga kedua algoritma ini memiliki beberapa kemiripan dan dari segi keamanan
pun hampir sama hubungannya.
2. Penjelasan Algoritma Kriptografi DES
·
Pengertian
Kriptografi Algoritma DES
DES (Data Encryption
Standard) adalah algoritma cipher blok yang populer karena dijadikan standard
algoritma enkripsi kunci-simetri, meskipun saat ini standard tersebut telah
digantikan dengan algoritma yang baru, AES, karena DES sudah dianggap tidak
aman lagi. Sebenarnya DES adalah nama standard enkripsi simetri, nama algoritma
enkripsinya sendiri adalah DEA (Data Encryption Algorithm), namun nama DES
lebih populer daripada DEA. Algoritma ini telah disetujui oleh National Bureau
of Standard (NBS) setelah penilaian kekuatannya oleh National Security Agency
(NSA) Amerika Serikat. 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.
·
Sejarah
Kriptografi Algoritma DES
DES atau Singkatan dari
Data Encryption Standard merupakan algoritma penyandian yang diadopsi dan
dibakukan oleh NBS (National Bureau Standard) yang kini menjadi NIST (National
Institute of Standards and Technology) pada tahun 1977 sebagai FIPS 46 (Federal
Information Processing Standard). DES bermula dari hasil riset Tuchman
Meyer yang diajukan sebagai kandidat Sandi Standard Nasional yang diusulkan
oleh NBS. Konon katanya, algoritma yang dikembangkan oleh Tuchman Meyer ini merupakan
algoritma terbaik dari semua kandidat Sandi Standard Nasional. Pada mulanya,
algoritma yang kini disebut DES, memiliki panjang kunci sandi 128 bit. Namun
selama proses pengadopsian, NBS melibatkan NSA (National Security Agency), dan
algoritma sandi ini mengalami pengurangan ukuran kunci sandi dari 128 bit
menjadi 56 bit saja. Sebagian orang mungkin mengira bahwa pengurangan panjang
kunci sandi ini merupakan usulan NSA untuk melemahkan algoritma Tuchman Meyer
karena motif politik tertentu. Entah itu untuk mempermudah penyadapan atau
untuk melemahkan pengamanan informasi lawan politik. Mungkin NSA menginginkan
algoritma Tuchman Meyer ini “cukup aman” untuk digunakan warga sipil, tetapi
mudah dipecahkan oleh organisasi besar semisal NSA dengan peralatan canggihnya.
Bila dibandingkan dengan performa komputer personal pada saat itu, algoritma
sandi dengan panjang kunci 56 bit dapat dikatakan cukup aman bila digunakan
oleh orang-orang “biasa”, tapi dapat dengan mudah dipecahkan dengan peralatan
canggih dan tentunya kepemilikan alat canggih ini hanya dapat dijangkau oleh
organisasi elit seperti NSA. Dengan dukungan dana yang melimpah, pembuatan alat
brute‐force DES bukanlah hal yang mustahil pada saat itu. Kini algoritma DES
sudah usang dan keamanannya pun sudah tidak dapat dipertanggungjawabkan lagi.
Kini komputer personal pun sudah cukup untuk membobol algoritma DES, apalagi
dengan adanya teknologi parallel computing dan internet yang berkembang pesat.
DES telah secara resmi digantikan fungsinya oleh AES (Advanced Encryption
Standard) dengan panjang kunci sandi 128, 192 dan 256 bit.
·
Cara Kerja (Proses Enkripsi dan Proses
Deskripsi) Kriptografi Algoritma DES
·
Proses Enkripsi
Algoritma DES merupakan algoritma enkripsi yang paling
banyak digunakan didunia yang diadopsi oleh NIST (National Institue of
Standardsand Technology) sebagaistandar pengolah informasi FederalAS.
Dataplaintext dienkrip dalam blok-blok 64 bitmenjadi 64 bit data
cipher text menggunakan kunci 56 bit kunci internal (internal key).DES mentransformasikan
input 64 bit dalam beberapa tahap enkripsi ke dalamoutput 64bit. Dengan
demikian, DES termasuk block cipher. Dengantahapan dan kunci yang sama,DES
digunakan untuk membalik enkripsi. Kunci internal padaalgoritma DESdibangkitkan
dari kunci eksternal (external key) 64 bit. Skema global dari proses
algoritma. Dalam algoritma DES,
terdapat kunci eksternal dan kunci internal. Kunci internaldibangkitkan
dari kunci eksternal yang diberikan olehpengguna. Kunci internal
dapatdibangkitkan sebelum proses enkripsi ataupunbersamaan dengan proses
enkripsi. Kunci eksternal panjangnya 64 bit atau 8karakter. Karena ada 16
putaran,maka kunci internal yang dibutuhkan sebanyak 16 buah, yaitu
K1, K2, ..., K16. Untuk mengaitkan kunci internal diperlukan beberapa
langkah. Kunci eksternal 64 bit, dikompresi terlebih dahulu menjadi 54
bit menggunakan matriks permutasi kompresi PC-1. Dalam permutasi tiap
bitke-8 dari 8 byte kunci akan diabaikan. Sehingga akan ada penggunaan 8
bitdari 64 bit awal kunci eksternal. Setelah didapatkan 56 bit hasil
permutasi,selanjutnya 56 bit iniakan dibagimenjadi 2 bagian, kiri dan kanan,
yangmasing-masing panjangnya 28 bit.
Lalu ke-2 bagian tersebut akan disimpan
kedalam C0 dan D0.
C0 : berisi bit-bit dari K pada posisi
:57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 1810, 2, 59, 51, 43, 35, 27,
19,11, 3, 60, 52, 44, 36
D0 : berisi bit-bit dari K pada posisi
: 63, 55, 47, 39,
31, 23, 15, 7, 62, 54, 46, 38, 30, 2214, 6, 61, 53, 45, 37,29, 21, 21, 13, 5,
28, 20, 12.
Proses selanjutnya adalah ke-2 bagian (C0 dan D0) digeser ke kiri
(left shift) sepanjang 1 atau 2 bit, tergantung pada tiap putaran.
Perputaranini bersifat wrapping atauround-shift. Hasil dari pergeseran C0 dan
D0 akan didapatkan nilai dari C1 dan C2. Begitu seterusnya, hingga proses
tersebut menghasilkan C16 dan D16. Untuk mendapatkan kunci internal pertama
(K1), maka bit dari C0 dan D0 tadi dilakukan permutasi
kompresidenganmenggunakan matriks PC-2. Jadi setiap kunci Ki, mempunyai panjang
48 bit. Apabila prosespergeseran bit-bitdijumlahkan semuanya, maka jumlah
seluruhnya sama dengan28 putaran. Jumlah ini sama dengan jumlah bit pada Ci dan
Di. Oleh karena itu, setelah putaran ke-16 akan didapatkan kembali C16 = C0 dan
D16 = D0.
·
Proses
Dekripsi
Pada
algoritma DES proses dekripsi dan enkripsinya menggunakan kunci
yang sama. Proses dekripsi pada ciphertext merupakan proseskebalikan dari
proses enkripsi. Jika pada proses enkripsi urutan kunci yangdigunakan
adalah K1, K2, …, K16, maka untuk proses dekripsi urutan kunci yang
digunakan adalah K16, K15, …, K1. Masukkan awalnya adalah R16 dan L16
untuk deciphering. Blok R16 dan L16 diperoleh denganmempermutasikan ciphertext
dengan matriks permutasi IP-1
3. Pengetesan Algoritma
·
Menggunakan
Bahasa Pemrograman C++
#include<stdio.h>
#include<fstream.h>
#include<string.h>
#include<conio.h>
#include<iostream.h>
int key[64]={
0,0,0,1,0,0,1,1,
0,0,1,1,0,1,0,0,
0,1,0,1,0,1,1,1,
0,1,1,1,1,0,0,1,
1,0,0,1,1,0,1,1,
1,0,1,1,1,1,0,0,
1,1,0,1,1,1,1,1,
1,1,1,1,0,0,0,1
};
class Des
{
public:
#include<fstream.h>
#include<string.h>
#include<conio.h>
#include<iostream.h>
int key[64]={
0,0,0,1,0,0,1,1,
0,0,1,1,0,1,0,0,
0,1,0,1,0,1,1,1,
0,1,1,1,1,0,0,1,
1,0,0,1,1,0,1,1,
1,0,1,1,1,1,0,0,
1,1,0,1,1,1,1,1,
1,1,1,1,0,0,0,1
};
class Des
{
public:
int keyi[16]
[48],total[64],left[32],right[32],ck[28],dk[28],expansion[48],z[48],xor1[48],sub[32],p[32],xor2[32],temp[64],
pc1[56],ip[64],inv[8][8];
char final[1000];
void IP();
void PermChoice1();
void PermChoice2();
void Expansion();
void inverse();
void xor_two();
void xor_oneE(int);
void xor_oneD(int);
void substitution();
void permutation();
void keygen();
char * Encrypt(char *);
char * Decrypt(char *);
};
void Des::IP()
{
int k=58,i;
for(i=0;i < 32;i++)
{
ip[i]=total[k-1];
if(k-8>0) k=k-8;
else k=k+58;
}
k=57;
for( i=32;i < 64;i++)
{
ip[i]=total[k-1];
if(k-8 > 0) k=k-8;
else k=k+58;
}
}
void Des::PermChoice1()
{
int k=57,i;
for(i=0;i < 28;i++)
{
pc1[i]=key[k-1];
if(k-8 > 0) k=k-8;
else k=k+57;
}
k=63;
for( i=28;i < 52;i++)
{
pc1[i]=key[k-1];
if(k-8 > 0) k=k-8;
else k=k+55;
}
k=28;
for(i=52;i < 56;i++)
{
pc1[i]=key[k-1];
k=k-8;
}
}
void Des::Expansion()
{
int exp[8][6],i,j,k;
for(i=0;i < 8;i++)
{
for( j=0;j < 6;j++)
{
if((j!=0)||(j!=5))
{
k=4*i+j;
exp[i][j]=right[k-1];
}
if(j==0)
{
k=4*i;
exp[i][j]=right[k-1];
}
if(j==5)
{
k=4*i+j;
exp[i][j]=right[k-1];
}
}
}
exp[0][0]=right[31];
exp[7][5]=right[0];
k=0;
for(i=0;i < 8;i++)
for(j=0;j < 6;j++)
expansion[k++]=exp[i][j];
}
void Des::PermChoice2()
{
int per[56],i,k;
for(i=0;i < 28;i++) per[i]=ck[i];
for(k=0,i=28;i < 56;i++) per[i]=dk[k++];
z[0]=per[13];z[1]=per[16];z[2]=per[10];z[3]=per[23];z[4]=per[0];z[5]=per[4];z[6]=per[2];z[7]=per[27];
z[8]=per[14];z[9]=per[5];z[10]=per[20];z[11]=per[9];z[12]=per[22];z[13]=per[18];z[14]=per[11];z[15]=per[3];
z[16]=per[25];z[17]=per[7];z[18]=per[15];z[19]=per[6];z[20]=per[26];z[21]=per[19];z[22]=per[12];z[23]=per[1];
z[24]=per[40];z[25]=per[51];z[26]=per[30];z[27]=per[36];z[28]=per[46];z[29]=per[54];z[30]=per[29];z[31]=per[39];
z[32]=per[50];z[33]=per[46];z[34]=per[32];z[35]=per[47];z[36]=per[43];z[37]=per[48];z[38]=per[38];z[39]=per[55];
z[40]=per[33];z[41]=per[52];z[42]=per[45];z[43]=per[41];z[44]=per[49];z[45]=per[35];z[46]=per[28];z[47]=per[31];
}
void Des::xor_oneE(int round)
{
int i;
for(i=0;i < 48;i++)
xor1[i]=expansion[i]^keyi[round-1][i];
}
void Des::xor_oneD(int round)
{
int i;
for(i=0;i < 48;i++)
xor1[i]=expansion[i]^keyi[16-round][i];
}
void Des::substitution()
{
int s1[4][16]={
14,4,13,1,2,15,11,8,3,10,6,12,5,9,0,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,0,
15,12,8,2,4,9,1,7,5,11,3,14,10,0,6,13
};
int s2[4][16]={
15,1,8,14,6,11,3,4,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,6,9,3,2,15,
13,8,10,1,3,15,4,2,11,6,7,12,0,5,14,9
};
int s3[4][16]={
10,0,9,14,6,3,15,5,1,13,12,7,11,4,2,8,
13,7,0,9,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,6,9,8,7,4,15,14,3,11,5,2,12
};
int s4[4][16]={
7,13,14,3,0,6,9,10,1,2,8,5,11,12,4,15,
13,8,11,5,6,15,0,3,4,7,2,12,1,10,14,9,
10,6,9,0,12,11,7,13,15,1,3,14,5,2,8,4,
3,15,0,6,10,1,13,8,9,4,5,11,12,7,2,14
};
int s5[4][16]={
2,12,4,1,7,10,11,6,8,5,3,15,13,0,14,9,
14,11,2,12,4,7,13,1,5,0,15,10,3,9,8,6,
4,2,1,11,10,13,7,8,15,9,12,5,6,3,0,14,
11,8,12,7,1,14,2,13,6,15,0,9,10,4,5,3
};
int s6[4][16]={
12,1,10,15,9,2,6,8,0,13,3,4,14,7,5,11,
10,15,4,2,7,12,9,5,6,1,13,14,0,11,3,8,
9,14,15,5,2,8,12,3,7,0,4,10,1,13,11,6,
4,3,2,12,9,5,15,10,11,14,1,7,6,0,8,13
};
int s7[4][16]={
4,11,2,14,15,0,8,13,3,12,9,7,5,10,6,1,
13,0,11,7,4,9,1,10,14,3,5,12,2,15,8,6,
1,4,11,13,12,3,7,14,10,15,6,8,0,5,9,2,
6,11,13,8,1,4,10,7,9,5,0,15,14,2,3,12
};
int s8[4][16]={
13,2,8,4,6,15,11,1,10,9,3,14,5,0,12,7,
1,15,13,8,10,3,7,4,12,5,6,11,0,14,9,2,
7,11,4,1,9,12,14,2,0,6,10,13,15,3,5,8,
2,1,14,7,4,10,8,13,15,12,9,0,3,5,6,11
};
int a[8][6],k=0,i,j,p,q,count=0,g=0,v;
for(i=0;i < 8;i++)
{
for(j=0;j<6;j++)
{
a[i][j]=xor1[k++];
}
}
for( i=0;i < 8;i++)
{
p=1;q=0;
k=(a[i][0]*2)+(a[i][5]*1);
j=4;
while(j > 0)
{
q=q+(a[i][j]*p);
p=p*2;
j--;
}
count=i+1;
switch(count)
{
case 1: v=s1[k][q]; break;
case 2: v=s2[k][q]; break;
case 3: v=s3[k][q]; break;
case 4: v=s4[k][q]; break;
case 5: v=s5[k][q]; break;
case 6: v=s6[k][q]; break;
case 7: v=s7[k][q]; break;
case 8: v=s8[k][q]; break;
}
int d,i=3,a[4];
while(v > 0)
{
d=v%2;
a[i--]=d;
v=v/2;
}
while(i >= 0)
{
a[i--]=0;
}
for(i=0;i < 4;i++)
sub[g++]=a[i];
}
}
void Des::permutation()
{
p[0]=sub[15];p[1]=sub[6];p[2]=sub[19];p[3]=sub[20];p[4]=sub[28];p[5]=sub[11];p[6]=sub[27];p[7]=sub[16];
p[8]=sub[0];p[9]=sub[14];p[10]=sub[22];p[11]=sub[25];p[12]=sub[4];p[13]=sub[17];p[14]=sub[30];p[15]=sub[9];
p[16]=sub[1];p[17]=sub[7];p[18]=sub[23];p[19]=sub[13];p[20]=sub[31];p[21]=sub[26];p[22]=sub[2];p[23]=sub[8];
p[24]=sub[18];p[25]=sub[12];p[26]=sub[29];p[27]=sub[5];p[28]=sub[21];p[29]=sub[10];p[30]=sub[3];p[31]=sub[24];
}
void Des::xor_two()
{
int i;
for(i=0;i < 32;i++)
{
xor2[i]=left[i]^p[i];
}
}
void Des::inverse()
{
int p=40,q=8,k1,k2,i,j;
for(i=0;i < 8;i++)
{
k1=p;k2=q;
for(j=0;j < 8;j++)
{
if(j%2==0)
{
inv[i][j]=temp[k1-1];
k1=k1+8;
}
else if(j%2!=0)
{
inv[i][j]=temp[k2-1];
k2=k2+8;
}
}
p=p-1;q=q-1;
}
}
char * Des::Encrypt(char *Text1)
{
int i,a1,j,nB,m,iB,k,K,B[8],n,t,d,round;
char *Text=new char[1000];
strcpy(Text,Text1);
i=strlen(Text);
int mc=0;
a1=i%8;
if(a1!=0) for(j=0;j < 8-a1;j++,i++) Text[i]=' '; Text[i]='\0';
keygen();
for(iB=0,nB=0,m=0;m < (strlen(Text)/8);m++)
{
for(iB=0,i=0;i < 8;i++,nB++)
{
n=(int)Text[nB];
for(K=7;n >= 1;K--)
{
B[K]=n%2;
n/=2;
} for(;K >= 0;K--) B[K]=0;
for(K=0;K < 8;K++,iB++) total[iB]=B[K];
}
IP();
for(i=0;i < 64;i++) total[i]=ip[i];
for(i=0;i < 32;i++) left[i]=total[i];
for(;i < 64;i++) right[i-32]=total[i]; for(round=1;round <= 16;round++)
{
Expansion();
xor_oneE(round);
substitution();
permutation();
xor_two();
for(i=0;i < 32;i++) left[i]=right[i];
for(i=0;i < 32;i++) right[i]=xor2[i];
}
for(i=0;i < 32;i++) temp[i]=right[i];
for(;i < 64;i++) temp[i]=left[i-32];
inverse();
k=128; d=0;
for(i=0;i < 8;i++)
{
for(j=0;j < 8;j++)
{
d=d+inv[i][j]*k;
k=k/2;
}
final[mc++]=(char)d;
k=128; d=0;
}
}
final[mc]='\0';
return(final);
}
char * Des::Decrypt(char *Text1)
{
int i,a1,j,nB,m,iB,k,K,B[8],n,t,d,round;
char *Text=new char[1000];
unsigned char ch;
strcpy(Text,Text1);
i=strlen(Text);
keygen();
int mc=0;
for(iB=0,nB=0,m=0;m < (strlen(Text)/8);m++)
{
for(iB=0,i=0;i < 8;i++,nB++)
{
ch=Text[nB];
n=(int)ch ;
for(K=7;n >= 1;K--)
{
B[K]=n%2;
n/=2;
} for(;K >= 0;K--) B[K]=0;
for(K=0;K < 8;K++,iB++) total[iB]=B[K];
}
IP();
for(i=0;i < 64;i++) total[i]=ip[i];
for(i=0;i < 32;i++) left[i]=total[i];
for(;i < 64;i++) right[i-32]=total[i];
for(round=1;round <= 16;round++)
{
Expansion();
xor_oneD(round);
substitution();
permutation();
xor_two();
for(i=0;i < 32;i++) left[i]=right[i];
for(i=0;i < 32;i++) right[i]=xor2[i];
}
for(i=0;i < 32;i++) temp[i]=right[i];
for(;i < 64;i++) temp[i]=left[i-32];
inverse();
k=128; d=0;
for(i=0;i < 8;i++)
{
for(j=0;j < 8;j++)
{
d=d+inv[i][j]*k;
k=k/2;
}
final[mc++]=(char)d;
k=128; d=0;
}
} final[mc]='\0';
char *final1=new char[1000];
for(i=0,j=strlen(Text);i < strlen(Text);i++,j++)
final1[i]=final[j]; final1[i]='\0';
return(final);
}
void main()
{
Des d1,d2;
char *str=new char[1000];
char *str1=new char[1000];
clrscr();
cout<<"Masukkan Nama / NIM : ";
gets(str);
str1=d1.Encrypt(str);
cout<<"\nPlain Text : "<< str<< endl;
cout<<"\nCipher Text : "<< str1<< endl;
cout<<"\nPlain Text : "<< d2.Decrypt(str1)<< endl;
getch();
}
void Des::keygen()
{
PermChoice1();
int i,j,k=0;
for(i=0;i < 28;i++)
{
ck[i]=pc1[i];
}
for(i=28;i < 56;i++)
{
dk[k]=pc1[i];
k++;
}
int noshift=0,round;
for(round=1;round<=16;round++)
{
if(round==1||round==2||round==9||round==16)
noshift=1;
else
noshift=2;
while(noshift > 0)
{
int t;
t=ck[0];
for(i=0;i < 28;i++)
ck[i]=ck[i+1];
ck[27]=t;
t=dk[0];
for(i=0;i < 28;i++)
dk[i]=dk[i+1];
dk[27]=t;
noshift--;
}
PermChoice2();
for(i=0;i < 48;i++)
keyi[round-1][i]=z[i];
}
}
char final[1000];
void IP();
void PermChoice1();
void PermChoice2();
void Expansion();
void inverse();
void xor_two();
void xor_oneE(int);
void xor_oneD(int);
void substitution();
void permutation();
void keygen();
char * Encrypt(char *);
char * Decrypt(char *);
};
void Des::IP()
{
int k=58,i;
for(i=0;i < 32;i++)
{
ip[i]=total[k-1];
if(k-8>0) k=k-8;
else k=k+58;
}
k=57;
for( i=32;i < 64;i++)
{
ip[i]=total[k-1];
if(k-8 > 0) k=k-8;
else k=k+58;
}
}
void Des::PermChoice1()
{
int k=57,i;
for(i=0;i < 28;i++)
{
pc1[i]=key[k-1];
if(k-8 > 0) k=k-8;
else k=k+57;
}
k=63;
for( i=28;i < 52;i++)
{
pc1[i]=key[k-1];
if(k-8 > 0) k=k-8;
else k=k+55;
}
k=28;
for(i=52;i < 56;i++)
{
pc1[i]=key[k-1];
k=k-8;
}
}
void Des::Expansion()
{
int exp[8][6],i,j,k;
for(i=0;i < 8;i++)
{
for( j=0;j < 6;j++)
{
if((j!=0)||(j!=5))
{
k=4*i+j;
exp[i][j]=right[k-1];
}
if(j==0)
{
k=4*i;
exp[i][j]=right[k-1];
}
if(j==5)
{
k=4*i+j;
exp[i][j]=right[k-1];
}
}
}
exp[0][0]=right[31];
exp[7][5]=right[0];
k=0;
for(i=0;i < 8;i++)
for(j=0;j < 6;j++)
expansion[k++]=exp[i][j];
}
void Des::PermChoice2()
{
int per[56],i,k;
for(i=0;i < 28;i++) per[i]=ck[i];
for(k=0,i=28;i < 56;i++) per[i]=dk[k++];
z[0]=per[13];z[1]=per[16];z[2]=per[10];z[3]=per[23];z[4]=per[0];z[5]=per[4];z[6]=per[2];z[7]=per[27];
z[8]=per[14];z[9]=per[5];z[10]=per[20];z[11]=per[9];z[12]=per[22];z[13]=per[18];z[14]=per[11];z[15]=per[3];
z[16]=per[25];z[17]=per[7];z[18]=per[15];z[19]=per[6];z[20]=per[26];z[21]=per[19];z[22]=per[12];z[23]=per[1];
z[24]=per[40];z[25]=per[51];z[26]=per[30];z[27]=per[36];z[28]=per[46];z[29]=per[54];z[30]=per[29];z[31]=per[39];
z[32]=per[50];z[33]=per[46];z[34]=per[32];z[35]=per[47];z[36]=per[43];z[37]=per[48];z[38]=per[38];z[39]=per[55];
z[40]=per[33];z[41]=per[52];z[42]=per[45];z[43]=per[41];z[44]=per[49];z[45]=per[35];z[46]=per[28];z[47]=per[31];
}
void Des::xor_oneE(int round)
{
int i;
for(i=0;i < 48;i++)
xor1[i]=expansion[i]^keyi[round-1][i];
}
void Des::xor_oneD(int round)
{
int i;
for(i=0;i < 48;i++)
xor1[i]=expansion[i]^keyi[16-round][i];
}
void Des::substitution()
{
int s1[4][16]={
14,4,13,1,2,15,11,8,3,10,6,12,5,9,0,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,0,
15,12,8,2,4,9,1,7,5,11,3,14,10,0,6,13
};
int s2[4][16]={
15,1,8,14,6,11,3,4,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,6,9,3,2,15,
13,8,10,1,3,15,4,2,11,6,7,12,0,5,14,9
};
int s3[4][16]={
10,0,9,14,6,3,15,5,1,13,12,7,11,4,2,8,
13,7,0,9,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,6,9,8,7,4,15,14,3,11,5,2,12
};
int s4[4][16]={
7,13,14,3,0,6,9,10,1,2,8,5,11,12,4,15,
13,8,11,5,6,15,0,3,4,7,2,12,1,10,14,9,
10,6,9,0,12,11,7,13,15,1,3,14,5,2,8,4,
3,15,0,6,10,1,13,8,9,4,5,11,12,7,2,14
};
int s5[4][16]={
2,12,4,1,7,10,11,6,8,5,3,15,13,0,14,9,
14,11,2,12,4,7,13,1,5,0,15,10,3,9,8,6,
4,2,1,11,10,13,7,8,15,9,12,5,6,3,0,14,
11,8,12,7,1,14,2,13,6,15,0,9,10,4,5,3
};
int s6[4][16]={
12,1,10,15,9,2,6,8,0,13,3,4,14,7,5,11,
10,15,4,2,7,12,9,5,6,1,13,14,0,11,3,8,
9,14,15,5,2,8,12,3,7,0,4,10,1,13,11,6,
4,3,2,12,9,5,15,10,11,14,1,7,6,0,8,13
};
int s7[4][16]={
4,11,2,14,15,0,8,13,3,12,9,7,5,10,6,1,
13,0,11,7,4,9,1,10,14,3,5,12,2,15,8,6,
1,4,11,13,12,3,7,14,10,15,6,8,0,5,9,2,
6,11,13,8,1,4,10,7,9,5,0,15,14,2,3,12
};
int s8[4][16]={
13,2,8,4,6,15,11,1,10,9,3,14,5,0,12,7,
1,15,13,8,10,3,7,4,12,5,6,11,0,14,9,2,
7,11,4,1,9,12,14,2,0,6,10,13,15,3,5,8,
2,1,14,7,4,10,8,13,15,12,9,0,3,5,6,11
};
int a[8][6],k=0,i,j,p,q,count=0,g=0,v;
for(i=0;i < 8;i++)
{
for(j=0;j<6;j++)
{
a[i][j]=xor1[k++];
}
}
for( i=0;i < 8;i++)
{
p=1;q=0;
k=(a[i][0]*2)+(a[i][5]*1);
j=4;
while(j > 0)
{
q=q+(a[i][j]*p);
p=p*2;
j--;
}
count=i+1;
switch(count)
{
case 1: v=s1[k][q]; break;
case 2: v=s2[k][q]; break;
case 3: v=s3[k][q]; break;
case 4: v=s4[k][q]; break;
case 5: v=s5[k][q]; break;
case 6: v=s6[k][q]; break;
case 7: v=s7[k][q]; break;
case 8: v=s8[k][q]; break;
}
int d,i=3,a[4];
while(v > 0)
{
d=v%2;
a[i--]=d;
v=v/2;
}
while(i >= 0)
{
a[i--]=0;
}
for(i=0;i < 4;i++)
sub[g++]=a[i];
}
}
void Des::permutation()
{
p[0]=sub[15];p[1]=sub[6];p[2]=sub[19];p[3]=sub[20];p[4]=sub[28];p[5]=sub[11];p[6]=sub[27];p[7]=sub[16];
p[8]=sub[0];p[9]=sub[14];p[10]=sub[22];p[11]=sub[25];p[12]=sub[4];p[13]=sub[17];p[14]=sub[30];p[15]=sub[9];
p[16]=sub[1];p[17]=sub[7];p[18]=sub[23];p[19]=sub[13];p[20]=sub[31];p[21]=sub[26];p[22]=sub[2];p[23]=sub[8];
p[24]=sub[18];p[25]=sub[12];p[26]=sub[29];p[27]=sub[5];p[28]=sub[21];p[29]=sub[10];p[30]=sub[3];p[31]=sub[24];
}
void Des::xor_two()
{
int i;
for(i=0;i < 32;i++)
{
xor2[i]=left[i]^p[i];
}
}
void Des::inverse()
{
int p=40,q=8,k1,k2,i,j;
for(i=0;i < 8;i++)
{
k1=p;k2=q;
for(j=0;j < 8;j++)
{
if(j%2==0)
{
inv[i][j]=temp[k1-1];
k1=k1+8;
}
else if(j%2!=0)
{
inv[i][j]=temp[k2-1];
k2=k2+8;
}
}
p=p-1;q=q-1;
}
}
char * Des::Encrypt(char *Text1)
{
int i,a1,j,nB,m,iB,k,K,B[8],n,t,d,round;
char *Text=new char[1000];
strcpy(Text,Text1);
i=strlen(Text);
int mc=0;
a1=i%8;
if(a1!=0) for(j=0;j < 8-a1;j++,i++) Text[i]=' '; Text[i]='\0';
keygen();
for(iB=0,nB=0,m=0;m < (strlen(Text)/8);m++)
{
for(iB=0,i=0;i < 8;i++,nB++)
{
n=(int)Text[nB];
for(K=7;n >= 1;K--)
{
B[K]=n%2;
n/=2;
} for(;K >= 0;K--) B[K]=0;
for(K=0;K < 8;K++,iB++) total[iB]=B[K];
}
IP();
for(i=0;i < 64;i++) total[i]=ip[i];
for(i=0;i < 32;i++) left[i]=total[i];
for(;i < 64;i++) right[i-32]=total[i]; for(round=1;round <= 16;round++)
{
Expansion();
xor_oneE(round);
substitution();
permutation();
xor_two();
for(i=0;i < 32;i++) left[i]=right[i];
for(i=0;i < 32;i++) right[i]=xor2[i];
}
for(i=0;i < 32;i++) temp[i]=right[i];
for(;i < 64;i++) temp[i]=left[i-32];
inverse();
k=128; d=0;
for(i=0;i < 8;i++)
{
for(j=0;j < 8;j++)
{
d=d+inv[i][j]*k;
k=k/2;
}
final[mc++]=(char)d;
k=128; d=0;
}
}
final[mc]='\0';
return(final);
}
char * Des::Decrypt(char *Text1)
{
int i,a1,j,nB,m,iB,k,K,B[8],n,t,d,round;
char *Text=new char[1000];
unsigned char ch;
strcpy(Text,Text1);
i=strlen(Text);
keygen();
int mc=0;
for(iB=0,nB=0,m=0;m < (strlen(Text)/8);m++)
{
for(iB=0,i=0;i < 8;i++,nB++)
{
ch=Text[nB];
n=(int)ch ;
for(K=7;n >= 1;K--)
{
B[K]=n%2;
n/=2;
} for(;K >= 0;K--) B[K]=0;
for(K=0;K < 8;K++,iB++) total[iB]=B[K];
}
IP();
for(i=0;i < 64;i++) total[i]=ip[i];
for(i=0;i < 32;i++) left[i]=total[i];
for(;i < 64;i++) right[i-32]=total[i];
for(round=1;round <= 16;round++)
{
Expansion();
xor_oneD(round);
substitution();
permutation();
xor_two();
for(i=0;i < 32;i++) left[i]=right[i];
for(i=0;i < 32;i++) right[i]=xor2[i];
}
for(i=0;i < 32;i++) temp[i]=right[i];
for(;i < 64;i++) temp[i]=left[i-32];
inverse();
k=128; d=0;
for(i=0;i < 8;i++)
{
for(j=0;j < 8;j++)
{
d=d+inv[i][j]*k;
k=k/2;
}
final[mc++]=(char)d;
k=128; d=0;
}
} final[mc]='\0';
char *final1=new char[1000];
for(i=0,j=strlen(Text);i < strlen(Text);i++,j++)
final1[i]=final[j]; final1[i]='\0';
return(final);
}
void main()
{
Des d1,d2;
char *str=new char[1000];
char *str1=new char[1000];
clrscr();
cout<<"Masukkan Nama / NIM : ";
gets(str);
str1=d1.Encrypt(str);
cout<<"\nPlain Text : "<< str<< endl;
cout<<"\nCipher Text : "<< str1<< endl;
cout<<"\nPlain Text : "<< d2.Decrypt(str1)<< endl;
getch();
}
void Des::keygen()
{
PermChoice1();
int i,j,k=0;
for(i=0;i < 28;i++)
{
ck[i]=pc1[i];
}
for(i=28;i < 56;i++)
{
dk[k]=pc1[i];
k++;
}
int noshift=0,round;
for(round=1;round<=16;round++)
{
if(round==1||round==2||round==9||round==16)
noshift=1;
else
noshift=2;
while(noshift > 0)
{
int t;
t=ck[0];
for(i=0;i < 28;i++)
ck[i]=ck[i+1];
ck[27]=t;
t=dk[0];
for(i=0;i < 28;i++)
dk[i]=dk[i+1];
dk[27]=t;
noshift--;
}
PermChoice2();
for(i=0;i < 48;i++)
keyi[round-1][i]=z[i];
}
}
4. Perbandingan Algoritma IDEA dan DES
·
Persamaan
1) Termasuk kedalam algoritma simetris
2) Sama-sama memiliki block 64 bit
3) Menghasilkan pesan terenkripsi
·
Perbedaan
1) Algoritma IDEA menggunakan 3 operasi aljabar
utama, yakni : Xor,operasi penjumlahan modulo 2 16 dan operasi perkalian modulo
(2 16+1). Dan DES setiap putaran i, blok R dikombinasikan dengan kunci internak
Ki. Keluaran dari fungsi f di-XOR kan dengan blok L untuk mendapatkan blok R
yang baru. Sedangkan blok L yang baru langsung diambil dari blok R sebelumnya.
2) DES menggunakan 56 bit kunci internal sedangkan
IDEA menggunakan kunci yang sma berukuran 128 bit untuk proses enkripsi dan
dekripsi.
3) IDEA menggunakan proses iterasi yang terdiri
dari 8 putaran dan 1 tranformasi keluaran pada putaran ke8, sedangkan DES
melakukan 16 iterasi.
5. Link Kelompok Lain
6. Referensi Sumber
·
https://piptools.net/algoritma-des-data-encryption-standard/
C. Kesimpulan
Dari kejelasan di atas
yang terdiri dari pengertian, sejarah, proses kerja (enkripsi dan dekripsi),
flowchart, dan menggunakan bahasa pemrograman dapat simpulkan bahwa dari kedua
algoritma IDEA dan algoritma DES itu memiliki persamaan seperti algoritma
simetris,sama sama memiliki block 64 bit dan pesan pun terenkripsi. Tingkat
keamanan dari kedua algoritma ini juga cukup tinggi dan kedua
algoritma tersebut masih digunakan sampai saat ini. Hanya saja dalam proses
enkripsi dan deskripsi dari kedua algoritma tersebut cukup berbeda, dimana
untuk algoritma IDEA sendiri memiliki proses yang sedikit lebih rumit
dibandingkan dengan algpritma DES sebagai algorima pendahulunya.