Sifat 2: HIDING
Sifat kedua dari fungsi hash yang kita bahas adalah Hiding. Sifat hiding ini menjelaskan bahwa jika kita diberi output dari fungsi hash y = H (x), tidak ada cara yang bisa dipakai untuk mencari tahu input x itu. Karena sifat ini tidak mungkin menghasilkan nilai “true” meski dalam bentuk lain.
Perhatikan contoh sederhana berikut: Misalkan kita melempar sebuah koin. Jika hasil dari lemparan koin itu menunjukkan kepala, kita akan mengumumkan hash dari string “kepala”. Jika hasilnya adalah ekor, kita akan mengumumkan hash dari string “ekor”.
Selanjutnya kita meminta kepada seseorang yang tidak melihat saat koin dilempar. Hanya melihat hasil lemparan koin saja. Kemudian memintanya untuk mencari hash stringnya. Hasilnya, orang tersebut akan menghitung dan mengkalkulasi kedua string hash “kepala, dan juga “ekor”. Setelah itu baru orang itu bisa melihat inputnya.
Seorang yang berniat buruk bisa menebak string karena hanya terdapat dua kemungkinan nilai x. Dan dengan mudah bagi orang itu untuk mencoba menguji dua kemungkinan itu. Maka, agar bisa mencapai sifat hiding ini, dibutuhkan dalam kasus seperti ini untuk menyembunyikan nilai kemungkinan x. Artinya, nilai x harus dipilih dari satu set kemungkinan yang paling banyak keluar. Jika nilai x sudah dipilih dari set tersebut, maka dengan metode ini mencoba agar beberapa nilai baru x yang cenderung tidak bisa berjalan.
Pertanyaannya kemudian, bisakah sifat hiding ini dicapai saat ketika nilai yang kita inginkan tidak keluar dari set yang kita pilih, seperti contoh pada kemungkinan “kepala”, dan “ekor” tersebut? Ya, sifat hiding ini bisa dicapai. Kita memungkinkan untuk bisa menyembunyikan sebuah input yang tidak menyebar itu, dengan menggabungkan input lain yang sudah menyebar. Jadi kita sekarang sudah mengetahui makna dari sifat hiding ini. Sifat ini disimbolkan dengan tanda vertikal bar ganda “‖” yang menunjukkan sebuah rangkaian.
Hiding – Sebuah fungsi hash H bersifat tersembunyi atau hiding. Jika nilai tersembunyi dari r dipilih dari pendistribusian kemungkinan yang memiliki nilai min-entropy tinggi, kemudian diberi H (r ‖ x). Sehingga tidak bisa untuk menemukan x.
Secara teori, min-entropi adalah ukuran dari beberapa hasil prediksi. Min-entropi tinggi menangkap distribusi variavel acak yang cukup menyebar. Secara khusus, hal itu berarti ketika kita mengambil contoh sebuah distribusi, tidak ada nilai tertentu yang terjadi. Lebih konkritnya, misal jika r dipilih seragam dari semua string yang memiliki panjang 256 bit, maka setiap string tersebut dipilih dengan probabillitas 1/2256. Nilai itu merupakan nilai yang kecil.
Application: Commitments
Secara khusus, yang ingin kita lakukan adalah dengan sesuatu yang biasa disebut dengan commitments (komitmen). Yang dimaksud dengan sebuah komitmen disini adalah berupa analog digital untuk mengambil nilai, kemudian menyegelnya seperti halnya menyegel sebuah amplop.
Dilanjutkan kemudian dengan menempatkan amplop itu diatas meja sehingga orang lain dapat melihatnya. Jika seseorang melakukan hal tersebut, berarti orang tersebut telah berkomitmen dengan isi yang ada di dalam amplop tersebut. Padahal anda belum membuka amplop itu. Artinya nilai isi didalam amplop itu tetap bersifat rahasia. Selanjutnya, anda dapat membuka amplop itu dan mengungkapkan nilai yang sudah disegel sebelumnya.
Skema komitmen terdiri dari dua algoritma:
⦁ com: = komit (msg, Nonce) fungsi komit mengambil pesan dan nilai acak dan rahasia, atau disebut dengan “Nonce“, sebagai input dan menghasilkan komitmen.
⦁ verify (com, msg, Nonce) Fungsi verifikasi mengambil komitmen, Nonce, dan pesan input. Lalu akan menghasilkan statement true jika com == komit (msg, Nonce) dan false jika yang terjadi sebaliknya.
Membutuhkan dua sifat pengamanan:
⦁ Hiding: pemberian com, tidak mungkin dapat untuk menemukan msg
⦁ Binding: tidak bisa menemukan dua pasang (msg, Nonce) dan (msg ‘, Nonce’). Seperti halnya msg ≠ msg ‘, dan komit (msg, Nonce) == komit ( msg ‘, Nonce’).
Penggunaan skema komitmen perlu untuk generate nonce secara acak terlebih dahulu. Setelah itu menerapkan fungsi komitmen untuk Nonce ini bersama-sama dengan msg. Lantas mempublikasikan com komitmen. Pada tahapan ini, analog berfungsi untuk menempatkan amplop tertutup yang sudah tersegel itu di atas meja.
Jika kita ingin mengungkapkan nilai yang tertutup dan tersegel amplop tersebut, maka dilakukan dengan menerbitkan nonce acak dan pesan yang telah digunakan saat membuat komitmen tersebut. Sekarang, siapapun dapat memverifikasi msg itu. Tahap berikutnya, analog membuka amplop itu. Setiap seseorang memberikan komitmen terhadap sebuah nilai, cukup penting untuk memilih nilai nonce secara acak. Dalam kriptografi, istilah Nonce digunakan untuk sebuah nilai yang hanya dapat digunakan sekali saja.
Dua sifat pengaman tersebut memerintahkan algoritma untuk menyegel dan membuka amplop. Pertama, memberikan com, dan komitmen. Jika seseorang yang ingin melihat amplop tidak bisa melihat isi pesannya, maka sifat kedua dari pengaman tersebut yang berfungsi sebagai pengikat. Hal ini berfungsi untuk memastikan bahwa seseorang yang sudah memberikan komitmen pada sebuah nilai, hal itu tidak dapat dirubah lagi. Karena tidak bisa menemukan dua isi pesan yang berbeda. Sehingga pemberian komitmen hanya bisa dilakukan untuk satu pesan saja. Kemudian mengklaim untuk pesan yang lain.
Sedangkan untuk bisa mengetahui bahwa dua sifat ini ada, kita bisa melakukannya dengan menggunakan fungsi hash. Contoh dengan skema komitmen berikut:
commit (msg, Nonce): = H (Nonce ‖ msg) nonce tersebut adalah nilai acak 256-bit.
Dalam memberikan commit pada sebuah pesan, generate dulu nonce acak 256-bit tersebut. Kemudian menggabungkan nonce dan pesan untuk menghasilkan hash dari nilai yang sudah digabung itu menjadi sebuah komitmen. Untuk bisa memverifikasi, seseorang akan menghitung hash yang sama dari nonce itu. Kemudian memeriksa apakah hasilnya sama dengan yang dilihatnya.
Mari kita melihat dua sifat yang membutuhkan komitmen berikut. Jika kita mengganti instalasi commit dan memverifikasi seperti halnya H (Nonce ‖ msg) untuk com. Maka sifat ini akan menjadi:
⦁ Hiding: Pemberian H (Nonce ‖ msg), tidak mungkin untuk menemukan msg
⦁ Binding: Tidak bisa menemukan dua pasang (msg, Nonce) dan (msg ‘, Nonce’). Sehingga msg ≠ msg’ dan H (Nonce ‖ msg) == H ( Nonce ‘‖ msg’)
Sifat hiding dari komitmen ini sebetulnya adalah sifat hiding yang membutuhkan fungsi hash. Jika key yang dipilih menggunakan nilai acak 256-bit, kemudian mengatakan bahwa, jika kita menggabungkan key dan pesan tersebut, maka tidak bisa untuk memulihkan pesan hasil ouput hashnya. Ternyata, sifat binding tersebut terimplikasi oleh collision-resistant dari fungsi hash yang mendasarinya. Jika fungsi hash adalah collision-resistant, maka akan bisa untuk menemukan perbedaan nilai msg dan msg‘. Sehingga H (Nonce ‖ msg) = H (Nonce’ ‖ msg ‘) karena nilai tersebut memang akan menjadi collision.