Tutorial Pemrograman Kriptografi C++ dan Java

Zae
Dibawah ini merupakan source code  algoritma AES 128 menggunakan bahasa pemrograman java. Disini inputan atau plainteks nya berupa string, untuk yang file akan saya posting berikutnya. Source saya Run menggunakan Netbeans. Agar source dapat dijalankan, download dulu "The Bouncy Castle Crypto package" ,  silahkan download di SINI. Selanjutkan tambahkan file .jar tersebut di Libraries. 

Berikut source code nya :

package aes;

/**
 *
 * @author zae
 */
import java.security.Security;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;

public class Main {
  public static void main(String[] args) throws Exception {
    Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
    byte[] input = "tes".getBytes();
    byte[] keyBytes = new byte[] { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
        0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f };

    SecretKeySpec key = new SecretKeySpec(keyBytes, "AES");

    Cipher cipher = Cipher.getInstance("AES/ECB/PKCS7Padding", "BC");

    System.out.println(new String(input));

    // encryption pass
    cipher.init(Cipher.ENCRYPT_MODE, key);

    byte[] cipherText = new byte[cipher.getOutputSize(input.length)];
    int ctLength = cipher.update(input, 0, input.length, cipherText, 0);
    ctLength += cipher.doFinal(cipherText, ctLength);
    System.out.println(new String(cipherText));
    System.out.println(ctLength);

    // decryption pass
    cipher.init(Cipher.DECRYPT_MODE, key);
    byte[] plainText = new byte[cipher.getOutputSize(ctLength)];
    int ptLength = cipher.update(cipherText, 0, ctLength, plainText, 0);
    ptLength += cipher.doFinal(plainText, ptLength);
    System.out.println(new String(plainText));
    System.out.println(ptLength);
  }
}

Penjelasan dari source code diatas adalah

* Input berupa string, dalam kasus ini, saya meng-enkrip : "tes"
   byte[] input = "tes".getBytes();

*Kunci yang dipakai adalah "123456789abcdef"
SecretKeySpec key = new SecretKeySpec(keyBytes, "AES");

dimana keyBytes adalah array byte yang isinya kunci
byte[] keyBytes = new byte[] { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f }; 

* algoritma yang dipakai adalah AES, dalam hal ini AES 128, karena kunci yang dipakai 128 bit
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS7Padding", "BC");

