SCOP ” THE FAST STREAM CIPHER “

SCOP “THE FAST STREAM CIPHER”

 

A.Abstraksi

SCOP merupakan salah satu contoh dari kriptografi kunci simetrik, dalam hal ini stream cipher. SCOP diciptakan oleh Simeon V. Maltchev dan Peter T. Antonov, kemudian dikembangkan secara khusus, sehingga terciptalah SCOP yang lebih efisien kinerjanya 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 oleh penciptanya, sehingga source codenya dapat digunakan oleh siapa saja dengan acara mendownloadnya lewat internet, tanpa harus membayarkan royalti kepada penciptanya.

B.Pendahuluan

Kriptografi, secara umum adalah ilmu dan seni untuk menjaga kerahasiaan berita [bruce Schneier – Applied Cryptography]. Selain pengertian tersebut terdapat pula pengertian ilmu yang mempelajari teknik-teknik matematika yang berhubungan dengan aspek keamanan informasi seperti kerahasiaan data, keabsahan data, integritas data, serta autentikasi data [A. Menezes, P. van Oorschot and S. Vanstone – Handbook of Applied Cryptography]. Namun tidak semua aspek keamanan informasi ditangani dengan menggunakan teori-teori kriptografi.Pada dasarnya terdapat 4(empat) tujuan mendasar dari ilmu kriptografi. Hal tersebut juga merupakan bagian dari aspek-aspek keamanan informasi yaitu :

  • Kerahasiaan, adalah layanan yang digunakan untuk menjaga isi dari informasi dari siapapun kecuali yang memiliki otoritas atau kunci rahasia untuk membuka/mengupas informasi yang telah disandi.

  • Integritas Data, adalah berhubungan dengan penjagaan dari perubahan data secara tidak sah. Untuk menjaga integritas data, sistem harus memiliki kemampuan untuk mendeteksi manipulasi data oleh pihak-pihak yang tidak berhak, antara lain penyisipan, penghapusan, dan pensubsitusian data lain kedalam data yang sebenarnya.

  • Autentikasi, adalah berhubungan dengan identifikasi/pengenalan, baik secara kesatuan sistem maupun informasi itu sendiri. Dua pihak yang saling berkomunikasi harus saling memperkenalkan diri. Informasi yang dikirimkan melalui kanal harus diautentikasi keaslian, isi datanya, waktu pengiriman, dan lain-lain.

  • Non-repudiasi, atau penyangkalan adalah usaha untuk mencegah terjadinya penyangkalan terhadap pengiriman/terciptanya suatu informasi oleh yang mengirimkan/membuat.

Dalam kriptografi terdapat 2(dua) proses utama yaitu menyandi(enkripsi) dan membuka sandi(dekripsi). Proses menyandi/enkripsi dapat diartikan juga sebagai kode atau cipher. Sebuah sistem pengkodean menggunakan suatu tabel atau kamus yang telah didefinisikan untuk kata dari informasi atau yang merupakan bagian dari pesan, data, atau informasi yang akan dikirimkan. Sebuah cipher menggunakan suatu algoritma yang dapat mengkodekan semua aliran data(stream) yang berbentuk bit dari suatu pesan asli(plaintext) menjadi sebuah cryptogram yang tidak dapat dimengerti, kecuali jika dibuka/didekripsikan kembali menjadi plaintext.

Pengamanan pesan, data, atau informasi tersebut selain bertujuan untuk meningkatkan keamanan, juga berfungsi untuk:

  • Melindungi pesan, data, atau informasi agar tidak dapat di baca oleh orang-orang yang tidak berhak.

  • Mencegah agar orang-orang yang tidak berhak, menyisipkan atau menghapus pesan, data, atau informasi.

Sistem kriptografi sendiri terbagi menjadi tiga macam, yaitu sistem kriptografi kunci simetrik, sistem kriptografi kunci publik(asimetrik), dan sistem kriptogafi fungsi hash. Sistem kriptografi kunci simetrik merupakan sistem kriptografi yang menggunakan satu macam kunci dalam melakukan proses enkripsi dan dekripsi. Pada sistem ini keamanan dalam proses transmisi dan berita tergantung pada tingkat kerahasiaan kunci dan kompleksitasan algoritma yang digunakan. Kunci memegang peranan yang sangat penting sehingga harus dirahasiakan dan diamankan oleh penggunanya. Karena kunci yang digunakan harus dirahasikan dan diamankan, maka kunci yang digunakan pada sistem kriptografi kunci simetrik, biasanya disebut dengan sebutan kunci rahasia(secret key).

