Posted by: Ricky aji | December 16, 2009

Algoritma Stream Cipher Reundeu

Kriptografi adalah salah satu solusi dalam mengatasi masalah keamanan suatu berita rahasia. Ada beberapa jenis kriptografi, berdasarkan kunci yang dipakai ada kriptografi yang menggunakan kunci simetri dan asimetri. Jenis ini dibedakan berdasarkan jumlah kunci yang dipakai. Teknik kriptografi kunci simetri yang dibagi menjadi dua yakni teknik stream cipher dan teknik block cipher. Stream memiliki ciri-ciri aliran bit yang biasa digunakan sebagai pembangkit bilangan acak (pseudo random generator). Reundeu adalah salah satu desain algoritma stream cipher yang menggunakan LFSR di dalamnya. Diharapkan agoritma ini bisa menjadi pilihan dalam penggunaan algoritma enkripsi. Kriptografi adalah salah satu solusi dalam mengatasi masalah keamanan suatu berita rahasia. Ada beberapa jenis kriptografi, berdasarkan kunci yang dipakai ada kriptografi yang menggunakan kunci simetri dan asimetri. Jenis ini dibedakan berdasarkan jumlah kunci yang dipakai. Teknik kriptografi kunci simetri yang dibagi menjadi dua yakni teknik stream cipher dan teknik block cipher. Stream memiliki ciri-ciri aliran bit yang biasa digunakan sebagai pembangkit bilangan acak (pseudo random generator). Reundeu adalah salah satu desain algoritma stream cipher yang menggunakan LFSR di dalamnya. Diharapkan agoritma ini bisa menjadi pilihan dalam penggunaan algoritma enkripsi.

SKG pada Reundeu menggunakan algoritma yang berbasis LFSR 8 state yang masing-masing statenya terdiri dari 8 bit. Masing-masing state diisi dengan s0 s1 s2 s3 s4 s5 s6 dan s7. Pertama, state diisi dengan initial value yang merupakan inputan awal.

Ada beberapa operasi yang digunakan dalam algoritma ini yakni operasi perkalian modulus 256, operasi penjumlahan modulus 256, XOR, dan s-box AES.  Setelah dihasilkan rangkaian kunci, maka proses enkripsi hanya dilakukan dengan mengXORkan hasil kunci dengan teks terang.

Sama dengan enkripsi, dekripsi juga tinggal mengXORkan kunci yang dihasilkan oleh SKG dengan teks sandi yang diterima. Tidak ada hubungan chaining dalam proses dekripsi maupun enkripsi. Teks terang dan teks sandi tidak ada hubungan denga  key stream generator.

Desain algoritma Reundeu adalah algoritma stream cipher yang menggunakan SKG berbasis LFSR. Terdapat 8 state pada shift register yang digunakan. Masing-masing state diisi dengan 8 bit atau 1 byte yang dinotasikan dalam 2 bilangan hexadesimal.

Selain itu ada operasi penjumlahan, perkalian, dan XOR untuk menamgbahkan efek difusi pada algoritma. Ada juga tabel X-BOX yang digunakan untuk membuat efek konfusi, sehingga diharapkan output dari algoritma ini yang berupa kunci stream memenuhi syarat keacakan pseudo random.

Untuk enkripsi dan dekripsi sama, tinggal melakukan operasi XOR antara kunci dan teks terang dalam penyandian, dan melakukan operasi XOR antara kunci dan teks sandi pada saat dekripsi.

(untuk lebih lengkapnya bisa DOWNLOAD disini )

Advertisements
Posted by: Ricky aji | December 13, 2009

Skein, Fungsi Hash Kandidat SHA-3

Fungsi hash merupakan bagian dari algoritma kriptografi selain algoritma simetrik dan asimetrik. Saat ini algoritma fungsi hash banyak sekali penggunaannya selain sebagai tanda tangan digital yaitu untuk mengamankan informasi – informasi penting seperti password login, secure web connection, manajemen kunci enkripsi, virus dan malware scanning, dan pada protocol – protocol kriptografi. Salah satu algoritma fungsi hash yaitu Skein. Skein merupakan salah satu peserta dalam kompetisi yang diselenggarakan oleh NIST untuk dijadikan sebagai SHA-3. Skein didesainoleh sekelompok tim yang beranggotakan para ahli kriptografi yaitu Niels Ferguson, Stefan Lucks, Bruce Scheneier, Doug Whiting, Mihir Bellare, Tadayoshi Kohno, Jon Callas, dan Jesse Walker.

