Rabu, 27 Februari 2013

konsep bahasa java

Pemrograman dengan Java

Ari Hermawan
Java sebagai salah satu bahasa pemrograman baru menjanjikan banyak kemudahan bagi programer junior maupun senior. Tutorial ini akan membawa Anda mengenal lebih jauh bahasa ini melalui pembahasan konsep model perancangan dan petunjuk sederhana penggunaannya.

Apakah Java?

Java adalah bahasa pemrograman berorientasi objek yang dikembangkan oleh Sun Microsystems sejak tahun 1991. Bahasa ini dikembangkan dengan model yang mirip dengan bahasa C++ dan Smalltalk, namun dirancang agar lebih mudah dipakai dan ­platform independent, yaitu dapat dijalankan di berbagai jenis sistem operasi dan arsitektur komputer­­. Bahasa ini juga dirancang untuk pemrograman di Internet sehingga dirancang agar aman dan portabel.

Platform Independent

Platform independent berarti program yang ditulis dalam bahasa Java dapat dengan mudah dipindahkan antar berbagai jenis sistem operasi dan berbagai jenis arsitektur komputer. Aspek ini sangat penting untuk dapat mencapai tujuan Java sebagai bahasa pemrograman Internet di mana sebuah program akan dijalankan oleh berbagai jenis komputer dengan berbagai jenis sistem operasi. Sifat ini berlaku untuk level source code dan binary code dari program Java. Berbeda dengan bahasa C dan C++, semua tipe data dalam bahasa Java mempunyai ukuran yang konsisten di semua jenis platform. Source code program Java sendiri tidak perlu dirubah sama sekali jika Anda ingin mengkompile ulang di platform lain. Hasil dari mengkompile source code Java bukanlah kode mesin atau instruksi prosesor yang spesifik terhadap mesin tertentu, melainkan berupa bytecode yang berupa file berekstensi .class. Bytecode tersebut dapat langsung Anda eksekusi di tiap platform yang dengan menggunakan Java Virtual Machine (JVM) sebagai interpreter terhadap bytecode tersebut.
JVM sendiri adalah sebuah aplikasi yang berjalan di atas sebuah sistem operasi dan menerjemahkan bytecode program Java dan mengeksekusinya, sehingga secara konsep bisa dianggap sebagai sebuah interpreter. Proses pengeksekusian program Java dapat dilukiskan seperti di Gambar 1. Dengan cara ini, sebuah program Java yang telah dikompilasi akan dapat berjalan di platform mana saja, asalkan ada JVM di sana.
Kompiler dan interpreter untuk program Java berbentuk Java Development Kit (JDK) yang diproduksi oleh Sun Microsystems. JDK ini dapat didownload gratis dari situs java.sun.com. Interpreter untuk program Java sendiri sering juga disebut Java Runtime atau Java Virtual Machine. Interpreter Java, tanpa kompilernya, disebut Java Runtime Environment (JRE) dapat didownload juga di situs yang sama. Untuk mengembangkan program Java dibutuhkan JDK, sementara jika hanya ingin menjalankan bytecode Java cukup dengan JRE saja. Namun untuk mengeksekusi applet (sebuah bytecode Java juga) Anda biasanya tidak perlu lagi mendownload JRE karena browser yang Java-enabled telah memiliki JVM sendiri.

Library

Selain kompiler dan interpreter, bahasa Java sendiri memiliki library yang cukup besar yang dapat mempermudah Anda dalam membuat sebuah aplikasi dengan cepat. Library ini sudah mencakup untuk grafik, desain user interface, kriptografi, jaringan, suara, database, dan lain-lain.

OO

Java adalah bahasa pemrograman berorientasi objek. Pemrograman berorientasi objek secara gamblang adalah teknik untuk mengorganisir program dan dapat dilakukan dengan hampir semua bahasa pemrograman. Namun Java sendiri telah mengimplementasikan berbagai fasilitas agar seorang programer dapat mengoptimalkan teknik pemrograman berorientasi objek.
Sedikit perbandingan tambahan dengan bahasa C dan C++, Java banyak mewarisi konsep orientasi objek dari C++ namun dengan menghilangkan aspek-aspek kerumitan dalam bahasa C++ tanpa mengurangi kekuatannya. Hal ini mempermudah programer pemula untuk mempelajari Java namun mengurangi keleluasaan programer berpengalaman dalam mengutak-atik sebuah program. Di balik kemudahan yang ditawarkan Java, luasnya fasilitas library Java sendiri membuat seorang programer membutuhkan waktu yang tidak singkat untuk dapat menguasai penggunaan library-library tersebut.

Memulai Pemrograman Java

Untuk membuat program Java, seperti telah disebutkan sebelumnya, Anda membutuhkan JDK. Proses instalasi JDK tersebut sangat mudah dan tidak membutuhkan pengetahuan tertentu. Namun untuk menggunakannya Anda perlu melakukan beberapa penyesuaian dengan sistem operasi Anda. Umumnya yang perlu Anda lakukan adalah memasukkan path ke direktori JDK Anda ke setting path pada sistem operasi Anda. Misalkan direktori JDK Anda adalah C:\jdk1.4 maka pada Windows 98 Anda cukup menambahkan baris perintah SET PATH=C:\jdk1.4\bin pada file autoexec.bat Anda. Untuk Windows NT/2000/XP Anda cukup menambahkan direktori C:\jdk1.4\bin pada variabel path di System Environment. Caranya: klik kanan ikon My Computer, pilih Properties. Kemudian pilih tab Advanced. Lalu klik tombol Environment Variables, cari variabel path, kemudian tambahkan path direktori JDK Anda ke dalam variabel tersebut. Untuk Linux, tambahkan baris perintah SET CLASSPATH=(direktori jdk Anda) ke file profile Anda. Untuk mencoba JDK, ketikkan perintah java dan javac pada shell prompt (atau DOS Command Prompt). Jika perintah tersebut sudah dikenali maka program java atau javac akan menampilkan sintaks penggunaan. Untuk kemudahan dan berbagai fasilitas tambahan Anda dapat menggunakan Integrated Development Environment (IDE) untuk bahasa Java seperti Visual Café dari Symantec atau JBuilder dari Borland.
Urutan langkah-langkah yang harus Anda lakukan untuk membuat sebuah program Java sederhana adalah:
  1. Membuat source code program dengan editor teks apapun. Ingat, file tersebut harus berekstensi .java dan case sensitive.
  2. Mengkompile source code dengan perintah javac. Misalnya: javac HelloWorld.java. Jika berhasil, hasilnya adalah file bytecode berakhiran .class.
  3. Mengeksekusi bytecode dengan perintah java. Parameter dari perintah ini adalah nama file hasil kompilasi tanpa ekstensi .class. Contoh: java HelloWorld.

Source Code

Berikut kode untuk HelloWorld.java:
public class HelloWorld
{
    public static void main(String[] args) 
    {
        System.out.println("Apa Kabar Dunia?");
    }
}
Dan ini sebuah contoh lain, yaitu applet sederhana untuk menampilkan teks di applet. Sebutlah file ini bernama HelloWorldApplet.java:
import java.awt.Graphics;

public class HelloWorldApplet extends java.applet.Applet
{
    public void paint(Graphics g) 
    {
        g.drawString("Apa Kabar Dunia?", 5, 25);
    }
}
Secara gamblang dapat diperhatikan bahwa struktur kedua program sangat mirip, dan hanya berbeda dalam konteks eksekusi. Kedua program ini akan dibahas lebih lanjut setelah kita membahas cara mengkompile dan mengeksekusi program tersebut.
Perlu diingat bahwa bahasa Java bersifat case sensitive, sehingga Anda harus memperhatikan penggunaan huruf besar dan kecil. Selain itu penulisan source code program tidak harus memperhatikan bentuk tertentu, sehingga Anda bisa saja menuliskan semua baris source code tersebut dalam satu baris asal Anda tidak lupa membubuhkan tanda titik koma (;), atau menuliskan tiap kata dalam satu baris tersendiri. Namun dianjurkan Anda mengikuti layout seperti pada contoh agar program Anda mudah dibaca dan dimengerti.

