Bimacipta

GOST

 

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.

© Maret 1999 - Budi Sukmawan


 

kodowanie html5 css, projektowanie stron internetowych , PSD2HTML, PSD HTML, proste strony www, cięcie PSD, tworzenie stron www, webdesign,