|
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.<budskman [at] yahoo [dot] com>
Pustaka
- Agner Fog, “How to optimize for the Pentium family of
microprocessors”, http://agner.org/assem/pentopt1.zip,
1999.
- 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.
- 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
(c) November 1999 - Budi Sukmawan

|