Rabu, 16 Oktober 2013

ALGORITMA KRIPTOGRAFI KLASIK DAN MODERN


A. Algoritma Kriptografi Modern


1.Pendahuluan

·       Kriptografi modern menggunakan gagasan dasar yang sama seperti kriptografi klasik (permutasi dan transposisi) tetapi penekanannya berbeda.

 

·       Pada kriptografi klasik, kriptografer menggunakan algoritma yang sederhana, yang memungkinkan cipherteks dapat dipecahkan dengan mudah (melalui penggunaan statistik, terkaan, intuisi, dan sebagainya).


·       Algoritma kriptografi modern dibuat sedemikian kompleks sedemikian  sehingga kriptanalis sangat sulit memecahkan cipherteks tanpa mengetahui kunci.


·       Algoritma kriptografi modern umumnya beroperasi dalam mode bit ketimbang mode karakter (seperti yang dilakukan pada cipher substitusi atau cipher transposisi dari algoritma kriptografi klasik).


·       Operasi dalam mode bit berarti semua data dan informasi (baik kunci, plainteks, maupun cipherteks) dinyatakan dalam rangkaian (string) bit biner, 0 dan 1. Algoritma enkripsi dan dekripsi memproses semua data dan informasi dalam bentuk rangkaian bit. Rangkaian  bit yang menyatakan plainteks dienkripsi menjadi cipherteks dalam bentuk rangkaian bit, demikian sebaliknya. 

·       Perkembangan algoritma kriptografi modern berbasis bit didorong oleh penggunaan komputer digital yang merepresentasikan data dalam bentuk biner.


.2   Rangkaian bit


·       Rangkaian bit yang dipecah menjadi blok-blok bit dapat ditulis dalam sejumlah cara bergantung pada panjang blok.

Contoh: Plainteks 100111010110 dibagi menjadi blok bit yang panjangnya 4 menjadi

1001  1101  0110

Setiap blok menyatakan bilangan dari 0 sampai 15, yaitu

          9     13   6
         
Bila plainteks dibagi menjadi blok-blok berukuran 3 bit:

100   111  010   110
           
          maka setiap blok menyatakan bilangan dari 0 sampai 7, yaitu

                   4      7     2     6


·       Bila panjang rangkaian bit tidak habis dibagi dengan ukuran blok yang ditetapkan, maka blok yang terakhir ditambah dengan bit-bit semu yang disebut  padding bits.
Misalnya rangkaian bit di atas dibagi menjadi blok 5-bit menjadi

10011  10101 00010

Blok yang terakhir telah ditambahkan 3 bit 0 di bagian awal (dicetak tebal) agar ukurannya menjadi 5 bit. Padding bits dapat mengakibatkan ukuran plainteks hasil dekripsi lebih besar daripada ukuran plainteks semula.

·       Cara lain untuk menyatakan rangkaian bit adalah dengan notasi heksadesimal (HEX). Rangkaian bit dibagi menjadi blok yang berukuran 4 bit dengan representasi dalam HEX adalah:

0000 = 0  0001 = 1 0010 = 2  0011 = 3
0100 = 4  0101 = 5 0011 = 6  0111 = 7
1000 = 8  1011 = 9 1010 = A  1011 = B
1100 = C  1101 = D 1101 = E   1111 = F



Misalnya, plainteks 100111010110 dibagi menjadi blok bit yang panjangnya 4 menjadi

1001  1101  0110

yang dalam notasi HEX adalah

          9 D 6


Operator XOR

·       Operator biner yang sering digunakan dalam cipher yang yang beroperasi dalam mode bit adalah XOR atau exclusive-or.

·       Notasi matematis untuk operator XOR adalah Å (dalam Bahasa C, operator XORdilambangkan dengan ^).

·       Operator XOR diperasikan pada dua bit dengan aturan sebagai berikut:

Å 0 = 0
Å 1 = 1
Å 0 = 1
Å 1 = 0

Perhatikan bahwa operator XOR identik dengan penjumlahan modulo 2:

0 + 0 (mod 2) = 0
0 + 1 (mod 2) = 1
1 + 0 (mod 2) = 1
1 + 1 (mod 2) = 0