Skema kriptografi kunci simetrik yang didasarkan kepada jumlah data perproses dan alur pengolahan data didalamnya dapat dibedakan menjadi dua kelas, yaitu block-cipher dan stream-cipher. Block-cipher adalah skema algoritma sandi yang akan memilah-milah teks terang yang akan dikirimkan dengan ukuran tertentu (disebut juga dengan blok) dengan panjang t, dan setiap blok dienkripsi dengan menggunakan kunci yang sama. Pada umumnya, block-cipher memproses teks terang dengan blok yang relatif panjang lebih dari 64 bit, hal ini dilakukan untuk mempersulit penggunaan pola-pola serangan yang ada dalam usaha pembongkaran kunci. Selain itu untuk menambah ketangguhan model algoritma block cipher, dikembangkanlah beberapa tipe proses enkripsi, yaitu(ECB, CBC, OFB dan CFB).

Sedangkan stream-cipher adalah algoritma sandi yang mengenkripsi data persatuan data, seperti bit, byte, nible atau per lima bit(saat data yang akan enkripsi data tersebut berupa data Boudout). Setiap mengenkripsi satu satuan data di gunakan kunci yang merupakan hasil pembangkitan dari kunci sebelum.

C.Deskripsi Algoritma SCOP

Seperti diterangkan pada bagian sebelumnya, SCOP didisain khusus untuk digunakan pada prosesor Intel Pentium, namun penggunaan SCOP tetap dapat berjalan dengan cepat pada prosesor 32-bit lainnya. Selain itu 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 dienkripsi.

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.

D.Cara Kerja

Main instructions/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.

E.Implementasi Algoritma SCOP

Implementasi dari algoritma enkripsi data yang merupakan salah satu bagian dari SCOP(fungsi enkripsi/dekripsi) pada aslinya ditulis dalam bahasa Assembler Intel. Namun aplikasi(fungsi enkripsi/dekripsi) yang tertera dibawah ini sudah berupa bahasa berasas menengah, yaitu bahasa C.

/* Demo program SCOP(The Fast Stream Cipher) */
/* SCOP is tested with MSVC 4.1 and 5.0, and with gcc 2.7.x. Please be careful with Borland’s 32-bit C compiler. Read the comment in the encrypt/decrypt functions. */

#include <stdio.h>

#include <assert.h>

#define MESSAGE_WORDS 1024 typedef struct

{

unsigned long v[384];

unsigned char i;

unsigned char j;

unsigned char t3;

}

st_key; typedef struct { unsigned char coef[8][4]; unsigned long x[4];}

st_gp8; st_key kt;st_gp8 int_state;

unsigned long buf[MESSAGE_WORDS];

static void gp8 (unsigned long *out);

static voidexpand_key (unsigned char *in, unsigned in_size)

{ unsigned i; unsigned char *p;

unsigned char counter;

assert (in_size >= 2 && in_size <= 48);

p = (unsigned char *) &int_state;

for (i = 0; i < in_size; i++) p[i] = in[i];

for (i = in_size; i < 48; i++)

p[i] =(unsigned char) (p[i – in_size] + p[i – in_size + 1]);

counter = 1; for (i = 0; i < 32; i++)

{ if (p[i] == 0) p[i] = counter++; }}

voidinit_key (unsigned char *in, unsigned in_size)

{ unsigned long odd; unsigned long t[4]; int i, j; expand_key (in, in_size);

for (i = 0; i < 8; i++)

gp8 (t); for (i = 0; i < 12; i++)

{ for (j = 0; j < 8; j++) gp8 (kt.v + i * 32 + j * 4); gp8 (t); }

gp8 (t); kt.i = (unsigned char) (t[3] >> 24);

kt.j = (unsigned char) (t[3] >> 16);

kt.t3 = (unsigned char) (t[3] >> 8);

odd = t[3] & 0×7f; kt.v[odd] |= 1; }

