Tutorial Pemrograman Kriptografi C++ dan Java

Zae
Sekolah  Tinggi Sandi Negara (STSN) membuka pendaftaran di tahun 2013, Silahkan kunjungi aja di spmb.stsn-nci.ac.id
Zae
Pada tahu gak ya apa itu APENDO ? 
APENDO adalah suatu perangkat lunak keamanan informasi elektronik yang dikembangkan oleh Lemsaneg dan hanya diperkenankan untuk aplikasi e-Procurement yang diselenggarakan oleh LKPP. APENDO terdiri dari dua aplikasi yaitu APENDO Peserta dan APENDO Panitia.

Gambar APENDO

APENDO Peserta adalah aplikasi yang digunakan oleh Penyedia barang/jasa untuk melakukan proses penggabungan dokumen elektronik (file asli) jika jumlahnya lebih dari satu, kompresi dan menyandi (enkripsi) file asli, dan memiliki keluaran satu file sandi berekstensi .rhs yang mengandung identitas Penyedia barang/jasa dan identitas paket lelang yang diikuti.

APENDO Panitia adalah aplikasi yang digunakan oleh Panitia Pengadaan untuk melakukan proses membuka (dekripsi) satu file sandi berekstensi .rhs, dekompresi, pemisahan file asli jika jumlahnya lebih dari satu, dan memiliki keluaran file asli sesuai dengan jumlahnya, serta menampilkan identitas Penyedia barang/jasa dan identitas paket lelang yang diikuti.

Yang menjadi pertanyaan adalah algoritma kriptografi yang digunakan apa ya? Apakah menggunakan algoritma Simetrik (AES,3DES, dll) dan Asimetrik (RSA, dll)? 

Berdasarkan narasumber, ternyata APENDO menggunakan algoritma propreatary lho? Artinya adalah algoritma dibuat sendiri oleh Lemsaneg. WOW  Keren, tapi kok belum ada namanya ya. 

Salut buat Lemsaneg, semoga banyak produk dalam negeri yang dibuat oleh Lemsaneg untuk kemanan informasi. 








Zae
Kekuatan suatu algoritma kriptografi harus memiliki konsep konfusi dan difusi (Claude Shannon). Konfusi adalah mengaburkan hubungan antara plaintext dan ciphertext yang menimbulkan kesulitan dalam usaha musuh untuk mencari keteraturan dan pola statistik antara plaintext dan ciphertext. Sedangkan Difusi adalah menyebarkan redudansi plaintext dengan menyebarkan masukan ke seluruh ciphertext


 
Zaenal Suhardono
Zae
Banyak mahasiswa yang menanyakan kepada saya, Mas punya aplikasi chating ndak ?.  Semoga tulisan ini menjawab pertanyaan tersebut.
Baik, saya mulai sebuah pertanyaan, apakah sudah pernah tahu apa yang namanya wincryptochat?. Buat yang belum, menurut saya aplikasi open source ini sangat baik buat pembelajaran, terutama buat mahasiswa yang mau mengambil tugas akhir dengan tema secure chat. Mahasiswa tinggal menggunakan jurus "ATM", Amati, Tiru dan Modifikasi..hohohoho. Wincryptochat merupakan aplikasi chating open source, aplikasi ini menggunakan algoritma RSA dan AES. Algoritma RSA digunakan untuk pertukaran kunci 256 bit yang digunakan oleh algoritma AES. Algoritma AES ini nantinya yang akan mengenkrip selama komunikasi chating. Nih tampilan wincryptochat.


Buat yang ingin download source nya silahkan download di SINI
Zae
Perbedaan yang signifikan antara MD4 dan MD5 adalah sebagai berikut :
1.        MD5 memiliki empat putaran, sedangkan MD4 hanya tiga. Akibatnya, fungsi kompresi MD5 meliputi 64 langkah, sedangkan fungsi kompresi MD4 memiliki 48 langkah.
2.        Setiap langkah MD5 memiliki konstanta tambahan yang unik, sedangkan setiap putaran dari MD4 menggunakan konstan yang tetap.
3.        Fungsi G di putaran kedua MD5 kurang simetris daripada fungsi G MD4.
4.        Setiap langkah MD5 menambahkan hasil dari langkah sebelumnya, yang tidak terjadi di MD4. Tujuan modifikasi ini adalah untuk menghasilkan avalanche effect yang lebih cepat.
5.        Pada MD5, urutan input words diakses pada putaran kedua dan ketiga yang kurang mirip satu sama lain daripada yang terjadi di MD4.
6.        Diklaim bahwa di MD5, “jumlah pergeseran dalam setiap putaran telah kira-kira dioptimalkan, untuk hasil ‘avalanche effect‘ yang lebih cepat”. Selain itu, pergeseran bekerja di masing-masing putaran MD5 yang berbeda, yang tidak terjadi di MD4. 


Zaenal Suhardono
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