Rabu, 27 Februari 2013

I. 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 dangan mudah (melalui penggunaan statistik, terkaan, intuisi, dsb). Algoritma kriptografi modern dibuat sedemikian kompleks sedemikian sehingga kriptanalis sangat sulit memecahkan cipherteks tanpa mengetahui kunci. Perkembangan algoritma kriptografi modern didorong oleh penggunaan komputer digital untuk keamanan pesan.

II. MODERN CRYPTOGRAPHY

A.  KOMPETENSI
Setelah mempelajari pokok bahasan ini mahasiswa dapat:
a. mengetahui dan memahami konsep dasar kriptografi modern
b. Mampu mengaplikasikan algoritma kriptografi modern.
c. melakukan komunikasi dengan cara saling mengirimkan pesan yang sudah tersandikan menggunakan metode yang terdapat pada kriptografi modern

B.  URAIAN MATERI

Algoritma kriptografi klasik modern umumnya beroperasi dalam mode karakter , sedangkan kriptografi modern beroperasi pada mode bit. 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.
    Muara  dari kriptografi modern adalah menyediakan keamanan pesan  di dalam jaringan computer.

Gambar 5.1. Diagram Blok Kriptografi Modern

1.  Rangkaian Bit Dan Operasinya
    Pada umumnya algoritma kriptografi modern memproses data dalam bentuk blok-blok rangkaian bit yang dipecahkan menjadi blok-blok bit dapat ditulis dalam sejumlah cara bergantung pada panjang blok.
Contoh :  Plainteks 100111010110
        Bila dibagi menjadi blok 4-bit
         1001  1101  0110
        maka setiap blok menyatakan 0 sampai 15:
         9      13     6
Bila plainteks dibagi menjadi blok 3-bit:
         100   111  010   110
    maka setiap blok menyatakan 0 sampai 7:
          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: bit-bit tambahan jika ukuran blok terakhir tidak mencukupi panjang blok
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 agar ukurannya menjadi 5 bit. Padding bits dapat mengakibatkan ukuran cipherteks hasil enkripsi lebih panjang 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     1110 = E    1111 = F
Contoh    :  plainteks 111001010001 dibagi menjadi blok 4-bit:
         1110 0101 0001
      dalam notasi HEX adalah
          E 5 1
Operasi biner yang sering digunakan dalam cipher yang beroperasi dalam mode bit adalah XOR. Notasi matematis untuk operator XOR adalah Å. Operator XOR dioperasikan pada dua bit dengan aturan sebagai berikut :
0 Å 0 = 0
        0 Å 1 = 1
        1 Å 0 = 1
1 Å 1 = 0
Perhatikan bahwa operator XOR identik dengan penjumlahan modulo 2:
     0 Å 0 = 0   Û  0 + 0 (mod 2) = 0
     0 Å 1 = 1   Û 0 + 1 (mod 2) = 1
     1 Å 0 = 1   Û  0 + 1 (mod 2) = 1
     1 Å 1 = 1   Û 1 + 1 (mod 2) = 0
Hukum-hukum yang terkait dengan operator XOR:
     (i)   a  Å a = 0               
    (ii)  a Å b = b Å a    
(iii) a Å (b Å c) = (a Å b) Å c
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
   
2.     Algoritma Enkripsi Dengan XOR Sederhana
    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 cipher dengan penggunaan kunci yang berulang secara periodik. Setiap bit plainteks di-XOR-kan dengan setiap bit kunci.
Program komersil yang berbasis DOS atau Macintosh menggunakan algoritma XOR sederhana ini. Sayangnya, algoritma XOR sederhana tidak aman karena cipherteksnya mudah dipecahkan. Cara memecahkannya adalah sebagai berikut :
1. Cari panjang kunci dengan prosedur counting coincidence sbb : XOR-kan cipherteks terhadap dirinya sendiri setelah digeser sejumlah byte, dan hitunglah 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.

3.  Kriptografi Modern
    Kriptografi modern dapat memecahkan masalah algoritma rahasia yaitu dengan algoritma kunci. Kunci ini dapat berupa sembarang dari suatu nilai dari sejumlah angka. Dengan demikian tingkat keamanan dari algoritma yang menggunakan kunci adalah berdasarkan kerahasiaan kuncinya, tidak berdasarkan detail dari algoritma itu sendiri. Oleh karena itu algoritma ini dapat dapat dipublikasikan dan dianalisa, dan algoritma ini dapat diproduksi secara masal. Secara umum ada dua tipe algoritma yang termasuk dalam algoritma modern yaitu algoritma simetris (simetric algorithm) dan algoritma kunci publik (public-key algorithm). Perbedaan utama antara Symetric algorithm dengan public-key algoritm adalah pada kunci enkripsi. Selain itu juga terdapat perbedaan dalam kecepatan proses dan keamananya. K1 dan kunci dekripsi K2
Berikut ini bagan suatu sistem penyandian berdasarkan kunci beserta contoh-contoh algoritma yang digunakan.

Gambar 5.2. Blok Diagram Pembagian sistem Kriptografi
Berdasarkan Kunci


3.1.  Kriptografi Kunci Simetri
    Algoritma kunci-simetri mengacu pada metode enkripsi yang dalam hal ini pengirim maupun penerima memiliki kunci yang sama. Algoritma kunci-simetri modern beroperasi dalam mode bit dan dapat dikelompokkan menjadi dua kategori:
1. Cipher aliran (stream cipher)
2. Cipher blok(block cipher)

3.1.1.  Stream Cipher
  Algoritma kiptografi beroperasi pada plainteks/cipherteks dalam bentuk bit tunggal, yang dalam hal ini rangkaian bit dienkripsikan/didekripsikan bit per bit. Cipher aliran mengenkripsi satu bit setiap kali tranformasi atau byte per byte (1 karakter = 1 byte). Nama lain untuk cipher stream adalah cipher status sebab enkripsi tiap bit bergantung pada status saat ini (current state).
Cipher aliran pertama kali diperkenalkan oleh Vernam melalui algoritmanya yang dikenal dengan nama Vernam cipher. Vernam cipher diadopsi dari one-time pad cipher, yang dalam hal ini karakter diganti dengan bit (0 dan 1). Cipherteks diperoleh dengan melakukan penjumlahan modulo 2 satu bit plainteks dengan satu bit kunci.
ci = (pi + ki) mod 2
Yang dalam hal ini :
    pi : bit plainteks
    ki : bit kunci
    ci : bit cipherteks.
Plainteks diperoleh dengan melakukan penjumlahan modulo 2 satu bit cipherteks dengan satu bit kunci :
pi = (ci + ki) mod 2
oleh karena itu kita dapat menyatakan bahwa cipher aliran merupakan aproksimasi dari unbreakable cipher yaitu on-time pad cipher
Mengingat operasi penjumlahan modulo 2 identik dengan operasi bit dengan operator XOR, maka pada cipher aliran, bit hanya mempunyai dua buah nilai, sehingga proses enkripsi hanya menyebabkan dua keadaan pada bit tersebut : berubah atau tidak berubah. Dua keadaan tersebut ditentukan oleh kunci enkripsi yang disebut aliran kunci (keystream). Aliran kunci dibangkitkan dari sebuah pembangkit yang dinamakan pembangkit aliran-kunci (keystream generator). Aliran  kunci di XOR-kan dengan aliran bit-bit plainteks pi, p2, …,pi, untuk menghasilkan aliran bit-bit cipherteks.
    ci = pi  ki
disisi penerima, bit-bit cipherteks di XOR-kan dengan aliran kunci yang sama untuk menghasilkan bit-bit plainteks :
    pi = ci  ki
Contoh :
    Plainteks     :   1100101
    Aliran kunci    :   1000110
Maka cipherteks didapatkan dengan meng-XOR-kan bit-bit plainteks dengan aliran kunci pada posisi yang berkoresponden, sehinga didapatkan :
0100011
Contoh Algoritma yang beroperasi dalam bentk Stream Cipher yaitu :
1).     RC 4 (ARCFOUR)
RC4  adalah cipher aliran yang digunakan secara luas pada sistem keamanan seperti protokol SSL ( Secure Socket Layer ). Algoritma kriptografi ini sederhana dan mudah diimplementasikan. RC4 dibuat oleh Ron Rivers dari Laboratorium RSA (RC adalah singkatan dari Ron’s Code).
RC4 membangkitkan  aliran kunci (keystream) yang kemudian di-XOR-kan dengan plainteks pada waktu enkripsi (atau di-XOR-kan dengan bit-bit cipherteks pada waktu dekripsi). Tidak seperti cipher aliran yang memproses data dalam bit, RC4 memproses data dalam ukuran byte (1 byte = 8 bit). Untuk membangkitkan aliran kunci, cipher menggunakan status internal yang terdiri dari 2 bagian :
Permutasi angka 0 sampai 255 didalam larik S0, S1,…, S255. Permutasi merupakan fungsi dari kunci U dengan panjang variable.
Dua buah pencacah indeks, i, dan j.
Langkah algoritma RC4 adalah sebagai berikut :
1. Inisialisasi larik S sehingga S0 = 0, S1 = 1, …, S255 = 255
2. Jika panjang kunci U <  256, lakukan padding yaitu penambahan byte semua sehingga panjang kunci menjadi 256 byte. Misalnya U = “abc” yang hanya terdiri 3 byte (3 huruf), maka lakukan padding dengan penambahan byte (huruf) semu, misalnya U = “abcabcabc…” sampai panjang U mencapai 256 byte.
3. Lakukan permutasi terhadap nilai-nilai di dalam larik S dengan cara menukarkan isi larik S[ I ] denganS[ j ]
4. Bangkitkan aliran kunci (keystream) dan lakukan enkripsi.
Proses pembangkitan aliran kunci K dipilih dengan mengambil nilai S[i] dan S[j] dan menjumlahkannya dalam modulo 256. Hasil penjumlahan adalah indeks t sedemikian sehingga S[t] menjadi kunci aliran K yang kemudian digunakan untuk mengenkripsi plainteks ke-idx.
Karena karakter-karakter kunci di-copy bebrulang-ulang maka ada kemungkinan nilai-nilai di dalam larik S ada yang sama. RC4 juga mudah diserang dengan known-plaintext attack jika kriptanalis mengetahui beberapa buah plainteks dan cipherteks yan berkoresponden.
  
2).     A5
A5 adalah cipher aliran yang digunakan untuk mengenkripsi transmisi sinyal percakapan dari standard telepon seluler GSM(Group Special Mobile). Sinyal GSM dikirim sebagai barisan frame. Satu frame panjangnya 228 bit dan dikirim setiap 4,6 milidetik. A5 digunakan untuk menghasilkan aliran-kunci 228 bit yang kemudian di XOR-kan dengan frame. Kunci eksternal panjangnya 64 bit.
A5 terdiri dari 3 buah LFSR yang masing-masing panjangnya 19, 22, dan 23 bit (jumlah seluruhnya 19 + 22 + 23 = 64). Bit-bit di dalam register diindeks dimana bit paling tidak penting (LSB) diindeks dengan 0 (elemen paling kanan). Luaran (output) dari A5 adalah hasil XOR dari ketiga buah LFSR ini. A5 mengunakan tiga buah kendali detak (clock) yang variable. Tiap register didetak berdasarkan bit pertengahannya.
( i )  register 1 mempunyai kendali detak pada bit 8. Bit-bit pendetakannya adalah pada bit 13, 16, 17, dan 18
( ii )     register 2 mempunyai kendali detak pada bit 10. Bit-bit pendetakannya adalah pada bit 20, dan 21
(iii)    register 3 mempunyai kendali detak pada bit 10. Bit-bit pendetakannya adalah pada bit 7, 20, 21, dan 22.
Register didetak dalam mode stop atau go dengan menggunakan kaidah mayoritas. Pada tiap putaran (seluruhnya 64 putaran). bit-bit pendetakan dari ketiga register diperiksa dan mayoritasnya ditentukan. Sebuah register didetak jika bit kendali detaknya sama dengan bit mayoritas. Biasanya pada setiap putaran 2 atau 3 buah register didetak. Selama 64 putaran 64 bit kunci rahasia dicampur berdasarkan skema berikut : pada putaran 0 ≤ i < 64, bit kunci ke-i ditambahkan ke bit LSB dari setiap register dengan mengunakan XOR :
    R[0] = R[0]  K[i]
Cipher menghasilkan keystream yang panjangnya 228 bit untuk kemudian dienkripsi dengan setiap frame.

3.1.2.  Blok Cipher
    Algoritma kriptografi beroperasi pada plainteks/cipherteks dalam bentuk blok bit, yang dalam hal ini rangkaian bit dibagi menjadi blok-blok bit yang panjangnya sudah ditentukan sebelumnya. Misalnya panjang blok adalah 64 bit, maka itu berarti algoritma enkripsi memerlukan 8 karakter setiap kali enkripsi (1 karakter = 8 bit dalam pengkodean ASCII). Cipher blok mengenkripsi satu blok bit setiap kali.
Pada ciphaer blok, rangkaian bit-bit plainteks dibagi menjadi blok-blok bit dengan panjang sama, biasanya 64 bit (tapi adakalanya lebih). Algoritma enkripsi menghasilkan blok cipherteks yang – pada kebanyakan sistem kriptografi simetri – berukuran sama dengan blok plainteks.
Dengan blok cipher, blok plainteks yang sama akan dienkripsi menjadi blok cipherteks yang sama bila digunakan kunci yang sama pula. Ini berbeda dengan cipher aliran dimana bit-bit plainteks yang sama akan dienkripsi menjadi bit-bit cipherteks yang berbeda setiap kali dienkripsi.
Misalkan blok plainteks (P) yang berukuran m bit dinyatakan sebagai vektor
P = (p1, p2, …, pm)
yang dalam hal ini pi adalah 0 atau 1 untuk i = 1, 2, …, m, dan blok cipherteks (C) adalah
C = (c1, c2, …, cm)
yang dalam hal ini ci adalah 0 atau 1 untuk i = 1, 2, …, m.
Bila plainteks dibagi menjadi n buah blok, barisan blok-blok plainteks dinyatakan sebagai
(P1, P2, …, Pn)
Untuk setiap blok plainteks Pi, bit-bit penyusunnya dapat dinyatakan sebagai vektor
Pi = (pi1, pi2, …, pim)
Enkripsi dan dekripsi dengan kunci K dinyatakan berturut-turut dengan persamaan
EK(P) = C
untuk enkripsi, dan
DK(C) = P
Fungsi E haruslah fungsi yang berkoresponden satu-ke-satu, sehingga
E-1 = D
Beberapa mode operasi dapat diterapkan untuk melakukan enkripsi terhadap keseluruhan blok plainteks. Empat mode operasi yang lazim diterapkan pada system blok cipher adalah:
1. Electronic code Book (ECB)
2. Cipher Block Chaining (CBC)
3. Cipher Feedback (CFB)
4. Output Feedback (OFB)

1).   Electronic Code Book (ECB)
Pada mode ini, setiap blok plainteks pi, dienkripsi secara individual dan independen menjadi blok cipherteks ci. Secara matematis, enkripsi dengan mode ECB dinyatakan sebagai :
        Ci = Ek ( Pi )
Dan dekripsi sebagai
        Pi = Dk ( Ci )
Yang dalam hal ini, K adalah kunci dan Pi dan Ci masing-masing blok plainteks dan cipherteks ke-i.
Pada mode operasi ECB sebuah blok input plaintext dipetakan secara statis ke sebuah blok output ciphertext. Sehingga tiap plaintext yang sama akan menghasilkan ciphertext yang selalu sama pula. Sifat- sifat dari mode operasi ECB :
Sederhana dan efisien
Memungkinkan implementasi parallel
Tidak menyembunyikan pola plaintext
Dimungkinkan terjadi adanya active attack.
Skema dari mode operasi ECB dapat digambarkan sebagai berikut :

    Sender        Receiver







Gambar 5.2.  Skema Mode Operasi ECB
Istilah “code book” di dalam ECB muncul dari fakta bahwa karena blok plainteks yang sama selalu dienkripsi menjadi blok cipherteks yang sama, maka secara teoritis dimungkinkan membuat buku kode plainteks dari cipherteks yang berkoresponden. Namun semakin besar ukuran blok, semakin besar pula ukuran buku kodenya. Misalkan jika blok berukuran 64 bit, maka buku kode terdiri dari 264 – 1 buah kode (entry), yang berarti terlalu besar untuk disimpan. Lagipula setiap kunci mempunyai buku kode yang berbeda.
Contoh :
    Plainteks dalam biner     :   10100010001110101001
    Bagi plainteks menjadi blok yang berukuran 4 bit :  1010  0010  0011  1010  1001
Atau dalam notasi HEX adalah A23A9. Misalkan kunci (K) yang digunakan adalah (panjangnya juga 4 bit) yaitu :  1011  atau dalam HEX adalah B

Misalkan fungsi enkripsi E yang sederhana (tetapi lemah) adalah dengan meng-XOR-kan blok plainteks Pi dengan K, kemudian geser secara wraping bit-bit dari pi  K satu posisi ke kiri. Proses enkripsi untuk setiap blok digambarkan sebaai berikut :
                        1010   0010   0011   1010   1001
                        1011   1011   1011   1011   1011 
        Hasil XOR            0001   1001   1000   0001   0010
        Geser 1 bit kekiri        0010   0011   0001   0010   0100 
                Dalam notasi HEX          2     3     1    2    4   
Jadi hasil enkripsi plainteks
    10100010001110101001       (A23A9 dalam notasi HEX)
Adalah
    00100011000100100100    (23124 dalam notasi HEX)

Keuntungan Mode ECB
Karena tiap blok plainteks dienkripsi secara independen, maka kita tidak perlu mengenkripsi file secara linier. Kita dapat mengenkripsi 5 blok pertama, kemudian blok-blok di akhir, dan kembali ke blok-blok di tengah dan seterusnya.
Mode ECB cocok untuk mengenkripsi arsip (file) yang diakses secara acak, misalnya arsip-arsip basisdata. Jika basisdata dienkripsi dengan mode ECB, maka sembarang record dapat dienkripsi atau didekripsi secara indepen dari record lainnya (dengan asumsi setiap record terdiri dari sejumlah blok diskrit yang sama banyaknya).
Jika mode ECB dikerjakan dengan prosesor parallel, maka setiap prosesor dapat melakukan enkripsi atau deskripsi blok plainteks yang berbeda-beda.
Jika satu atau lebih bit pada blok cipherteks mengalami kesalahan, maka kesalahan ini hanya mempengaruhi cipherteks yang besangkutan pada waktu deskripsi. Blok –blok cipherteks lainnya bila deskripsi tidak terpengaruh oleh kesalahan bit cipherteks tersebut.
    Kelemahan ECB