·       Misalkan ab, dan c adalah peubah Boolean. Hukum-hukum yang terkait dengan operator XOR:

          (i)   a  Å a = 0                                
          (ii)  a Å b = b Å a                           (Hukum komutatif)
                   (iii) a Å (b Å c) = (a Å bÅ c       (Hukum asosiatif)

·       Jika dua rangkaian dioperasikan dengan XOR, maka operasinya dilakukan dengan meng-XOR-kan setiap bit yang berkoresponden dari kedua rangkaian bit tersebut.

Contoh: 10011 Å 11001 = 01010
yang dalam hal ini, hasilnya diperoleh sebagai berikut:

                   1          0         0        1         1        
                   1          1         0        0         1    Å
               1 Å 1   0 Å 1  0 Å 0  1Å 0  1 Å 1    
                   0         1          0       1         0

·       Algoritma enkripsi sederhana yang menggunakan XOR adalah dengan meng-XOR-kan plainteks (P) dengan kunci (K) menghasilkan cipherteks:

C =  P Å K                                      

Karena meng-XOR-kan nilai yang sama dua kali berturut-turut menghasilkan nilai semula, maka dekripsi menggunakan persamaan:

                   P = C Å K                                                



Contoh:      plainteks              01100101             (karakter ‘e’)
                   kunci                    00110101   Å       (karakter ‘5’)
 

                   cipherteks            01010000             (karakter ‘P’)
                   kunci                    00110101   Å       (karakter ‘5’)
         
          plainteks              01100101             (karakter ‘e’)


·               Algoritma enkripsi XOR sederhana pada prinsipnya sama seperti Vigenere cipherdengan penggunaan kunci yang berulang secara periodik. Setiap bit plainteks di-XOR-kan dengan setiap bit kunci.


/* Enkripsi berkas teks dengan
   algoritma XOR sederhana.
   Berkas plainteks: plain.txt
   Berkas cipherteks: cipher.txt
*/

#include

main()
{
 FILE *Fin, *Fout;
 char P, C, K[20];
 int n, i;

 Fin = fopen("plain.txt", "r");
 Fout = fopen("cipher.txt", "w");

 printf("Kata kunci : "); gets(K);
 n = strlen(K); /*panjang kunci*/
 i = 0;
 while ((P = getc(Fin)) != EOF)
 {
  C = P ^ K[i]; /* operasi XOR */
  putc(C, Fout); 
  i++; if (i > n-1) i = 0;
 }
 fclose(Fin);
 fclose(Fout);


/* Dekripsi berkas teks dengan
   algoritma XOR sederhana.
   Berkas plainteks: cipher.txt
   Berkas cipherteks: plain2.txt
*/

#include

main()
{
 FILE *Fin, *Fout;
 char P, C, K[20];
 int n, i;

 Fin = fopen("cipher.txt", "r");
 Fout = fopen("plain2.txt", "w");

 printf("Kata kunci : "); gets(K);
 n = strlen(K); /*panjang kunci*/
 i = 0;
 while ((C = getc(Fout)) != EOF)
 {
  P = C ^ K[i]; /* operasi XOR */
  putc(P, Fout ); 
  i++; if (i > n-1) i = 0;
 }
  fclose(Fin);
 fclose(Fout);


enk_xor.c                      dek_xor.c


Contoh hasil eksekusi program (Kata kunci: ganesha):


Pada wisuda sarjana baru, ternyata ada seorang wisudawan yang paling muda. Umurnya baru 21 tahun. Ini berarti dia masuk ITB pada umur 17 tahun.  Zaman sekarang banyak
sarjana masih berusia muda belia.


7  
S­  
S
  H
IS

      Ao

[1]S­


    G
H
H
KS=
b
EAYAFA.E

S
A

G(:'y
N‑GPYE           @ES2
E  
H

b

   A

H
[1]  A

S   
  K

plain.txt                      cipher.txt


·             Program komersil yang berbasis DOS atau Macintosh menggunakan algoritmaXOR sederhana ini.

·             Sayangnya, algoritma XOR sederhana tidak aman karena cipherteksnya mudah dipecahkan.

Cara memecahkannya adalah sebagai berikut (asumsi: panjang kunci adalah sejumlah kecil byte):
1.    Cari panjang kunci dengan prosedur counting coincidence sbb: XOR-kan cipherteks terhadap dirinya sendiri setelah digeser sejumlah byte, dan hitung jumlah byte yang sama. Jika pergeseran itu kelipatan dari panjang kunci (yang tidak diketahui), maka 6% dari byte akan sama. Jika tidak, maka 0.4% akan sama. Angka persentase ini disebut index of coincidence. Pergeseran terkecil mengindikasikan panjang kunci yang dicari.


2.    Geser cipherteks sejauh panjang kunci dan XOR-kan dengan dirinya sendiri. Operasi ini menghasilkan plainteks yang ter-XOR dengan plainteks yang digeser sejauh panjang kunci tersebut.




B. ALGORITMA KRIPTOGRAFI KLASIK
Algoritma kriptografi klasik berbasis karakter
nMenggunakan pena dan kertas saja, belum ada komputernTermasuk ke dalam kriptografi kunci-simetrinTiga alasan mempelajari algoritma klasik:
nContoh: Caesar Cipher
nTiap huruf alfabet digeser 3 huruf ke kanan 
nContoh: 

Cipher Substitusi




1. Memahami konsep dasar kriptografi.
2. Dasar algoritma kriptografi modern.
3. Memahami kelemahan sistem cipher.
Algoritma kriptografi klasik:
1. Cipher Substitusi (Substitution Ciphers)
   pi : A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
2.Cipher Transposisi (Transposition Ciphers)
  ci            DE F G H I J K L M N O P Q R S T U V W X Y Z A B C
  Plainteks     :   AWASI ASTERIX DAN TEMANNYA OBELIX
  Cipherteks    :   DZDVL DVWHULA GDQ WHPDQQBA REHOLA
nDalam praktek, cipherteks dikelompokkan ke dalam kelompok n-huruf, misalnya kelompok 4-huruf:
n
Atau membuang semua spasi:
n
Tujuannya agar kriptanalisis menjadi lebih sulit
DZDV LDVW HULA GDQW HPDQ QBAR EHOL A 
DZDVLDVWHULAGDQWHPDQQBAREHOLA  

Misalkan A = 0, B = 1, …, Z = 25, maka secara matematis caesar cipher dirumuskan sebagai   berikut:
  Enkripsi: ci E(pi) = (pi + 3) mod 26
  Dekripsi: pi = D(ci) = (ci – 3) mod 26 
nJika pergeseran huruf sejauh k, maka:
 
  Enkripsi: ci E(pi) = (pi k) mod 26
  Dekripsi: pi = D(ci) = (ci – k) mod 26
  k = kunci rahasia
nUntuk 256 karakter ASCII, maka:
 
  Enkripsi: ci E(pi) = (pi k) mod 256
  Dekripsi: pi = D(ci) = (ci – k) mod 256
  k = kunci rahasia


/* Program enkripsi file dengan Caesar cipher */
#include
 
main(int argc, char *argv[])
{
 FILE *Fin, *Fout;
 char p, c;
 int k;
 
 Fin = fopen(argv[1], "rb");
 if (Fin == NULL)
   printf("Kesalahan dalam membuka %s sebagai berkas masukan/n",  argv[1]);   
 Fout = fopen(argv[2], "wb"); 
 printf("\nEnkripsi %s menjadi %s ...\n", argv[1], argv[2]);
 printf("\n");
 printf("k : ");
 scanf("%d", &k); 
 while ((p = getc(Fin)) != EOF)
 {
  c = (p + k) % 256;
  putc(c, Fout); 
 }
 
 fclose(Fin);
 fclose(Fout);
        }   

/* Program dekripsi file dengan Caesar cipher */
 
#include
 
main(int argc, char *argv[])
{
 FILE *Fin, *Fout;
 char p, c;
 int n, i, k;
 
 Fin = fopen(argv[1], "rb");
 if (Fin == NULL)
   printf("Kesalahan dalam membuka %s sebagai berkas masukan/n",  argv[1]);   
 Fout = fopen(argv[2], "wb"); 
 printf("\nDekripsi %s menjadi %s ...\n", argv[1], argv[2]);
 printf("\n");
 printf("k : ");
 scanf("%d", &k); 
 while ((c = getc(Fin)) != EOF)
 {
  p = (c - k) % 256;
  putc(p, Fout); 
 }
  fclose(Fin);
 fclose(Fout);
        }

sumber :http://amilul.blogspot.com/2012/11/algoritma-kriptografi-klasik-dan-modern.html

0 komentar: