Selasa, 28 Mei 2013

Berikut Mengenai Dasar-Dasar Kriptografi & Implementasinya


Dokumen ini dibuat dengan tujuan untuk memasyarakatkan kriptografi dan meng-kriptografikan masyarakat. Karena, masih banyak kawan-kawan yang menganggap kriptografi sebagai ilmu yang sangat tinggi dan sulit dipelajari, bahkan ada yang mengkategorikan ilmu ini sebagai ilmu gaib. :D Saya tidak akan bilang bahwa ilmu ini mudah, dan dapat dipelajari hanya dalam waktu semalam. Tidak kawan, semua ilmu yang bagus butuh proses.
Dokumen ini tidak dibuat untuk menjadi referensi utama untuk kriptografi. Karena, kriptografi terlalu luas untuk dibukukan dalam satu buku setebal novel Lord of The Ring, apalagi dalam satu dokumen facebook seperti ini! :D Lebih tepat jika dokumen ini dijadikan sebagai “penunjuk jalan” ke dunia kriptografi yang menarik dan menyenangkan dengan kemungkinan eksploitasi tanpa batas. Untuk kawan-kawan yang sudah lebih tinggi ilmu dan pengalamannya di bidang ini, dengan segala kerendahan hati, saya mohon izin dan maklum atas kesalahan yang mungkin ada di dokumen ini.
Tujuan awal dari kriptografi adalah menyembunyikan isi pesan sehingga tidak dapat terbaca oleh pihak-pihak yang tak diinginkan, tetapi masih dapat dimengerti oleh pihak yang dituju. Seiring perkembangan jaman, kriptografi banyak diterapkan di berbagai bidang, mulai dari tukar menukar informasi di perang dunia kedua, hingga dunia komputerisasi yang kita alami saat ini.
Dokumen ini, tentu saja, tidak akan membahas bagaimana pasukan Nazi mengoperasikan “Enigma”, sehingga membingungkan pihak sekutu. Dokumen ini “hanya” akan membahas kriptografi dan implementasinya di bidang IT. Implementasi yang akan ditunjukkan juga hanya implementasi dasar dan bersifat “offline”, bukan implementasi canggih seperti “email transaction”, “pay pal autorization”, “handshake cryptographic”, dll. Tapi, percayalah kawan, semua implementasi canggih itu, berdasar dari implementasi dasar ini.
Dalam dokumen ini akan dipakai istilah yang umum dipakai dalam dokumen-dokumen kriptografi. Contohnya adalah “plain text”, yaitu pesan asli yang hendak disampaikan. “Cipher text“, yang artinya pesan yang telah di-enskripsi. Dan istilah-istilah lainnya yang mungkin membingungkan, maaf bila itu terjadi.
Sesuai judulnya, dokumen ini menggunakan Borland Delphi 7 sebagai compiler kode-kode yang digunakan. Kenapa? Yap, karena saya memang paling nyaman menggunakan Delphi dengan versi tersebut untuk hal-hal yang berbau kriptografi. Anda bisa memilih menggunakan compiler lain yang paling anda sukai. Untuk library yang dijadikan referensi kriptografi, saya selalu mempercayakan kepada bang Barton, di situs : http://www.cityinthesky.co.uk/opensource/dcpcrypt. Selain open source, alasan saya menggunakan library tersebut adalah kelengkapan dari metode kriptografi yang digunakan. Namun lagi-lagi, ini tidak mengikat. Anda bebas menggunakan library manapun yang paling cocok dengan anda, atau bila anda sudah cukup memahami alur dari algoritma suatu metoda, anda bisa menulis library sendiri.
File-file implementasi yang disertakan dalam dokumen ini merupakan source yang siap di-compile. Bagi kawan-kawan yang memiliki Borland Delphi 7 terinstall di komputernya, bisa langsung meng-klik file dengan ekstensi “dpr”. Bagi yang tidak menginstall compiler tersebut, untuk mengetahui isi kode program, bisa membuka file dengan ekstensi “pas” dengan notepad atau text editor lainnya. File “exe” juga disertakan untuk melihat implementasinya secara langsung.
Dari output yang dihasilkan, kriptografi dapat dibagi menjadi dua, yaitu kriptografi “satu-arah” dan “dua arah”. Dan dalam kriptografi “dua-arah” pun, bila dilihat dari jenis “key” yang digunakan, dapat dibagi menjadi dua, yaitu “symetric key” dan “asymetric key”. Begitulah kira-kira kerangka dari dokumen ini. Walaupun terbagi-bagi seperti itu, tidak menutup kemungkinan semua jenis kriptografi tersebut di implementasikan bersama-sama, atau yang lebih dikenal dengan metode “hybrid”. Pada akhir dokumen, akan diperlihatkan implementasi dari metode hybrid ini.
Dalam implementasinya di dunia IT, plain text yang diinput ke dalam kriptografi, bentuknya bisa bermacam-macam. Bisa file exe, dokumen, gambar, musik, dan semua file digital lainnya. Tergantung dari sang pengguna yang meng-implementasikannya. Inilah mengapa kemungkinan dalam kriptografi menjadi tak terbatas dan sangat menarik! :)
////////////////////////////////////
Kriptografi Satu Arah
////////////////////////////////////
Sesuai namanya, kriptografi ini hanya bisa berjalan satu arah. Atau dengan kata lain, hanya bisa merubah plain text menjadi cipher text, tapi tidak bisa mengembalikan cipher text menjadi plain text. Kriptografi jenis ini sering disebut sebagai “hash”. Ciri khusus hash ini adalah, chiper text yang dihasilkan berbeda-beda (unik) untuk setiap plain text yang di input. Karena ciri khusus ini, hash sering kali dimanfaatkan sebagai “sidik jari” suatu file atau dokumen.
Metode hash yang umum digunakan adalah MD5, SHA1, RipeMD128. Sebenarnya masih banyak metode lainnya, tapi dalam implementasi yang akan disajikan, metode hash yang digunakan adalah ketiga metode tersebut. Implementasi bisa di download di :
http://www.mediafire.com/?4yz9vj0v8sbydf3

Dengan mengeksekusi file “exe” dari implementasi tersebut, dapat kita lihat bahwa tools ini mampu menghitung hash dari plain text dengan jenis text maupun file. Tapi, jangan coba-coba menghitung hash dari file yang berukuran >= 10 MB dengan tools ini, kecuali jika prosessor anda cukup mumpuni. Karena memang, implementasi ini dirancang dengan tidak memperhatikan optimasi pembacaan file. Silahkan anda optimasi sesuka anda. :)
Dalam implementasi tersebut, kode utama terletak pada file “Unit1.pas”. File “DCPmd5.pas”, “DCPsha1.pas”, dan “DCPripemd128.pas” merupakan library dari metode yang bersangkutan yang disediakan oleh DCPCrypt. Sedangkan, file “DCPcrypt2.pas”, “DCPconst.pas”, “DCPblockciphers.pas”, dan “DCPbase64.pas” merupakan file yang “diwajibkan” oleh
DCPCrypt untuk ditaruh di folder yang sama dengan kode utama. Atau bila anda sudah menginstall Borland Delphi 7, anda bisa melihat itu semua dengan membuka file “Project1.dpr”. File yang lain bisa diabaikan, karena merupakan hasil “generate” dari compiler.
Oke, kita coba bedah “source code” dari tool ini untuk memperjelas implementasi kriptografi satu arah atau “hash” ini. Mari kita lihat pada kode utama di baris 42 sampai baris 100. Di situ dapat kita lihat tiga fungsi untuk menghitung masing-masing metode hash. Fungsi-fungsi ini dibuat sendiri oleh saya dengan berpedoman pada petunjuk pemakaian yang dianjurkan oleh DCPCrypt, yang artinya fungsi ini tidak “baku”, dan ya, anda bisa membuat versi yang berbeda sesuai dengan kebutuhan dari implementasi yang anda inginkan.
Dari ketiga fungsi tersebut, dapat kita lihat bahwa fungsi tersebut membutuhkan 1 parameter yang memiliki tipe String, dan akan mengembalikan String juga. Hal ini saya lakukan dengan pertimbangan untuk mempertahankan format awal kriptografi, dari Plain Text berbentuk string menjadi Cipher Text berbentuk string juga. Tapi sekali lagi, ini tidak baku, anda bisa mengganti parameter input menjadi tipe array dari byte misalnya, untuk membaca stream.
Lalu di baris 122 sampai baris 171 pada kode utama, dapat kita lihat proses perhitungan hash dilakukan pada saat user meng-klik tombol “Hash It”. Dapat kita lihat, jika user memilih untuk menggunakan mode “Text”, maka kodenya cukup simpel, hanya meng-assign variable “strPlain” dengan apa yang di-input oleh user. Yang sedikit “tricky” adalah jika user memilih mode “File”, atau menghitung hash dari File yang dipilih. Berbagai macam pendekatan bisa dilakukan di sini. Mengingat ketiga fungsi untuk menghitung hash tadi membutuhkan Plain Text dengan bentuk string, maka pendekatan yang saya pilih adalah merubah semua “isi” file ke dalam bentuk string, lalu meng-assign string tersebut ke dalam strPlain. Setelah variable strPlain siap, kita masukkan variable tersebut sebagai parameter di fungsi untuk menghitung hash dengan metode yang dipilih user.
Demikianlah salah satu contoh implementasi kriptografi satu arah. Implementasi ini bisa dimanfaatkan untuk mengecek ke-aslian suatu file, karena bila suatu file sudah di modifikasi, maka nilai hash akan berubah. Bila anda tertarik untuk melihat detail dari algoritma dari setiap metode, anda bisa melihatnya pada file “pas” yang bersangkutan. Atau saran saya, coba debug program tersebut, agar anda dapat “merasakan” bagaimana algoritmanya mengalir.
////////////////////////////////////
Kriptografi Dua Arah
////////////////////////////////////
Kriptografi jenis ini mungkin sering direferensikan sebagai kriptografi yang “sesungguhnya”, karena memiliki metode “encrypt” untuk merubah plain text menjadi cipher text, dan metode “decrypt” untuk mengembalikan cipher text menjadi plain text. Dalam kriptografi jenis ini, selain plain text dan cipher text, dibutuhkan parameter lainnya yang disebut “key”. Saat ini dikenal dua jenis key yang digunakan, yaitu “Symmetric Key” dan “Assymetric Key”.
Yang perlu diingat dalam proses kriptografi dua arah ini adalah, proses encrypt dan decrypt harus memiliki operasi yang saling bertolak belakang. Misal, pada proses encrypt kita menggunakan operator “+” (tambah), maka pada proses decrypt kita harus menggunakan operator “-“ (kurang). Karena itu, dalam implementasi kriptografinya proses encrypt dan decrypt dibuat menjadi dua implementasi yang berbeda, namun saling melengkapi. Untuk proses decrypt, implementasi akan meniru proses verifikasi serial sebuah software, sedangkan untuk proses encrypt, implementasi akan bertindak sebagai “keygen”-nya.
————————
Symmetric Key
————————
Yang dimaksud dengan symmetric key atau key yang simetris adalah, parameter key yang digunakan dalam proses encrypt dan decrypt, sama. Panjang dari parameter key ini pun bervariasi tergantung dari metoda yang digunakan. Dalam implementasi yang akan diberikan, metoda yang digunakan adalah RC4 dan Blowfish, dengan panjang key 128 bit atau 16 byte.
Dengan alasan tertentu, implementasi akan diberikan dan dibahas dimulai dari proses decrypt terlebih dahulu. Implementasi decrypt dapat di download pada:
http://www.mediafire.com/?iefq1v1pzvqbt9l

Sekali lagi, implementasi ini meniru verifikasi serial sebuah software, tetapi tentu saja, dibuat se-sederhana mungkin, agar proses kriptografinya lebih menonjol. Jadi, implementasi ini bersifat sebagai “penerima” pesan, kemudian mencoba men-decrypt pesan tersebut dan mem-verikasikan apakah pesan tersebut berasal dari “pengirim” pesan yang sah atau tidak.
File-file yang terdapat dalam implementasi ini, tidak jauh berbeda dengan yang berada pada implementasi kriptografi satu arah, hanya library metoda yang bersangkutan yang berubah. Kode utama, lagi-lagi terletak di “Unit1.pas”. Mari kita buka kode tersebut untuk mulai membedah implementasi ini.
Baris 33 sampai dengan 87, menunjukkan dua fungsi untuk men-decrypt dengan masing-masing metoda. Proses decrypt kedua metoda dibuat seragam dengan tujuan menghindari kebingungan, dan yang pasti bukan bentuk baku. Yang berbeda tentu saja algorithma inti masing-masing metoda yang terdapat di file *.pas masing-masing. Dikarenakan penyeragaman ini, pembahasan satu metoda bisa mewakili metoda yang satunya.
Pada baris 35 dapat kita lihat, inisialisasi konstanta key yang disiapkan untuk proses decrypt. Key dibuat dengan format array dari byte dengan lebar 16. Atau, dengan kata lain, key memiliki panjang 16 byte, atau 128 (16*8) bit. Yang perlu dicatat adalah, bahwa dalam Delphi, notasi “$” menunjukkan bahwa angka yang ditulis dalam bentuk hexadecimal. Jadi, pendeklarasian array tersebut bisa saja ditulis seperti ini :
key : array[0..15] of byte = (71,114,105,110,100,83,116,111,110,101,73,115,71,111,111,100);
Pendeklarasian array diatas menggunakan notasi desimal, dengan nilai yang sama. Lalu, mengapa dalam implementasi ditulis dengan notasi hexadecimal? I just love hex, nothing more.
Oke, mari kita lihat di baris 39 dan 40. Di situ dideklarasikan dua variable array untuk menampung input dan output dari proses decrypt ini. Karena yang dilakukan saat ini adalah proses decrypt, maka input adalah Cipher Text yang ditampung pada variable arrCipher, sedangkan output adalah Plain Text yang ditampung pada variable arrPlain. Kedua variable tersebut dibuat dengan panjang yang sama yaitu 8 byte. Hal ini perlu dicatat, karena akan berpengaruh pada penggunaan fungsi ini, kita akan sampai ke sana nanti.
Fungsi decrypt ini menerima parameter dalam bentuk String sebagai input, seperti yang terlihat pada baris 33, sedangkan variable yang di-input ke proses decrypt inti berbentuk array dari byte, seperti yang terlihat pada baris 51. Maka, baris 44 sampai 48, bertugas untuk meng-convert variable String menjadi array of byte. Ada banyak metode yang bisa digunakan untuk tugas ini, seperti misalnya mengambil nilai ASCII dari masing-masing karakter di dalam string, lalu menyimpannya ke dalam array of byte. Tetapi, dalam implementasi ini, metode yang akan digunakan adalah, mengambil setiap 2 (dua) karakter dari string, lalu ditambahkan notasi “$” di depannya untuk kemudian di rubah kedalam bentuk byte (integer) dan disimpan ke dalam array. Dan hal ini dilakukan dengan loop sebanyak 8 (0-7)putaran, karena panjang variable penampung yang ada (arrCipher) adalah 8. Karena itu, panjang String yang valid untuk di-input ke dalam fungsi ini adalah 16 (8*2) karakter, dan karakter yang ada haruslah karakter bilangan hexadecimal, yaitu 1-9 dan A-F. Mari kita ambil contoh untuk memperjelas :
Misalkan, string yang di-input adalah :
“1234567890ABCDEF”
Maka array of byte yang terbentuk adalah :
($12, $34, $56, $78, $90, $AB, $CD, $EF)
atau dalam bentuk desimal adalah :
(18, 52, 86, 120, 144, 171, 205, 239)
Semoga contoh di atas cukup jelas untuk menggambarkan “aliran” algo konversi tersebut.
Baris 49 sampai 52 merupakan kode untuk melakukan proses inti decrypt yang diwajibkan oleh library DCPCrypt ini. Dan hasil dari proses decrypt inti ini ditampung di variable arrPlain yang berbentuk array of byte. Baris 53 mempersiapkan (mengosongkan) variable strResult yang akan menampung hasil dari fungsi decrpyt ini. Jika pada input tadi kita meng-convert dari variable String ke array of byte, sekarang untuk output kita lakukan kebalikannya, merubah variable array of byte ke String. Dan itulah yang dilakukan pada baris 54 sampai 57.
Metode yang digunakan sekarang adalah mengambil setiap byte dari array, lalu men-subtitusikannya dengan karakter yang memiliki nilai ASCII yang bersangkutan, untuk kemudian ditambahkan di variable strResult. Metode ini lebih simpel dari metode sebelumnya, tetapi mari kita ambil contoh untuk lebih memperjelas :
Misalkan, dalam variable arrPlain adalah :
(71, 119, 84, 97, 109, 112, 97, 110)
maka dalam variable strResult akan terbentuk :
“GwTampan”
Semoga contoh di atas bisa memperjelas apa yang sebenarnya sudah cukup jelas. ;D
Demikianlah penjelasan tentang fungsi yang digunakan untuk melakukan decrypt. Fungsi tersebut perlu dipahami sepenuhnya jika kita ingin membuat proses encrypt yang diperlukan untuk membuat keygen dari “software” verifikasi ini. Kita akan bahas hal tersebut dalam implementasi berikutnya. Untuk saat ini, mari kita masuk pada fungsi inti dari program ini, yang dieksekusi pada saat user menekan tombol “Check”.
Fungsi tersebut, tentu saja, terletak pada baris 89 sampai 144. Terlihat banyak percabangan “if” di sana, yang mungkin membingungkan sebagian orang. Bila itu yang terjadi, dengan segala kerendahan hati, saya mohon maaf atas buruknya cara pemogramman saya. Tapi saya rasa, percabangan-percabangan ini tidak perlu dibahas semua, karena hanya untuk mengecek kesalahan-kesalahan dasar input dari user. Yang patut dibahas adalah percabangan pada baris 113. Disitu terlihat bahwa jika “Nama” yang diinput user lebih dari 8 karakter, maka yang diambil hanyalah 8 karakter pertama saja. Dan jika “Nama” yang diinput kurang dari 8 karakter, maka variable tersebut digandakan terus-menerus sampai lebih dari 8, untuk kemudian diambil 8 karakter pertamanya. Lagi-lagi, contoh untuk memperjelas :
Misalkan, nama yang diinput adalah :
“CryptographyIsSuperFun”
maka, yang diambil hanyalah :
“Cryptogr”
Dan, jika nama yang diinput adalah :
“FUN”
maka, hasilnya akan menjadi :
“FUNFUNFU”
Dengan ini, kita “memaksa” variable strName untuk tetap memiliki panjang 8 karakter, tidak peduli berapa karakter yang diinput oleh user. Kenapa? Sebelum dijawab, saya harap anda masih ingat karakteristik dari fungsi decrypt di atas tadi, input yang valid haruslah string dengan 16 karakter (ini menjelaskan percabangan pada baris 107), dan ouput yang dihasilkan adalah string dengan 8 karakter. Dan pada baris 133, terdapat “final check” yang membandingkan variable strName dengan strPlain yang merupakan hasil Decrypt dari Serial yang diinput. Otomatis, strPlain akan selalu memiliki panjang 8 karakter, karena itulah kita perlu “memaksa” strName untuk tetap memiliki panjang 8 karakter.
Sebenarnya ada sedikit “bug” yang cukup mengganggu pada implementasi ini. Yaitu, bila kita memasukkan serial dengan panjang 16 karakter, tapi karakter yang diinput bukanlah karakter hexadecimal, maka akan muncul pesan error yang kurang bagus. :D Tapi tentu saja, hal tersebut bisa diatasi dengan menambahkan percabangan yang mengecek apakah serial yang diinput merupakan karakter hexadecimal atau bukan. Anda bisa menambahkannya bila anda mau! :D :)
Yap, demikianlah salah satu contoh implementasi proses decrypt yang meniru proses verifikasi serial sebuah software. Untuk melengkapinya, yang tersisa adalah proses encrypt yang akan diterapkan pada keygen untuk verifikasi ini.
Oke, implementasi untuk proses encrypt bisa di download pada :
http://www.mediafire.com/?coc0u4o61wc6jb2