/* partially optimized version */

static voidgp8 (unsigned long *out)

{ unsigned long y1, y2, x_1, x_2, x_3, x_4;

unsigned long newx[4]; int i, i2;

for (i = 0; i < 8; i += 2) { i2 = i >> 1;

x_1 = int_state.x[i2] >> 16; x_2 = x_1 * x_1;

x_3 = x_2 * x_1; x_4 = x_3 * x_1;

y1 = int_state.coef[i][0] * x_4 + int_state.coef[i][1] * x_3 + int_state.coef[i][2] * x_2 + int_state.coef[i][3] * x_1 + 1; x_1 = int_state.x[i2] & 0xffffL;

x_2 = x_1 * x_1; x_3 = x_2 * x_1;

x_4 = x_3 * x_1;voidinit_key (unsigned char *in, unsigned in_size)

{ unsigned long odd; unsigned long t[4]; int i, j; expand_key (in, in_size);

for (i = 0; i < 8; i++) gp8 (t); for (i = 0; i < 12; i++) { for (j = 0; j < 8; j++) gp8 (kt.v + i * 32 + j * 4);

gp8 (t); }

gp8 (t);

kt.i = (unsigned char) (t[3] >> 24);

kt.j = (unsigned char) (t[3] >> 16);

kt.t3 = (unsigned char) (t[3] >> 8);

odd = t[3] & 0×7f; kt.v[odd] |= 1;} y2 = int_state.coef[i + 1][0] * x_4 +

int_state.coef[i + 1][1] * x_3 +

int_state.coef[i + 1][2] * x_2 +

int_state.coef[i + 1][3] * x_1 + 1;

out[i2] = (y1 << 16) | (y2 & 0xffffL);

newx[i2] = (y1 & 0xffff0000L) | (y2 >> 16); }

int_state.x[0] = (newx[0] >> 16) | (newx[3] << 16); int_state.x[1] = (newx[0] << 16) | (newx[1] >> 16); int_state.x[2] = (newx[1] << 16) | (newx[2] >> 16);

int_state.x[3] = (newx[2] << 16) | (newx[3] >> 16);}

/* partially optimized version */

voidencrypt (unsigned long *buf, int buflen, st_key *skey)

{ unsigned char i, j; unsigned long t1, t2, t3;

unsigned long k, t; unsigned long *word, *v; i = skey->i; j = skey->j;

t3 = skey->t3; v = skey->v; word = buf; while (word < buf + buflen)

{ t1 = v[128 + j]; j += t3; t = v[i];

t2 = v[128 + j];

/* If you want to compile with Borland’s 32-bit C compiler using

optimizations, change the line below to:

i = (i + 1) & 255; */

i++;

t3 = t2 + t;

v[128 + j] = t3;

j += t2;

k = t1 + t2;

*word++ += k; }}

/* partially optimized version */

voiddecrypt (unsigned long *buf, int buflen, st_key *skey)