Kompilasi

Setelah kedua file disave dengan nama HelloWorld.java dan HelloWorldApplet.java, kita akan mengkompile kedua program tersebut dengan perintah:
prompt> javac HelloWorld.java
prompt> javac HelloWorldApplet.java
Perlu diperhatikan bahwa direktori aktif Anda saat ini adalah direktori tempat Anda meletakkan file-file program tersebut. Anda tetap dapat mengkompile program Anda dari direktori berbeda dengan perintah:
prompt> javac (direktori program)/namafile.java
Setelah perintah ini selesai, Anda akan melihat bahwa telah tercipta dua buah file .class, yaitu bytecode hasil kompilasi source code kita.

Sintaks Program

Sekarang kita akan mencoba membahas elemen-elemen dalam kedua source code tersebut.
Pada awal Listing 2 kita menemukan perintah import. Pada tahap awal ini Anda perlu mengetahui bahwa pernyataan tersebut hanya berfungsi mempermudah penulisan metode atau dalam bahasa pemrograman lain disebut prosedur atau fungsi. Jadi Anda hanya perlu menulis Graphics sebagai pengganti java.awt.Graphics, karena kita telah mengimpor java.awt.Graphics.
Kemudian di masing-masing listing terdapat pernyataan public class. Pernyataan ini adalah pernyataan pembuka sebuah kelas. Kelas sendiri digunakan untuk menciptakan objek. Ingat bahwa Java berorientasi objek. Kata public di depannya berfungsi agar kelas tersebut dapat diakses oleh semua program lain. Untuk saat ini anggaplah objek sebagai suatu item yang dapat dimanipulasi oleh sebuah program. Dalam Listing 2 terdapat tambahan kata extends. Hal ini berarti kelas yang kita buat akan mewarisi sifat-sifat dari kelas yang kita extends. Dengan kata lain kita menjadikan kelas yang kita extends sebagai himpunan bagian dari kelas kita buat.
Kemudian kita menemukan baris pernyataan public static void main(String[] args) dan public void paint(Graphics g). Keduanya adalah pernyataan pembuka sebuah metode. Metode sendiri adalah kumpulan pernyataan untuk melakukan suatu tugas tertentu dalam kelas. Keduanya sebenarnya mempunyai fungsi yang sama namun dalam konteks yang berbeda. Dalam setiap aplikasi harus ada sebuah metode yang bernama main yang akan dieksekusi pertama kali saat program tersebut dieksekusi. Sementara dalam applet, metode yang pertama kali akan dieksekusi ketika applet diload adalah paint. Kata public di depannya mempunyai fungsi yang sama dengan kata public yang ada di depan baris permulaan kelas. Namun nantinya Anda akan menemukan juga bentuk lain seperti private dan protect yang akan kita bahas nanti.
Pada Listing 1 terdapat kata static pada pernyataan pembuka metode main. Hal ini berarti metode main tidak mengubah atau menggunakan objek yang diciptakan oleh kelas tersebut, sehingga dapat dikatakan berdiri sendiri dan tidak terikat dengan objek. Dalam metode main dalam aplikasi, parameternya adalah selalu String[] args, di mana args hanyalah sebuah nama dari objek array dari String. Array ini nantinya akan berisi parameter-parameter yang diberikan user sebagai argumen command line. Sementara Anda tidak perlu mengerti mengenai parameter tersebut, cukup diingat bahwa bentuk metode main harus selalu demikian.
Kemudian di dalam kedua metode pada kedua listing tersebut, kita menemukan sebuah pernyataan. Anda tentu dapat saja meletakkan lebih dari satu pernyataan dalam sebuah metode. Setiap pernyataan dalam sebuah metode dipisahkan oleh titik koma dan akan dieksekusi satu persatu. Kedua pernyataan pada listing ternyata memanggil sebuah metode lain yaitu metode println dan paint. Tentunya dapat Anda perhatikan bahwa untuk memanggil sebuah metode diperlukan tiga komponen yaitu:
  1. Objek yang ingin kita pakai. Dalam hal ini objek System.out dan Graphics g.
  2. Nama metode yang ingin kita pakai. Dalam hal ini println dan paint.
  3. Sepasang tanda kurung yang berisi informasi tambahan yang diperlukan oleh metode yang dipanggil, yaitu parameter.