Dalam implementasi ini, jika kita mengeksekusi file “exe”, maka kita bisa meng-generate serial yang valid untuk implementasi verifikasi sebelumnya. Karena memang, implementasi ini bertindak sebagai keygen atau dengan kata lain sebagai “pengirim” pesan. Sedangkan implementasi sebelumnya bertindak sebagai “penerima” pesan.
File-file yang ada dalam implementasi ini sama dengan yang ada di implementasi verifikasi, hanya file “exe” dan “Unit1.pas” yang berbeda, karena implementasi ini menggunakan library dari metoda yang sama dengan implementasi verifikasi. Mari kita buka kode utama implementasi ini di dalam “Unit1.pas” untuk memulai pembedahan kode yang mengasyikan ini.
Yang patut diingat sebelum melakukan pembedahan adalah, bahwa proses pembuatan implementasi keygen ini saling bergantung dengan kode pada implementasi verifikasi. Dan, kita harus melihat bahwa kode keygen ini saling bertolak belakang dengan verifikasi. Yang artinya, jika verifikasi melakukan “buka”, maka keygen melakukan “tutup”, jika verifikasi melakukan “tambah”, maka keygen melakukan “kurang”, dst.
Oke, kita mulai pembedahannya. Kita bisa lihat pada baris 33 sampai 83, terdapat dua fungsi encrypt yang, tentu saja, dibuat seragam, seperti halnya pada implementasi verifikasi. Dan ya, seperti sebelumnya, pembahasan satu metoda bisa mewakili metoda yang satunya. Baris 35 menunjukkan konstanta key yang memang harus sama nilainya dengan proses decrypt, agar kedua proses tersebut saling berhubungan.
Karena proses encrypt ini bertolak belakang dengan proses decrypt, maka kita akan melakukan pembahasan secara terbalik dari bawah ke atas, sambil me-review kode verifikasi. Jadi ada baiknya, jika kita buka kode verifikasi (decrypt) dan keygen (encrypt) secara bersamaan, kecuali jika anda memang sudah hafal dan paham kode verifikasi secara keseluruhan.
Pada baris 44 sampai 48 di kode verifikasi, seperti yang telah dibahas, bahwa fungsi decrypt mengambil setiap dua karakter dari string yang di-input atau cipher text untuk kemudian merubahnya menjadi nilai hex dan menyimpannya ke dalam array of byte. Maka, agar fungsi encrypt kita menghasilkan cipher text yang valid untuk proses tersebut, kita harus melakukan fungsi sebaliknya, ya, merubah array of byte menjadi string dengan format hex. Baris 51 sampai 55 melakukan hal tersebut. Fungsi built-in Delphi “IntToHex” menghasilkan representasi hex dari integer (atau byte) yang diinput. Untuk contoh, silahkan review contoh di atas pada proses verifikasi, tetapi baca dari bawah ke atas.
Kemudian pada baris 49 sampai 52 di kode verifikasi, fungsi decrypt melakukan fungsi inti decrypt sesuai dengan metoda yang dipakai terhadap array of byte hasil konversi dari string yang di-input tadi(cipher text). Maka pada baris 47 sampai 50 di kode keygen, fungsi encrypt harus melakukan fungsi inti encrypt sesuai dengan metoda yang dipakai terhadap array of byte yang nantinya akan di konversi menjadi string output(cipher text), seperti yang telah dibahas pada paragraf sebelumnya.
Lalu pada baris 54 sampai 57 di kode verifikasi, fungsi decrypt mengkonversi lagi array of byte yang telah di “decrypt” ke dalam bentuk string, tetapi kali ini dengan cara subtitusi nilai byte dengan nilai ASCII yang bersangkutan, atau dengan kata lain melakukan konversi byte to ASCII. Maka, fungsi encrpyt kita harus melakukan kebalikannya, yap, konversi ASCII to byte. Baris 43 sampai 46 pada kode keygen menunjukkan hal tersebut, dan ya, fungsi built-in Delphi “Ord” menolong kita untuk melakukan hal tersebut. Dan lagi-lagi, untuk contoh, silahkan lihat contoh “GwTampan” di atas dari bawah ke atas.
Begitulah isi dari fungsi encrypt yang merupakan kebalikan dari fungsi decrypt. Anda bisa menutup kode verifikasi sekarang, jika anda mau. Berikutnya, mari kita bahas penggunaan dari fungsi encrypt ini, pada saat user menekan tombol “G 3 N” yang terletak pada baris 85 sampai 119.
Tidak banyak yang dilakukan dalam kode ini. Baris 97 sampai 108 melakukan hal yang sama dengan yang ada pada kode verifikasi, yaitu memaksa plain text agar tetap memiliki panjang 8 karakter, seperti yang telah dibahas sebelumnya. Dan, jika anda belum menyadarinya, untuk nama “CryptographyIsFun” dan “CryptographyIsSuck” akan menghasilkan serial yang sama, dikarenakan unsur pemaksaan ini. Lalu pada baris 109 sampai 117, kode melakukan encrypt kepada nama (plain text) yang diinput menjadi cipher text yang kemudian di-output menjadi serial.
Demikianlah keseluruhan proses implementasi dari kriptografi dengan key simetris ini. Dan oke, untuk lebih memperjelas lagi, mari kita rangkum keseluruhan proses dengan arah yang “lurus” atau dari encrypt sampai decrypt. Kali ini sang keygen akan kita sebut pengirim, dan sang verifikator akan kita sebut penerima.
Pertama, pengirim men-encrypt nama yang di-input untuk kemudian di-output menjadi serial. Lalu, pengirim mengirimkan pasangan nama dan serial ini kepada penerima. Kemudian, penerima mengecek pasangan nama dan serial yang dikirimkan dengan cara, men-decrypt serial untuk kemudian dibandingkan dengan nama. Jika cocok, maka pasangan nama dan serial tersebut valid dan memang berasal dari pengirim yang sejati, jika tidak cocok, maka pengirim tersebut palsu.
Yap, seperti itulah salah satu contoh implementasi kriptografi dua arah dengan key simetris. Mohon maaf bila penjelasannya terkesan berbelit-belit dan membingungkan, tetapi saya telah mencoba yang terbaik untuk menjelaskan hal yang memang sangat teknis ini. Dan ya, coba “rasakan” bagaimana kode ini mengalir, agar lebih mudah memahaminya. :)