Selama ini, algoritma fungsi hash yang banyak digunakan adalah SHA-family yang berbasis pada algoritma MD4 dan MD5 yang dikembangkan oleh National Institute for Standard and Technology (NIST). Akan tetapi teknik-teknik kriptanalisis terhadap algoritma fungsi hash ini telah berhasil menemukan kelemahan-kelemahan yang cukup serius. Salah satu contohnya yaitu collisison yang terjadi pada MD4, MD5, dan SHA-0. Melihat kondisi di atas, maka NIST mengadakan suatu kompetisi yang bertujuan untuk menemukan penerus Dan salah satu algoritma fungsi hash yang telah di-approve yaitu Skein. Skein merupakan suatu kelompok fungsi hash yang memiliki ukuran state yang berbeda-beda yaitu 256, 512 dan 1024 bit. Namun yang diajukan sebagai proposal pada kompetisi SHA-3 adalah Skein-512.

(untuk lebih jelasnya silahkan DOWNLOAD pdf-nya)

Posted by: Ricky aji | December 11, 2009

Uji Statistik Algoritma Block Cipher

Pada tulisan ini dibahas mengenai kriteria-kriteria dalam pengujian keacakan algoritma block cipher khususnya algoritma block cipher yang menjadi finalis kandidat AES diantaranya yaitu RC6, Twofish, Rijndaell, Mars, dan Serpent. Kriteria-kriteria pengujian ini pertama kali diajukan oleh Juan Soto dalam papernya yang berjudul “Randomness Testing of The AES candidates Algorithm” pada tahun 1999. Dimana ukuran kunci yang digunakan dalam pengujian ini yaitu 128 bit.

Dalam pengujian AES, salah satu kriterianya yaitu kecocokannya sebagai suatu random number generator dimana penilaian terhadap outputnya tidak harus melihatnya dari segi komputasi untuk membedakannya dari sumber-sumber trully random. Dalam papernya, Juan Soto mengajukan beberapa kriteria yang harus dipenuhi oleh suatu algoritma block cipher dalam hal keacakannya. Sedangkan jumlah data yang dianalisis yaitu 135 buah himpunan data yang berbeda. Dimana total seluruhnya yaitu ada 226.106.880 blok yang tiap bloknya ada 128 bit, sehingga jumlah total bit yang dianalisis yaitu 28.941.680.640 bit.

(untuk lebih jelasnya silahkan DOWNLOAD pdf-nya)

Posted by: Ricky aji | November 22, 2009

Linier Cryptanalysis pada Mini AES

Pada tahun 1993, Matsui memperkenalkan teknik linier kriptanalysis secara teoritis pada DES saat kegiatan EURO’CRYPT. Pada prinsipnya teknik linier kriptanalysis ini dapat diterapkan pada semua iterated cipher. Ide awalnya, linier kriptanalysis diterapkan pada DES, namun seiring berjalannya waktu, teknik ini pun kini telah mampu diterapkan pada algoritma block cipher lainnya, salah satunya adalah Substitution Permutation Network. Karena mini AES merupakan varian dari SPN, maka metode linier kriptanalysis ini pun dapat diterapkan pada algoritma mini AES. Pertama kali linier kriptanalysis pada mini AES dikenalkan oleh Muhammad A. Musa (et.all). Namun ia hanya menganalisis pada round pertama saja. Kemudian pada tahun 2007, S. Davod Mansoori dan H. Khaleghei Bizaki memperkenalkan metode linier kriptanalysis samapai dengan round kedua (lebih advance dari Muhammad A. Musa). Dalam tulisan ini akan terbukti bahwa ternyata mini AES cukup rentan terhadap linier kriptanalysis dan sayangnya ekspresi ini pun dapat berimbas pada varian yang besarnya yaitu AES.

(untuk lebih lengkapnya silahkan DOWNLOAD pdf-nya)

Posted by: Ricky aji | November 21, 2009

W7 Cipher