Dalam Listing 1, pernyataan System.out.println("Apa Kabar Dunia?"); berarti carilah objek out dalam kelas System kemudian panggil metode println dari objek out dengan parameter berupa string "Apa Kabar Dunia?". Sedang dalam Listing 2, pernyataan g.drawString("Apa Kabar Dunia?", 5, 25); berarti carilah objek g kemudian panggil metode drawString pada objek g dengan parameter "Apa Kabar Dunia?”, 5, 25);.

Eksekusi

Setelah selesai membahas sintaks dasar Java dalam kedua listing, selanjutnya kita akan mencoba mengeksekusi kedua program ini. Untuk program pertama yang berupa aplikasi biasa, kita tinggal mengetikkan perintah java HelloWorld pada prompt dan pesan Apa Kabar Dunia? akan tampil di layar (atau mungkin di tempat lain, bergantung sistem operasi Anda). Sedangkan untuk applet kita mesti membuat sebuah file HTML sebagai pembungkus—atau pemanggilnya. Berikut diberikan contoh file HTML untuk membungkus applet yang kita buat.
<HTML>
  <HEAD>
    <TITLE>Coba Applet</TITLE>
  </HEAD>
  <BODY>
    <APPLET CODE="HelloWorldApplet.class" WIDTH=150 HEIGHT=25>
    </APPLET>
  </BODY>
</HTML>
Beri nama helloword.html dan simpanlah di direktori yang sama dengan lokasi file-file .java dan .class sebelumnya. Untuk mengeksekusi applet kita cukup membuka file HTML tersebut di browser yang Java-enabled atau mengetikkan perintah appletviewer namafile.html di prompt.

Penutup

Untuk saat ini Anda telah mempunyai gambaran tentang bagaimana proses pembuatan program Java secara sederhana dalam bentuk aplikasi biasa atau applet. Anda juga dapat mencoba mengembangkan program sederhana tersebut sesuai dengan keinginan Anda berdasarkan hal-hal yang sudah Anda ketahui. Konsep dasar yang sudah Anda dapatkan akan dikembangkan lebih lanjut dalam topik-topik tutorial selanjutnya. Selamat mencoba!
Ari Hermawan mahasiswa Fakultas Ilmu Komputer UI yang sehari-hari berada di Lab kampus memelototi forum-forum Java dan majalah Java di Internet. Sebagai pimpinan pokuz, konsultan Java independen ini selalu disibukkan dengan usaha mempromosikan Java di Indonesia. arih, nick Internetnya, dapat dihubungi di arih@pokuz.net.

visual basic

Visual Basic

Dari Wikipedia bahasa Indonesia, ensiklopedia bebas
Langsung ke: navigasi, cari
Visual Basic
Paradigma: Berbasis objek
Pengembang: Microsoft
Rilis terbaru: Visual Basic 6 / 1998
Terpengaruh oleh: (Inggris) QuickBASIC
Mempengaruhi: Visual Basic .NET, Gambas, (Inggris) REALbasic, (Inggris) Basic4ppc
Sistem operasi: Microsoft Windows, MS-DOS
Situs web: msdn.microsoft.com

Microsoft Visual Basic (sering disingkat sebagai VB saja) merupakan sebuah bahasa pemrograman yang menawarkan Integrated Development Environment (IDE) visual untuk membuat program perangkat lunak berbasis sistem operasi Microsoft Windows dengan menggunakan model pemrograman (COM).
Visual Basic merupakan turunan bahasa pemrograman BASIC dan menawarkan pengembangan perangkat lunak komputer berbasis grafik dengan cepat.
Beberapa bahasa skrip seperti Visual Basic for Applications (VBA) dan Visual Basic Scripting Edition (VBScript), mirip seperti halnya Visual Basic, tetapi cara kerjanya yang berbeda.[1]
Para programmer dapat membangun aplikasi dengan menggunakan komponen-komponen yang disediakan oleh Microsoft Visual Basic Program-program yang ditulis dengan Visual Basic juga dapat menggunakan Windows API, tapi membutuhkan deklarasi fungsi luar tambahan.[1]
Dalam pemrograman untuk bisnis, Visual Basic memiliki pangsa pasar yang sangat luas.[1] Sebuah survey yang dilakukan pada tahun 2005 menunjukkan bahwa 62% pengembang perangkat lunak dilaporkan menggunakan berbagai bentuk Visual Basic, yang diikuti oleh C++, JavaScript, C#, dan Java.[1]