Karena bagian plainteks sering berulang, maka hasil enkripsinya menghasilkan blok cipherteks yang sama. Di dalam e-mail pesan sering mengandung bagian yang redundan seperti string 0 atau spasi yang panjang, yang bila dienkripsi maka akan menghasilkan pola-pola cipherteks ang mudah dipecahkan dengan serangan yang berbasis statistic. Selain itu e-mail mempunyai struktur yang teratur yang menimbulkan pola-pola yang khas dalam cipherteksnya.
Pihak lawan dapat memanipulasi cipherteks unuk “membodohi atau mengelabui penerima pesan. Manipulasi misalnya dengan menghapus beberapa buah blok atau menyisikan beberapa buah blok cipherteks baru.
Untuk mengatasi kelemahan ini adalah :
menggunakan ukuran blok yang besar, misalnya 64 bit, sebab ukuran blok yang besar dapat menghilangkan kemungkinan menghasilkan blok-blok yang identik.
Mengatur enkripsi tiap blok individual bergantung pada semua blok-blok sebelumnya. Dengan cara ini blok plainteks yang identik akan menghasilkan blok cipherteks yang berbeda, dan manipulasi cipherteks mungkin menghasilkan pesan hasil dekripsi yang tidak mempunyai makna.
2).    Cipher Block Chaining (CBC)
Pada mode oparasi ini hasil enkripsi dari blok sebelumnya mempengaruhi hasil enkripsi selanjutnya, atau enkripsi sebelumnya menjadi feedback pada enkripsi blok saat itu., jadi tiap blok ciphertext bergantung bukan hanya pada blok plaintext-nya tapi bergantung pula pada blok-blok plaintext sebelumnya. Sehingga untuk plaintext yang sama, belum tentu menghasilkan ciphertext yang sama pula.


Skema dari mode operasi CBC dapat digambarkan sebagai berikut :


                 Sender                                                                     Receiver














    Gambar 5.3.  Skema Mode Operasi CBC.
Mula-mula sebelum si pengirim hendak mengirimkan pesannya kepada si penerima, dia terlebih dahulu harus meng-XOR plaintext dengan IV (initialization vector) baru kemudian dienkripsi, setelah itu baru dikirimkan ciphertext pertamanya kepada si penerima. Plaintext ke-2 pun demikian, harus di-XOR terlebih dahulu dengan ciphertext sebelumnya sebelum mengalami proses enkripsi baru kemudian dikirimkan ke si penerima sebagai ciphertext 2 dan seterusnya.
Sifat-sifat dari mode operasi CBC :
Lebih aman dari active attacks dibandingkan mode operasi ECB
Error pada satu ciphertext dapat berakibat parah
Menutupi pola plaintext
Secara matematis enkripsi dan dekripsi dengan mode CBC dinyatakan sebagai :
        Ci = EK ( Pi  Ci-1)
        Pi = DK ( Ci  Ci-1)   
Pada enkripsi blok pertama C0 = IV (initialization vector). IV diberikan oleh pengguna atau dibangkitkan secara acak oleh program. Jadi untu menghasilkan blok cipherteks pertama (Ci), IV digunakan untuk menggantikan blok cipherteks sebelumnya C0. Sebaliknya pada dekripsi, blok plainteks pertama dieroleh den cara meng-XOR-kan IV dengan hasil dekripsi terhadap blok cipherteks pertama. IV tidak perlu rahasia.
Contoh :
        Plainteks  :   10100010001110101001
        Bagi plainteks menjadi blok-blok yang berukuran 4 bit :
            1010  0010  0011  1010  1001
Atau dalam notasi HEX adalah A23A9. Misalkan kunci (K) yang digunakan adalah (panjangnya juga 4 bit)
        1011
Atau dalam notasi HEX adalah B. sedangkan IV yang digunakan seuruhnya bit 0 (Jadi, C0 = 0000). Misalkan fungsi enkripsi E yang sederhana adalah dengan meng-XOR-kan blok plainteks Pi dengan K, kemudian geser secara wrapping bit-bit dari Pi  K satu posisi ke kiri.
C1 diperoleh dari :
    P1  C0 = 1010   0000  =  1010
    Enkripsi hasil ini dengan fungsi E sebagai berikut :
    1010  K = 1010  1011  =  0001
    Geser hasil ini satu bit kekiri =  0010
    Jajdi C1 = 0010  (atau 2 dalam HEX)
   
C2 diperoleh dari :
    P2  C1 = 0010   0010  =  0000
    Enkripsi hasil ini dengan fungsi E sebagai berikut :
    0000  K = 0000  1011  =  1011
    Geser hasil ini satu bit kekiri =  0111
    Jajdi C2 = 0111  (atau 7 dalam HEX)

C3 diperoleh dari :
    P3  C2 = 0011   0111  =  0100
    Enkripsi hasil ini dengan fungsi E sebagai berikut :
    0100  K = 0100  1011  =  1111
    Geser hasil ini satu bit kekiri =  1111
    Jajdi C3 = 1111  (atau F dalam HEX)

Sehingga untuk : Plainteks              :  A23A9
           Cipehrteks (mode ECB)    :  23124
           Cipherteks (mode CBC)    :  27FBF   
Terlihat pada mode CBC pada plainteks A dienkripsikan dengan cipher yang berbeda yaitu 2 dan B.
Keuntungan Mode CBC
Karena blok-blok plainteks yang sama tidak menghasilkan blok-blok cipherteks yang sama, maka menyebabkan kriptanalis menjadi lebih sulit
Kelemahan Mode CBC
Karena blok cipherteks yang dihasikan selama proses enkripsi bergantung pada blok –blok cipherteks sebelumnya, maka kesalahan sat bit pada sebuah blok plainteks akan merambat pada blok cipherteks yang berkoresponden dan semua blok cipherteks berikutnya.
Kesalahan bit cipheteks biasanya terjadi karena adanya gangguan saluran komunikasi data selama transmisi atau malfunction pada media penyimpanan.
Persoalan Keamanan Yang Muncul Pada Mode CBC
Karena blok cipher mempengaruhi blok-blok berikutnya, pihak lawan dapat menambahkan blok cipherteks tambahan pada akhir pesan terenkripsi tanpa terdeteksi.
Pihak lawan dapat mengubah cipherteks, misalnya mengubah sebuah bit pada suatu blok cipherteks.

3).    Cipher Feed Back (CFB)
Jika mode CBC yang diterapkan untuk transmisi data, maka enkripsi tidak dapat dilakukan bila blok plainteks yang diterima belm lengkap. Misalnya bila pengiriman data dilakukan setiap kali karakter di-enter dari terminal computer ke host. Pada mode CFB data dienkripsikan dalam unit yang lebih kecil daripada ukuran blok. Unit yang dienkripsikan dapat berupa bit per bit, 2 bit, 3 bit, dst. Bila unit yang dienkripsikan satu karakter setiap kalinya, maka mode CFB-nya disebut CFB 8-bit.
Secara umum CFB p-bit mengenkripsi plainteks sebanyak p bit setiap kalinya, yang dalam hal ini mana p ≤ n (n = ukuran blok). Dengan kata lain , CFB mengenkripsi cipher blok sepeprti pada cipher aliran. Mode CFB membutuhkan sebuah antrian queue yang berukuran sama dengan ukuran blok masukan. Tinjau mode CFB 8-bit yang bekerja pada blok berukuran 64-bit (setara dengan 8 byte).
Algoritma CFB :
1. Antrian diisi dengan IV seperti pada mode CBC
2. Enkripsikan antrian dengan kunci K. delapan bit paling kiri dari hasil enkripsi berlaku sebagai keystream (ki) yang kemudian di-XOR-kan dengan karakter 8-bit dari plainteks menjadi 8 bit pertama dari cipherteks. Karakter cipherteks ini dikirim (pada aplikasi komunikasi data) atau disimpan (pada aplikasi penyimpanan data).  Salinan dari karakter cipherteks ini juga dimasukkan ke dalam antrian (menempati 8 posisi bit paling kanan antrian), dan semua byte lainnya di dalam antrian digeser ke kiri mengantikan 8 bit pertama yang sudah digunakan.
3. Karakter plainteks berikutnya dienkripsikan dengan cara yang sama seperti pada langkah 2.
4. Dekripsi dilakukan sebagai kebalikan dari proses enkripsi. Baik enkripsi maupun dekripsi, algoritma E dan D yang digunakan sama.

4).   Output Feed Back (OFB)
Mode OFB mirip dengan mode CFB kecuali p-bit dari hasil enkripsi terhadap antrian disalin menjadi elemen posisi paling kanan di antrian. Dekripsi dilakukan sebagai kebalikan dari proses enkripsi. OFB 8-bit bekerja pada blok berukuran 64-bit (setara dengan 8 byte).

Banyak algoritma kriptografi cipher blok yang sudah pernah dipublikasikan. Untuk menyebut beberapa diantaranya adalah : DES (Data Encryption Standard), Triple DES (3DES), IDEA (Internasional Data Encryption Algorithm), Blowish, Gost, Safer, LOKI, FEAL, RC2, RC5, Serpent, dll. Hingga yang terbaru adalah AES (Advanced Encryption Standard). Pada pembahasan ini tidak akan menjelaskan semua algoritma tersebut, hanya  algoritma DES yang menjadi standard untuk enkripsi cipher blok.

DES (Data Encryption Standard)
DES, atau juga dikenal sebagai Data Encryption Algorithm (DEA) oleh ANSI dan DEA-1 oleh ISO, merupakan algoritma kriptografi yang paling umum digunakan saat ini. Sejarahnya DES dimulai dari permintaan pemerintah Amerika Serikat untuk memasukkan proposal enskripsi. DES memiliki sejarah dari Lucifer, enkripsi yang dikembangan di IBM kala itu. Horst Feistel merupakan salah satu periset yang mula-mula mengembangkan DES ketika bekerja di IBM Watson Laboratory di Yorktown Heights, New York. DES baru secara resmi digunakan oleh pemerintah Amerika Serikat di tahun 1977.
Aplikasi yang menggunakan DES antara lain:
enkripsi dari password di sistem UNIX
berbagai aplikasi di bidang perbankan
DES merupakan block chiper yang beroperasi dengan menggunakan blok berukuran 64-bit dan kunci berukuran 56-bit. Brute force attack dengan mencoba segala kombinasi membutuhkan 256 kombinasi atau sekitar 7x 1017 atau 70 juta milyar kombinasi. DES dengan penggunaan yang biasa (cookbook mode) dengan panjang kunci 56 bit saat ini sudah dapat dianggap tidak aman karena sudah berhasil dipecahkan dengan metoda coba-coba (brute force attack). Ada berbagai group yang mencoba memecahkan DES dengan berbagai cara. Salah satu group yang bernama distributed.net menggunakan teknologi Internet untuk memecahkan problem ini menjadi sub-problem yang kecil (dalam ukuran blok). Pengguna dapat menjalankan sebuah program yang khusus dikembangkan oleh tim ini untuk mengambil beberapa blok, via Internet, kemudian memecahkannya di komputer pribadinya. Program yang disediakan meliputi berbagai operating system seperti Windows, DOS, berbagai variasi Unix, Macintosh. Blok yang sudah diproses dikembalikan ke distributed.net via Internet. Mekanisme ini dapat memecahkan DES dalam waktu 30 hari.

Gambar 5.4. Contoh peragaan client distributed.net untuk Windows 95

Sebuah group lain yang disebut Electronic Frontier Foundation (EFF) membuat sebuah komputer yang dilengkapi dengan Integrated Circuit chip DES cracker. Dengan mesin seharga US$50.000 ini mereka dapat memecahkan DES 56-bit dalam waktu rata-rata empat (4) sampai lima (5) hari. DES cracker yang mereka kembangkan dapat melakukan eksplorasi keseluruhan dari 56-bit keyspace dalam waktu sembilan (9) hari. Dikarenakan 56-bit memiliki 216 (atau 65536) keyspace dibandingkan DES dengan 40-bit, maka untuk memecahkan DES 40-bit hanya dibutuhkan waktu sekitar 12 detik1. Dikarenakan hukum average, waktu rata-rata untuk memecahkan DES 40-bit adalah 6 detik.
Algoritma DES terbagi menjadi 3 kelompok, yaitu : pemrosesan kunci, enkripsi data 64 bit, dan dekripsi data 64 bit. Dimana kelompok yang satu dengan yang lain saling berinteraksi dan terkait antara satu dengan yang lain.
Algoritma DES dirancang untuk menulis dan membaca berita blok data yang terdiri dari 64 bit dibawah control kunci 64 bit. Dalam pembacaan berita harus dikerjakan dengan menggunakan kunci yang sama dengan waktu menulis berita, dengan penjadwalan alamat kunci bit yang diubah sehingga proses membaca adalah kebalikan dari proses menulis.
Sebuah blok ditulis dan ditujukan pada permutasi dengan inisial IP, kemudian melewati perhitungan dan perhitungan tersebut sangat tergantung pada kunci kompleks dan pada akhirnya melewati permutasi yang invers dari permutasi dengan inisial IP-1.
Perhitungan yang tergantung pada kunci tersebut dapat didefinisikan sebagai fungsi f, yang disebut fungsi cipher dan fungsi KS, yang disebut Key Schedule. Sebuah deskripsi perhitungan diberikan pada awal, sepanjang algoritma yang digunakan dalam penulisan pesan. Berikutnya, penggunaaan algoritma untuk pembacaan pesan didekripsikan. Akhirnya definisi dari fungsi cipher f menjadi fungsi seleksi Si, dan fungsi permutasi adalah P.
skema global dari algorima DES adalah sbb :
1. blok plainteks dipermutasi dengan matriks permutasi awal (initial permuation atau IP).
2. Hasil permutasi awal kemudian di-encihering sebanyak 16 kali (16 putaran). Setiap putaran menggunakan kunci internal yang berbeda.
3. Hasil enciphering kemudian dipermtasikan dengan matriks permtasi balikan (invers initial permtation atau IP-1) menjadi blok cipherteks.

Penulisan Pesan
                Perhitungan dalam penulisan pesan dapat dilihat pada gambar 5.5.  64 bit dari blok input yang dienkripsi adalah subjek pertama dari permutasi yang disebut permutasi dengan inisial IP.


























Gambar 5.5. Penulisan Pesan



Perhatikan tabel permutasi inisial IP.
IP
58     50    42    34    26    18    10    2
60     52    44    36    28    20    12    4
62     54    46    38    30    22    14    6
64     56    48    40    32    24    16    8
57     49    41    33    25    17     9    1
59     51    43    35    27    19    11    3
61     53    45    37    29    21    13    5
63     55    47    39    31    23    15    7
Input mengalami permutasi mempunyai bit 58 dari input bit pertamanya, bit 50 sebagai bit kedua dan bit ke 7 sebagai bit terakhir. blok input yang mengalami permuatsi kemudian menjadi input pada perhitungan dan tergantung pada kunci kompleks.
Output perhitungan ini, disebut preoutput dan output ini akan diteruskan pada permutasi berikutnya yang merupakan kebalikan dari permutasi inisial. Perhatikan tabel kebalikan dari permutasi inisial IP yaitu IP-1.
Output dari algoritma di atas mempunyai bit 40 dari blok preoutput sebagai bit pertamanya, bit 8 sebagai bit kedua sampai bit 25 sebagai bit terakhir.
IP-1
40        8    48    16    56    24    64    32
39        7    47    15    55    23    63    31
38        6    46    14    54    22    62    30
37        5    4    13    53    21    61    29
36        4    44    12    52    20    60    28
35        3    43    11    51    19    59    27
34        2    42    10    50    18    58    26
33        1    41     9    49    17    57    25
   
Perhitungan yang menggunakan blok input dikenakan permutasi sebagai inputnya untuk menghasilkan blok preoutput. Tetapi untuk pertukaran blok akhir, dari 16 iterasi dari kalkulasi yang dijelaskan di bawah ini merupakan fungsi cipher f yang mengoperasikan 2 blok, yaitu salah satu dari 32 bit dan salah satu dari 48 bit. Kalkulasi tersebut akan menghasilkan blok sepanjang 32 bit.
64 bit dari blok input terdiri dari 32 bit blok L dan diikuti oleh 32 bit blok L. input blok ini didefinisikan sebagai LR. K menjadi input blok dari 48 bit yang dipilih dari 64 bit kunci. Kemudian output L’R’ dari iterasi dengan input LR menghasilkan persamaan berikut ini
        L’ = R
        R’ = L(+)f(R,K)                 ………………………………………..(5-1)
Dimana (+) merupakan penambahan bit demi bit kemudian dibagi 2.
Input iterasi pertama dari perhitungan tadi adalah blok input yang mengalami permutasi L’R’ adalah output dari iterasi ke 16, kemudian R’L’ adalah blok preoutput. Pada masing-masing iterasi sebuah blok yang berbeda, K merupakan kunci bit yang dipilih dari 64 kunci yang ditunjukkan KEY.
Dengan notasi diatas, kita bisa menjelaskan iterasi menjadi lebih rinci. KS menjadi sebuah fungsi yang menggunakan bilangan bulat n dengan jangkauan dari bilangan 1 sampai bilangan 16 dan blok 64 bit KEY sebagai input serta hasilnya sebagai output blok 48 bit Kn, dimana bisa dilihat pada persamaan berikut ini :
        Kn = KS(n, KEY)                …………………………………… (5-2)
Dengan Kn ditentukan oleh bit dalam posisi bit yang berbedadengan KEY. KS disebut kunci schedule karena blok K digunakan dalam iterasi ke-n (persamaan 5-1) dan blok Kn ditentukan oleh persamaan 5-2.
Karena sebelumnya blok input dipermutasikan dengan LR, akhirnya Lo dan Ro berubah menjadi L dan R, sedangkan Ln dan Rn berubah menjadi L’ dan R’ (persamaan 5-1). Selanjutnya L dan R berubah menjadi Ln-1 dan Rn-1. K adalah Kn, yaitu ketika n dalam jangkauan bilangan 1 sampai bilangan 16. perhatikan persamaan berikut ini
        Ln = Rn-1
        Rnn = Ln-1(+)f(Rn-1, Kn)          …………………………………… (5-3)
Blok preoutput dari persamaan di atas adalah R16 L16
Untuk algoritma secara rinci dapat dilihat pada bahasan enkripsi 64 bit yang akan dibahas pada bagian bawah bab ini.

Penguraian Pesan
Permutasi IP-1 menerapkan blok preoutput yang merupakan kebalikan dari permutasi dengan inisial IP. Adapun persamaan berikut ini merupakan kelanjutan dari persamaan 5-1.
        R’ = L
        L’ = R(+)f(L’,K)  ……………………………………………….. (5-4)
Akibatnya, penguraian pesan ini harus menerapkan algoritma yang sama pada waktu pesan ditulis. Dengan mengambil masing-masing iterasi dan perhitungan blok yang sama dari kunci bit K maka penguraian itu dilakukan. Dengan menggunakan notasi-notasi dari persamaan sebelumnya, persamaan berikut ini menjelaskan kondisi berikut :
        Rn-1 = Ln
        Ln-1 = Rn(+)f(Ln,Kn)   ………....…………………………………(5-5)
Setelah adanya persamaan diatas, sekarang R16L16 adalah blok input dari permutasi dalam perhitungan penguraian dan L0 dan R0 adalah blok preoutput. Untuk penguraian perhitungan dengan R16L16 sebagai input permutasi, K16 digunakan dalam iterasi yang pertama. K15 sebagai yang kedua dan seterusnya sampai dengan K1 digunakan dalam iterasi ke-16.
    Untuk algoritma secara rinci dapat dilihat pada bahasan deskripsi 64 bit yang akan dibahas pada bagian bawah bab ini.

Fungsi Cipher F
    Perhitungan dari fungsi f(R,K) dapat dilihat pada gambar 5.3. E merupakan fungsi yang mengambil blok 32 bit sebagai input dan hasil 48 bit sebagai output. E yang 48 bit sebagai output ditulis sebagai 8 blok dari 6 bit yang masing-masing diperoleh dengan cara menyeleksi bit dalam input. Perhatikan tabel berikut ini.
TABEL E-BIT SELEKSI
32     1     2     3     4     5
 4     5     6     7     8     9
 8     9    10    11    12    13
12    13    14    15    16    17
16    17    18    19    20    21
20    21    22    23    24    25
24    25    26    27    28    29
28    29    30    31    32    33
3 bit pertama dari E adalah bit dalam posisi 32, kemudian 1 disusul 2 dari R dan 2 bit E yang terakhir adalah bit dalam posisi 32 dan 1.
   











Gambar 5.6. Fungsi Cipher F
Masing-masing fungsi seleksi untuk S1, S2, …, S8, mengambil blok 6 bit sebagai input dan hasil blok 4 bit sebagai output dan diilustrasikan dengan menggunakan tabel yang berisi S1.

Tabel. 5.1. Tabel Fungsi Seleksi
S1
Column Number
Row
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Number
















0
14
4
13
1
2
15
11
8
3
10
6
12
5
9
0
7
1
0
15
7
4
14
2
13
1
10
6
12
11
9
5
3
8
2
4
1
14
8
13
6
2
11
15
12
9
7
7
10
5
0
3
15
12
8
2
4
9
1
7
5
11
3
14
10
0
6
13

Jika S1 adalah fungsi yang didefiniskan dalam tabel dan B adalah blok dari 6 bit, kemudian S1(B) ditentukan sebagai berikut :
Bit pertama dan terakhir dari B mewakili dalam base 2 sebuah angka dalam jangkauan 0 sampai 3.Angka tersebut didefinisikan sebagai i
4 bit ditengah dari B mewakili dalam base 2 sebuah angka dalam jangkauan 0 sampai dengan 15. angka tersebut didefinisikan sebagai j.
lihat tabel 5.1, angka dalam baris ke-I dan kolom ke-j. angka dalam jangkauan 0 sampai dengan 15 dan diwakili oleh 4 bit blok.
Blok itu adalah output S1(B) dan S1 untuk input B
Sebagai contoh :
Untuk input 0 1 1 0 1 1 baris 0 1, baris 1 dan kolom ditentukan oleh 1 1 0 1, kolom 13. pada baris 1 kolom 13 kelihatan 5 sehingga outputnya adalah 0 1 0 1
Hasil fungsi permutasi P output 32 bit dari input 32 bit dengan permutasi bit dari input blok dapat dilihat pada tabel berikut ini :



P
16     7    20    21
29    12    28    17
 1    15    23    26
 5    18    31    10
 2     8    24    14
32    27     3     9
19    13    30     6
22    11     4    25
output P(L) untuk fungsi P didefinisikan oleh tabel diatas dan diperoleh dari input L dengan mengambil bit ke-16 dari L sebagai bit pertama P(L), bit ke-7 sebagai bit ke-2 dari P(L), dan seterusnya sampai bit ke-25 dari L diambil sebagai bit ke-32 dai P(L).
    S1,s2, …, S8 menjadi fungsi seleksi yang berbeda dan P menjadi fungsi permutasi sekaligus E menjadi fungsi yang telah didefinisikan diatas. Untuk mendefinisikan f(R,K), langkah pertama adalah mendefinisikan B1, …, B8 menjadi blok dari 6 bit masing-masing untuk persamaan dibawah ini
        B1, B2,…, B8 = K (+) E(R)  ………………………………(5-6)
Blok f(R,K) kemudian didefiniskan menjadi persamaan beikut ini :
        P(s1(B1) (S2(B2) … (S8(B8))  …………………………… (5-7)
Jadi K (+) E® adalah hasil pertama yang dibagi dalam 8 blok input yang dapat dilihat pada persamaan 5-6. kemudian masing-masing B1 diambil sebagai input untuk S1 dan 8 blok (S1(b1) (S2,B2) … (S8(B8)) dari 4 bit masing-masing digabungkan menjadi blok tunggal dari 32 bit yang membentuk input P. Output pada persamaan 5-7 kemudian menjadi input bagi R dan K.

Pemrosesan Kunci
    Algoritma pemrosesan kunci ini nantinya akan sangat berguna sekali pada waktu implementasi pada program. Adapun algoritmanya dalah sebagai berikut :
Pengguna memasukkan sebuah kunci sebesar 64 bit atau 8 karakter, dimana nantinya setiap bit dalam kunci ini akan digunakan bit paritas.
Sebelum dilakukan permutasi terhadap kunci tersebut, perlu diadakan penjadwalan kunci rahasia (secret key-schedulling). Hal ini dilakukan untuk menyusun 16 buah kunci yang akan dimasukkan pada setiap iterasi DES, baik pada enkripsi maupun dekripsi.
Setelah langkah kedua selesai, dilanjutkan dengan permutasi. Permutasi dilakukan pada kunci 64 bit tadi. Pada tahapan ini, bit-bit paritas tidak dilibatkan sehingga bit kunci berkurang menjadi 56 bit. Bit 1 pada kunci ke-56 merupakan bit 57 pada kunci awalnya, bit 2 adalah bit 49, dan seterusnya hingga bit 56 adalah bit 4 kunci 64. Posisi bit hasil permutasi pada langkah pertama ini diberi nama Permuted Choice 1 (PC-1). Adapun hasilnya dapat dilihat pada keterangan dibawah ini :
Permuted Chice 1 (PC-1)
57    49    41    33    25    17     9
 1    58    50    42    34    26    18
10     2    59    51    43    35    27
19    11     3    60    52    44    36
63    55    47    39    31    23    15
 7    62    54    46    38    30    22
14     6    61    53    45    37    29
21    13     5    28    20    12     4
Dari permutasi ini kemudian output PC-1 dibagi menjadi 2 bagian yaitu 28 bit pertama disebut C(0) dan 28 bit terakhir disebut D(0).
Dari C(0) dan D(0) kemudian dihitung sub-sub kunci untuk setiap iterasi, yang dimulai dengan j=1.
Untuk setiap iterasi, yaitu j rotasi ke kiri 1 kali atau sebanyak 2 kali untuk setiap C(j-1) dan D(j-1). Dari hasil rotasi ini akan didapatkan hasil C(j) dan D(j). tabel berikut ini akan menunjukkan langkah setiap rotasi yang diterapkan pada setiap iterasinya.
Tabel 5-2. Step Rotasi Yang Dilakukan Pada Setiap Iterasi
Iterasi ke
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Jumlah step
1
1
2
2
2
2
2
2
1
2
2
2
2
2
2
1

Untuk setiap hasil C(j) dan D(j), kunci pada iterasi ke j didapatkan dengan cara melakukan permutasi kembali pada C(j) dan D(j). permutasi itu dikenal dengan nama Permuted Choice 2 (PC-2). Perhatikan hasilnya berikut ini :
Permuted Choice 2 (PC-2)
14    17    11    24     1     5
 3    28    15     6    21    10
23    19    12     4    26     8
16     7    27    20    13     2
41    52    31    37    47    55
30    40    51    45    33    48
44    49    39    56    34    53
46    42    50    36    29    32
Iterasi dilakukan terus menerus hingga ke 16 kunci berhasil disusun.
        
ENKRIPSI DATA 64 BIT
Algoritma yang menunjang adanya enkripsi data 64 bit adalah sebagai berikut :
Ambil blok data sebanyak 64 bit tersebut. Apabila dalam mengambil blok data kurang dari 64 bit, maka perlu adanya penambahan supaya dalam penggunaannya sesuai dengan jumlah datanya.
Bentuklah permutasi awal (Initial Permutation IP) pada blok data 64 bit tadi dengan memperhatikan permutasi berikut ini :




Initial Permutation
58    50    42    34    26    18    10     2
60    52    44    36    28    20    12     4
62    54    46    38    30    22    14     6
64    56    48    40    32    24    16     8
57    49    41    33    25    17    9     1
59    51    43    35    27    19    11     3
61    53    45    37    29    21    13     5
63    55    47    39    31    23    15     7
Blok data tersebut dan dibagi menjadi 2 bagian, yaitu 32 bit pertama disebut L[0] dan 32 bit kedua disebut R[0].
Ke 16 sub kunci dioperasikan dengan blok data, dimulai dengan j=1 dan terbagi menjadi cara-cara berikut ini :
R[j-1] dikembangkan menjadi 48-bit menurut fungsi pemilihan ekspansi berikut :
Expansion (E)
32     1     2     3     4     5     6     7     8     9
 8     9    10    11    12    13    14    15    16    17
16    17    18    19    20    21    22    23    24    25
24    25    26    27    28    29    30    31    32     1
Kemudian langkah berikutnya adalah : E(R[j-1]) di XOR dengan K[j].
Hasil E(R[j-1]) XOR K[j] dipecah menjadi delapan blok 6-bit. Kelompok bit 1-6 disebut B[1], bit 7-12 disebut B[2], dan seterusnya bit 43-48 disebut B[8]
Jumlah bit dikurangi dengan penukaran nilai-nilai yang ada dalam tabel S untuk setiap B[j]. Dimulai dengan J=1, setiap nilai dalam tabel S memiliki 4 bit.
Adapun langkah-langkah dalam tahap ini adalah sebagai berikut :
Ambil bit ke 1 dan ke 6 dari B[j] bersama-sama menjadi nilai 2 bit, misalkan m, yang menunjukkan baris dalam tabel S[j].
Ambil bit ke 2 hingga 5 dari B[j] sebagai nilai 4 bit, misalkan n, yang menunjukkan kolom dalam S[j].
Hasil proses ini adalah S[j][m][n] untuk setiap B[j] sehingga iterasi yang diperoleh sebanyak 8 kali. Hasil ini sering disebut juga substitution box. Nantinya akan ada substitution box sebayak 8 buah iterasi. Perhatikan masing-masing tabel berikut ini :

Tabel 5.3. Substitution Box 1 (S[1])

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
0
14
4
13
1
2
15
11
8
3
10
6
12
5
9
0
7
1
0
15
7
4
14
2
13
1
10
6
12
11
9
5
3
8
2
4
1
14
8
13
6
2
11
15
12
9
7
3
10
5
0
3
15
12
8
2
4
9
1
7
5
11
3
14
10
0
6
13

Tabel 5.4. Substitution Box 2 (S[2])

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
0
15
1
8
14
6
11
3
4
9
7
2
13
12
0
5
10
1
3
13
4
7
15
2
8
14
12
0
1
10
6
9
11
5
2
0
14
7
11
10
4
13
1
5
8
12
6
9
3
2
15
3
13
8
10
1
3
15
4
2
11
6
7
12
0
5
14
9

Tabel 5.5. Substitution Box 3 (S[3])

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
0
10
0
9
14
6
3
15
5
1
13
12
7
11
4
2
8
1
13
7
0
9
3
4
6
10
2
8
5
14
12
11
15
1
2
13
6
4
9
8
15
3
0
11
1
2
12
5
10
14
7
3
1
10
13
0
6
9
8
7
4
15
14
3
11
5
2
12



Tabel 5.6. Substitution Box 4 (S[4])

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
0
7
13
14
3
0
6
9
10
1
2
8
5
11
12
4
15
1
13
8
11
5
6
15
0
3
4
7
2
12
1
10
14
9
2
10
6
9
0
12
11
7
13
15
1
3
14
5
2
8
4
3
3
15
0
6
10
1
13
8
9
4
5
11
12
7
2
14

Tabel 5.7. Substitution Box 5 (S[5])

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
0
2
12
14
1
7
10
11
6
8
5
3
15
13
0
14
9
1
14
11
2
12
4
7
13
1
5
0
15
10
3
9
8
6
2
4
2
1
11
10
13
7
8
15
9
12
5
6
3
0
14
3
11
8
12
7
1
14
2
13
6
15
0
9
10
4
5
3

Tabel 5.8. Substitution Box 6 (S[6])

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
0
12
1
10
15
9
2
6
8
0
13
3
4
14
7
5
11
1
10
15
4
2
7
12
9
5
6
1
13
14
0
11
3
8
2
9
14
15
5
2
8
12
3
7
0
4
10
1
13
11
6
3
4
3
2
12
9
15
10
11
14
1
7
6
0
8
13
12

Tabel 5.9. Substitution Box 7 (S[7])

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
0
4
11
2
14
15
0
8
13
3
12
9
7
5
10
6
1
1
13
0
11
7
4
9
1
10
14
3
5
12
2
15
8
6
2
1
4
11
13
12
3
7
14
10
15
6
8
0
5
9
2
3
6
11
13
8
1
4
10
7
9
5
0
15
14
2
3
12



Tabel 5.10. Substitution Box 8 (S[8])

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
0
13
2
8
4
6
15
11
1
10
9
3
14
5
0
12
7
1
1
15
13
8
10
3
7
4
12
5
6
11
0
14
9
2
2
7
11
4
1
9
12
14
2
0
6
10
13
15
3
5
8
3
2
1
14
7
4
10
8
13
15
12
9
0
3
5
6
11

Permutasi diakukan kembali pada kombinasi hasil substitusi di atas S[1][m][n] sampai dengan S[8][m2][n2] dengan memperhatikan keterangan berikut ini :
Permutation P
16     7    20    21    29    12    18    17
 1    15    23    26     5    18    31    10
 2     8    24    14    32    27     3     9
19    13    30     6    22    11     4    25
Hasil permutasi kemudian di XOR dengan L[j-1], selanjutnya hasil ini menjadi R[j]. perhatikan rumus berikut ini :
R[i] = l[j-1] XOR P(S[1](B[1] .. S[8](B[8])
B[j] merupakan blok 6 bit hasil kombinasi R(R[i-1]) XOR K[i].
Fungsi ini bisa ditulis sebagai berikut :
R[i] = L[i-1] XOR f(R[i-1],K[i])
L[i] = R[i-1]
Ulangi kembali ke langkah paling atas hingga K[16]
Permutasi akhir dilakukan kembali dengan tabel permutasi yang merupakan invers dari permutasi awal. Perhatikan permutasi berikut ini :





Final Permutation (IP**-1)
40    8    48    16    56    24    64    32
39    7    47    15    55    23    63    31
38    6    46    14    54    22    62    30
37    5    45    13    53    21    61    29
36    4    44    12    52    20    60    28
35    3    43    11    51    19    59    27
34    2    42    10    50    18    58    26
33    1    41     9    49    17    57    25

DEKRIPSI DATA 64 BIT
    Untuk dekripsi, proses yang sama dilakukan kembali, hanya saja yang digunakan adalah kunci K[j] dalam urutan yang berlawanan, yaitu memasukkan K[16] terlebih dahulu, kemudian K[15], seterusnya hingga K[1]. Adapun algoritmanya adalah sebagai berikut :
Ambillah blok enkripsi sebanyak 64 bit tersebut. Apabila dalam mengambil blok enkripsi kurang dari 64 bit, maka perlu adanya penambahan supaya dalam penggunaannya sesuai dengan jumlah datanya.
Bentuk permutasi awal (Initial Permutation IP) pada blok enkripsi 64 bit tadi, dengan memperhatikan permutasi berikut ini.
Intial Permutation
58    50    42    34    26    18    10    2
60    52    44    36    28    20    12    4
62    54    46    38    30    22    14    6
64    56    48    40    32    24    16    8
57    49    41    33    25    17      9    1
59    51    43    35    27    19    11    3
61    53    45    37    29    21    13    5
63    55    47    39    31    23    15    7
Blok enkripsi tersebut dibagi menjadi 2 bagian, yaitu 32 bit pertama disebut L[0] dan 32 bit kedua disebut R[0].
Ke-16 sub kunci dioperasikan dengan blok enkripsi, dimulai dengan j=1 dan terbagi menjadi cara-cara berikut ini :
1. R[j-1] dikembangkan menjadi 48-bit menurut fungsi pemilihan ekspansi berikut :
Expansion (E)
32    1     2     3     4     5     6     7     8     9
8    9    10    11    12    13    14    15    16    17
16    17    18    19    20    21    22    23    24    25
24    25    26    27    28    29    30    31    32     1

2. Kemudian langkah berikutnya adalah : E(R[j-1]) di XOR dengan K[j].
3. hasil E(R[j-1]) XOR K[j] dipecah menjadi delapan blok 6-bit. Kelompok bit 1-6 disebut B[1], bit 7-12 disebut B[2], dan seterusnyabit 43-48 disebut B[8].
4. jumlah bit dikurangi dengan pertukaran nilai-nilai yang ada dalam tabel S untuk setiap B[j]. dimulai dengan j=1, setiap nilai dalam S memiliki 4 bit. Adapun langkah-langkah dalam tahap ini adalah sebabagi berikut :
ambil bit ke 1 dan ke 6 dari B[j] bersama-sama menjadi nilai 2 bit, misalkan m, yang menunjukkan baris dalam tabel S[j].
ambil bit ke 2 hingga 5 dari B[j] sebagai nilai 4 bit, misalkan n, yang menunjukkan kolom dalam S[j].
hasil proses ini adalah S[j][m][n] untuk setiap B[j] sehingga iterasi yang diperlukan sebanyak 8 kali. Hasil ini sering disebut juga substitution box. Nantinya akan ada substitution box sebanyak 8 buah iterasi. Perhatikan masing-masing tabel berikut ini.
Tabel 5.11. Substitution Box 1 (S[1])

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
0
14
4
13
1
2
15
11
8
3
10
6
12
5
9
0
7
1
0
15
7
4
14
2
13
1
10
6
12
11
9
5
3
8
2
4
1
14
8
13
6
2
11
15
12
9
7
3
10
5
0
3
15
12
8
2
4
9
1
7
5
11
3
14
10
0
6
13

Tabel 5.12. Substitution Box 2 (S[2])

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
0
15
1
8
14
6
11
3
4
9
7
2
13
12
0
5
10
1
3
13
4
7
15
2
8
14
12
0
1
10
6
9
11
5
2
0
14
7
11
10
4
13
1
5
8
12
6
9
3
2
15
3
13
8
10
1
3
15
4
2
11
6
7
12
0
5
14
9

Tabel 5.13. Substitution Box 3 (S[3])

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
0
10
0
9
14
6
3
15
5
1
13
12
7
11
4
2
8
1
13
7
0
9
3
4
6
10
2
8
5
14
12
11
15
1
2
13
6
4
9
8
15
3
0
11
1
2
12
5
10
14
7
3
1
10
13
0
6
9
8
7
4
15
14
3
11
5
2
12

Tabel 5.14. Substitution Box 4 (S[4])

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
0
7
13
14
3
0
6
9
10
1
2
8
5
11
12
4
15
1
13
8
11
5
6
15
0
3
4
7
2
12
1
10
14
9
2
10
6
9
0
12
11
7
13
15
1
3
14
5
2
8
4
3
3
15
0
6
10
1
13
8
9
4
5
11
12
7
2
14



Tabel 5.15. Substitution Box 5 (S[5])

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
0
2
12
14
1
7
10
11
6
8
5
3
15
13
0
14
9
1
14
11
2
12
4
7
13
1
5
0
15
10
3
9
8
6
2
4
2
1
11
10
13
7
8
15
9
12
5
6
3
0
14
3
11
8
12
7
1
14
2
13
6
15
0
9
10
4
5
3

Tabel 5.16. Substitution Box 6 (S[6])

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
0
12
1
10
15
9
2
6
8
0
13
3
4
14
7
5
11
1
10
15
4
2
7
12
9
5
6
1
13
14
0
11
3
8
2
9
14
15
5
2
8
12
3
7
0
4
10
1
13
11
6
3
4
3
2
12
9
15
10
11
14
1
7
6
0
8
13
12

Tabel 5.17. Substitution Box 7 (S[7])

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
0
4
11
2
14
15
0
8
13
3
12
9
7
5
10
6
1
1
13
0
11
7
4
9
1
10
14
3
5
12
2
15
8
6
2
1
4
11
13
12
3
7
14
10
15
6
8
0
5
9
2
3
6
11
13
8
1
4
10
7
9
5
0
15
14
2
3
12

Tabel 5.18. Substitution Box 8 (S[8])

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
0
13
2
8
4
6
15
11
1
10
9
3
14
5
0
12
7
1
1
15
13
8
10
3
7
4
12
5
6
11
0
14
9
2
2
7
11
4
1
9
12
14
2
0
6
10
13
15
3
5
8
3
2
1
14
7
4
10
8
13
15
12
9
0
3
5
6
11

5. Permutasi dilakukan kembali pada kombinasi hasil substitusi diatas S[1][m1][n1] sampai dengan S[8][m2][n2] dengan memperhatikan keterangan berikut ini :
Permutation P
16    7    20    21    29    12    28    17
 1    15    23    26    5    18    31    10
2    8    24    14    32    27    3    9
19    13    30    6    22    11    4    25
6. Hasil permutasi kemudian di XOR dengan R[i], selanjutnya hasil ini menjadi L[i-1]
L[i-1] = R[i] XOR f(L[i],K[i])
7. L[i] = R[i-1]
8. Ulangi kembali ke langkah paling atas hingga K[1].
Permutasi akhir dilakukan kembali dengan tabel permutasi yang merupakan invers dari permutasi awal. Perhatikan permutasi berikut ini.
Final Permutation (IP**-1)
40    8    48    16    56    24    64    32
39    7    47    15    55    23    63    31
36    6    46    14    54    22    62    30
37    5    45    13    53    21    61    29
36    4    44    12    51    20    60    28
35    3    43    11    51    19    59    27
34    2    42    10    50    18    58    26
33    1    41    9    49    17    57    25

3.2.  Kriptografi Kunci Asimetri
        Sebenarnya penemu pertama kriptografi asimetri adalah James H. Ellis, Clifford Cocks,dan Malcolm Williamson di Inggris pada awal 1970. Mereka menemukan mekanisme pertukaran kunci, yang kemudian dikenal dengan nama algoritma pertukaran kunci Diffie Hellman. Sayangnya algoritma mereka tersebut dirahasiakan dan tidak pernah dipublikasikan hinga tahun 1997.
        System kriptografi asimetri dipublikasikan pertama kali pada tahun 1976 oleh Whitfield Diffie dan Martin Helman, dua oang ilmuwan dari Stanford University melalui makalah pertamanya di jurnal IEEE yang berjudul “New Directions in Cryptography”. Makalah mereka membahas distribusi kunci rahasia pada saluran komunikasi public (yang tidak aman) dengan metode pertukaran kunci yang belakangan dikenal dengan nama algoritma peprtukaran kunci Diffie-Helman.
        Pada tahun 1977, generalisasi dari ide Cocks ditemukan kembali oleh tiga orang ilmuwan dari MIT, yaitu Rivest, Shamir, dan Adleman. Algoritma ekripsi yang mereka buat dikenal  dengan nama RSA.
        Akhirnya, sejak tahun 1976 berbagai algoritma enkripsi, tanda tangan digital, pertukaran kunci, dan tenik lain dikembangkan dalam bidang kriptografi  kunci-publik, misalnya algoritma ElGamal untuk enkripsi dan tanda tangan digital dan algoritma DSA untuk tanda tangan digital. Pada tahun 1980 Neal Kobliz memperkenalkan elliptic-curve-cryptography sebagai keluarga baru yang di analog dengan algoritma kriptogafi kunci-publik. Hingga saat ini kriptografi kunci-publik terus berkembang pesat seiring dengan aplikasinya yang begitu luas.
Aplikasi kriptografi kunci-publik dapat dibagi menjadi 3 kategori :
1. Kerahasiaan data
Seperti pada kriptografi kunci-simetri, kriptografi kunci –publik dapat digunakan untuk menjaga kerahasiaan data (provide confidentiality/secrecy) melalui mekanisme enkripsi dan dekripsi. Contoh aklgoritma untuk aplikasi ini adalah : RSA, Knapsack, Robin, EGamal, Elliptic Curve Cryptography (ECC)   
2. Tanda-tangan digital
Tanda-tangan digital (digital signature) dengan menggunakan algoritma kriptogafi kunci –publik dapat digunakan untuk membuktikan otentikasi pesan maupun otentikasi pengiriman (provide authentification). Contoh algoritmanya untuk aplikasi ini adalah : RSA, DSA, dan ElGamal.
3. Pertukaran Kunci (key-Exchange)
Algoritma kriptografi kunci-publik dapat digunakan untuk mengirim kunci simetri (session keys). Contoh algoritmanya adalah RSA, dan Difie-Hellman.


RSA
        Beberapa algoritma kriptografi kunci-publik dapat digunakan untuk ketiga macam kategori aplikasi (misalnya RSA) beberapa algoritma hanya ditujukan untuk aplikasi spesifik (misalnya DSA untuk digital signature). Dan konsep kriptogafu kunci-publik atau kunci asimetri telah dijelaskan pada bab 2 sebelumnya.
Kelebihan kriptografkunci-publik (asimetri) :
1. Hanya kunci privat yang perlu dijaga kerahasiaannya oleh setiap entitas yang berkomunikasi (tetapi otentikasi knci public tetap harus terjamin). Tidak ada kebutuhan mengirim kunci privat sebagaimana pada system simetri.
2. Pasangan kunci public/kunci privat tidak perlu diubah, bahkan dalam periode waktu yang panjang.
3. Dapat digunakan untuk mengamankan pengirman kunci simetri
4. Beberapa algoritma kunci-publik dapat digunakan untuk memebri tanda tangan digital pada pesan.
Kelemahan kriptogafi kunci public (asimetri) :
1. Enkripsi dan dekripsi data umumnya lebih lambat daripada system simetri, karena enkripsi dan dekripsi menggunakan bilangan yang besar dan melibatkan operasi perpangkatan yang besar.
2. Ukuran cipherteks lebih besar dari plainteks (bisa dua sampai empat kali ukuran plainteks)
3. Ukuran kunci relative lebih besar daripada ukuran kunci simetri
4. Karena kunci public diketahui secara luas dan dapat digunakan setiap orang, maka cipherteks tidak memberikan informasi mengenai otentikasi pengirim
5. Tidak ada algoritma kunci public yang terbukti aman (sama seperti blok cipher). Kebanyakan algoritma mendasarkan keamannya pada suitnya memecahkan persoalan-persoalan aritmetik yang menjadi dasar pembangkitan kunci. Kriptografi kunci-publik juga tidak aman dari serangan man-in-the-middle attack. Orang di tengah mengintersepsi komunikasi lalu berpura-pura sebagai salah satu pihak yang berkomunikasi untuk mengetahui informasi rahasia.

        Dari sekian banyak algoritma kriptografi kunci-publik yang pernah dibuat, algoritma yang paling popular adalah algoritma RSA. Keamanan algoritma RSA terletak pada sulitnya memfaktorkan bilangan yang besar menjadi factor-faktor prima. Pemfaktoran dilakukan untuk memperoleh kunci privat. Selama pemfaktoran bilangan besar menjadi factor-faktor prima belum ditemukan algoritma yang mangkus, maka selama itu pula keamanan algoritma RSA tetap terjamin.
Algoritma RSA memiliki besaran-besaran sebagai berikut :
1. p dan q bilangan prima        (rahasia)
2. n = p . q                (tidak rahasia)
3. (n) = (p-1)(q-1)            (rahasia)
4. e ( kunci enkripsi )        (tidak rahasia)
5. d ( kunci dekripsi )        ( rahasia )
6. m ( plainteks )            ( rahasia )
7. c (cpherteks)            ( tidak rahasia )

RSA adalah suatu blok sandi rahasia tempat teks asli dan teks rahasia merupakan bilangan bulat antara 0 dan n-1 untuk beberapa n. Enkripsi dan dekripsi berasal dari beberapa bentuk berikut ini, untuk beberapa blok teks asli M dan blok teks rahasia C.
        C = M’ mod n
        M = Cd mod n = (Me)d mod n = Med od n
    Blok pengirim meupun penerima harus mengetahui nilai n dan e, dan hanya penerima saja yang mengetahui nilai d. ini merupakan algoritma enkripsi kunci umum dengan kunci umum sebesar KU = {e,n} dan kunci khusus sebesar KR = {d,n}. Agar  algoritma ini bisa memenyhi syarat sebagai enkripsi kunci umum yang baik, maka harus memenuhi ketentuan-ketentuan seperti berikut :
1. kemungkinan menemukan nilai e,d,n sedemikian rupa sehingga Med = M mod n untuk semua M < n
2. relative mudah menghitung Me dan Cd untuk semua nilai M < n
3. tidak mudah menghitung menentukan d, yang diberi e dan n.
dua ketentuan pertama bisa terpenuhi dengan mudah. Sedangkan ketentuan ketiga baru bisa terpenuhi untuk nilai e dan n yang besar.
Pembangkitan Kunci
Memilih dua bilangan prima p, q . bilangan ini harus cukup besar (minimal 100 digit)
Menghitung n = p . q. Bilangan n disebut parameter security
(sebaiknya p ≠ q, sebab jika p = q maka n = p2 sehingga p dapat diperoleh dengan menarik akar pangkat dua dari n)
Menghitung φ(n) = (p-1)(q-1).
Memilih bilangan bulat e dengan algoritma Euclid yaitu gcd(φ(n),e)=1; dimana 1< e < φ(n).
Menghitung d dengan rumus d = e-1 mod φ(n)
Atau  e . d  1 (mod φ(n)).
Perhatikan bahwa e . d  1 (mod φ(n)) ekivalen dengan e . d = 1 + k φ(n), sehingga secara sederhana d dapat dihitung dengan :
    d =  ( 1 + k . φ(n)) / e
Kunci umum (kunci public) adalah  KU = {e,n}
Kunci pribadi (kunci privat adalah KR = {d,n}
Catatan :  n tidak bersifat rahasia, sebab ia diperlukan pada perhitungan enkripsi/dekripsi
Enkripsi
    B mengenkripsi message M untuk A, yang harus dilakukan B :
Teks asli dengan syarat M < n
Ambil kunci public A yang otentik (n,e)
Representasikan message sebagai integer M dalam interval [0,n-1]
Teks Rahasia didapat dari C = Me (mod n)
Kirim C ke A
Dekripsi
Untuk mendekripsi, A melakukan
Gunakan kunci pribadi d untuk menghasilkan M
Teks rahasia adalah C
Teks asli didapat dari M = Cd (mod n)






Gambar 5.7. Contoh Algoritma RSA
Algoritma RSA dimulai dengan memilih dua bilangan prima p dan q dan menghitung perkalian mereka n, yang merupakan modulus untuk enkripsi dan dekripsi. Berikutnya, kita membutuhkan kuantitas φ(n) , disebut  sebagai Euler totient untuk n, yang merupakan jumlah bilangan bulat positif yang kurang dari relative prima terhadap n. kemudian memilih bilangan bulat e yang relative prima terhadap φ(n), maksudnya pembagi biasa terbesar dari e dan φ(n) adalah 1. terakhir menghitung d sebagai perkalian terbalik dari e, modulo φ(n). bisa ditunjukkan bahwa d dan e memiliki sifat-sifat yang diinginkan.
    Anggap bahwa pemakai A telah mempublikasikan kunci umumnya dan bahwa pemakai B ingin mengirim pesan M ke A. kemudian B menghitung C = Me (mod n) dan mentransmisikan C. pada penerimaan teks rahasia ini, pemakai A melakukan dekripsi dengan cara menghitung M = Cd(mod n).
    Sebuah contoh ditunjukkan dalam gambar 5.7. Pada contoh ini, kunci-kunci digerakkan seperti berikut :
1. memilih dua bilangan prima, p = 7 dan q = 17
2. menghitung n = pq = 7 x 17 = 119
3. menghitung φ(n)=(p-1)(q-1) = 96
4. memilih e sedemikian rupa sehingga e relative prima terhadap φ(n) = 96 dan kurang dari φ(n): dalam hal ini e = 5.
5. menentukan d sedemikian rupa sehingga de = 1 mod 96 dan d < 96. nilai yang benar ialah d = 77 karena 77 x 5 = 385 = 4 x 96 + 1
    kunci-kunci yang dihasilkan ialah kunci umum KU = [5,119] dan kunci khusus KR = [77,119]. Contoh tersebut juga menunjukkan penggunaan kunci-kunci ini untuk input teks asli M = 19. untuk enkripsi ditingkatkan ke 19 pangkat lima, menghasilkan 2.476.099. berdasarkan pembagian dengan 119 ini, sisa ditetapkan menjadi 66. Karenanya , dan teks rahasianya sama dengan 66. untuk dekripsi ditetapkan bahwa .
    Ada dua pendekatan yang bisa dilakukan untuk menggagalkan algoritma RSA. Pertama adalah dengan pendekatan paksaan, mencoba semua kunci pribadi yang memungkinkan. Jadi semakin besar jumlah bit di dalam e dan d, semakin aman algoritmanya. Namun karena penghitungan yang dilakukan baik dalam pembangkitan kunci maupun dalam enkripsi/dekripsi sangat kompleks, semakin besar ukuran kunci, jalannya system akan semakin lambat.
    Sebagian besar pembahasan mengenai pemecahan rahasia RSA difokuskan pada tugas menfaktorkan n ke dalam dua factor primanya. Untuk n yang besar dengan factor prima yang besar, memfaktorkan adalah masalah yang berat, namun tidak seberat penggunaannya.

Contoh Pembangkitan Pasangan Kunci  :
Key generation :
1. Hasilkan dua buah integer prima besar p dan q. Untuk memperoleh tingkat keamanan yang tinggi pilih p dan q yang berukuran besar, misalnya 1024 bit.
Pada contoh disini dipilih bilangan yang kecil untuk mempermudah perhitungan yaitu :
    p = 47
    q = 71
2. Hitung  m     = (p-1)*(q-1)
           m     = (47-1) * (71-1)
           m     = 46 * 70
        = 3220

3. hitung n    = p*q
         n     = 47 * 71
        = 3337
4. Pilih d yang relatively prime terhadap m. e relatively prime terhadap m artinya factor pembagi terbesar keduanya adalah 1, secara matematis disebut gcd(e,m)=1. Untuk mencarinya dapat digunakan algoritma Euclid.
    e = 79     gcd(e,3220) = 1 
5. Cari d, sehingga e*d = 1 mod(m) atau d = (1+nm)/e
Untuk bilangan besar, dapat digunakan algoritma extended Euclid
    n = 25    d = (1 + 25. 3220) /79 = 1019 (yes)
6. Kunci public : (e,n) = (79,3337)
Kunci private: (d,n) = (1019,3337)   

Contoh Penerapan  :
Misalkan Bob mengirim pesan kepada Alice. Pesan (plainteks) yang akan dikirimkan oleh Alice adalah :
    m =  HARI INI
atau dalam system decimal (pengkodean ASCII) adalah :
    7265827332737873
Bob memecah m menjadi blok yang lebih kecil, misalnya m dipecah menjadi enam blok yang berukuran 3 digit.
    m1  =  726            m4 = 273
    m2  =  582            m5 = 787
    m3  =  733            m6 = 003
Nilai-nilai mi ini masih terletak di dalam selang [0, 3337 – 1] agar transformasi menjadi satu ke satu.
Bob mengetahui kunci public Alice adalah e = 79 dan n = 3337. Alice dapat mengenkripsikan setiap blok plainteks sebagai berikut :
    C1 = 72679 mod 3337  = 215   
C2 = 58279 mod 3337  = 776
C3 = 73379 mod 3337  = 1743
C4 = 27379 mod 3337  = 933
C5 = 78779 mod 3337  = 1731
C6 = 00379 mod 3337  = 158
Jadi cipherteks yang dihasilkan adalah :
    C = 215  776   1743   933  1731   158
Dekripsi dilakukan dengan mengunakan kunci privat
    d =  1019
Blok-blok  cipherteks didekripsikan sebagai berikut :
m1 = 2151019 mod 3337  = 726   
m2 = 7761019 mod 3337  = 582
m3 = 17431019 mod 3337  = 733
m4 = 9331019 mod 3337  = 273
m5 = 17311019 mod 3337  = 787
m6 = 1581019 mod 3337  = 003
Blk plainteks yang lain dikembalikan denan cara yang serupa. Akhirnya kita memperoleh kembali plainteks semula
    m = 7265827332737873
yang dalam system pengkodena ASCII adalah :
    m = HARI INI

Algoritma Program :
1. memilih dua bilangan prima p dan q, kemudian d dan plaintext yang akan dienkripsi. Bila yang diinputkan bukan bilangan prima maka program akan terhenti dan memberitahukan bahwa p dan q harus prime
2. menghitung nilai n = p. q
3. menghitung (n) = (p-1)(q-1)
4. mencari nilai e sedemikian hingga e relatif prime terhadap (n) dan kurang dari (n)
5. plaintext dipecah kedalam blok-blok yang masing-masing berisi 2 karakter bila jumlah karakter tidak genap maka diakhir ditambahkan karakter ‘X’. Kemudian masing-masing blok dikonversikan ke dalam bentuk bilangan
6. kemudian untuk mendapatkan cipher dari masing-masing blok dilakukan dengan mencari nilai konversi blok dipangkatkan dengan e dimodulokan dengan n
7. untuk mencari ciphernya dari modulo bilangan berpangkat yang nilainya sangat besar, dilakukan dengan cara :
a. mengubah pangkat blok plaintext (nilai e) ke dalam biner
b. kemudian setiap digit dari bilangan biner dilakukan iterasi dari bit paling kiri sampai bit yang paling kanan. pada awalnya cipher diberi nilai 1, kemudian masing-masing bit dideteksi apabila bit bernilai 1 maka  nilai cipher berubah dari perkalian antara blok plaintext (M) dengan kuadrat dari nilai chipper sebelumnya di mod n, bila bit bernilai 0 maka nilai cipher berubah diganti dengan nilai kuadrat dari nilai cipher sebelumnya di mod n, demekian seterusnya sampai bit terakhir. Hasil cipher merupakan nilai chipper terakhir dari proses iterasi.














   




















Tampilan input data:





































Hasil enkripsi :


Hasil Dekripsi menggunakan nilai p, q dan e yang sama dengan proses enkripsi:



C. SOAL LATIHAN

BAHAN BACAAN

Mao, Wenbo., 2004, Modern Cryptography Theori & Practice, Hawlett-Packard  Company
Menezes, Alfred J., Paul C van Oorsschot, dan Scott A. Vanstone, 1996, Handbook of Applied Cryptography, CRC Press.
Munir, Rinaldi, 2006, Kriptografi, Informatika, Bandung.
Schneier, Bruce 1996, Aplied Cryptography 2nd , John Wiley & Sons, New York
Stinson, R Douglas, 1995, Cryptography Theory and Practice, CRC Press, Inc, Boca Raton, London
Wahana Komputer, 2003, Memahami Model Enkripsi dan Sekuriti Data, Andi Offset, Yogyakarta.
William Stallings, 1995, Network and Internetwork Security, Prentice Hall.
www.wikepedia.org, diakses selama Juli-Agustus 2006

Tidak ada komentar:

Posting Komentar