Setelah di Run maka hasilnya sebagai berikut
run:
tes                 //output
System.out.println(new String(input));
O�, qX(PNN�y �    //output System.out.println(new String(cipherText));
16                  //output System.out.println(ctLength);
tes                 //output System.out.println(new String(plainText));
3                   //output System.out.println(ptLength);

Selamat dicoba
 
Zaenal Suhardono
Zae
Blowfish dan twofish keduanya dirancang oleh orang yang sama, yaitu Bruce Schneier. Namun keduanya berasal dari masa yang berbeda. Blowfish merupakan algoritma yang lebih tua, ia dirancang pada tahun 1993. Tujuan perancangannya adalah untuk menggantikan algoritma DES yang sudah sangat tua (sejak 1977). Algoritma DES sendiri merupakan algoritma standar kriptografi yang ditetapkan oleh NIST – sebuah lembaga yang mengatur tentang standar-standar. Antara DES dan blowfish memiliki banyak kesamaan. Kesamaan mendasar adalah keduanya memiliki panjang blok yang sama, yaitu 64 bit. Namun tentu blowfish karena jauh lebih muda, memiliki banyak kelebihan dibandingkan dengan DES. Blowfish sangat terkenal di dunia kriptografi, alasan utamanya adalah karena lisensinya yang bebas dan gratis. Bahkan komunitas open source menghargai blowfish dengan mempercayai blowfish menjadi salah satu Open Cryptography Interface (OCI) pada kernel Linux versi 2.5 keatas.
Sedangkan twofish adalah suksesor dari blowfish. Pada tahun 1997, dengan kemajuan teknologi prosesor yang sangat cepat, maka bukanlah ahal yang sulit untuk menjebol algoritma kriptografi dengan panjang kunci 64 bit. Untuk itu NIST membuka sayembara untuk umum. Semua pihak boleh mensubmit algoritmanya, namun tentu dengan syarat-syarat kualitas minimum, seperti panjang blok minimum 128 bit. Twofish merupakan salah satu peserta, dan berhasil meraih posisi 5 besar, dan bahkan secara tidak resmi mendapatkan posisi 2 besar. Lima besar algoritma yang lolos semuanya memiliki tingkat keamanan yang hampir seimbang, sehingga penilaian disampingkan menjadi performansi kecepatan. Twofish dan rijndael bersaing memperebutkan posisi teratas. Twofish unggul di nomor kunci 256 bit, namun kalah di nomor kunci 128 bit. Akhirnya rijndael yang keluar sebagai pemenang dan berubah nama menjadi AES, suksesor dari DES.

Pengen tahu lebih dalam mengenai algoritma blowfish dan twofish silahkan download artikel ini
(sumber: http://www.informatika.org/~rinaldi/Kriptografi/2006-2007/Makalah1/Makalah1-004.pdf)
 
Zaenal Suhardono
Zae
Camellia merupakan algoritma kriptografi simetris blok cipher. Dalam Camellia proses enkripsi dan dekripsi dilakukan pada blok data berukuran 128-bit dengan kunci yang dapat berukuran 128-bit, 192-bit, 256-bit. Algoritma Camellia dikembangkan oleh :
  • Kazumaro Aoki (NTT - Nippon Telegraph and Telephone Corp.)
  • Tetsuya Ichikawa (Mitsubishi electric Corp.)
  • Masayuki Kanda (NTT – Nippon Telegraph and Telephone Corp.)
  • Mitsuru Matsui (Mitsubishi electric Corp.)
  • Shiho Moriai (NTT – Nippon Telegraph and Telephone Corp.)
  • Junko Nakajima (Mitsubishi electric Corp.)
  • Toshio Tokita (Mitsubishi electric Corp.)
Lengkapnya mengenai algoritma Camellia silahkan Download di SINI [sumber : http://budi.insan.co.id/courses/ec5010/projects/rifqi-report.pdf]

Zaenal Suhardono
Zae
Algoritma Kriptografi LOKI97 merupakan salah satu kandidat Advanced Encryption Standard (AES) yang diajukan kepada NIST. Algoritma Kriptografi LOKI97 dirancang oleh L. Brown dan J. Pieprzyk. NIST mementukan beberapa criteria, diantaranya adalah kunci yang digunakan harus panjang, ukuran blok yang digunakan harus lebih besar, lebih cepat, dan fleksibel. Salah satu kandidat untuk AES adalah algoritma LOKI97. Algoritma ini telah memenuhi semua criteria yang diajukan oleh NIST. LOKI97 adalah algoritma yang menggunakan ukuran blok data sebesar 128 bit dan menggunakan kunci yang dapat bervariasi yaitu 128,192 dan 256 bit.

Lengkapnya Download di SINI [Sumber : http://budi.insan.co.id/courses/el7010/2003/report-avon.pdf]

Zaenal Suhardono
Zae
Berikut saya list semua algoritma kriptografi yang terpublish di internet. Semoga membantu untuk kalangan pecinta kriptografi. Sumber : wikipedia

* Algoritma Kriptografi Simetrik Block Cipher
   

* Algoritma kriptografi Simetrik Stream Cipher


Nama Algoritma : A5/1 · A5/2 · E0 · FISH · ISAAC · MUGI · Panama · Phelix · Pike · Py · QUAD  · Scream · SEAL · SNOW · SOBER · SOBER-128 · VEST · WAKE

Yang Sering Digunakan : RC4 · Block ciphers in stream mode

* Algoritma Kriptografi Kunci Publik


* Fungsi Hash


* Algoritma MAC

DAA · CBC-MAC · HMAC · OMAC/CMAC · PMAC · VMAC · UMAC · Poly1305-AES


Semoga bermanfaat

  Zaenal Suhardono
Zae
Advanced Encryption Standard (AES) merupakan algoritma kriptografi  simetrik yang dapat digunkan untuk mengamakan data . Algoritma AES adalah blok chipertext simetrik yang dapat mengenkripsi (encipher) dan dekripsi (decipher) informasi. Enkripsi merubah data yang tidak dapat lagi dibaca disebut ciphertext; sebaliknya dekripsi adalah merubah ciphertext data menjadi bentuk semula yang kita kenal sebagai plaintext. Algoritma AES is mengunakan kunci kriptografi 128, 192, dan 256 bits untuk mengenkrip dan dekrip data pada blok 128 bits.

Ingin tahu lebih dalam mengenai algoritma AES, silahkan download artikel mengenai algoritma ini yang saya kumpulkan dari beberapa sumber : 
1. Algoritma AES (Advanced Encryption Standard) dan Penggunaannya dalam Penyandian Pengompresian Data [sumber : http://www.informatika.org/~rinaldi/Matdis/2008-2009/Makalah2008/Makalah0809-090.pdf]. Artikel  DOWNLOAD DI SINI
2.   ADVANCED ENCRYPTION STANDARD (AES) [http://www.p4tkipa.org]. Artikel  DOWNLOAD DI SINI
3.   ADVANCED ENCRYPTION STANDARD (AES) 128 [r12k4.files.wordpress.com]. Artikel  DOWNLOAD DI SINI
4.   ENKRIPSI DAN DEKRIPSI DENGAN ALGORITMA AES 256 UNTUK SEMUA JENIS FILE. [ti.ukdw.ac.id/ojs/index.php/informatika/article/download/69/29]. Artikel DOWNLOAD DI SINI

Zaenal Suhardono
Zae
 Udah pada tahu kan ya, mengenai E-KTP, bagi yang belum silahkan baca artikel dibawah ini :


Apa itu e-KTP,
e-KTP atau KTP Elektronik adalah dokumen kependudukan yang memuat sistem keamanan / pengendalian baik dari sisi administrasi ataupun teknologi informasi dengan berbasis pada database kependudukan nasional.
Penduduk hanya diperbolehkan memiliki 1 (satu) KTP yang tercantum Nomor Induk Kependudukan (NIK). NIK merupakan identitas tunggal setiap penduduk dan berlaku seumur hidup
Nomor NIK yang ada di e-KTP nantinya akan dijadikan dasar dalam penerbitan Paspor, Surat Izin Mengemudi (SIM), Nomor Pokok Wajib Pajak (NPWP), Polis Asuransi, Sertifikat atas Hak Tanah dan penerbitan dokumen identitas lainnya (Pasal 13 UU No. 23 Tahun 2006 tentang Adminduk)
Quote:
Autentikasi Kartu Identitas (e-ID) biasanya menggunakan biometrik yaitu verifikasi dan validasi sistem melalui pengenalan karakteristik fisik atau tingkah laku manusia. Ada banyak jenis pengamanan dengan cara ini, antara lain sidik jari (fingerprint), retina mata, DNA, bentuk wajah, dan bentuk gigi. Pada e-KTP, yang digunakan adalah sidik jari.

Penggunaan sidik jari e-KTP lebih canggih dari yang selama ini telah diterapkan untuk SIM (Surat Izin Mengemudi). Sidik jari tidak sekedar dicetak dalam bentuk gambar (format jpeg) seperti di SIM, tetapi juga dapat dikenali melalui chip yang terpasang di kartu. Data yang disimpan di kartu tersebut telah dienkripsi dengan algoritma kriptografi tertentu. Proses pengambilan sidik jari dari penduduk sampai dapat dikenali dari chip kartu adalah sebagai berikut:
Sidik jari yang direkam dari setiap wajib KTP adalah seluruh jari (berjumlah sepuluh), tetapi yang dimasukkan datanya dalam chip hanya dua jari, yaitu jempol dan telunjuk kanan. Sidik jari dipilih sebagai autentikasi untuk e-KTP karena alasan berikut:
1. Biaya paling murah, lebih ekonomis daripada biometrik yang lain
2. Bentuk dapat dijaga tidak berubah karena gurat-gurat sidik jari akan kembali ke bentuk semula walaupun kulit tergores
3. Unik, tidak ada kemungkinan sama walaupun orang kembar

Quote:
Informasi penduduk yang dicantumkan dalam e-KTP ditunjukkan pada layout kasar berikut:

Untuk mendapatkan informasi di atas dari penduduk, wajib KTP harus mengisi formulir tipe F1.01.
Selain tujuan yang hendak dicapai, manfaat e-KTP diharapkan dapat dirasakan sebagai berikut:
1. Identitas jati diri tunggal
2. Tidak dapat dipalsukan
3. Tidak dapat digandakan
4. Dapat dipakai sebagai kartu suara dalam pemilu atau pilkada

Quote:
Struktur e-KTP terdiri dari sembilan layer yang akan meningkatkan pengamanan dari KTP konvensional. Chip ditanam di antara plastik putih dan transparan pada dua layer teratas (dilihat dari depan). Chip ini memiliki antena didalamnya yang akan mengeluarkan gelombang jika digesek. Gelombang inilah yang akan dikenali oleh alat pendeteksi e-KTP sehingga dapat diketahui apakah KTP tersebut berada di tangan orang yang benar atau tidak. Untuk menciptakan e-KTP dengan sembilan layer, tahap pembuatannya cukup banyak, diantaranya:

1. Hole punching, yaitu melubangi kartu sebagai tempat meletakkan chip
2. Pick and pressure, yaitu menempatkan chip di kartu
3. Implanter, yaitu pemasangan antenna (pola melingkar berulang menyerupai spiral)
4. Printing,yaitu pencetakan kartu
5. Spot welding, yaitu pengepresan kartu dengan aliran listrik
6. Laminating, yaitu penutupan kartu dengan plastik pengaman

e-KTP dilindungi dengan keamanan pencetakan seperti relief text, microtext, filter image, invisible ink dan warna yang berpendar di bawah sinar ultra violet serta anti copy design.
Penyimpanan data di dalam chip sesuai dengan standar internasional NISTIR 7123 dan Machine Readable Travel Documents ICAO 9303 serta EU Passport Specification 2006. Bentuk KTP elektronik sesuai dengan ISO 7810 dengan form factor ukuran kartu kredit yaitu 53,98 mm x 85,60 mm.
Mengapa harus e-KTP?

Quote:
Proyek e-KTP dilatarbelakangi oleh sistem pembuatan KTP konvensional di Indonesia yang memungkinkan seseorang dapat memiliki lebih dari satu KTP. Hal ini disebabkan belum adanya basis data terpadu yang menghimpun data penduduk dari seluruh Indonesia. Fakta tersebut memberi peluang penduduk yang ingin berbuat curang terhadap negara dengan menduplikasi KTP-nya. Beberapa diantaranya digunakan untuk hal-hal berikut:

1. Menghindari pajak
2. Memudahkan pembuatan paspor yang tidak dapat dibuat di seluruh kota
3. Mengamankan korupsi
4. Menyembunyikan identitas (misalnya oleh para teroris)
Quote:

Kartu identitas elektronik telah banyak digunakan di negara-negara di Eropa antara lain Austria, Belgia, Estonia, Italia, Finlandia, Serbia, Spanyol dan Swedia, di Timur Tengah yaitu Arab Saudi, Uni Emirat Arab, Mesir dan Maroko, dan di Asia yaitu India dan China.
Mendagri Gamawan Fauzi membeberkan keunggulan Kartu Tanda Penduduk Elektronik (e-KTP) yang akan diterapkan di Indonesia, dibandingkan dengan e-KTP yang diterapkan di RRC dan India. Gamawan menyebut, e-KTP di Indonesia lebih komprehensif.
Di RRC, Kartu e-ID tidak dilengkapi dengan biometrik atau rekaman sidik jari. Di sana, e-ID hanya dilengkapi dengan chip yang berisi data perorangan yang terbatas. Sedang di India, sistem yang digunakan untuk pengelolaan data kependudukan adalah sistem UID (unique Identification), yang di Indonesia namanya NIK (Nomor Induk Kependudukan).
“UID diterbitkan melalui register pada 68 titik pelayanan, sedangkan program KTP elektronik di Indonesia akan dilaksanakan di 6.214 kecamatan,” ujar Gamawan.
“Dengan demikian, KTP elektronik yang akan diterapkan di Indonesia merupakan gabungan e-ID RRC dan UID India, karena KTP elektronik dilengkapi dengan biometrik dan chip,” 


Sumber : http://www.e-ktp.com/2011/06/hello-world/

Saya sangat tertarik dengan yang saya garis bawahi yaitu mengenai "algoritma enkripsi tertentu" .  Terpikir oleh ku, Apa sih algoritma enkripsi itu, akhirnya saya mendapatkan informasi itu dari PERATURAN MENTERI DALAM NEGERI
NOMOR 6 TAHUN 2011 TENTANG PERUBAHAN ATAS PERATURAN MENTERI DALAM NEGERI NOMOR 38 TAHUN 2009 TENTANG STANDAR DAN SPESIFIKASI PERANGKAT KERAS, PERANGKAT LUNAK DAN BLANGKO KARTU TANDA PENDUDUK BERBASIS NOMOR INDUK KEPENDUDUKAN SECARA NASIONAL [ Bisa di Download di SINI  ]. Dari peraturan itu dengan jelas memberikan informasi mengenai algoritma enkripsi yang dipakai. Apa itu ?

1. Pada Kode Keamanan Chip Point c.


Tanda tangan elektronik (Digital Signature) berdasarkan standar Elliptic Curve Digital Signature Algorithm paling rendah 256 bit   atau RSA 2048 bit dan Hash Algorithm SHA-256.

2. Pada Bagian Keamanan ( Security) :

Algoritma Keamanan (Security Algorithm) bersifat simetris (symmetric) berdasarkan algoritma: 3DES dengan panjang kunci 168 bit, AES 128 bit, atau setara;


Nah udah pada tahu kan kan implementasi kriptografi dalam E-KTP, apa saja algoritma enkripsi yang digunakan, namun saya belum tahu pemanfaatan algoritma itu di dalam E-KTP, yang pasti ada data yang dienkripsi dan di signature. Paling tidak kita tahu E-KTP menggunakan fitur kriptografi untuk keamanannya. 
Best Regards Pictures, Images and Photos 
Zaenal Suhardono