{ unsigned char i, j; unsigned long t1, t2, t3;

unsigned long k, t;

unsigned long *word, *v; i = skey->i; j = skey->j; t3 = skey->t3; v = skey->v; word = buf;

while (word < buf + buflen)

{

t1 = v[128 + j];

j += t3;

t = v[i];

t2 = v[128 + j];

/* If you want to compile with Borland’s 32-bit C compiler using

optimizations, change the line below to:

i = (i + 1) & 255; */

i++;

t3 = t2 + t;

v[128 + j] = t3;

j += t2;

k = t1 + t2;

voidmain (void){ unsigned char key[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,14, 15};

unsigned long t; int i, flag; printf (”1\n”);

init_key (key, sizeof (key));

printf (”2\n”);

for (i = 0; i < MESSAGE_WORDS; i++) buf[i] = 0L;

printf (”3\n”); encrypt (buf, MESSAGE_WORDS, &kt);

printf (”4\n”);

t = 0L;

for(i = 0; i < MESSAGE_WORDS; i++) t ^= buf[i];

printf (”XOR of buf is %08lx.\n”,t);

init_key (key, sizeof (key));

decrypt (buf, MESSAGE_WORDS, &kt); flag = 0;

for (i = 0; i < MESSAGE_WORDS; i++) { if (buf[i] != 0L) flag = 1; }

if (flag) printf (”Decrypt failed.\n”);

else printf (”Decrypt succeeded.\n”);

}

F.Penutup

Demikianlah isi dari blog saya di awal pagi hari yang selalu cerah akhir-akhir ini, meskipun pusing, harus tetap semangat, ngomong-ngomong tolong BANGET tinggalkan komentar/comment pada blog saya ini karena hal tersebut merupakan suatu penghargaan bagi saya, karena hasil pekerjaan saya telah anda baca dan anda nilai, selain itu hal tersebut juga akan dinilai oleh dosen saya. Semoga isi dari blog ini berguna bagi anda, komunitas, telebih untuk Negara dan Bangsa, amin.

Kata-kata terakhir sebelum saya tutup blog ini mungkin adalah permohonan maaf kepada para pembaca jikalau terdapat kata-kata pada blog ini yang dirasa menyinggung perasaan anda baik yang disengaja maupun yang tidak disengaja, karena kesalahan datangnya dari saya, dan kebenaran datangnya dari Allah S.W.T.

Dan Selamat Hari Raya Idul Fitri 1428 H, bagi yang merayakannya, Minal Aizin Wal Faizin, Mohon maaf Lahir, dan Batin. Sekian Wass. Wr. Wb.

 

HIDUP MAHASISWA…!!!!!

G.Daftar Pustaka

  1. http://id.wikipedia.org/wiki/Kriptografi

  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. Agner Fog, “How to optimize for the Pentium family of microprocessors”, http://agner.org/assem/pentopt1.zip, 1999.

  4. 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

 

Oleh : Sandromedo C.N.

NPM : 0605100703

10 Tanggapan

  1. Wah, sepertinya ilmu kriptografi cukup menarik juga ya untuk dipelajari. Tapi klo ngeliat algoritma dia atas, jadi puyeng jg nich..hehe….

    Salam Kenal Juga…
    ~Gringo

  2. waah kriptologi,
    btw ane kuliah di fasilkom nih, komputer ui.
    baru sem 3 siih, tapi boleh kayaknye nih tutorialnye masalah kriptologi.
    keep it goin’

  3. wwaaawww…. komprehensif sekali pembahasannya, bagus2, teruskan perdjoeangan 🙂

    btw, tukeran link yuk
    kamal87.wordpress.com

  4. dah ditengok nih
    blognya kerenjuga tapi saya agak nggak mudeng dengan bahasa komputer

    regards

  5. Hai…
    tengkyu atas kunjungannya ke Blog gw. Hahha…yayaya..gw juga seneng sama persandian, makanya dulu ikutan Pramuka dan belajar morse
    Sekarang belajar bahasa yaa bahasa HTML dan CSS….hahaha

    btw, tulisannya yang agak populer dikit dong, jangan terlalu ilmiah. Bagaimana supaya blogger awam kayak gw bisa tertarik dan bisa lebih memahami kriptografi.

    Sipp lah..keep on rockin!

  6. Terus belajar ya…
    Juga terus menulis.

    Salam.

  7. a_teng…..

    gwe mu tany,,,dalam suatu sistem sandi kan pasti ada kelebihan ma kekuranganya,,nah di tulusin lu ini bum ada..

    tulung dunk ksih tau kebihan ma kekurangannya,,
    jd gw bs tau letak kelemahan dan kekuatannya..

    tQ2…

  8. hello, it’s interesting to read ur blog
    i hope u will develop this blog,thx

  9. mau tanya dong…
    kira-kira perbandingan kecepatan enkripsi SCOP dengan algoritma enkripsi lainnya , misal RC4 n temen2 stream cipher lainnya tu gimana ya?
    soalnya kalo ga dibandingin gimana bisa tau dia itu cepat tau ga?

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout /  Ubah )

Foto Google+

You are commenting using your Google+ account. Logout /  Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout /  Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout /  Ubah )

Connecting to %s

%d blogger menyukai ini: