Bimacipta

SCOP Stream Cipher

 

SCOP

Stream Cipher Super Cepat

Oleh: Budi Sukmawan


Pendahuluan

 SCOP merupakan stream cipher yang diciptakan oleh Simeon V. Maltchev dan Peter T. Antonov [2], dikembangkan khusus sehingga efisien dalam kinerja software pada prosesor Intel Pentium. Secara teoritis SCOP dapat mengerjakan 1,5 clock cycles per byte. Skema cipher ini didisain dengan sebuah S-box yang key dependent, dengan bagian pertama berubah secara dinamis pada proses enkripsi dan sebagian lagi merupakan bagian statik. Cipher ini bekerja dalam internal-feedback mode (IFB). Keystream terdiri dari 32-bit word dan dihasilkan secara independen dari pesan enkripsi. Algoritma enkripsi SCOP tidak dipatenkan dan dapat digunakan pada berbagai penggunaan tanpa pembayaran royalti kepada penciptanya.

Deskripsi Algoritma

Seperti diterangkan di atas SCOP didisain khusus untuk digunakan pada prosesor Pentium, tetapi dapat berjalan sangat cepat pada prosesor 32-bit lainnya. SCOP juga didisain untuk memenuhi kriteria sebagai berikut:

  • Bekerja pada mode IFB, keystream dihasilkan secara independen dari pesan enkripsi.
  • Kompak, SCOP dapat berjalan pada memori kurang dari 2,5 Kbyte.
  • Implementasi software yang simpel, SCOP menggunakan operasi sederhana seperti penambahan dan pengurangan modulus 232 dan tabel lookup.
  • Keamanan variabel, SCOP merupakan algoritma ukuran kunci variabel, dengan ukuran kunci sampai dengan 384 bit.

Algoritma ini mempunyai dua bagian yaitu key expansion dan enkripsi data. Bagian pertama merubah kunci, yang bisa sampai dengan panjang 48 byte menjadi array 1540 bytes. Key expansion ini berdasarkan pada fungsi hash satu arah yang dinamakan GP8. Operasi utama yang digunakan dalam proses cipher adalah penambahan aritmetis dari 32-bit words. Operasi tambahan adalah 4 tabel lookup, yang dilakukan untuk setiap word yang akan dienkrip.

SCOP menggunakan sebuah 32-bit S-box (dinamai V) dengan 384 entri, dua 8-bit indek i dan j, dan tiga buah variabel sementara T1, T2, T3. S-box dibagi dua: pertama merupakan 128 32-bit word dari V membentuk bagian bagian pertama yang statis, dan kemudian 256 32-bit word dari V membentuk bagian kedua yang berubah-ubah selama proses enkripsi. Indek j menunjuk hanya bagian yang dinamis, sedangkan indek i menunjuk bagian statis dan setengah bagian dinamis.

S-box V diinisialisasi dengan 1536 byte pertama dari expanded key. Tiga byte berikutnya dari epanded key digunakan untuk menginisialisasi indek i dan j, dan variabel sementara T3 (24 high bit dari T3 dinisialisasi dengan 0). Penggunaan sebuah byte terakhir dari expanded key sedikit spesial: hanya 7 bit darinya yang digunakan. Byte ini digunakan sebagai index array dari bagian statis dari S-box V, kemudian isi dari array yang diindek oleh byte spesial ini dibuat ganjil tanpa memperhatikan apakah isinya ganjil atau genap.

Keystream K 32-bit dihasilkan dengan langkah-langkah sebagai berikut:

1.  T1    = V[128 + j]

2.  j   = (j + T3) mod 256

3.  T2    = V[128 + j]

4.  T3    = V[128 + j] + V[i]

5.  V[128 + j] = T3

6.  i   = (i + 1) mod 256

7.  j   = (j + T2) mod 256

8.  K   = T1 + T2

K kemudian ditambahkan pada plainteks untuk menghasilkan cipherteks atau dikurangkan dari cipherteks untuk menghasilkan plainteks.

Kekuatan dari algoritma ini tidak diketahui karena sampai saat ini penulis belum menemukan analisa dari algoritma ini oleh kriptographer yang bereputasi. Mungkin juga karena algoritma ini masih cukup baru (akhir 1997), sehingga masih membutuhkan waktu sampai ada orang yang menganalisisnya dan menemukan kelemahan-kelemahanya.

Kinerja

Instruksi utama dari SCOP dapat dikodekan dengan 15 instruksi assembler pada setiap prosesor 32 bit, yang mempunyai paling tidak 6 buah register dan mempunyai instruksi untuk: memindah data dari memori ke register dan dari register ke memori; penambahan dan pengurangan dua buah register; penambahan register dengan nilai immediate dan pengurangan nilai immediate dari register; mask register dengan nilai immediate  (instruksi AND). Bila prosesor mampunyai register (paling tidak 4) yang memberikan akses langsung pada bagian 8 bit, seperti AL untuk EAX, ketiga instruksi mask tidak dibutuhkan dan algoritma dapat dikodekan dengan 12 instruksi. Ke-12 instruksi ini termasuk dua instruksi untuk membaca dan menulis dari/ke plainteks/cipherteks yang sedang diproses dan satu instruksi untuk mengkombinasikan dengan keystream. Ke-12 instruksi ini secara teoritis dapat dieksekusi dengan 6 clock cycle pada Pentium. Dengan demikian berarti SCOP dapat mengenkrip data pada 1,5 Pentium clock cycle per byte, karena seperti kita ketahui algoritma ini bekerja pada 32-bit word (4 byte) sekaligus.  Berdasarkan kinerja pada prosesor Pentium dari SEAL dan RC4 [3], maka SCOP 2,5 kali lebih cepat dari SEAL dan 4,5 kali lebih cepat dari RC4.