Algoritma W7 merupakan algoritma stream cipher synchronous dengan key input sepanjang 128 bit. Dalam algoritma W7 digunakan LFSR sebagai dasar dalam perancangannya. Algoritma W7 menggunakan 8 kombinasi LFSR yang dioperasikan secara parallel. Setiap kombinasi LFSR tersebut terdiri dari 3 buah shift register. Kombinasi dari 3 shift register tersebut akan menghasilkan 1 bit kunci stream sehingga output dari algoritma W7 adalah 8 bit (1byte) rangkaian kunci tiap 1 satuan waktu.

Output pada algorima W7 tidak diambil langsung dari setiap LFSR, tetapi diambil dengan mengkombinasikan bit output akhir dari setiap shift register dengan operasi Exclusive OR (XOR). Output dari setiap shift register merupakan hasil dari suatu fungsi filter nonlinier yang merupakan operasi XOR dari dua buah nilai yaitu output dari LFSR dan operasi AND dari beberapa bit dalam LFSR.

Fungsi feedback yang digunakan merupakan sebuah fungsi polynomial karakteristik yang primitive dengan Greatest Common Divisor (GCD) dari panjang tiap stage sama dengan 1.

(untuk lebih lengkapnya silahkan DOWNLOAD pdf-nya )

Posted by: Ricky aji | November 21, 2009

Grain Cipher

Grain cipher adalah salah satu stream cipher untuk implementasi perangkat keras sederhana. Grain cipher diciptakan oleh Martin Hell, Thomas Johanson, dan Willi Meier. Sistem ini mudah diimplementasikan pada hardware. Sistem ini juga dapat menambah kecepatan dengan menambah hardware yang digunakan. Attack yang paling cepat untuk menyerang system ini adalah exhaustive attack. Grain cipher berorientasi pada synchronous stream cipher yang dapat melakukan sinkronisasi sendiri ketika terjadi kesalahan.

Grain cipher terdiri dari sebuah LFSR dan NFSR dengan panjang masing-masing 80 bit . Grain cipher membangkitkan kunci stream dari 80 bit secret key dan 64 bit initial value. Desainnya menggunakan 12 input fungsi Boolean g(x) sebagai fungsi feedback pada NFSR dan 5 fungsi Boolean h(x) yang menjadi filter yang mengandung 5 cell LFSR dan NLFSR. Output fungsi feedback ditutupi dengan output bit LFSR untuk memperbaharui NFSR dan output NFSR menutupi output fungsi linier untuk menghasilkan kunci stream.

(untuk lebih lengkapnya, silahkan DOWNLOAD pdf-nya)

Posted by: Ricky aji | November 21, 2009

Keyed Hash Function



Keyed hash function yang memiliki tujuan spesifik untuk otentikasi pesan disebut dengan message authentication code algorithms. Jumlah algoritma MACs yang diajukan lebih sedikit ketimbang algoritma MDC sebelum tahun 1995. Hal ini karena mungkin proposal-proposal yang diadopsi dalam praktik masih tidak banyak. Kebanyakan dari MACs yang dibuat berdasarkan block cipher. Contohnya adalah MAA yang beroperasi pada 32 bit per bloknya dan MACs based on DES-CBC yang beroperasi pada 56 bit per bloknya dimana keduanya masih memiliki keamanan yang cukup terhadap sumber daya komputasi musuh dan penerapan pada berbagai aplikasi.

Pada umumnya iterated MACs dapat dideskripsikan sebagai iterated hash function. Kunci MACs secara umum merupakan bagian dari output transformasi g sekaligus juga sebagai input untuk fungsi kompresi pada iterasi pertama serta ikut terlibat dalam fungsi kompresi f pada setiap stage-nya.

(untuk lebih jealsnya silahkan DOWNLOAD pdf-nya disini)

Posted by: Ricky aji | November 14, 2009

Linier Kriptanalisis pada SPN

  1. Ide Dasar Kriptanalisis Linear

Kriptanalisis linear yang menggunakan known plaintext attack merupakan salah satu metode kriptanalisis yang dilakukan dengan mencari hubungan linear antara sub himpunan dari bit-bit teks terang, sub himpunan dari bit-bit teks sandi serta sub himpunan dari bit-bit kunci. Dari hubungan linear tersebut akan didapat informasi mengenai bit-bit kunci. Dengan demikian untuk melakukan kriptanalisis linear dibutuhkan teks terang, teks sandi dan algoritma yang digunakan untuk mendapatkan sebagian dari kunci. Tujuan dari linear cryptanalysis adalah mencari persamaan linear yang paling efektif pada suatu algoritma blok dengan menggunakan persamaan:

Pii,i2, …in⨁Cji,j2, …jn=K(ki, k2, …kn)

dimana ii,i2, …in, ji,j2, …jndan ki, k2, …kn adalah posisi bit tetap dengan probabilitas p12 untuk teks terang P dan teks sandi C.

Prinsip Pilling Up

Kita anggap X1, X2, adalah variabel acak Bernoulli yang saling bebas. Misalkan

Pr[Xi = 0] = pi , dimana 0 pi 1 and i = 1, 2, 

sehingga

Pr[Xi = 1] = 1 – pi

Anggap i j, maka 2 variabel random yang saling bebas yaitu xi dan xj akan menyebabkan :

Pr[Xi = 0, Xj = 0] = pi pj

Pr[Xi = 0, Xj = 1] = pi (1 – pj)

Pr[Xi = 1, Xj = 0] = (1 – pi) pj

Pr[Xi = 1, Xj = 1] = (1 – pi)(1 – pj)

Anggap xi xj adalah variabel acak diskrit (xi xj = xi + xj mod 2) maka distribusi probabilitas dari xi xj adalah :

Pr[Xi Xj = 0] = pi pj + (1 – pi)(1 – pj)

Pr[Xi Xj = 1] = pi (1 – pj) + (1 – pi) pj

Distribusi probabilitas di atas dikenal dengan sebutan penyebaran bias (bias of distribution) yaitu penyebaran kemungkinan dari variabel acak yang bernilai 0 dan 1 . Bias dari xi didefinisikan sebagai i pi 12

Amati fakta berikut ini :

0 i1

Pr[Xi = 0] = ½ + i

Pr[Xi = 1] = ½ – i

Proposisi 3.1 Bias variabel acak X1 X2 is 212.

Bukti :

Pr[X1 X2 = 0] = (½ + 1) (½ + 2) + (½ – 1 )( ½ – 2) = 0.5 + 212

Lemma 3.1

Misalkanεi1, i1, …ik adalah bias dari variabel random xi1….xik maka

εi1, i1, …ik = 2 k-1 j=1kεij

B. Pendekatan Linear Terhadap S-Box SPN

S-Box yang digunakan Sir (1 i 4, 1 r 4) dan didefinisikan sebagai fungsi s:{0,1}4{0,1}4. S-Box tersebut dapat dilihat pada Tabel 3.1.

Langkah-langkah mencari pendekatan linear terhadap S-Box algoritma SPN :

1) Akan dicari semua nilai-nilai yang mungkin muncul dari variable random Xi dan Yi dimana Xi adalah input dan Yi adalah output setelah diproses kedalam S-Box. Hasilnya ditampilkan pada Tabel 2.3.

2) Dari S-Box yang ada dimana 1 a 15 dan 1 b 15 didefinisikan Sb(a, b) adalah jumlah input dari 16 kemungkinan input pada Sb, dimana nilai XOR dari bit input yang dioperasikan dengan a disamakan dengan nilai XOR dari bit output yang dioperasikan dengan b dengan rumus:

Sb( a, b ) = # {x0 x 15(⨁i=14( Xi ai)) = (⨁i=14 (Yi b))}

dimana ai{0,1}, bi{0,1}, i=1,2,3,4 , simbol adalah operasi AND pada bit dan # {x} adalah banyaknya x.

Maka akan didapat Tabel distribusi S-Box (16×16) atau Linear Approximation Table (LAT) seperti ditunjukkan pada Tabel 3.5.

tabel LAT

Konstruksi Linier Approximation SPN

Untuk melakukan attack pada SPN dengan tujuan untuk mengekstraksi bit-bit kunci, kita pertama-tama harus membuat suatu trail untuk mendapatkan suatu persamaan yang natinya digunakan untuk melakukan pendekatan linier terhadap struktur SPN. Acuan pendekatan linier ini yaitu dengan menggunakan tabel Linier Approximation (LAT) di atas. Dengan memilih output yang memiliki bias yang paling ekstrim, yakni mejauhi nol atau dengan kata lain yang memiliki probabilitas yang menjauhi setengah. Pada tulisan ini kami menggunakan pendekatan dengan input awal 1010 pada sbox ke 1. Berikut ini skema approximation yang digunakan :