sumber: http://www.binushacker.net/dasar-dasar-kriptografi-implementasinya.html

Blackberry sebagai Media Komunikasi Multifungsi



Sejak pertama kali diperkenalkan hingga saat ini, perkembangan sosial media atau social networking begitu pesat. Dimulai dari Friendster dan Myspace, dan belakangan dirajai oleh facebook dan twitter yang mendunia. Siapa tidak kenal facebook dan twitter. Ahkan mungkin semua orang sudah memiliki akunnya sendiri. Dari berbagai macam kalangan dan lapisan masyarakat. Dari yang muda hingga yang tua, dari berbagai macam latar belakang pekerjaan, menggunakan dan memakai jejaring sosial sebagai salah satu media informasi dan komunikasi mereka.



Berkembangnya social networking juga memicu pertumbuhan dari berbagai macam gadget yang dapat mempermudah para penggunanya untuk mengakses dan menggunakan akun sosial media yang mereka miliki. Dengan begitu, para pengguna sosial media, tidak lagi harus menggunakan komputer untuk mengakses akun mereka, melainkan juga bisa menggunakan berbagai macam gadget lainnya.

Dan Blackberry adalah salah satu gadget yang sangat mendukung untuk segala sesuatu yang berhubungan dengan sosial media ini. Blackberry adalah suatu merek handphone atau telepon seluler yang diproduksi oleh perusahaan yang berasal dari Kanada. Dengan RIM sebagai keunggulan kompetitif yang dimilikiinya, tak butuh waktu yang lama bagi Blackberry untuk menguasai pasar telepon genggam. Blackberry adalah perangkat komunikasi yang sangat multifungsi dan tentu sangat membantu para pengguna internet dan social media.
92d657175e6157c2edcbf6b1b2638ed5_bold-9790-indo
Indonesia adalah salah satu dari negara dengan tingkat penggunaan Blackberry terbesar. Tak butuh waktu lama bagi blackerry untuk menarik hati para pengguna telepon genggam, dan segera saja, penggunaan blackerry di kalangan masyarakat menjadi tren. Mulai dari remaja yang menggunakannya hanya untuk penampilan dan sarana pendukung aktifitas sosial mereka, hingga para pekerja yang memang memanfaatkan fungsi komunikasi blackberry yang sangat praktis dan membantu.
Fasilitas BBM atau blackberry messenger merupakan salah satu keunggulan lain dari blackberry. Blackberry messenger adalah sebuah instant messeging, yang memudahkan dan mempercepat komunikasi antar pengguna blackberry, dan fasilitas ini, memang sangat memudahkan para penggunanya.
Selain fasilitas BBM, fitur lainnya yang tidak kalah penting adalah kemampuannya untuk email serta edit file yang cukup penting dalam pekerjaan kita. Kadang untuk profesi tertentu, foto bisa dikirim melalui email dengan cepat kepada rekan kerjanya, atau video file dalam ukuran standard juga bisa dikirim untuk berita. Walau dalam size kecil, cukup untuk memudahkan pekerjaan.
09fedd6bf412b1b1fcb9a7ec2b64cc25_bb-3
Tentu saja, kehadiran Blackberry menyempurnakan kemampuan sebuah telepon genggam, dengan menyediakan sebuah sarana komunikasi dan jaringan yang cepat untuk mengakses sosial media. Dengan kemampuan Blackberry yang dapat memudahkan kita, pantas untuk dikatakan bahwa Blackberry merupakan media komunikasi multifungsi yang terbaik saat ini.


