Berburu Hash

Ini cerita tentang tugas atau pekerjaan rumah mahasiswa saya. Ceritanya saya mengajar kuliah keamanan informasi (information security). Salah satu bagian dari materinya adalah tentang kriptografi dan minggu lalu kami membahas fungsih hash.

Apa itu fungsi hash? Bisa panjang lagi ceritanya. (Nambah daftar topik yang perlu diceritakan.) Singkatnya fungsi hash adalah fungsi satu arah yang dapat memberikan ciri atau tanda-tanda (signature) dari data digital (stream of data, files, dan-lain-lain). Contoh fungsi hash yang terkenal adalah MD5 dan SHA256.

Misal ada sebuah berkas (bernama “pesan1.txt”) yang berisi “beli 10000”. Maka hasil SHA 256 (algoritma SHA dengan panjang bit 256) dari teks tersebut dapat dilihat pada contoh di bawah ini.

unix$ echo "beli 10000" | shasum -a 256
375a6c46228994656932f4aa17d9ae50f21da75a31ff17f8517c255c06cba809 -

unix$ cat pesan1.txt
beli 10000
unix$ shasum -a 256 pesan1.txt
375a6c46228994656932f4aa17d9ae50f21da75a31ff17f8517c255c06cba809 pesan1.txt

unix$ cat pesan2.txt
beli 1000
unix$ shasum -a 256 pesan2.txt
5901bccc6a0556fac2b4a164ef831a7ed4ceddeb60c6ddde1162f5a40b9d2917 pesan2.txt

Pada contoh di atas ditunjukkan jika kita memiliki data yang berbeda – dicontohkan dengan berkas “pesan2.txt” yang berisi “beli 1000” (hilang satu angka nolnya) – maka hasil hash-nya pun berbeda. Bahkan, sangat jauh berbeda.

Hal lain dari fungsi hash adalah, jika kita diberikan sebuah hasil hash, maka akan sangat sulit bagi kita untuk merekonstruksi ulang berkas aslinya.

Kebetulan saat ini yang sedang ngetop adalah blockchain. Atau lebih ngetopnya adalah Bitcoin-nya. Salah satu dasar dari blockchain adalah fungsi hash. Maka salah satu tugas mahasiswa di kelas saya adalah berburu (hasil) hash.

Skenarionya adalah kita memiliki sebuah pesan “A>B,5000” (tanpa tanda kutip). Pesan ini ditambahkan nonce, sebuah angka (data, string) yang diambil “dari langit”, dan kemudian keduanya di-hash-kan dengan SHA256.

A>B,5000
NONCE

Ada sedikit “perlombaan” di kelas, yaitu siapa yang berhasil menghasilkan hash terkecil adalah pemenangnya. Cara menguji angka hash yang kecil adalah dengan melihat jumlah “0” di depannya. Yang perlu dicari adalah nonce-nya tersebut. Jadi carilah nonce yang menghasilkan nilai hash paling kecil. Silahkan diperlombakan. Kalau di kelas diberi waktu satu minggu. Pemenangnya akan saya beri hadiah buku.

[Catatan: konsep ini mirip dengan konsep “miner” di bitcoin.]

Iklan

Kriptografi, Matematika, dan Rekayasa

Di Minggu pagi hari ini, asyik membaca majalah IEEE. Eh, yang ini bukan majalah tetapi koran the Institute, yang diterbitkan juga oleh IEEE.

Mumpung ada kesempatan untuk membaca dengan santai. Ada banyak majalah IEEE yang belum sempat saya baca. (Hadoh kapan bacanya ya?)

Ini dia fotonya. Ada sisa roti bagelen yang belum habis. Mau? Buruan, sebelum saya sikat juga. he he he. (Mejanya bersih karena sudah dibersihkan. Tadinya sih berantakan juga.)

Ceritanya adalah penghargaan IEEE terhadap temuan public key cryptosystem sebagai milestones ke-100 di bidang rekayasa (engineering). Ada tiga orang penemu dari Inggris yang diberi penghargaan, yaitu James Ellis, Clifford Cocks, dan Malcolm Williamson.

Mereka menemukan idenya ketika sedang bekerja di agen rahasia Inggris, the Government Communications Headquarters (GCHQ), di awal tahun 1970-an. Karena mereka bekerja di instansi yang sifatnya rahasia, mereka tidak dapat memberitahukan dunia akan temuan mereka tersebut. Peneliti yang lebih banyak dikenal pada waktu itu adalah Diffie, Hellman, Merkle, atau bahkan Rivest, Shamir, dan Adleman. Baru pada tahun 1997 informasi mengenai temuan peneliti Inggris tersebut bisa dibuka ke publik. Barulah mereka mendapat penghargaan yang semestinya.

Yang menarik adalah bagian ini:

… Ellis had demonstated to the agency’s senior officials that public-key cryptography was attainable, but because he wasn’t a mathematician, he did not know how to implement his concept.

In 1973, Cocks, a mathematician, was aske to join the effort. It is said that he found a solution in just 30 minutes, but it couldn’t be used because the computers of the day weren’t advanced enough. ...”

Public-key cryptography bisa lebih mudah diterima saat ini karena kemampuan komputasi komputer sudah cukup. Selain itu ada trick dan algoritma-algoritma implementasi yang memungkinkan implementasinya. Yang ini kerjaan rekayasa dari (software) engineer.

Inilah pentingnya kolaborasi dari berbagai ilmu dan peneliti.

Dicari: algoritma x^y mod z

Saya sedang mencari algoritma untuk menghitung x^y mod z, dimana bilangan x, y, dan z semuanya besar. Saya ambil contoh bilangan yang kecil dulu ya:

123^456 mod 987 = …

Kalau kita hitung langsung, misalnya 123 dipangkatkan 456 dahulu, variabel integer sudah tidak cukup. Ini nampaknya harus diprogram dengan menggunakan big integer. Itu tidak masalah, tapi saya tetap membutuhkan algoritma yang membuatnya lebih efisien.

Sebenarnya saya sedang membaca fast exponentiation, tetapi siapa tahu ada yang punya cara lebih baik. Saya akan membuat kodenya dalam bahasa C, jika itu dibutuhkan.

So … menonton National Treasure

So … Saya dan anak saya akhirnya memutuskan untuk menonton “National Treasure”. Tadinya anak saya tidak mau menonton film itu karena takut seram dan tegang. Tapi saya bujuk agar mau. Maklum Nicholas Cage merupakan salah satu aktor favorit saya.

So … filmnya tidak mengecewakan. Meskipun, kalau dia berasal dari buku, mungkin bukunya lebih seru lagi ceritanya. Banyak adegan dan dialog yang lebih seru kalau diceritakan dalam novel. Ceritanya adalah tentang … ah, nonton sendiri saja deh. Ini gabungan antara Indiana Jones dan Da Vinci Code.

So …

[“So” is like a puzzle.]