approxSPN

Dari skema di atas maka kita dapatkan persamaan-persamaan dari masing-masing sbox aktif yang digunakan. Adapun sbox-sbox aktif tersebut yaitu

  1. Pada round ke-1, S1,1 , (a,b)= (a,1)
  2. Pada round ke-2, S2,4 , (a,b)= (8,f)
  3. Pada round ke-3, S3,1 , S3,2, S3,3, S3,4 (a,b) = (1,7)

Kemudian pada tiap sbox di atas diperoleh persamaan-persamaan berikut ini :

rumus1

Diasumsikan bahwa keenam persamaan di atas adalah saling bebas (independent). Maka berdasarkan Pilling-up lemma dapat dihitung nilai bias totalnya yaitu ;

rumus2

rumus3

Lalu dengan mensubstitusikan persamaan U dengan nilai (X xor K) pada round ke-1 dan (V xor K) pada round ke-2, dan round ke-3, maka didapatlah persamaan-persamaan seperti di atas. Sekarang

kita jumlahkan persamaan T di atas sehingga menjadi :

rumus4

rumus5

Berdasarkan persamaan terakhir di atas, maka kita dapat menyimpulkan bahwa :

  1. Diperoleh K5 dari hasil XOR y dengan V4
  2. V4 merupakan hasil Sbox U4
  3. Sehingga didapat asumsi 12 bit subkey, yaitu :

rumus6

Ekstraksi Kunci

Pada tahap ini, saya melakukan enkripsi 10.000 (seperti yang Matsui lakukan) plainteks dengan kunci yang sama yaitu 248 (dalam heksadesimal) . Adapun plainteks tersebut merupakan bilangan desimal mulai dari satu sampai dengan 10.000. Berikut ini adalah tabel hasilnya :

tabel-ekstrak1

dari tabel di atas dapat terlihat bahwa ternyata subkunci yang memiliki probabilitas counter terbesar adalah 248 (dalam hexa), dan ternyata ini cocok (match) tiga blok terakhir dari  subkunci kelima yang saya gunakan.

Berikut ini sourcecode yang saya gunakan :

/*

* form.java

*

* Created on Nov 6, 2009, 8:15:40 PM

*/

import javax.swing.JOptionPane;

/**

*

* @author rajip

*/

public class form extends javax.swing.JFrame {

/** Creates new form form */

public form() {

setTitle(“Linier Cryptanalysis on SPN”);

initComponents();

}

/** This method is called from within the constructor to

* initialize the form.

* WARNING: Do NOT modify this code. The content of this method is

* always regenerated by the Form Editor.

*/

@SuppressWarnings(“unchecked”)

// <editor-fold defaultstate=”collapsed” desc=”Generated Code”>//GEN-BEGIN:initComponents

private void initComponents() {

jOptionPane1 = new javax.swing.JOptionPane();

jDialog1 = new javax.swing.JDialog();

jLabel2 = new javax.swing.JLabel();

jScrollPane1 = new javax.swing.JScrollPane();

area = new javax.swing.JTextArea();

jScrollPane2 = new javax.swing.JScrollPane();

des = new javax.swing.JTextArea();

jScrollPane3 = new javax.swing.JScrollPane();

plain = new javax.swing.JTextArea();

jLabel4 = new javax.swing.JLabel();

jLabel5 = new javax.swing.JLabel();

jLabel6 = new javax.swing.JLabel();

jScrollPane4 = new javax.swing.JScrollPane();

keys = new javax.swing.JTextArea();

jScrollPane5 = new javax.swing.JScrollPane();

count = new javax.swing.JTextArea();

javax.swing.GroupLayout jDialog1Layout = new javax.swing.GroupLayout(jDialog1.getContentPane());

jDialog1.getContentPane().setLayout(jDialog1Layout);

jDialog1Layout.setHorizontalGroup(

jDialog1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGap(0, 400, Short.MAX_VALUE)

);

jDialog1Layout.setVerticalGroup(

jDialog1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGap(0, 300, Short.MAX_VALUE)

);

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

addWindowListener(new java.awt.event.WindowAdapter() {

public void windowOpened(java.awt.event.WindowEvent evt) {

formWindowOpened(evt);

}

});

jLabel2.setText(“Plain Text”);

area.setColumns(20);

area.setFont(new java.awt.Font(“Monospaced”, 0, 12));

area.setRows(5);

jScrollPane1.setViewportView(area);

des.setColumns(20);

des.setRows(5);

jScrollPane2.setViewportView(des);

plain.setColumns(20);

plain.setRows(5);

jScrollPane3.setViewportView(plain);

jLabel4.setText(“Candidate Keys”);

jLabel5.setText(“Count”);

jLabel6.setText(“Cipher”);

keys.setColumns(20);

keys.setRows(5);

jScrollPane4.setViewportView(keys);

count.setColumns(20);

count.setRows(5);

jScrollPane5.setViewportView(count);

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());

getContentPane().setLayout(layout);

layout.setHorizontalGroup(

layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(layout.createSequentialGroup()

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(layout.createSequentialGroup()

.addContainerGap()

.addComponent(jScrollPane3, javax.swing.GroupLayout.PREFERRED_SIZE, 69, javax.swing.GroupLayout.PREFERRED_SIZE))

.addGroup(layout.createSequentialGroup()

.addGap(20, 20, 20)

.addComponent(jLabel2)))

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()

.addGap(94, 94, 94)

.addComponent(jLabel6)

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 77, Short.MAX_VALUE)

.addComponent(jLabel4))