Senin, 27 Mei 2013

indahnya berbagi ilmu


Keagungan Akhlak Rasulullah SAW » Aisyah ra ditanya oleh sahabat-sahabat bagaimana indahnya akhlak Rasulillah SAW? beliau menjawab : akhlak Rasulullah adalah Al-Quran. Sebenarnya keagungan Rasulullah SAW ini bukan hanya akhlak saja, tetapi juga ibadah dan muamalahnya. Bagaimana Rasulullah mengatur rumah tangga, berdagang, mengatur Negara dll. merupakan akhlak yang harus kita contoh. Dan tentu kita bisa untuk mencontoh beliau, karena Rasulullah adalah manusia biasa. Beliau sangat senang kalau dipanggil Abduhu wa rasuuluh (hamba Allah dan RasulNya).

Suatu saat Rasulullah SAW duduk dengan para sahabatnya, di sebelah kanannya ada mertua, Abu Bakar As Shidiq, di sebelah kirinya mertuanya juga, Umar bin Khathob, di sampingnya ada mantunya Ali bin Abi Thalib, di sampingnya lagi ada Ustman bin Affan, mantu beliau, dan sahabat-sahabat besar yang lain. Aisyah di belakang. Tiba-tiba muncullah seorang wanita yang membawa segelas susu, ingin diberikan kepada Rasulullah SAW. Lalu dia mengatakan ; Ya Rasulullah!
sengaja aku peras kambingku lalu aku bawa ke sini, aku berharap engkau sudi meminumnya!. Para sahabat tersenyum, Rasulullah juga tersenyum. Dalam suasana seperti itu Aisyah merasa cemburu, kemudian langsung bangkit masuk ke kamarnya sambil menutup pintu dengan keras. Rasulullah diperlakukan seperti itu di hadapan para sahabat-sahabat besar oleh isteri beliau yang sangat ia cintai. Rasulullloh SAW dengan tersenyum dan hanya mengatakan : Ibumu sedang cemburu. Inilah akhlak Rasulillah SAW yang luar biasa. Saya tidak bisa membayangkan kalau saya sebagai khatib seperti ini, kemudian diperlalukan begitu rupa oleh isteri saya sendiri, di hadapan orang banyak. Di mana wibawa saya sebagai seorang ustadz. Kemudian Rasulullah SAW tidak berlama-lama kemudian masuk ke dalam kamar, dan diciumlah kening Aisyah ra. Inilah akhlak Rasulullah SAW dalam membina rumah tangga.

