- Algoritma DES dan GOST
Algoritma DES
DES (data encrytion standard) mengenkrip plaintext sebesar 64 bit (8 byte) dengan panjang kunci sekitar 56 bit (7 byte), sebanyak 16 putaran. Data 64 bit akan disubtitusi terlebih dahulu dengan permutasi IP (initial permutation). IP digunakan sebelum putaran pertama dari 16 putaran, dan mensubtitusi blok input dengan ketentuan sebagai berikut:
IP = 58, 50, 42, 34, 26, 18, 10, 2,
60, 52, 44, 36, 28, 20, 12, 4,
62, 54, 46, 38, 30, 22, 14, 6,
64, 56, 48, 40, 32, 24, 16, 8,
57, 49, 41, 33, 25, 17, 9, 1,
59, 51, 43, 35, 27, 19, 11, 3,
61, 53, 45, 37, 29, 21, 13, 5,
63, 55, 47, 39, 31, 23, 15, 7.
Sebagai contoh IP akan memindahkan bit ke-58 dari plaintext menjadi bit ke-1, bit ke-50 menjadi bit ke-2, bit ke-43 menjadi bit ke-3, dan seterusnya.
IP (initial permutation) dan final permutation atau invers IP tidak mempengaruhi keamanan dari DES. Tujuan utamanya yaitu hanya untuk memudahkan dalam memanggil data plaintext atau data ciphertext ke dalam chip DES yang berbentuk potongan-potongan byte dalam software/program komputer.
Plaintext yang telah disubtitusi akan dipecah menjadi dua bagian sebesar 32 bit kiri L dan 32 bit kanan R. pada setiap putarannya data kiri akan menjadi data kanan, data kanan akan dilakukan operasi data kiri di-Xor-kan dengan fungsi f.
Li=Ri-1
Ri=Li-1 Xor f(Ri-1,Ki)
Kemudian dilanjutkan dengan melakukan subtitusi final permutation atau invers IP (IPinv). Ipinv merupakan invers dari IP dan digambarkan dengan ketentuan sebagai berikut:
Ipinv = 40, 8, 48, 16, 56, 24, 64, 32,
39, 7, 47, 15, 55, 23, 63, 31,
38, 6, 46, 14, 54, 22, 62, 30,
37, 5, 45, 13, 53, 21, 61, 29,
36, 4, 44, 12, 52, 20, 60, 28,
35, 3, 43, 11, 51, 19, 59, 27,
34, 2, 42, 10, 50, 18, 58, 26,
33, 1, 41, 9, 49, 17, 57, 25.
Untuk fungsi f, data sebelah kanan sebesar 32 bit akan dipermutasi dengan expansion permutation (E) sehingga akan menghasilkan ciphertext sebesar 48 bit, kemudian dilakukan operasi Xor dengan blok kunci dan diinputkan ke dalam sbox. Sbox terdiri atas 8 buah. Hasilnya akan disubtitusi dengan P-Box permutation (P) sekaligus membentuk data menjadi 32 bit lagi. Berikut isi dari E dan P:
E = 32, 1, 2, 3, 4, 5, 4, 5,
6, 7, 8, 9, 8, 9, 10, 11,
12, 13, 12, 13, 14, 15, 16, 17,
16, 17, 18, 19, 20, 21, 20, 21,
22, 23, 24, 25, 24, 25, 26, 27,
28, 29, 28, 29, 30, 31, 32, 1.
P = 16, 7, 20, 21, 29, 12, 28, 17,
1, 15, 23, 26, 5, 18, 31, 10,
2, 8, 24, 14, 32, 27, 3, 9,
Isi dari Sboxnya adalah sebagai berikut:
S1 = 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,
S2 = 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.
S3 = 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.
S4 = 7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 5,
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,.
S5 = 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.
S6 = 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.
S7 = 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.
S8 = 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, 14, 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.
Blok kunci terdiri atas 16 blok, masing-masing berjumlah 56 bit. Sebelumnya, inputan blok kunci (64 bit) akan didistribusi terlebih dahulu dengan permuted Choice 1 (Pc1) atau disebut juga sebagai Key Permutation (blok kunci menjadi 56 bit), kemudian dipecah menjadi 2 bagian dengan setiap bagian sebesar 28 bit . Setiap blok ke 1, 2, 9, 16 akan dirotasi 1 bit ke kiri, sisanya 2 bit ke kiri kemudian digabungkan kembali menjadi 56 bit. Terakhir dilakukan permutasi dengan Permuted Choice 2 (Pc2) atau disebut juga sebagai Compression Permutation sehingga menjadi 48 bit. Berikut isi dari Pc1 dan Pc2:
Pc1 = 57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18,
10, 2, 59, 51, 43, 35, 27, 19, 11, 3, 60, 52, 44, 36,
63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22,
14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4.
Pc2 = 14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10,
23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2,
41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48,
44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32.Analisa Masalah
Dengan berkembangnya sistem komputer dan teknik komunikasi memungkinkan adanya hubungan antar komputer untuk menyalurkan data dari satu komputer ke komputer lain. Maka hal ini dapat menunjang terselesaikannya suatu pekerjaan secara efisien, cepat dan akurat. Namun permasalahannya adalah data tersebut dapat dibaca , dicuri, disalahgunakan, bahkan dirusak oleh pihak-pihak yang tidak bertanggung jawab.
- Penyelesaian Masalah
Berdasarkan hal di atas maka salah satu elemen yang paling penting dalam komunikasi menggunakan komputer untuk menjamin kerahasian data adalah enkripsi. Enkripsi adalah sebuah proses yang melakukan sebuah perubahan kode dari yang bisa dimengerti menjadi sebuah kode atau cipher yang tidak bisa dimengerti. Sebuah cipher menggunakan suatu algoritma yang dapat mengkodekan semua aliran data (stream) bit dari sebuah pesan menjadi cryptogram yang tidak dimengerti (unintelligible). Karena teknik cipher merupakan suatu sistem yang telah siap untuk di automasi, maka teknik ini digunakan dalam sebuah sistem keamanan sebuah PC (personal computer)dan sistem keamanan jaringan/network.
Untuk proteksi data yang cukup penting tidak ada jalan lain selain menggunakan program khusus proteksi/enkripsi data. Saat ini telah banyak beredar program khusus proteksi data baik freeware, shareware, maupun komersial yang sangat baik. Pada umumnya program tersebut tidak hanya menyediakan satu metode saja, tetapi beberapa jenis metode.
Teknik enkripsi ada bermacam-macam metode misalnya, DES, TEA, GOST, RSA, Blowfish, Skipjack, Twofish dan lain sebagainya. Pada penulisan tugas akhir Mata Kuliah Sistem Keamanan Lanjut (EC 7010) ini menggunakan algoritma dari metode DES (Data Encryption Standard) dan algoritma dari metode GOST (Gosudarstennyi Standard).
Karena metode DES dan GOST merupaka blok cipher 64 bit (8 byte), kebanyakan data yang dibagi ke dalam 64 bit tidak bulat, oleh sebab itu dalam blok cipher diperlukan data tambahan pada blok terakhir untuk menggenapi blok menjadi 64 bit, hal ini biasanya disebut padding. Data akan ditambahkan dengan bilangan random sebanyak yang dibutuhkan.
Misalkan data berupa text "Enkripsi dan Dekripsi" maka:
Panjang data: 20 byte 20 mod 8 = 4 byte
- Proses Enkripsi
Pada dasarnya proses enkripsi ini terbagi atas 2 tahap, yaitu tahap pertama adalah enkripsi dengan metode DES, dan tahap ke dua enkripsi hasil metode DES dengan metode GOST.
- Tahap Pertama
Pada tahap pertama dilakukan proses pengenkripsian dengan metode DES. Pertama-tama dilakukan pembentukan subkunci yang terdiri atas 16 blok sepanjang 48 bit (6 byte) setiap bloknya. Terlebih dahulu kunci yang mulanya sepanjang 32 byte akan diambil hanya sepanjang 64 bit (8 byte). Setelah disubtitusi dengan blok Pc1 (permuted choice 1), panjang kunci akan menjadi 56 bit (7 byte). Kemudian untuk setiap blok akan dipecah menjadi 2 bagian (masing-masing 28 bit) dan setiap blok ke 1, 2, 9, 16 akan dirotasi 1 bit ke kiri, sisanya dirotasi 2 bit ke kiri, hasilnya akan disubtitusi lagi dengan blok Pc2 (permuted choice 2) untuk menghasilkan keluaran 48 bit. Pembentukan subkunci akan dijalankan terlebih dahulu, kemudian akan dilakukan pengenkripsian plaintext.
Algoritmanya adalah sebagai berikut:
- Panggil Byte2Bin(ByteKey(), 8, KeyBin())
- Selama a=0 hingga a=55 lakukan perulangan
KeySchedule(a)=KeyBin(m_PC1(a))
- Akhir perulangan
- Panggil CopyMem(c(0), KeySchedule(0), 28)
- Panggil CopyMem(d(0), KeySchedule(28), 28)
- Selama i=1 hingga i=16 lakukan perulangan
- Panggil CopyMem(temp(0), C(0), m_LeftShifts(i))
- Panggil CopyMem(c(0), c(m_LeftShifts(i)), 28 - m_LeftShifts(i))
- Panggil CopyMem(c(28 - m_LeftShifts(i)), temp(0),
M_LeftShits(i))
- Panggil CopyMem(temp(0), d(0), m_LeftShipts(i))
- Panggil CopyMem(d(0), d(m_LeftShifts(i)), 28 - m_LeftShifts(i))
- Panggil CopyMem(d(28- m_LeftShifts(i)), temp(0),
m_LeftShifts(i))
- Panggil CopyMem(CD(0), C(0), 28)
- Panggil CopyMem(CD(28), d(0), 28)
- Selama a=0 hingga a=47 lakukan perulangan
m_Key(a,I)=CD(m_PC2(a))
- Akhir perulangan
- Akhir Perulangan
- Pesan dimensi Array ByteKey(0 31)
Setelah pembentukan subkey, dilanjutkan dengan melakukan subtitusi plaintext dengan permutasi IP. Plaintext sebesar 64 bit (8 byte) akan dibagi dua masing-masing 32 bit sekaligus disubtitusi dengan m_IP. m_IP merupakan blok bilangan dari inisial permutasi IP. algoritmanya adalah sebagai berikut:
- Panggil Byte2Bin(BlockData(), 8, BinBlock())
- For a=0 to 31
L(a)=BinBlock(m_IP(a))
R(a)=BinBlock(m_IP(a+32))
- Next
Fungsi Byte2Bin akan mengubah byte menjadi bit, algoritmanya sebagai berikut:
- Panggil CopyMem(BinarryArray(0), m_EmptyArray(0), ByteLen*8)
- BinLength=0
- Selama a=0 hingga a=(ByteLen-1) lakukan perulangan
- ByteValue=ByteArray (a)
- Jika (ByteValue and 128) maka BinaryArray(BinLength)=1
- Jika (ByteValue and 64) maka BinaryArray(BinLength + 1)=1
- Jika (ByteValue and 32) maka BinaryArray(BinLength + 2)=1
- Jika (ByteValue and 16) maka BinaryArray(BinLength + 3)=1
- Jika (ByteValue and 8) maka BinaryArray(BinLength + 4)=1
- Jika (ByteValue and 4) maka BinaryArray(BinLength + 5)=1
- Jika (ByteValue and 2) maka BinaryArray(BinLength + 6)=1
- Jika (ByteValue and 1) maka BinaryArray(BinLength + 7)=1
- BinLength = BinLength + 8
- Akhir perulangan
Setelah operasi di atas, selanjutnya data disebelah kanan akan diekspansi menjadi 48 bit (6 byte) yang urutan bitnya sesuai dengan bit E, sekaligus di Xor-kan dengan hasil kunci di atas. Algoritmanya adalah sebagai berikut (i = 1 sampai 16):
- ErxorK(0) = r(31) Xor m_Key(0, i )
- ErxorK(1) = r(0) Xor m_Key(1, i)
- ErxorK(2) = r(1) Xor m_Key(2, i)
- ErxorK(3) = r(2) Xor m_Key(3, i)
- ErxorK(4) = r(3) Xor m_Key(4, i)
- ErxorK(5) = r(4) Xor m_Key(5, i)
- ErxorK(6) = r(3) Xor m_Key(6, i)
- ErxorK(7) = r(4) Xor m_Key(7, i)
- ErxorK(8) = r(5) Xor m_Key(8, i)
- ErxorK(9) = r(6) Xor m_Key(9, i)
- ErxorK(10) = r(7) Xor m_Key(10, i)
- ErxorK(11) = r(8) Xor m_Key(11, i)
- ErxorK(12) = r(7) Xor m_Key(12, i)
- ErxorK(13) = r(8) Xor m_Key(13, i)
- ErxorK(14) = r(9) Xor m_Key(14, i)
- ErxorK(15) = r(10) Xor m_Key(15, i)
- ErxorK(16) = r(11) Xor m_Key(16, i)
- ErxorK(17) = r(12) Xor m_Key(17, i)
- ErxorK(18) = r(11) Xor m_Key(18, i)
- ErxorK(19) = r(12) Xor m_Key(19, i)
- ErxorK(20) = r(13) Xor m_Key(20, i)
- ErxorK(21) = r(14) Xor m_Key(21, i)
- ErxorK(22) = r(15) Xor m_Key(22, i)
- ErxorK(23) = r(16) Xor m_Key(23, i)
- ErxorK(24) = r(15) Xor m_Key(24, i)
- ErxorK(25) = r(16) Xor m_Key(25, i)
- ErxorK(26) = r(17) Xor m_Key(26, i)
- ErxorK(27) = r(18) Xor m_Key(27, i)
- ErxorK(28) = r(19) Xor m_Key(28, i)
- ErxorK(29) = r(20) Xor m_Key(29, i)
- ErxorK(30) = r(19) Xor m_Key(30, i)
- ErxorK(31) = r(20) Xor m_Key(31, i)
- ErxorK(32) = r(21) Xor m_Key(32, i)
- ErxorK(33) = r(22) Xor m_Key(33, i)
- ErxorK(34) = r(23) Xor m_Key(34, i)
- ErxorK(35) = r(24) Xor m_Key(35, i)
- ErxorK(36) = r(23) Xor m_Key(36, i)
- ErxorK(37) = r(24) Xor m_Key(37, i)
- ErxorK(38) = r(25) Xor m_Key(38, i)
- ErxorK(39) = r(26) Xor m_Key(39, i)
- ErxorK(40) = r(27) Xor m_Key(40, i)
- ErxorK(41) = r(28) Xor m_Key(41, i)
- ErxorK(42) = r(27) Xor m_Key(42, i)
- ErxorK(43) = r(28) Xor m_Key(43, i)
- ErxorK(44) = r(29) Xor m_Key(44, i)
- ErxorK(45) = r(30) Xor m_Key(45, i)
- ErxorK(46) = r(31\) Xor m_Key(46, i)
- ErxorK(47) = r(0) Xor m_Key(47, i)
Kemudian hasil di atas akan disubtitusikan dengan m_sBox (blok Sbox DES) sebanyak 6 bit yang menhasilkan keluaran 4 bit ditampung dalam array sBox sebanyak 32 bit. Algoritmanya sebagai berikut:
- Panggil CopyMem(sBox(0),m_sBox(0, ErxorK(0),
ERxorK(1), ERxorK(2), ERxorK(3), ERxorK(4), ERxorK(5)),4)
- Panggil CopyMem(sBox(4),m_sBox(1, ErxorK(6),
ERxorK(7), ERxorK(8), ERxorK(9), ERxorK(10), ERxorK(11)),4)
- Panggil CopyMem(sBox(8),m_sBox(2, ErxorK(12),
ERxorK(13), ERxorK(14), ERxorK(15), ERxorK(16), ERxorK(17)),4)
- Panggil CopyMem(sBox(12),m_sBox(3, ErxorK(18),
ERxorK(19), ERxorK(20), ERxorK(21), ERxorK(22), ERxorK(23)),4)
- Panggil CopyMem(sBox(16),m_sBox(4, ErxorK(24),
ERxorK(25), ERxorK(26), ERxorK(27), ERxorK(28), ERxorK(29)),4)
- Panggil CopyMem(sBox(20),m_sBox(5, ErxorK(30),
ERxorK(31), ERxorK(32), ERxorK(33), ERxorK(34), ERxorK(35)),4)
- Panggil CopyMem(sBox(24),m_sBox(6, ErxorK(36),
ERxorK(37), ERxorK(38), ERxorK(39), ERxorK(40), ERxorK(41)),4)
- Panggil CopyMem(sBox(28),m_sBox(7, ErxorK(42),
ERxorK(43), ERxorK(44), ERxorK(45), ERxorK(46), ERxorK(47)),4)
Setelah sBox dihasilkan, kemudian hasilnya akan di Xor-kan dengan data sebelah kiri dengan urutan bit sesuai dengan m_P Permutasi dari blok P) dan hasilnya akan ditampung dalam array LiRi sebanyak 32 bit. Algoritmanya sebagai berikut:
- LiRi(0) = L(0) Xor sBox(15)
- LiRi(1) = L(1) Xor sBox(6)
- LiRi(2) = L(2) Xor sBox(19)
- LiRi(3) = L(3) Xor sBox(20)
- LiRi(4) = L(4) Xor sBox(28)
- LiRi(5) = L(5) Xor sBox(11)
- LiRi(6) = L(6) Xor sBox(27)
- LiRi(7) = L(7) Xor sBox(16)
- LiRi(8) = L(8) Xor sBox(0)
- LiRi(9) = L(9) Xor sBox(14)
- LiRi(10) = L(10) Xor sBox(22)
- LiRi(11) = L(11) Xor sBox(25)
- LiRi(12) = L(12) Xor sBox(4)
- LiRi(13) = L(13) Xor sBox(17)
- LiRi(14) = L(14) Xor sBox(30)
- LiRi(15) = L(15) Xor sBox(9)
- LiRi(16) = L(16) Xor sBox(1)
- LiRi(17) = L(17) Xor sBox(7)
- LiRi(18) = L(18) Xor sBox(23)
- LiRi(19) = L(19) Xor sBox(13)
- LiRi(20) = L(20) Xor sBox(31)
- LiRi(21) = L(21) Xor sBox(36)
- LiRi(22) = L(22) Xor sBox(2)
- LiRi(23) = L(23) Xor sBox(8)
- LiRi(24) = L(24) Xor sBox(18)
- LiRi(25) = L(25) Xor sBox(12)
- LiRi(26) = L(26) Xor sBox(29)
- LiRi(27) = L(27) Xor sBox(5)
- LiRi(28) = L(28) Xor sBox(21)
- LiRi(29) = L(29) Xor sBox(10)
- LiRi(30) = L(30) Xor sBox(3)
- LiRi(31) = L(31) Xor sBox(24)
Hasil data diatas akan dijadikan data sebelah kanan, data kiri diisi dengan data kanan sebelumnya lalu keduanya disatukan kembali menjadi data 64 bit kembali sekaligus disubtitusi dengan m_IP dan 64 bit tersebut dijadikan 8 byte kembali. m_IP merupakan blok bilangan dari invers permutasi pada DES. Algoritmanya sebagai berikut:
- Panggil CopyMem(RL(0), r(0), 32)
- Panggil CopyMem(RL(32), L(0), 32)
- Selama a=0 hingga a=63 lakukan perulangan
BinBlock(a)=RL(m_IPInv(a))
- Akhir perulangan
- Panggil Bin2Byte(BinBlock(), 8, BlockData())
Fungsi Bin2Byte akan mengubah bin menjadi byte, algoritmanya sebagai berikut:
- BinLength=0
- Selama a=0 hingga a=(ByteLen - 1) lakukan perulangan
- ByteValue=0
- Jika (BinarryArray(BinLength)=1)maka ByteValue=ByteValue+128
- Jika (BinarryArray(BinLength+1)=1)maka ByteValue=ByteValue+64
- Jika (BinarryArray(BinLength+2)=1)maka ByteValue=ByteValue+32
- Jika (BinarryArray(BinLength+3)=1)maka ByteValue=ByteValue+16
- Jika (BinarryArray(BinLength+4)=1)maka ByteValue=ByteValue+8
- Jika (BinarryArray(BinLength+5)=1)maka ByteValue=ByteValue+4
- Jika (BinarryArray(BinLength+6)=1)maka ByteValue=ByteValue+2
- Jika (BinarryArray(BinLength+7)=1)maka ByteValue=ByteValue+1
- ByteArray(a)=ByteValue
- BinLength=BinLength + 8
- Akhir perulangan
Langkah-langkah di atas dilakukan sebanyak 16 kali / 16 putaran (round), dan hasilnya akan dijadikan input untuk proses enkripsi dengan metode Gost. Perlu diperhatikan disini, yaitu setiap blok IP, blok invers IP, blok Sbox, blok P, blok E, blok Pc1, dan blok Pc2 pada metode DES adalah blok yang isinya merupakan ketetapan dari algoritma DES.
- Tahap Kedua
Pada tahap ke dua ini, subkunci untuk Gost terdiri sebanyak 8 buah blok dengan panjang setiap bloknya adalah 32 bit. Untuk mempersulit, maka setiap bloknya akan dirotasi 11 bit ke kiri. Algoritmanya adalah sebagai berikut:
- K1 =SB_X(ByteKey(),0)
- K2 =SB_X(ByteKey(),4)
- K3 =SB_X(ByteKey(),8)
- K4 =SB_X(ByteKey(),12)
- K5 =SB_X(ByteKey(),16)
- K6 =SB_X(ByteKey(),20)
- K7 =SB_X(ByteKey(),24)
- K8 =SB_X(ByteKey(),28)
Algoritma untuk fungsi SB_Xnya adalah sebagai berikut:
- bb(0) = ByteKey(offset)
- bb(1) = ByteKey(offset + 1)
- bb(2) = ByteKey(offset + 2)
- bb(3) = ByteKey(offset + 3)
- F0 =TBin(aa)
- F1 = TBin(bb)
- F2 = TBin(cc)
- F3 = TBin(dd)
- temp = F0 & F1 & F2 & F3
- Putar1 = Mid$(Temp, 1, 11)
- Putar2 = Mid$(Temp, 12, 22)
- temp = putar1 & putar2
- bb(0) = TDec(Mid$(Temp, 1, 8))
- bb(1) = TDec(Mid$(Temp, 9, 8))
- bb(2) = TDec(Mid$(Temp, 17, 8))
- bb(3) = TDec(Mid$(Temp, 25, 8))
- temp = Chr$(bb(0)) & Chr$(bb(1)) & Chr$(bb(2)) & Chr$(bb(3))
- x() = Konversi temp ke from Unicode
- panggil GetWord(has, x(), 0)
- SB_X = has
Kemudian plaintext berupa hasil enkripsi dari metode DES akan dipecah menjadi dua bagian, yaitu 32 bit (4 byte) kiri dan 32 bit (4 byte) kanan. Setiap blok kiri dan kanan akan diubah menjadi satu bilangan 32 bit. Algoritmanya sebagai berikut:
- Panggil GetWord(LeftWord, ByteArray(), Offset)
- Panggil GetWord(LeftWord, ByteArray(), Offset + 4)
Algoritma untuk GetWordnya adalah sebagai berikut:
- CryptBuffer(3) = bb(Offset)
- CryptBuffer(2) = bb(Offset + 1)
- CryptBuffer(1) = bb(Offset + 2)
- CryptBuffer(0) = bb(Offset + 3)
- Panggil CopyMem(LongValue, CryptBuffer(0),4)
Untuk pengembalian nilainya, data kiri ataupun kanan akan dipisah kembali menjadi 4 bilangan (masing-masing 8 bit). Algoritmanya sebagai berikut:
- Panggil PutWord(LeftWord, ByteWord(), Offset)
- Panggil PutWord(LeftWord, ByteWord(), Offset + 4)
Algoritma untuk PutWordnya adalah sebagai berikut:
- Panggil CopyMem(CryptBuffer(0), LongValue, 4)
- aByte(Offset) = CryptBuffer(3)
- aByte(Offset + 1) = CryptBuffer(2)
- aByte(Offset + 2) = CryptBuffer(1)
- aByte(Offset + 3) = CryptBuffer(0)
Setelah dibentuk subkey, dilanjutkan dengan melakukan enkripsi plaintext sebanyak 32 putaran dengan operasi:
Li = RI-1
Ri = LI-1 xor f(RI-1,Ki)
Algoritma untuk operasi di atas adalah sebagai berikut:
- selama i=1 hingga i=3 lakukan perulangan
- Temp = LeftWord
- LeftWord = RightWord
- RightWord = Temp Xor F (RightWord, K1)
- Temp = LeftWord
- LeftWord = RightWord
- RightWord = Temp Xor F (RightWord, K2)
- Temp = LeftWord
- LeftWord = RightWord
- RightWord = Temp Xor F (RightWord, K3)
- Temp = LeftWord
- LeftWord = RightWord
- RightWord = Temp Xor F (RightWord, K4)
- Temp = LeftWord
- LeftWord = RightWord
- RightWord = Temp Xor F (RightWord, K5)
- Temp = LeftWord
- LeftWord = RightWord
- RightWord = Temp Xor F (RightWord, K6)
- Temp = LeftWord
- LeftWord = RightWord
- RightWord = Temp Xor F (RightWord, K7)
- Temp = LeftWord
- LeftWord = RightWord
- RightWord = Temp Xor F (RightWord, K8)
- Akhir perulangan
- Temp = LeftWord
- LeftWord = RightWord
- RightWord = Temp Xor F (RightWord, K8)
- Temp = LeftWord
- LeftWord = RightWord
- RightWord = Temp Xor F (RightWord, K7)
- Temp = LeftWord
- LeftWord = RightWord
- RightWord = Temp Xor F (RightWord, K6)
- Temp = LeftWord
- LeftWord = RightWord
- RightWord = Temp Xor F (RightWord, K5)
- Temp = LeftWord
- LeftWord = RightWord
- RightWord = Temp Xor F (RightWord, K4)
- Temp = LeftWord
- LeftWord = RightWord
- RightWord = Temp Xor F (RightWord, K3)
- Temp = LeftWord
- LeftWord = RightWord
- RightWord = Temp Xor F (RightWord, K2)
- Temp = LeftWord
- LeftWord = RightWord
- RightWord = Temp Xor F (RightWord, K1)
Untuk fungsi F, blok data sebelah kanan akan dijumlahkan dengan blok kunci. Setiap perulangan akan digunakan blok kunci yang berbeda. Untuk mencegah terjadinya overflow, maka datanya akan dilakukan operasi byte per byte modulus 255. Kemudian hasilnya dipecah menjadi 2 bilangan, dan disubtitusi dengan Sbox dari Gost. Hasil keluaran dari Sbox akan digunakan kembali menjadi bilangan 32 bit. Terakhir bilangan tersebut akan dirotasi 11 bit ke kiri. Algoritmanya adalah sebagai berikut:
- R = RightWord
- K = Key
- Addval = unsignedHelp(R,K)
- F = Addval
Algoritma untuk fungsi unsignedHelp:
- Panggil PutWord(R,a(),0)
- Panggil PutWord(Key,b(),0)
- Count = 0
- Selama m=0 hingga m=3 lakukan perulangan
- Addval = CLng(a(m))+CLng(b(m))
- Addval = Addval Mod 255
- d = 1
- selama n=0 hingga n=1 lakukan perulangan
- KeyWord(n) = Tdec("0000" & Mid$(Tbin(Addval),d,4))
- Tempbit(count) = SboxGhost(count,KeyWord(n))
- Count = count + 1
- d = d + 4
- Akhir perulangan
- akhir perulangan
- m = 0
- Selama m=0 hingga m=7 lakukan perulangan
- TempString = TempString & Mid$(Tbin(tempbit(m)),5,4)
- Akhir Perulangan
- TempString = Mid$(TempString,12,21) & Mid$(TempString,1,11)
- c(0) = TDec(Mid$(TempString,1,8))
- c(1) = TDec(Mid$(TempString,7,8))
- c(2) = TDec(Mid$(TempString,17,8))
- c(3) = TDec(Mid$(TempString,25,8))
- Panggil GetWord(Addval, c(), ))
- unsignedHelp = Addval
Total bilangan yang dihasilkan dari operasi di atas untuk disubtitusi ke Sbox berjumlah 8 buah bilangan. Dalam metode Gost, tidak ditentukan standar dalam pembuatan Sboxnya, sehingga ada kemungkinan Sbox yang dibuat akan kurang baik. Sbox yang akan digunakan merupakan Sbox yang sama dengan yang digunakan oleh Central Bank of The Russian Federation.
Setelah proses selesai, nilai bilangan kiri dan kanan akan dikembalikan lagi menjadi 64 bit (8byte). Algoritmanya adalah sebagai berikut:
Panggil PutWord(LeftWord,ByteArray(),Offset)
Panggil PutWord(RightWord,ByteCipher(), Offset + 4)
Ciphertext yang dihasilakan akan diubah ke dalam bentuk string lagi dan disimpan ke dalam file baru. di sini file asli tidak akan diganti dengan file hasil enkripsi. File baru akan dibuat untuk menampung hasil enkripsi. Header file dan jumlah penambahan adata akan ditambahkan ke dalam file baru ini. Jika file baru sudah ada, maka akan dihapus dahulu kemudian diisi kembali dengan hasil enkripsi tersebut.
- Proses Dekripsi
Proses ini merupakan kebalikan dari proses enkripsi yaitu proses mengembalikan data yang terenkripsi menjadi data yang sebenarnya. Pada dasarnya proses dekripsi ini terbagi atas 2 tahap, yaitu tahap pertama adalah dekripsi dengan metode GOST, dan tahap ke dua dekripsi dengan metode DES. Pada proses dekripsi ini juga dilakukan tahapan-tahapan yang sama seperti pada tahapan enkripsi.
- Tahap Pertama
Untuk fungsi f pada GOST, algoritma dekripsinya sama dengan algoritma enkripsinya. Sebelum melakukan dekripsi, kunci akan didekripsi terlebih dahulu. Pada fungsi f data kanan akan menjadi data kiri kemudian sebaliknya, dan setiap putaran akan menggunakan blok kunci yang berbeda, dimulai dari blok kunci terakhir. Algoritmanya adalah sebagai berikut:
- Temp = LeftWord
- LeftWord = RightWord
- RightWord = Temp Xor F (RightWord, K1)
- Temp = LeftWord
- LeftWord = RightWord
- RightWord = Temp Xor F (RightWord, K2)
- Temp = LeftWord
- LeftWord = RightWord
- RightWord = Temp Xor F (RightWord, K3)
- Temp = LeftWord
- LeftWord = RightWord
- RightWord = Temp Xor F (RightWord, K4)
- Temp = LeftWord
- LeftWord = RightWord
- RightWord = Temp Xor F (RightWord, K5)
- Temp = LeftWord
- LeftWord = RightWord
- RightWord = Temp Xor F (RightWord, K6)
- Temp = LeftWord
- LeftWord = RightWord
- RightWord = Temp Xor F (RightWord, K7)
- Temp = LeftWord
- LeftWord = RightWord
- RightWord = Temp Xor F (RightWord, K8)
- Selama i=1 hingga i=3 lakukan perulangan
- Temp = RightWord
- RightWord = LeftWord
- LeftWord = Temp Xor F (LeftWord, K8)
- Temp = RightWord
- RightWord = LeftWord
- LeftWord = Temp Xor F (LeftWord, K7)
- Temp = RightWord
- RightWord = LeftWord
- LeftWord = Temp Xor F (LeftWord, K6)
- Temp = RightWord
- RightWord = LeftWord
- LeftWord = Temp Xor F (LeftWord, K5)
- Temp = RightWord
- RightWord = LeftWord
- LeftWord = Temp Xor F (LeftWord, K4)
- Temp = RightWord
- RightWord = LeftWord
- LeftWord = Temp Xor F (LeftWord, K3)
- Temp = RightWord
- RightWord = LeftWord
- LeftWord = Temp Xor F (LeftWord, K2)
- Temp = RightWord
- RightWord = LeftWord
- LeftWord = Temp Xor F (LeftWord, K1)
- Akhir perulangan
- Tahap Kedua
Sama seperti GOST, pada DES algoritmanya akan sama dengan algoritma enkripsinya, hanya yang berbeda yaitu data kanan akan dijadikan data kiri dan sebaliknya dengan 16 blok kunci akan dimulai dari blok kunci terakhir. Algoritmanya adalah sebagai berikut (dengan i = 16 samapai 1):
- ERxorK(0) = r(31) Xor m_Key(0, i )
- ERxorK(1) = r(0) Xor m_Key(1, i)
- ERxorK(2) = r(1) Xor m_Key(2, i)
- ERxorK(3) = r(2) Xor m_Key(3, i)
- ERxorK(4) = r(3) Xor m_Key(4, i)
- ERxorK(5) = r(4) Xor m_Key(5, i)
- ERxorK(6) = r(3) Xor m_Key(6, i)
- ERxorK(7) = r(4) Xor m_Key(7, i)
- ERxorK(8) = r(5) Xor m_Key(8, i)
- ERxorK(9) = r(6) Xor m_Key(9, i)
- ERxorK(10) = r(7) Xor m_Key(10, i)
- ERxorK(11) = r(8) Xor m_Key(11, i)
- ERxorK(12) = r(7) Xor m_Key(12, i)
- ERxorK(13) = r(8) Xor m_Key(13, i)
- ERxorK(14) = r(9) Xor m_Key(14, i)
- ERxorK(15) = r(10) Xor m_Key(15, i)
- ERxorK(16) = r(11) Xor m_Key(16, i)
- ERxorK(17) = r(12) Xor m_Key(17, i)
- ERxorK(18) = r(11) Xor m_Key(18, i)
- ERxorK(19) = r(12) Xor m_Key(19, i)
- ERxorK(20) = r(13) Xor m_Key(20, i)
- ERxorK(21) = r(14) Xor m_Key(21, i)
- ERxorK(22) = r(15) Xor m_Key(22, i)
- ERxorK(23) = r(16) Xor m_Key(23, i)
- ERxorK(24) = r(15) Xor m_Key(24, i)
- ERxorK(25) = r(16) Xor m_Key(25, i)
- ERxorK(26) = r(17) Xor m_Key(26, i)
- ERxorK(27) = r(18) Xor m_Key(27, i)
- ERxorK(28) = r(19) Xor m_Key(28, i)
- ERxorK(29) = r(20) Xor m_Key(29, i)
- ERxorK(30) = r(19) Xor m_Key(30, i)
- ERxorK(31) = r(20) Xor m_Key(31, i)
- ERxorK(32) = r(21) Xor m_Key(32, i)
- ERxorK(33) = r(22) Xor m_Key(33, i)
- ERxorK(34) = r(23) Xor m_Key(34, i)
- ERxorK(35) = r(24) Xor m_Key(35, i)
- ERxorK(36) = r(23) Xor m_Key(36, i)
- ERxorK(37) = r(24) Xor m_Key(37, i)
- ERxorK(38) = r(25) Xor m_Key(38, i)
- ERxorK(39) = r(26) Xor m_Key(39, i)
- ERxorK(40) = r(27) Xor m_Key(40, i)
- ERxorK(41) = r(28) Xor m_Key(41, i)
- ERxorK(42) = r(27) Xor m_Key(42, i)
- ERxorK(43) = r(28) Xor m_Key(43, i)
- ERxorK(44) = r(29) Xor m_Key(44, i)
- ERxorK(45) = r(30) Xor m_Key(45, i)
- ERxorK(46) = r(31\) Xor m_Key(46, i)
- ERxorK(47) = r(0) Xor m_Key(47, i)
Kesimpulan dan Saran
- Kesimpulan
Berdasarkan analisa yang telah dilakukan, dapat diambil kesimpulan bahwa:
- Penyandian dengan metode DES yang dikombinasikan dengan metode GOST cukup memadai untuk menangkal penyerangan data oleh user yang tidak berhak terutama ditinjau dari tingkat kesulitan dalam memecahkan penyandian.
- Pengenkripsian kunci pada awal program dan kunci pada metode GOST dapat lebih menyulitkan dalam memecahkan penyandian pada ciphertext.
- Perancang GOST mencoba mengambil keseimbangan antara efisiensi dan keamanan. Mereka memodifikasi design dasar DES untuk menciptakan algoritma yang lebih baik dalam implementasinya pada software. Mereka juga kurang yakin dalam keamanan algoritmanya, dan mencoba untuk melengkapinya dengan membuat panjang kuncinya (256 bit), tetap merahasiakan dari Sboxnya, dan melipatgandakan jumlah iterasinya (32 putaran).
referensi
http://74.125.153.132/search?q=cache:AQqxz73wOUoJ:budi.insan.co.id/courses/ec7010/2004-2005/budi-report.rtf+Metode+DES&cd=4&hl=id&ct=clnk&gl=id
disusun oleh :
Aji Nugroho 2007-53-198
Zuliana Putri Dewi 2007-53-202
Ahmad teguh Susilo 2007-53-240
Lilik Chusnawati 2007-53-241