.addGroup(layout.createSequentialGroup()

.addGap(27, 27, 27)

.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 59, javax.swing.GroupLayout.PREFERRED_SIZE)

.addGap(39, 39, 39)

.addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 73, javax.swing.GroupLayout.PREFERRED_SIZE)

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)

.addComponent(jScrollPane4, javax.swing.GroupLayout.PREFERRED_SIZE, 73, javax.swing.GroupLayout.PREFERRED_SIZE)))

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)

.addGroup(layout.createSequentialGroup()

.addComponent(jScrollPane5, javax.swing.GroupLayout.PREFERRED_SIZE, 65, javax.swing.GroupLayout.PREFERRED_SIZE)

.addGap(111, 111, 111))

.addGroup(layout.createSequentialGroup()

.addComponent(jLabel5, javax.swing.GroupLayout.PREFERRED_SIZE, 32, javax.swing.GroupLayout.PREFERRED_SIZE)

.addGap(132, 132, 132)))

.addGap(218, 218, 218))

);

layout.setVerticalGroup(

layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()

.addGap(22, 22, 22)

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)

.addComponent(jLabel2)

.addComponent(jLabel6)

.addComponent(jLabel4)

.addComponent(jLabel5))

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addComponent(jScrollPane3, javax.swing.GroupLayout.DEFAULT_SIZE, 251, Short.MAX_VALUE)

.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 251, Short.MAX_VALUE)

.addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 251, Short.MAX_VALUE)

.addComponent(jScrollPane4, javax.swing.GroupLayout.DEFAULT_SIZE, 251, Short.MAX_VALUE)

.addComponent(jScrollPane5, javax.swing.GroupLayout.DEFAULT_SIZE, 251, Short.MAX_VALUE))

.addContainerGap())

);

pack();

}// </editor-fold>//GEN-END:initComponents