Zaman sekarang banyak timbul keretakan rumah tangga, bukan karena masalah prinsip-prinsip agama seperti tauhid dll, tetapi karena kesalahan komunikasi yang muncul antara suami-isteri. Karena kita tidak kembali kepada akhlak Rasulullah SAW. dan setiap tahun kita memperingati Maulid Nabi Muhammad SAW. Yang seharusnya dengan memperingati hari kelahiranya, kita bisa mencontoh bagaimana akhlak Rasulullah SAW tentang masalah keluarga untuk kita praktekkan dalam kehidupan ruamah tangga kita.

Suatu saat sudah menjadi kebiasaan Nabi Muhammad SAW setelah berperang selalu mengutus utusan, saya nanti akan masuk ke rumahnya Aisyah. Tahu mendapatkan penghormatan, Aisyah memasak masakan kesukaan Rasulullah SAW namanya faluudaaj (bubur gandum) terbuat dari dominadi daging kambing, campur susu, keju, rasa manis. Aisyah karena masih muda dan pengalaman memasak kurang piawai. Sehingga sewaktu memasak, yang seharusnya dia mengambil gula, keliru garam. di saat dia ingin mengambil garam, keliru gula. Apa yang terjadi? faluudaaj yang seharusnya rasa manis, tetapi yang dibuat Aisyah ini menjadi asin yang luarbiasa. Kamudian datanglah Rasulullah SAW, lalu siap merasakan masakan yang dimasak oleh Aisyah yang penuh kesungguhan itu. Begitu mengambil satu sendok, Nabi kaget luar bisa. Kondisi seperti itu diketahui oleh Aisya ra. lalu bertanya: Kenapa dengan engkau ya Rasulullah? Tetapi nabi tidak menggugat, tidak marah, dia malah tersenyum dan mengatakan : Luar biasa masakanmu ya Aisyah, maksudnya luar biasa asinnya, cuma beliau tahan kemudian mengatakan : Di mana kau beli garam ini? Saya beli di tetangga kami, memang kenapa ya Rasulalloh? Rasulullah menjawab : Mulai besok, kamu jangan membeli garam di situ lagi ya, karena garam yang ini terlalu asin. Inilah akhlak Rasulullah SAW yagn begitu indah, begitu mulia dan agungnya. Kemudian dipeluklah Rasulullah SAW, sambil menangis penuh penyesalan, mengatakan : Maaf ya Rasululloh. Alangkah indahnya romantika keluarga Rasulullah SAW.