Penulis sudah mencoba mengoptimasi algoritma ini dengan menggunakan inline assembler pada Delphi dengan hanya menggunakan instruksi mov dan add pada proses enkripsi dan ditambah sub pada proses dekripsi pada loop utamanya. Tetapi pada bagian dalam loop utamanya (langkah 1 – 8) hanya mencapai 8 clock (2 clock per byte) pada Pentium 166 MMX dengan 12 instruksi, pengukuran dilakukan langsung pada baris kode dengan menggunakan instruksi RDTSC (read time stamp counter) [1]. Secara keseluruhan proses enkripsi/dekripsi dapat mencapai 2,6 clock per byte pada Intel Pentium 166 MMX dan 1,6 clock per byte pada Intel Celeron 333. Pada test enkripsi/dekripsi secara keseluruhan ini, menggunakan blok yang cukup besar (512 byte) dengan demikian hanya proses di dalam loop saja yang berperan dan proses di luar loop dapat diabaikan. Sedangkan proses key expansion memerlukan komputasi yang besar karena hash GP8 melibatkan operasi perkalian, dimana satu operasi perkalian memerlukan 9 clock cycle pada Pentium/Pentium MMX dan 4 clock cycle pada Pentium Pro/Pentium II [1], sehingga pada Pentium 166 MMX proses key expansion memerlukan  + 92500 clock cycle, sedangkan pada Celeron 333 memerlukan  + 30700 clock cycle. Tetapi walaupun demikian algoritma ini tampaknya lebih cepat dari algoritma enkripsi manapun yang pernah penulis temukan dan implementasikan dengan Delphi baik itu stream cipher maupun block cipher. Clock cycle di atas bila diterjemahkan ke dalam Mbyte/detik  akan mencapai angka + 150 Mbyte/detik pada Intel Celeron 333 MHz untuk enkripsi/dekripsi di memori, tentu saja kecepatan dalam Mbyte/detik ini akan sangat tergantung dari konfigurasi komputer yang digunakan.

Aplikasi

Untuk mengimplementasikan algoritma ini penulis membuat sebuah program enkripsi yang penulis beri nama FastCrypt. Program ini dibuat dengan menggunakan Delphi 5 dan menggunakan komponen-komponen standar Delphi sehingga dapat dikompail dengan mudah. Dari program ini juga dapat dipelajari penggunaan komponen CoolBar dan Floating Toolbar, cara membuat operasi Drag and Drop dan pemanfaatan TListView sehingga tampak seperti kolom kanan dari Windows Exploler. Anda juga dapat men-dock ToolBar di kiri File List sehingga tampak seperti gambar di bawah ini:

Untuk penggunaaanya dapat dilihat pada manual program. Seperti dijelaskan di atas metoda ini bekerja pada variabel 32-bit sehingga bila kita mempunyai data yang bukan kelipatan 4 maka diperlukan perlakuan khusus yaitu dengan menambahkan satu sampai tiga byte ekstra sehingga menjadi kelipatan 4 (padding).

Penutup

Ternyata hanya dengan menggunakan instruksi sederhana seperti mov, add dan sub dapat dibuat sebuah algoritma enkripsi yang cukup aman dan sangat cepat. Walaupun demikian masih dibutuhkan optimasi lebih lanjut pada implementasi dengan Delphi ini dan hal ini penulis serahkan kepada pembaca untuk dapat menyempurnakannya lebih lanjut sehingga mencapai 6 clock cycle (1,5 clock cycle per byte) di dalam loop utamanya dengan menggunakan prosesor Intel Pentium seperti diklaim penciptanya.

Pustaka

  1. Agner Fog, “How to optimize for the Pentium family of microprocessors”,  http://agner.org/assem/pentopt1.zip, 1999.
  2. Simeon V. Maltchev and Peter T. Antonov, “The SCOP Stream Cipher” , ftp://ftp.funet.fi/pub/crypt/cryptography/symmetric/scop/scop.tar.gz, Dec. 1997.
  3. Bruce Schneier and Doug Whiting,“Fast software encryption: Designing encryption algorithms for optimal software speed on the Intel Pentium processor”, http://www.counterpane.com/fast_software_encryption.pdf, 1977

 


Catatan: Belakangan baru saya tahu bahwa algoritma ini tidak aman, lihat link ini: http://www.geocities.com/smaltchev/ dan http://groups.google.com/groups?hl=en&lr=&ie=UTF-8&selm=66m3qd%24r6s%241%40scream.auckland.ac.nz&rnum=1

© November 1999 - Budi Sukmawan


 

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