02 July 2009

KRIPTOGRAFI

1. Pengertian Kriptografi

Kriptografi adalah ilmu yang mempelajari teknik-teknik matematis yang berhubungan dengan aspek keamanan informasi seperti : keabsahan, integritas data, serta autentifikasi data. Kriptografi tidak berarti hanya memberikan keamanan informasi saja, namun lebih ke arah teknik-tekniknya. Ada empat tujuan dari ilmu kriptografi, yaitu :

* kerahasiaan, adalah layanan yang digunakan untuk menjaga isi dari informasi dari siapapun kecuali yang memiliki otoritas,
* 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 menyangkut penyisipan, penghapusan, dan pensubtitusian data lain ke dalam data yang sebenarnya
* autentikasi, adalah berhubungan dengan identifikasi, 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, yang berarti begitu pesan terkirim, maka tidak akan dapat dibatalkan.



2. Enkripsi dan Dekripsi

2.1 Enkripsi

Proses utama dalam suatu algoritma kriptografi adalah enkripsi dan dekripsi. Enkripsi merubah sebuah plaintext ke dalam bentuk ciphertext. Pada mode ECB (Elekctronic Codebook), sebuah blok pada plaintext dienkripsi ke dalam sebuah blok ciphertext dengan panjang blok yang sama.

Blok cipher memiliki sifat bhahwa setiap blok harus memiliki panjang yang sama (misalnya 128 bit). Namun apabila pesan yang dienkripsi memiliki panjang blok terakhir tidak tepat 128 bit, maka diperlukan mekanisme padding, yaitu penambahan bit-bit dummies untuk menggenapi menjadi panjang blok yang sesuai; biasanya padding dilakukan pada blok terakhir plaintext.

Padding bada blok terakhir bisa dilakukan dengan berbagai macam cara, misalnya dengan penambahan bit-bit tertentu. Salah satu contoh penerapan padding dengan cara menambahkan jumlah total padding sebagai byte terakhir pada blok terakhir plaintext. Misalnya panjang blok adalah 128 bit (16 byte) dan pada blok terakhir terdiri dari 88 bit (11 byte) sehingga jumlah padding yang diperlukan adalah 5 byte, yaitu dengan menambahkan angka nol sebanyak 4 byte, kemudian menambahkan angka 5 sebanyak satu byte. Cara lain dapat juga menggunakan penambahan karakter end-of-file pada byte terakhir lalu diberi padding setelahnya.

2.2 Dekripsi

Dekripsi merupakan proses kebalikan dari proses enkripsi, merubah ciphertext kembali ke dalam bentuk plaintext. Untuk menghilangkan padding yang diberikan pada saat prpses enkripsi, dilakukan berdasarkan informasi jumlah padding yaitu angka pada byte terakhir.

3. Dasar Matematis

Dasar matematis yang mendasari proses enkripsi dan deskripsi adalah relasi antara dua himpunan yaitu yang berisi elemen plaintext dan yang berisi elemen cipertext. Enkripsi dan dekripsi merupakan fungsi transformasi antara himpunan-himpunan tersebut. Apabila elemen-elemen plaintext dinotasikan dengan P, elemen-elemen ciphertext dinotasikan dengan C, sedang untuk proses enkripsi dinotasikan dengan E, dekripsi dengan notasi D, maka secara matematis proses kriptografi dapat dinyatakan sebagai berikut :

Enkripsi : E(P)=C

Dekripsi : D(C)=P atau D(E(P))=P


Pada skema enkripsi konvensional atau kunci simetrik digunakan sebuah kunci untuk melakukan proses enkripsi dan dekripsinya. Kunci tersebut dinotasikan dengan K, sehingga proses kriptografinya adalah :

Enkripsi : EK(P)=C

Dekripsi : DK(C)=P atau DK(EK(P))=P

Sedangkan pada sistem asymmetric-key digunakan kunci umum (public key) untuk enkripsi dan kunci pribadi (private key) untuk proses dekripsinya sehingga kedua proses tersebut dapat dinyatakan sebagai berikut :

Enkripsi : EPK(P)=C

Dekripsi : DSK(C)=P atau DSK(EPK(P))=P


4. Teknik Kriptografi

Pada umumnya terdapat dua teknik yang digunakan dalam kriptografi, yakni: kunci simetrik dan kunci asimetrik (public-key).

4.1 Kunci Simetrik

Skema enkripsi akan disebut symmetric-key apabila pasangan kunci untuk proses enkripsi dan dekripsinya sama. Pada skema enkripsi kunci simetrik dibedakan lagi menjadi dua kelas, yaitu block-cipher dan stream-cipher.

Block-cipher adalah skema e3nkripsi yang akan membagi-bagi plaintext yang akan dikirimkan menjadi sting-string (disebut blok) dengan panjang t, dan mengenkripsinya per-blok. Pada umumnya block-cipher memproses plaintext dengan blok yang relatif panjang lebih dari 64 bit dengan tujuan untuk mempersulit penggunaan pola-pola serangan yang ada untuk membongkar kunci. Sedangkan skema stream cipher pada dasarnya juga block-cipher, hanya dengan panjang bloknya adalah satu bit.


4 2. Kunci Asimetrik

Skema ini adalah algoritma yang menggunakan kunci yang ber beda untuk proses enkripsi dan dekripsinya. Skema ini disebut juga sebagai sistem kriptografi Public-key karena kunci untuk enkripsi dibuat secara umum (public-key) atau dapat diketahui oleh siapa saja, tetapi untuk proses dekripsinya yang dibuat satu saja, yakini hanya oleh yang berwenang untuk mendekripsinya (disebut private-key),.

Keuntungan skema model ini, untuk berkorespondensi secara rahasia dengan banyak pihak tidak diperlukan kunci rahasia sebanyak jumlah pihak tersebut, cukup membuat dua buah kunci (disebut public-key) bagi para koresponden untuk mengenkripsi pesan, dan private-key untuk mendekripsi pesan. Berbeda dengan skema kunci simetrik yang jumlah kunci yang dibuah adalah harus sebanyak jumlah pihak yang berkorespondensi.

5. Kriptografi Block Cipher

Block cipher merupakan sebuah fungsi yang memetakan n-bit blok plaintext ke n-bit blok ciphertext, dengan n adalah panjang blok. Blok cipher umumnya memproses plaintext ke dalam blok-blok yang cukup besar (≥ 64).

5.1 Cipher Berulang

Pada teknik cipher berulang (iterated cipher), blok plaintext mengalami pengulangan fungsi transformasi beberapa kali untuk mendapatkan blok ciphertext. Fungsi transformasi pada umumnya merupakan gabungan proses subtitusi, permutasi, kompresi, atau ekspansi terhadap blok plaintext. Sebuah kunci pada setiap putaran akan dikombinasikan dengan plaintext. Parameter dalam cipher ini adalah jumlah putaran r, besar blok n dan besar kunci k. Sub-kunci Ki pada setiap putaran diperoleh dari penurunan kunci input K.





5.2 Feistel Cipher

Feistel cipher beroperasi terhadap panjang blok data tetap sepanjang n (genap), kemudian membagi 2 blok tersebut dengan panjang masing-masing n/2, yang dinotasikan dengan L dan R. Feistel cipher menerapkan metode cipher berulang dengan masukan pada putaran ke-I yang didapat dari keluaran sebelumnya, yang secara matematis dapat dinyatakan sebagai berikut :

Li=Ri-1

Ri=Li-1 f(Ri-1,Ki); i=1,2,3,…,r

Ki adalah kunci untuk putaran ke-i dan f adalah fungsi transformasi.

Blok plaintext adalah gabungan L dan R awal atau secara formal plaintext dinyatakan dengan (Lo, Ro). Sedangkan blok ciphertext didapatkan dari L dan R hasil putaran terakhir setelah terlebih dahulu dipertukarkan atau dinyatakan dengan (Rr, Lr).

6.3 Avalanche

Pada blok cipher perubahan satu buah bit dapat menghasilkan perubahan lebih dari satu bit setelah satu putaran, lebih banyak lagi bit berubah untuk putaran berikutnya. Hasil perubahan tersebut dinamakan sebagai avalanche effect. Sebuah algoritma kriptografi memenuhi kriteria avalanche effect apabila satu buah bit input mengalami perubahan, maka probabilitas semua bit berubah adalah setengahnya. Avalanche effect merupakan salah satu karakteristik yang menjadi acuan untuk menentukan baik atau tidaknya sebuah algoritma kriptografi.

5.4 Mode Operasi

Ada beberapa mode operasi yang digunakan dalam kriptografi, seperti :

5.4.1 Electronic codebook (ECB)

Pada mode ini blok-blok plaintext (x) yang identik (yang menggunakan kunci sama) akan menghasilkan ciphertext (c) yang identik pula, yang secara matematis dapat dinyatakan :

Enkripsi : cj EK(xj); 1jt

Dekripsi : xj EK-1(cj); 1jt

5.4.2 Cipher block chaining (CBC)

Pada prosesnya, koded ini melibatkan penggunaan initializing vector (IV) yang menyebabkan blok-blok ciphertext yang identik apabila dienkripsi menggunakan kunci dan IV yang sama. Berubahnya IV, kunci atau blok plaintext pertama akan menghasilkan ciphertext yang berbeda. Secara matematis dapat dinyatakan :

Enkripsi : coIV, untuk 1jt, cjEK(cj-1xj)

5.4.3 Cipher feedback (CFB)

Jika pada mode CBC, plaintext sebesar n bit diproses dalam sekali waktu (menggunakan sebuah n bit cipher blok), beberapa aplikasi mengharuskan r bit plaintext untuk dienkripsi terlebih dahulu dan ditransmisikan bebas delay, untuk r < n (biasanya r = 1 atau r = 8); dalam kasus ini CBF digunakan. Dalam mode ini juga melibatkan penggunaan initializing vector (IV).

5.4.4 Output feedback (OFB)

mode operasi ini digunakan apabila kesalahan propagasi sama sekali harus dihindari. Hampir mirip dengan CFB, dan juga memungkinkan enkripsi menggunakan besar blok yang berfariasi.

5.5 Kunci Lemah dan Kunci Setengah Lemah

Dalam kriptografi dikenal istilah kunci lemah (weak-key) dan kunci setengah lemah (semi weak-key). Kunci lemah adalah kunci yang apabila mengenkripsi suatu plaintext kemudian dienkripsi lagi menggunakna kunci yang sama, maka ciphertextnya adalah plaintext itu sendiri. Sedangkan yang disebut dengan kunci setengah lemah adalah sepasang kunci yang memiliki sifat jika sebuah plaintext dienkripsi dengan suatu kunci, akan dapat dienkripsi dengan kunci yang lain.

6. Twofish

Gambar 1 menunjukkan suatu ikhtisar dari blok cipher Twofish. Twofish menggunakan sebuah Struktur Feistel-like 16-round dengan tambahan whitening pada masukan dan keluaran. Satu-satunya unsur non-Feistel adalah 1-bit rotasi. Perputaran dapat dipindah ke dalam fungsi F untuk membuat suatu struktur Feistel murni, tapi memerlukan suatu tambahan perputaran kata-kata yang tepat sebelum langkah keluaran whitening. Plaintext dipecah menjadi empat kata 32-bit. Pada langkah whitening masukan terdapat xored dengan empat kata kunci. Ini diikuti oleh enambelas putaran. Pada setiap putaran, dua kata-kata pada sisi kiri digunakan sebagai masukan kepada fungsi g (Salah satu darinya diputar pada 8 bit pertama). Fungsi g terdiri dari empat byte-wide S-Box key-dependent, yang diikuti oleh suatu langkah pencampuran linier berdasar pada suatu matriks MDS. Hasil kedua fungsi g dikombinasikan menggunakan suatu Pseudo Hadamard Transform (PHT), dan ditambahkan dua kata kunci. Kedua hasil ini kemudian di-XOR ke dalam kata-kata pada sisi kanan (salah satunya diputar ke kanan 1 bit pertama, yang lainnya diputar ke kanan setelahnya). Yang kiri dan kanan dibelah dua kemudian ditukar untuk putaran yang berikutnya, pertukaran yang terakhir adalah dibalik, dan yang empat kata di-XOR dengan lebih dari empat kata kunci untuk menghasilkan ciphertext. Secara formal, 16 byte plaintext p0,… p15 yang yang pertama dipecah menjadi 4 kata P0,…P3 dari 32 bit masing-masing menggunakan konvensi little-endian.