Daftar isi

Sejarah

Bill Gates, pendiri Microsoft, memulai bisnis perangkat lunak dengan mengembangkan interpreter bahasa Basic untuk Altair 8800, untuk kemudian ia ubah agar dapat berjalan di atas IBM PC dengan sistem operasi DOS. Perkembangan berikutnya ialah diluncurkannya BASICA (basic-advanced) untuk DOS. Setelah BASICA, Microsoft meluncurkan Microsoft QuickBasic dan Microsoft Basic (dikenal juga sebagai Basic Compiler).
Visual Basic adalah pengembangan dari bahasa komputer BASIC (Beginner’s All-purpose Symbolic Instruction Code). Bahasa BASIC diciptakan oleh Professor John Kemeny dan Thomas Eugene Kurtz dari Perguruan Tinggi Dartmouth pada pertengahan tahun 1960-an.[2] Bahasa program tersebut tersusun mirip dengan bahasa Inggris yang biasa digunakan oleh para programer untuk menulis program-program komputer sederhana yang berfungsi sebagai pembelajaran bagi konsep dasar pemrograman komputer.
Sejak saat itu, banyak versi BASIC yang dikembangkan untuk digunakan pada berbagai platform komputer,[2] seperti Microsoft QBASIC, QUICKBASIC, GWBASIC, IBM BASICA, Apple BASIC dan lain-lain.
Apple BASIC dikembangkan oleh Steve Wozniak, mantan karyawan Hewlett Packard dan teman dekat Steve Jobs (pendiri Apple Inc.).[2] Steve Jobs pernah bekerja dengan Wozniak sebelumnya (mereka membuat game arcade “Breakout” untuk Atari). Mereka mengumpulkan uang dan bersama-sama merakit PC, dan pada tanggal 1 April 1976 mereka secara resmi mendirikan perusahaan komputer Apple. Popularitas dan pemakaian BASIC yang luas dengan berbagai jenis komputer turut berperan dalam mengembangkan dan memperbaiki bahasa itu sendiri, dan akhirnya berujung pada lahirnya Visual Basic yang berbasis GUI (Graphic User Interface) bersamaan dengan Microsoft Windows. Pemrograman Visual Basic begitu mudah bagi pemula dan programer musiman karena ia menghemat waktu pemrograman dengan tersedianya komponen-komponen siap pakai.[2]
Hingga akhirnya Visual Basic juga telah berkembang menjadi beberapa versi, sampai yang terbaru, yaitu Visual Basic 2010. Bagaimanapun juga Visual Basic 6.0 tetap menjadi versi yang paling populer karena mudah dalam membuat programnya dan ia tidak menghabiskan banyak memori.[2]
Sejarah BASIC di tangan Microsoft sebagai bahasa yang diinterpretasi (BASICA) dan juga bahasa yang dikompilasi (BASCOM) membuat Visual Basic diimplementasikan sebagai gabungan keduanya.[3] Programmer yang menggunakan Visual Basic bisa memilih kode bahasa pemrograman yang dikompilasi atau kode yang harus bahasa pemrograman yang diinterpretasikan sebagai hasil porting dari kode VB.[3] Sayangnya, meskipun sudah terkompilasi jadi bahasa mesin, DLL bernama MSVBVMxx.DLL tetap dibutuhkan. Namun karakteristik bahasa terkompilasi tetap muncul (ia lebih cepat dari kalau kita pakai mode terinterpretasi).[3]

Perkembangan Visual Basic