private void formWindowOpened(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowOpened

// TODO add your handling code here:

int input;

int cipher[]=new int[10001];

int []map={0,4,8,12,1,5,9,13,2,6,10,14,3,7,11,15};

int[]sbox= {0xe,0x4,0xd,0x1,0x2,0xf,0xb,0x8,0x3,0xa,0x6,0xc,0x5,0x9,0x0,0x7};

int []invsbox={0xe,0x3,0x4,0x8,0x1,0xc,0xa,0xf,0x7,0xd,0x9,0x6,0xb,0x2,0x0,0x7};

int bit[]=new int[16];

int tbit[]=new int[16];

int W[]=new int[5];

int V[]=new int[5];

int U4[]=new int[16];

int uji = 0;

int U[]=new int[5];

int []subkey=new int [5];

int masterkey=0x0248;

int candkey;

int tplain;

int []temp2=new int [4];

int temp3;

int counter []=new int[0x0fff+1];

/*Key schedule */

subkey[0]=masterkey;

for(int k=1;k<5;k++){

subkey[k]=((subkey[k-1]<<4)& 0x0fff0)|(subkey[k-1]>>12);

System.out.println(Integer.toHexString(subkey[k]));

}

input=1;

while(input<=10000){

/*inisialisasi bit input*/

int j=0;

while(j<16){

tbit[j]=input & (1<<(15-j));

if(tbit[j]!=0){

tbit[j]=1;

}

j++;

}

int temp1=input;

int round=0;

while(round<4){

//System.out.println(“Round ke”+(round +1));

// System.out.println();

if(round==3){

//key mixing

U[round]=temp1^subkey[round];

//inisialisasi bit hasil mixing

int n=0;

while(n<16){

bit[n]=U[round] & (1<<(15-n));

if(bit[n]!=0){

bit[n]=0x8;

}

n++;

}

/*Substitution Box*/

for(int m=0;m<4;m++){

temp2[m]=bit[0+4*m]|(bit[1+4*m]>>1)|(bit[2+4*m]>>2)|(bit[3+4*m]>>3);

V[m]=sbox[(int)temp2[m]];

// System.out.print(Integer.toHexString(V[m]));

}

//System.out.println();

temp3=((V[0]<<12)&0xf000)|((V[1]<<8)& 0x0f00)|((V[2]<<4 & 0x00f0))|(V[3]);

cipher[input]=temp3^subkey[4];

}else{

/* Key Mixing */

U[round]=temp1^subkey[round];

//System.out.println(Integer.toHexString(U[round]));

//inisialisasi bit hasil mixing

int n=0;

while(n<16){

bit[n]=U[round] & (1<<(15-n));

if(bit[n]!=0){

bit[n]=0x8;

}

n++;

}

/*Substitution Box*/

for(int m=0;m<4;m++){

temp2[m]=bit[0+4*m]|(bit[1+4*m]>>1)|(bit[2+4*m]>>2)|(bit[3+4*m]>>3);

V[m]=sbox[(int)temp2[m]];

}

temp3=((V[0]<<12)&0xf000)|((V[1]<<8)& 0x0f00)|((V[2]<<4 & 0x00f0))|(V[3]);

/*inisialisasi bit */

int p=0;

while(p<16){

bit[p]=temp3 & (1<<(15-p));

if(bit[p]!=0){

bit[p]=0x8;

}

p++;

}

/*permutasi bit */

for(int i=0;i<4;i++){

W[i]=bit[0+i]|(bit[4+i]>>1)|(bit[8+i]>>2)|(bit[12+i]>>3);

}

temp1=((W[0]<<12)&0xf000)|((W[1]<<8)&0x0f00)|((W[2]<<4)&0x00f0)|(W[3]);

}

round++;

}

input++;

}

for(int z=1;z<=10000;z++){

plain.append(Integer.toHexString(z)+”\n”);

area.append(Integer.toHexString(cipher[z])+”\n”);

des.append(cipher[z]+”\n”);

if(z ==10000){

JOptionPane.showMessageDialog(null,”Nah ini nih hasilnya….\n apakah hasilnya sama dengan” +Integer.toHexString(subkey[4]));

}

}

//ekstraksi kunci

candkey=0;

while(candkey <(0x0fff + 1)){

if(candkey==0x0fff){

JOptionPane.showMessageDialog(null,”Nah tuh dah muncul”);

}

keys.append(Integer.toHexString(candkey)+”\n”);

for(int t=1;t<=10000;t++){

tplain=cipher[t]^candkey;

//inisialisasi bit U4

int p=0;

while(p<16){

bit[p]=tplain & (1<<(15-p));

if(bit[p]!=0){

bit[p]=0x8;

}

p++;

}

//invers sbox

for(int m=0;m<4;m++){

temp2[m]=bit[0+4*m]|(bit[1+4*m]>>1)|(bit[2+4*m]>>2)|(bit[3+4*m]>>3);

V[m]=invsbox[(int)temp2[m]];

}

temp3=((V[0]<<12)&0xf000)|((V[1]<<8)& 0x0f00)|((V[2]<<4 & 0x00f0))|(V[3]);

/*inisialisasi bit input*/

int j=0;

while(j<16){

U4[j]=temp3 & (1<<(15-j));

if(U4[j]!=0){

U4[j]=1;

}

j++;

}

//uji persamaan T

uji=tbit[0]^tbit[2]^U4[4]^U4[5]^U4[6]^U4[7]^U4[8]^U4[9]^U4[10]^U4[11]^U4[12]^U4[13]^U4[14]^U4[15];

// uji=tbit[12]^tbit[15]^U4[1]^U4[2]^U4[3]^U4[5]^U4[6]^U4[7]^U4[9]^U4[10]^U4[11]^U4[13]^U4[14]^U4[15];

if(uji==0){

counter[candkey]++;

}

}

count.append(counter[candkey]+”\n”);

candkey++;

}

}//GEN-LAST:event_formWindowOpened

