| |
Metoda Enkripsi GOST
Oleh : Budi Sukmawan
Deskripsi
GOST merupakan blok cipher dari bekas Uni Sovyet, yang
merupakan singkatan dari "Gosudarstvennyi Standard"
atau Standar Pemerintah, standar ini bernomor 28147-89 oleh sebab
itu metoda ini sering disebut sebagai GOST 28147-89.
GOST merupakan blok cipher 64 bit dengan panjang kunci 256 bit.
Algoritma ini mengiterasi algoritma enkripsi sederhana sebanyak
32 putaran (round). Untuk mengenkripsi pertama-tama
plainteks 64 bit dipecah menjadi 32 bit bagian kiri, L dan 32 bit
bagian kanan, R. Subkunci (subkey) untuk putaran i adalah
Ki. Pada satu putaran ke-i operasinya adalah
sebagai berikut :
Li = Ri-1
Ri = Li-1 xor f(Ri-1,Ki)
Sedangkan pada fungsi f mula-mula bagian kanan data ditambah
dengan subkunci ke-i modulus 232. Hasilnya dipecah
menjadi delapan bagian 4 bit dan setiap bagian menjadi input s-box
yang berbeda. Di dalam GOST terdapat 8 buah s-box, 4 bit pertama
menjadi s-box pertama, 4 bit kedua menjadi s-box kedua, dan
seterusnya. Output dari 8 s-box kemudian dikombinasikan menjadi
bilangan 32 bit kemudian bilangan ini dirotasi 11 bit kekiri.
Akhirnya hasil operasi ini di-xor dengan data bagian kiri yang
kemudian menjadi bagian kanan dan bagian kanan menjadi bagian
kiri (swap). Pada implementasinya nanti rotasi pada fungsi
f dilakukan pada awal saat inisialisasi sekaligus membentuk s-box
32 bit dan dilakukan satu kali saja sehingga lebih menghemat
operasi dan dengan demikian mempercepat proses enkripsi/dekripsi.
Subkunci dihasilkan secara sederhana yaitu dari 256 bit kunci
yang dibagi menjadi delapan 32 bit blok : k1, k2,
, k8. Setiap putaran menggunakan subkunci
yang berbeda. Dekripsi sama dengan enkripsi dengan urutan ki
dibalik. Standar GOST tidak menentukan bagaimana menghasilkan s-box
sehingga ada spekulasi bahwa sebagian organisasi di (eks) Sovyet
mempunyai s-box yang baik dan sebagian diberi s-box yang buruk
sehingga mudah diawasi/dimata-matai. Kelemahan GOST yang
diketahui sampai saat ini adalah karena key schedule-nya
yang sederhana, sehingga pada keadaan tertentu menjadi titik
lemahnya terhadap metoda kriptanalisis seperti Related-key
Cryptanalysis. Tetapi hal ini dapat diatasi dengan melewatkan
kunci kepada fungsi hash yang kuat secara kriptografi
seperti SHA-1, kemudian menggunakan hasil hash untuk input
inisialisasi kunci. Kecepatan dari metoda ini cukup baik, tidak
secepat Blowfish tetapi lebih cepat dari Idea. Untuk kecepatan
enkripsi di memori sebesar 5MB data adalah : 3.492,620 Kbyte/detik
pada Pentium Pro 200 MHz dan 2.466,700 Kbyte/detik pada Pentium
MMX 200 MHz.
Pada metoda blok cipher ada yang dikenal sebagai mode operasi.
Mode operasi biasanya mengkombinasikan cipher dasar, feedback
dan beberapa operasi sederhana. Operasi cukup sederhana saja
karena keamanan merupakan fungsi dari metoda cipher yang
mendasarinya bukan pada modenya. Mode pertama adalah ECB (Electronic
Codebook) dimana setiap blok dienkrip secara independen
terhadap blok lainnya. Dengan metoda operasi ini dapat saja
sebuah pesan disisipkan diantara blok tanpa diketahui untuk
tujuan tertentu, misalnya untuk mengubah pesan sehingga
menguntungkan sipembobol. Mode lainya adalah CBC (Cipher Block
Chaining) dimana plainteks dikaitkan oleh operasi xor dengan
cipherteks sebelumnya, metoda ini dapat dijelaskan seperti pada
Gambar 1. Untuk mode ini diperlukan sebuah Initialization
Vector (IV) yang akan di-xor dengan plainteks yang paling
awal. IV ini tidak perlu dirahasiakan karena bila kita perhatikan
jika terdapat n blok maka akan terdapat n-1 IV yang diketahui.
Metoda lain yang dikenal adalah CFB (Cipher Feedback), OFB
(Output Feedback), Counter Mode, dll.