Old Java Bisa Belajar Trik Baru Bari C, Android



Struct, failsafe kemampuan, dan meningkatkan paralelisme pengembang atas 'daftar keinginan

.
Java dan yang pengikat JVM (Java Virtual Machine) masih memiliki banyak ruang untuk mendapatkan yang lebih baik bahkan setelah memulai debutnya 18 tahun yang lalu, mengatakan para ahli yang ingin perbaikan di berbagai bidang seperti lokalitas, isolasi aplikasi, dan operasi paralel.
The JVM , yang menyediakan sebuah mekanisme untuk menjalankan aplikasi Java pada berbagai platform perangkat keras, bisa dilengkapi dengan kemampuan mirip dengan bahasa C struct fitur, memberikan manfaat di wilayah dengan meningkatkan hubungan antara memori dan prosesor. "[Struct] memberikan keuntungan di bidang jejak," dan memberikan benda ringan dengan bidang dan tidak ada metode, kata Charlie Hunt, arsitek teknik kinerja pada Salesforce.com dan penulis buku, "Kinerja Jawa."
Dapatkan perspektif JVM inovator pada kinerja JVM optimasi dan skalabilitas . Ingin lebih Jawa berita perusahaan? Mendapatkan Java buletin Perusahaan dikirim ke kotak masuk Anda.
Doug Lea, yang melayani di dewan yang mengatur pelaksanaan OpenJDK open source Jawa dan sebelumnya menjabat dengan Java Community Process , mengharapkan kemampuan struct yang akan ditambahkan ke JVM di beberapa titik. Struct akan menyediakan baik ruang yang sangat kecil dan lokalitas yang lebih baik, dan itu sudah dianut oleh beberapa bahasa JVM seperti Scala , katanya.
Java dan aplikasi mobile pada khususnya, sementara itu, dapat memperoleh manfaat dari Google Android "failsafe" kemampuan memungkinkan isolasi aplikasi, Lea bilang. Di Android Dalvik VM, kemampuan isolasi mencegah proses nakal dari berdampak proses lain, Lea menjelaskan, mencatat bahwa "dampak yang terkandung." Tapi dia tidak optimis kemampuan ini akan membuat ke JVM, mengutip kebijakan dan politik Jawa. "Meskipun itu sebuah proyek Labs Sun," katanya, "itu tidak diadopsi oleh [HotSpot JVM], tapi sesuatu yang serupa diadopsi oleh orang-orang Android."
Operasi paralel otomatis untuk bahasa Jawa dan runtime yang diinginkan, kata Hunt. Kemampuan Lambda di Java Standard Edition 8 akan membawa ini lebih dekat dengan terjadi melalui API, tapi berburu ingin melihat paralelisme melangkah lebih jauh. "Idealnya, apa yang Anda ingin untuk dapat miliki adalah bahasa dan runtime yang Anda tidak perlu mengungkapkan secara eksplisit. Itu hanya angka keluar ini secara otomatis."
Lea juga mengantisipasi perbaikan mesin virtual dalam hal berurusan dengan memori contention rawan , dengan demikian meningkatkan kinerja aplikasi. Dia mencatat prosesor multicore berurusan dengan masalah "berbagi palsu," dengan prosesor berebut memori. Hal ini tidak secara khusus masalah dengan Java. "Ini adalah masalah yang timbul di mana-mana. Ini memiliki solusi terutama heuristik, dan kita perlu lebih banyak dari mereka."