Visual Basic 1.0 dikenalkan pada tahun 1991. Konsep pemrograman dengan metode drag-and-drop untuk membuat tampilan aplikasi Visual Basic ini diadaptasi dari prototype generator form yang dikembangkan oleh Alan Cooper dan perusahaannya, dengan nama Tripod. Microsoft kemudian mengontrak Cooper dan perusahaannya untuk mengembangkan Tripod menjadi sistem form yang dapat diprogram untuk Windows 3.0, di bawah kode nama Ruby.
Tripod tidak memiliki bahasa pemrograman sama sekali. Ini menyebabkan Microsoft memutuskan untuk mengkombinasikan Ruby dengan bahasa pemrograman Basic untuk membuat Visual Basic.

Dari waktu ke waktu

  • Proyek Thunder dimulai.
  • Visual Basic 1.0 dirilis untuk Windows pada Comdex/Windows Trade Show di Atlanta, Georgia pada Mei 1991.
  • Visual Basic 1.0 untuk DOS dirilis pada September 1992. Bahasa pemrogramannya sendiri tidak terlalu kompatibel dengan Visual Basic untuk Windows, karena sesungguhnya itu adalah versi selanjutnya dari kompiler BASIC berbasis DOS yang dikembangkan oleh Microsoft sendiri, yaitu QuickBASIC. Antarmuka dari program ini sendiri menggunakan antarmuka teks, dan memanfaatkan kode-kode ASCII tambahan untuk mensimulasikan tampilan GUI.
  • Visual Basic 2.0 dirilis pada November 1992. Lingkungan pemrogramannya lebih mudah untuk digunakan, dan kecepatannya lebih ditingkatkan.
  • Visual Basic 3.0 dirilis pada musim semi 1993 dan hadir dalam dua versi: Standar dan Professional. VB3 juga menyertakan versi 1.1 dari Microsoft Jet Database Engine yang dapat membaca dan menulis database Jet/Access 1.x.
  • Visual Basic 4.0 (Agustus 1995) adalah versi pertama yang dapat membuat program 32-bit seperti program 16-bit. VB4 juga memperkenalkan kemampuannya dalam membuat aplikasi non-GUI. Bila versi sebelumnya menggunakan kontrol VBX, sejak VB4 dirilis Visual Basic menggunakan kontrol OLE (dengan ekstensi file *.OCX), yang lebih dikenal kemudian dengan kontrol ActiveX.
  • Dengan versi 5.0 (Februari 1997), Microsoft merilis Visual Basic eksklusif untuk versi 32-bit dari Windows. Para programmer yang lebih memilih membuat kode 16-bit dapat meng-impor program yang ditulis dengan VB4 ke versi VB5, dan program-program VB5 dapat dikonversi dengan mudah ke dalam format VB4.
  • Visual Basic 6.0 (pertengahan 1998) telah diimprovisasi di beberapa bagian, termasuk kemampuan barunya, yaitu membuat aplikasi web. Meskipun kini VB6 sudah tidak didukung lagi, tetapi file runtime-nya masih didukung hingga Windows 7.

Pemrograman Berorientasi Objek (OOP)

Visual Basic merupakan bahasa yang mendukung Pemrograman berorientasi objek , namun tidak sepenuhnya, Beberapa karakteristik obyek tidak dapat dilakukan pada Visual Basic, seperti Inheritance tidak dapat dilakukan pada class module, Polymorphism secara terbatas bisa dilakukan dengan mendeklarasikan class module yang memiliki Interface tertentu. Visual Basic (VB) tidak bersifat case sensitif.[4]

Desain Visual dan Komponen

Visual Basic menjadi populer karena kemudahan desain form secara visual dan adanya kemampuan untuk menggunakan komponen-komponen ActiveX yang dibuat oleh pihak lain.[5] Namun komponen ActiveX memiliki masalahnya tersendiri yang dikenal sebagai DLL hell,Pada Visual Basic .NET, Microsoft mencoba mengatasi masalah DLL hell dengan mengubah cara penggunaan komponen (menjadi independen terhadap registry).[5]


kryptografi

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