Gambar 1. Mode operasi CBC
Kebanyakan data tidak bulat dibagi kedalam 64 bit (8 byte),
oleh sebab itu dalam blok cipher diperlukan data tambahan pada
blok terakhir untuk menggenapi blok menjadi 64 bit, hal ini
biasanya disebut padding. Ada beberapa cara untuk
melakukan padding, salah satu caranya adalah yang disebut Ciphertext
Stealing yang akan digunakan dalam aplikasi dari metoda GOST
ini.
Aplikasi
Untuk aplikasi dari metoda GOST ini penulis membuat program
dengan menggunakan Delphi, program ini dapat dikompail untuk
Delphi 3.0 atau 4.0. Tampilan dari program ini dapat dilihat pada
Gambar 2. Dengan program ini dapat melakukan enkripsi beberapa
file sekaligus dalam satu direktori. File asli akan dihapus dan
file hasil enkripsi akan dinamai sesuai dengan nama file asli
ditambah ekstensi "GC%)". Karena menggunakan mode
operasi CBC maka diperlukan IV. IV ini diambil dari generator
random, sehingga IV yang dihasilkan akan berbeda-beda. Dengan
cara ini dua buah file yang sama persis sekalipun akan
menghasilkan file enkrip yang berbeda. Generator bilangan random
yang digunakan dalam program ini yaitu Linear Feedback Shift
Register (LFSR). Untuk pemasukan kata kunci dapat digunakan
seluruh karakter ASCII, untuk karakter yang tidak ada dalam
keyboard dapat digunakan backslash ("\"), jadi
misalnya untuk memasukkan karakter ASCII nomor 199 ketikkan
"\199". Contoh bila diketikan kata kunci "File\222\180\20rahaSia"
maka akan diterjemahkan oleh program menjadi "File"+chr(222)+chr(180)+chr(20)+"rahaSia".
Dengan cara demikian maka kata kunci yang dapat kita gunakan
lebih beragam sehingga lebih sulit untuk ditebak. Sedangkan bila
kita ingin memasukkan karakter "\" sebagai salah satu
karakter kata kunci ketikkan "\\". Kata kunci ini
kemudian akan di-expand menjadi kunci 256 bit menggunakan
SHA-1 dan siap digunakan dalam proses enkripsi/dekripsi. Untuk
pengecekan kebenaran kata kunci ketika mendekripsi, kunci 256 bit
diatas digabung lagi dengan kata kunci kemudian di-hashing
dengan SHA-1 dan disimpan di header dari file enkripsi. Cara ini
sangat aman karena hasil hashing SHA-1 mempunyai panjang
160 bit, sehingga akan sangat-sangat sulit untuk mendapatkan
kembali kata kunci dari hasil hashing ini. Hal lainnya
adalah dalam penghapusan file asli, kita dapat memilih untuk
menghapus begitu saja, atau file asli ditimpa dengan bilangan
random sebanyak 1 atau 3 kali dengan demikian akan sulit
merekonstruksi kembali file asli walaupun berhasil meng-undelete
file tersebut.

Gambar 2. Tampilan Program
Penutup
Tentu saja walaupun penulis telah berusaha untuk membuat
program ini seaman mungkin, ada kemungkinan masih ada lubang-lubang
yang dapat ditembus untuk merecover file yang telah dienkripsi.
Karena bagaimanapun sangat sulit untuk membuat program enkripsi
yang betul-betul tidak dapat ditembus, bahkan sistem enkripsi
kunci publik seperti RSA pun masih dapat ditembus karena
penerapan dalam aplikasinya yang kurang sempurna. Oleh sebab itu
bila ada pembaca yang dapat memberikan kritik dan saran untuk
perbaikan program ini akan penulis terima dengan baik.
Untuk pengembangan program ini dapat ditambahkan kompresi file
sebelum dienkrip yang juga akan menambah keamanan dari enkripsi.
Atau mungkin juga pembaca bisa menerapkan metoda enkripsi lain
seperti Blowfish, Idea, RC5, Skipjack, Cast-128, Square, Misty
atau metoda enkripsi mutakhir kandidat AES (Advanced Encryption
Standard) seperti Mars , RC6, Twofish, Cast-256, Crypton,
Rijndael, dll.
Akhir kata penulis mengharapkan semoga tulisan ini ada
manfaatnya bagi pembaca dan mendorong pembaca untuk membuat
program enkripsi yang lebih baik, tentunya menggunakan metoda
enkripsi yang sudah diakui kekuatannya.
"Building a secure cryptographic system
is easy to do badly, and very difficult to do well"
(Bruce Schneier)
Pustaka
- Wei Dai, "Crypto++: a C++ Class Library of
Cryptographic Primitives Version 2.1", 1996.
- J. Kelsey, B. Schneier, D. Wagner, "Key-Schedule
Cryptanalysis of IDEA, G-DES, GOST, SAFER and Triple DES",
1996
- B. Schneier, "Applied Cryptography", second
edition, John Willey & Sons, 1996.
- B. Schneier, "Security Pitfalls in Cryptography",
Counterpane Systems, 1998.
(c) Maret 1999 - Budi Sukmawan

|
|