P(4i+j).28j i=0,…,3

Di dalam langkah whitening, kata-kata ini di-XOR dengan 4 kata dari kunci yang diperluas.

R0,i=P Ki i=0,…,3


Gambar 1. Blok diagram Twofish

Pada setiap 16 putaran, dua kata pertama digunakan sebagai masukan kepada fungsi F, yang juga mengambil angka bulat itu sebagai masukan. Kata yang ketiga di-XOR dengan keluaran pertama F dan kemudian diputar ke kanan satu bit. Kata keempat diputar ke kiri satu bit kemudian di-XOR dengan kata keluaran F Yang kedua . Akhirnya, keduanya saling ditukar menghasilkan persamaan :

(Fr,0,Fr,1) = F(Fr,0,Fr,1,r)

Rr+1,0 = ROR(Rr,2Fr,0,1)

Rr+1,1 = ROL(Rr,3,1)Fr,1

Rr+1,2 = Rr,0

Rr+1,3 = Rr,1

untuk r= 0,…,15 di mana ROR dan ROL adalah berfungsi memutar argumentasi pertama (32-bit kata) ke kanan dengan angka bit-bit diindikasikan dengan argumentasi keduanya. Langkah whitening keluaran membatalkan `pertukaran’ putaran terakhir dan meng XOR kata-kata dengan 4 kata dari kunci yang diperluas.

Ci = R16,(i+2) mod 4 Ki+4 I = 0,…,3

Eempat kata dari ciphertext kemudian menulis seperti 16 byte c0,…,c15 sama seperti menggunakan konversi little-endian untuk plaintext.

ci =mod 28 i = 0,…,15

7. Fungsi F

Fungsi F adalah suatu permutasi key-dependent di atas nilai 64-bit. Untuk mengambil tiga argumentasi, dua kata masukan R0 Dan R1, dan angka bulat r digunakan untuk memilih subkey yang sesuai. R0 yang dilewati fungsi g, menghasilkan T0. i diputar 8 bit ke kanan kemudian melewati fungsi g untuk menghasilkan T1. Hasil T0 dan T1 selanjutnya dikombinasikan dalam sebuah PHT danditambahkan 2 kata dari kunci yang diperluas menghasilkan persamaan :

T0 = g(R0)

T1 = g(ROL(R1,8))

F0 = (T0 + T1 + K2r+8) mod 232

F1 = (T0 + 2T1 + K2r+9) mod 232

Di mana ( F0, F1) adalah hasil dari F. Kita juga menggambarkan fungsi F’ untuk menganalisa. F’ adalah identik dengan fungsi F, kalau tidak tambahkan beberapa blok kunci pada keluaran. ( PHT masih dilakukan.)


8. Fungsi g

Fungsi g membentuk jantungnya Twofish. Kata masukan X dipecah menjadi empat byte. Masing-masing byte dijalankan melewati S-box key-dependent. Masing-masing S-box adalah bijective, mengambil 8 bit masukan, dan menghasilkan 8 bit keluaran. Ke empat hasil diinterpretasikan sebagai vektor yang panjangnya 4 di atas GF (28), dan dikalikan dengan yang matriks MDS 4x4 (menggunakan bidang GF (28) untuk perhitungannya). Untuk menghasilkan vektor diinterpretasikan sebagai 32-bit kata sebaga adalah hasil dari g :

xi = mod 28 i = 0,…,3

yi = si i = 0,…,3

= .

Z =

Di mana si adalah S-Box key-dependent dan Z adalah hasil dari g. Untuk merumuskan dengan baik, kita harus menetapkan koresponden antara nilai-nilai byte dan elemen-elemen bidang GF (28). Kita merepresentasikan GF (28) sebagai GF(2)[x]/v(x) di mana v(x)=x8+x6+x5+x3+1 adalah suatu polynomial primitif dari 8 tingkat di atas GF(2). Unsur Bidang a=aixi dengan ai Є GF (2) adalah dikenal dengan nilai byte aixi. Ini adalah beberapa pengertian pemetaan “alamiah"; penambahan di dalam GF (28) berkorespondensi dengan suatu XOR dari bytes.

Matriks MDS-nya adalah sebagai berikut :

MDS =

Di mana elemen-elemen ditulis sebagai nilai-nilai byte hexadecimal.

9. Jadwal Kunci

Jadwal kunci harus menyediakan 40 kata dari kunci yang diperluas K0,…,K39, dan 4 buah S-Box key-dependent yang digunakan di dalam fungsi g. Twofish didefinisikan untuk kunci-kunci dengan panjang N= 128, N= 192, dan N= 256. Beberapa kunci yang lebih pendek dari 256 bit dapat digunakan oleh lapisannya dari nol hingga yang lebih besar yang didefinisikan sebagai panjang kunci. Kita mendefinisikan k=N/64. Kunci M terdiri dari 8k byte m0,…,m8k-1. Byte-byte adalah yang pertama diubah ke dalam 2k kata dari 32 bit masing-masing :

Mi = i = 0,…2k-1

dan kemudian ke dalam dua vektor kata dari panjang k :

Me = (M0,M2,…,M2k-2)

Mo = (M1,M3,…,M2k-2)

Sepertiga vektor kata dari panjang k adalah juga diperoleh dari kunci itu.

Hal ini dilakukan dengan mengambil byte-byte kunci di dalam kelompok 8, menginterpretasikannya sebagai vektor di atas GF (28), dan mengalikannya dengan matrils 4x8 yang diperoleh dari suatu kode R. Masing-masing hasil dari 4 byte kemudian diinterpretasikan sebagai suatu kata 32 bit.. Kata-kata ini menyusun vektor yang ketiga :

= .

Si =

untuk i = 0,…,k-1, dan

S = (Sk-1,Sk-2,…,S0)

Catat bahwa daftar S kata-kata itu di dalam order “terbalik". Karena Untuk perkalian matriks RS, GF (28) diwakili oleh GF (2)[x]/w(x), di mana w(x)= x8+x6+x3+x2+1 adalah polynomial primitif derajat dari 8 tingkat di atas GF(2). Pemetaan antara nilai-nilai byte dan elemen-elemen GF (28) menggunakan defnisi yang sama sebagaimana yang digunakan untuk perkalian matriks MDS. Dalam pemetaan ini, matriks RS ditunjukkan sebagai berikut :


RS =

Ke tiga vektor Me, Mo, dan S ini membentuk basis dari jadwal kunci.

9.1 Penambahan Panjang Kunci

Twofish dapat menerima kunci-kunci dengan panjang byte di atas 256 bit.. Untuk ukuran-ukuran kunci yang tidak didefinisikan di atas, kunci diisi pada bagian akhir dengan nol byte kepada yang lebih panjang berikutnya. Sebagai contoh, suatu kunci 80-bit m0,…,m9 akan diperluas dengan mengatur mi = 0 untuk i= 10,…,15 dan diperlakukan sebagaimana pada kunci 128-bit.

9.2 Fungsi h

Gambar 2 menunjukkan suatu ikhtisar fungsi h. Ini adalah suatu fungsi yang mengambil dua input-a 32-bit kata X dan sebuah daftar L = ( L0,…,Lk-1) dari kata-kata X 32 dengan panjang k- dan menghasilkan satu kata pada outputnya. Ini adalah pekerjaan fungsi di dalam langkah-langkah k. Pada setiap langkah, empat byte itu masing-masing melintasi suatu fixed S-Box, dan di-XOR dengan sebuah byte yang diperoleh dari daftar. Akhirnya, byte-byte sekali lagi digeser melewati sebuah fixed S-box dan empat byte itu dikalikan dengan matriks MDS seperti halnya dalam g. Lebih formal kita memisah-misahkan kata-kata itu ke dalam bytes :

li,j = mod 28

xj = mod 28

untuk i=0,…,k-1 dan j=0,…,3. Kemudian urutan subtitusi dan XOR diterapkan :

yk,j = xj j = 0,…,3

Gambar 3. Fungsi h

jika k ≥ 3 didapatkan :

y3,0 = q1[y4,0] l3,0

y3,1 = q0[y4,1] l3,1

y3,2 = q0[y4,2] l3,2

y3,3 = q1[y4,3] l3,3

jika k = 4 didapatkan :

y2,0 = q1[y3,0] l3,0

y2,1 = q1[y3,1] l3,1

y2,2 = q0[y3,2] l3,2

y2,3 = q0[y3,3] l3,3



Dalam seluruh kasus didapatkan :

y0 = q1[q0[q0[y2,0] l1,0] l0,0]

y1 = q0[q0[q1[y2,1] l1,1] l0,1]

y2 = q0[q1[q0[y2,2] l1,2] l0,2]

y3 = q1[q1[q1[y2,3] l1,3] l0,3]

Di sini, q0 dan q1 ditetapkan permutasi di atas nilai 8-bit yang akan didefinisikan segera. Menghasilkan vektor yang merupakan perkalian matriks MDS, seperti halnya dalam fungsi g :

= .

Z =

di mana Z adalah hasil dari h

9.3 S-Box Key-dependent

Sekarang dapat didefinisikan S-Box dalam fungsi g oleh :

g(x)= h(X; S)

Hal itu adalah karena i= 0,…,3, S-Box Key-Dependent si dibentuk oleh pemetaan dari xi ke yi di dalam fungsi h, di mana daftar Lsama dengan vektor S yang diperoleh dari kunci itu.

10.4 Kata-kata Kunci yang Diperluas Kj

Kata-kata dari kunci yang diperluas didefinisikan menggunakan fungsi h :

ρ = 224 + 216 + 28 + 20

Ai = h(2iρ,Me)

Bi = ROL(h((2i + 1) ρ,Mo),8)

K2i = (Ai + Bi) mod 232

K2i+1 = ROL((Ai + 2Bi) mod 232,9)

Konstanta ρ digunakan untuk menduplikat byte yang mempunyai properti untuk i= 0,…,255, kata itu jika terdiri dari empat byte yang sama, masing-masing dengan nilai i. Fungsi h diberlakukan bagi kata-kata jenis ini. Untuk Ai nilai-nilai byte itu adalah 2i, dan argumentasi yang kedua dari h adalah Me. Bi dihitung dengan cara yang sama menggunakan 2i+1 sebagai byte nilai dan Mo sebagai argumentasi yang kedua, dengan suatu putaran ekstra di atas 8 bit. Nilai-nilai Ai dan Bi Dua dikombinasikan dalam PHT. Salah satu dari hasil itu selanjutnya diputar dengan 9 bit. Kedua hasil tersebut membentuk dua kata kunci yang diperluas.

9.5 Permutasi q0 dan q1

Permutasi q0 dan q1 adalah ditetapkan permutasi di atas nilai-nilai 8 bit. Mereka dibangun dari empat 4-bit permutasi yang masing-masing berbeda. Untuk nilai masukan x didefinisikan sebagai nilai output y sebagai berikut :

a0, b0 = , x mod 16

a1 = a0 b0

b1 = a0 ROR1(b0,1) 8a0 mod 16

a2, b2 = t0[a1],t1[b1]

a3 = a2 b2

b3 = a2 ROR1(b2,1) 8a2 mod 16

a4, b4 = t2[a3],t3[b3]

y = 16b4 + a4

di mana ROR4 adalah suatu fungsi yang serupa dengan ROR yang merupakan putaran nilai 4-bit. Pertama, byte dipecah menjadi dua bagian. Ini dikombinasikan dalam suatu bijective yang mencampur langkah. Masing-masing bagian kemudian melintasi 4-bitfixed S-Box. Ini diikuti oleh yang lain. Akhirnya, dua bagian dikombinasikan kembali ke dalam satu byte. Untuk permutasi q0 S-Box 4-bit :


t0 = [8 1 7 D 6 F 3 2 0 B 5 9 E C A 4]

t1 = [E C B 8 1 2 3 5 F 4 A 6 7 0 9 D]

t2 = [B A 5 E 6 D 9 0 C 8 F 3 2 4 7 1]

t3 = [D 7 F 4 1 2 6 E 9 B 3 0 8 5 C A]

di mana masing-masing S-Box 4-Bit diwakili oleh daftar masukan yang menggunakan notasi hexadecimal. (untuk masukan 0,…,15 didaftarkan dalam order.) Dengan cara yang sama, untuk q1 S-Box 4-bit :

t0 = [2 8 B D F 7 6 E 3 1 9 4 0 A C 5]

t1 = [1 E 2 B 4 C 3 7 6 D A 5 F 9 0 8]

t2 = [4 C 7 5 1 6 9 A 0 E D 8 2 B 3 F]

t3 = [B 9 5 1 C 3 D E 6 4 7 F 2 0 8 A]



Gambar 3: Satu putaran fungsi F (kunci 128-bit)

10. Kriptanalisis Twofish

Sudah di atas seribu jam waktu yang digunakan untuk mencoba ke kriptanalisis Twofish. Suatu paparan tentang serangan yang berhasil adalah sebagai berikut :

* Twofish 5-round (tanpa post-whitening) dengan 222,5 pilihan pasangan plaintext dan 251 perhitungan fungsi g.
* Twofish 10-round (tanpa pre dan post whitening) dengan sebuah serangan pilihan kunci, menuntut 232 pilihan plaintexts dan sekitar 211 pilihan plaintext adaptip, serta sekitar 232 pekerjaan.



Kenyataan bahwa Twofish nampak tahan terhadap serangan related-key dan memiliki hasil yang paling menarik. Pemecahan kriptanalisis secara konvensional mengijinkan suatu penyerang untuk mengendalikan masukan plaintext dan ciphertext ke dalam cipher. Kriptanalisis Relatedkey memberi penyerang itu suatu cara tambahan dalam sebuah cipher: jadwal kunci. Sebuah cipher adalah tahan terhadap serangan dengan kunci terkait dengan teknik lebih sederhana yang hanya melibatkan plaintext itu dan ciphertext. Berdasarkan 19 analisa kami, diduga bahwa tidak ada lagi serangan yang efisien atas Twofish selain kekuatan fisik. Diperkirakan bahwa serangan yang paling efisien terhadap Twofish dengan suatu kunci 128-bit mempunyai kompleksitas 2128, sedangkan serangan yang paling efisien terhadap Twofish dengan sebuah kunci 192-bit mempunyai kompleksitas 2192, dan serangan yang paling efisien terhadap Twofish dengan sebuah kunci 256-bit mempunyai kompleksitas 2256.

12. Penutup

Pembahasan yang kami lakukan berupa studi literatur, dapat ditarik beberapa kesimpulan bahwa Twofish :

* Mampu menerima panjang key diatas 256.
* Mengenkripsi data kurang dari 500 siklus clock per block di atas Pantium, Pentium Pro dan Pentium II, bagi algoritma yang dioptimasi secara penuh.
* Mampu melakukan set-up key 128-bit (untuk kecepatan enkripsi optimal) dalam waktu kurang dari yang diperlukan untuk mengenkripsi 32 blok di atas Pentium, Pentium Pro, dan Pentium II.
* Mengenkripsi data kurang dari 5000 siklus clock per blok di atas Pentium, Pentium Pro, dan Pentium II tanpa melakukan key setup terlebih dahulu.
* Tidak menggunakan operasi-operasi yang dapat mengurangi kinerja ketika dijalankan pada mekroprocsesor 3-bit yang lain.
* Tidak menggunakan operasi-operasi yang mengurangi efisiensi ketika dijalankan di atas processor 8-bit atau 16-bit.
* Tidak menggunakan operasi-operasi yang mengurangi efisiensi ketika dijalankan di atas processor 64-bit, seperti Merced.
* Tidak melibatkan elemen apapun yang membuat tidak efisien dalam hal hardware.
* Memiliki bermacam kinerja yang mengacu pada key-schedule.
* Mengenkripsi data dalam waktu kurang dari 10 millidetik pada processor 8-bit.
* Dapat diimplementasikan di ats processor 8-bit dan dengan RAM 64 byte saja.
* Dapat diimplementasikan pada hardware yang menggunakan kurang dari 20000 gates.

2 comments:

  1. mbak, punya perhitungan manual algoritma twofish gak?
    saya lagi butuh untuk skripsi saya..
    makasih

    ReplyDelete
  2. Kami juga mempunyai artikel yang terkait implementasikriptografi, bisa di download disini:
    http://repository.gunadarma.ac.id/bitstream/123456789/3116/1/IMG_0041.pdf
    semoga bermanfaat :D

    ReplyDelete