/**

* @param args the command line arguments

*/

public static void main(String args[]) {

java.awt.EventQueue.invokeLater(new Runnable() {

public void run() {

new form().setVisible(true);

}

});

}

// Variables declaration – do not modify//GEN-BEGIN:variables

private javax.swing.JTextArea area;

private javax.swing.JTextArea count;

private javax.swing.JTextArea des;

private javax.swing.JDialog jDialog1;

private javax.swing.JLabel jLabel2;

private javax.swing.JLabel jLabel4;

private javax.swing.JLabel jLabel5;

private javax.swing.JLabel jLabel6;

private javax.swing.JOptionPane jOptionPane1;

private javax.swing.JScrollPane jScrollPane1;

private javax.swing.JScrollPane jScrollPane2;

private javax.swing.JScrollPane jScrollPane3;

private javax.swing.JScrollPane jScrollPane4;

private javax.swing.JScrollPane jScrollPane5;

private javax.swing.JTextArea keys;

private javax.swing.JTextArea plain;

// End of variables declaration//GEN-END:variables

}

Posted by: Ricky aji | November 9, 2009

Substitution Permutation Network

Pada tulisan ini, saya akan mencoba berbagi pengetahuan saya mengenai SPN, yang merupakan salah satu basic dari tipe algoritma block cipher. Ya, walaupun hanya sedikit gak pa-pa lah ya. Seperti yang digambarkan pada gambar di bawah, SPN merupakan algoritma iterated block cipher 16 bit. Dimana terdapat empat buah subblok yang masing-masing bloknya terdiri dari empat buah bit. Adapun jumlah round-nya adalah empat. Berikut ini komponen operasi yang dilakukan pada SPN secara berturut-turut :

  1. Substitution
  2. Permutation
  3. Key mixing

Substitution

Seperti yang telah disampaikan di atas bahwa dalam SPN terdapat empat subblok yang masing-masing subblok terdiri dari empat bit, maka tiap subblok tersebut dipetakan pada SBOX 4×4. Dengan catatan bahwa SBOX pada SPN itu sama untuk keempat round-nya. SBOX tersebut pada dasarnya merupakan suatu nonlinier mapping. Berikut ini SBOX-nya :

sbox-spn

Permutation

Permutasi pada SPN ini merupakan operasi transposisi dari bit-bit output dari SBOX. Dimana order permutasinya yaitu satu. Adapun bit ke-1 merupakan left-most bit dan bit ke-16 adalah right-most bit. Berikut di bawah ini permutation box yang digunakan :

permBox-SPN

berikut ini skema dari SPN :

spn

Key Mixing

Pada tahap ini, subblok input ke SBOX 4×4 dimana operasi yang digunakan adalah operasi XOR. Operasi ini dapat menghasilkan output yang acak. Operasi XOR dilakukan pada input round dengan subkey dimana subkey-subkey tersebut dibangkitkan dari masterkey pada key-schedule SPN.

Posted by: Ricky aji | November 3, 2009

Desain Embedded Mikrokontroler untuk AES

Dengan menggunakan mikrokontroler dalam menerapkan AES, hal ini akan lebih fleksibel. mengingat bahwa hal tersebut merupakan kelebihan dari pemrograman pada mikrokontroler. Sampai dengan saat ini algoritma AES telah banyak diterapkan menggunakan bahasa assembly pada tiga jenis mikrokontroler seperti Intel 8051, Motorola 68HC08 danAtmel ATMega163 yang merepresentasikan mikrokontroler yang melekat pada smart card. Dalam tulisan ini dibahas mengenai penerapan 8-bit RISC mikrokontroler yang dinamakan AESMPU dimana didalamnya terdapat fungsi AES pada ALu-nya yang meliputi modulo multplikasi, sub-bytes dan inverse sub-bytes.

(untuk lebih jelasnya silahkan DOWNLOAD pdf-nya)

« Newer Posts - Older Posts »

Categories