Pertama, kita harus berasumsi bahwa Hawa hanya pasif. Maksud saya, dia dengan jujur mengirim kartu itu kepada Bob, dan apa pun yang dia bawa kembali ke Alice adalah jawaban Bob. Jika Eve dapat mengubah data di salah satu atau kedua arah (dan tindakannya tetap tidak terdeteksi) maka apa pun berjalan.
(Untuk menghormati tradisi lama, dua pihak yang jujur yang terlibat dalam percakapan disebut Alice dan Bob. Dalam teks Anda, Anda mengatakan "Anda". Nama asli saya bukan "Alice", tetapi saya akan merespons seperti jika Anda menulis bahwa Alice ingin memverifikasi nomor telepon Bob.)
Jawaban sederhana (tapi lemah) adalah menggunakan fungsi hash. Alice menulis di kartu: "kembalikan kepadaku hash SHA-256 dari nomor teleponmu". SHA-256 adalah fungsi hash kriptografis yang diyakini aman, sejauh fungsi hash berjalan. Menghitungnya dengan tangan akan membosankan tetapi masih bisa dilakukan (itu sekitar 2.500 operasi 32-bit, di mana setiap operasi adalah penambahan, pergeseran atau rotasi kata, atau kombinasi bit bitwise; Bob harus dapat melakukannya dalam satu hari atau begitu).
Sekarang apa yang lemah tentang itu? SHA-256, menjadi fungsi hash kriptografis, tahan terhadap "preimage": ini berarti bahwa dengan memberikan hasil hash, sangat sulit untuk memulihkan input yang sesuai (itulah masalah yang dihadapi Hawa). Namun, "sangat keras" berarti "metode termudah adalah kekerasan: mencoba input yang mungkin sampai kecocokan ditemukan". Masalahnya adalah kekuatan kasar itu mudah di sini: tidak ada begitu banyak nomor telepon yang mungkin (di Amerika Utara, itu 10 digit, yaitu hanya 10 miliar). Bob ingin melakukan sesuatu dengan tangan, tetapi kita tidak bisa berasumsi bahwa Hawa sangat terbatas. PC dasar dapat mencoba beberapa juta hash SHA-256 per detik sehingga Hawa akan selesai dalam waktu kurang dari satu jam (kurang dari 5 menit jika dia menggunakan GPU).
Ini adalah masalah umum: jika Bob deterministik (yaitu untuk pesan yang diberikan dari Alice, ia akan selalu mengembalikan respons yang sama), Eve dapat mensimulasikannya. Yaitu, Eve tahu segalanya tentang Bob kecuali nomor teleponnya, jadi ia sebenarnya mengelola 10 miliar Bobs, yang hanya berbeda dengan nomor telepon yang mereka duga; dan dia menunggu salah satu Bobs virtual untuk mengembalikan apa pun yang sebenarnya dikembalikan oleh Bob yang sebenarnya. Cacat mempengaruhi banyak jenis solusi "pintar" yang melibatkan nonces acak dan enkripsi simetris dan yang lainnya. Ini adalah kelemahan yang kuat, dan akarnya terletak pada perbedaan besar dalam daya komputasi antara Eve dan Bob (sekarang, jika Bob juga memiliki komputer sebesar Eve, maka ia dapat menggunakan komputer yang lambat).fungsi hash melalui penggunaan banyak iterasi; itu kurang lebih tentang hashing kata sandi, dengan nomor telepon sebagai pengganti kata sandi; lihat bcrypt dan juga jawaban ini ).
Oleh karena itu, solusi yang tidak lemah harus melibatkan keacakan pada bagian Bob: Bob harus melempar koin atau melempar dadu berulang kali, dan menyuntikkan nilai-nilai dalam perhitungannya. Selain itu, Hawa tidak boleh bisa mengungkap apa yang dilakukan Bob, tetapi Alice harus mampu, sehingga beberapa informasi secara rahasia disampaikan dari Bob ke Alice. Ini disebut enkripsi asimetris atau, setidaknya, perjanjian kunci asimetris. Algoritma paling sederhana dari kelas itu untuk menghitung, tetapi masih cukup aman, kemudian RSA dengan padding PKCS # 1 v1.5 . RSA dapat menggunakan sebagai eksponen publik. Jadi protokolnya demikian:e=3
Alice menghasilkan bilangan bulat besar mana dan adalah bilangan bulat utama yang berukuran sama, sehingga ukuran cukup untuk memastikan keamanan (yaitu setidaknya 1024 bit, pada 2012). Juga, Alice harus mengatur agar dan tidak menjadi kelipatan dari 3.p q n p - 1 q - 1n=pqpqnp−1q−1
Alice menulis di kartu.n
Bob pertama bantalan nomor teleponnya ke urutan byte selama , seperti yang dijelaskan oleh PKCS # 1 (berarti ini: 00 02 xx xx ... xx 00 bb bb .. bb, di mana 'bb' adalah byte sepuluh yang encode nomor telepon, dan 'xx' adalah nilai byte non-nol acak, untuk total panjang 128 byte jika adalah bilangan bulat 1024-bit).nnn
Bob menginterpretasikan urutan byte-nya sebagai nilai integer besar (pengkodean big-endian) dan menghitung (jadi itu adalah beberapa perkalian dengan bilangan bulat yang sangat besar, kemudian pembagian, hasilnya menjadi sisa divisi). Itu masih bisa dilakukan dengan tangan (tapi, di sana lagi, itu mungkin akan mengambil bagian yang lebih baik dari sehari). Hasilnya adalah apa yang Bob kirim kembali ke Alice.m 3 m o d nmm3 mod n
Alice menggunakan pengetahuannya tentang dan untuk memulihkan dari dikirim oleh Bob. Halaman Wikipedia di RSA memiliki beberapa penjelasan yang cukup jelas tentang proses itu. Setelah Alice memiliki , ia dapat menghapus padding ('xx' adalah non-nol, sehingga byte 'bb' pertama dapat ditemukan dengan jelas) dan ia kemudian memiliki nomor telepon, yang dapat ia bandingkan dengan yang ia miliki.q m m 3 m o d n mpqmm3 mod nm
Perhitungan Alice akan membutuhkan komputer (apa yang dilakukan komputer selalu dasar dan dapat dilakukan dengan tangan, tetapi komputer sangat cepat melakukannya, sehingga "bisa dilakukan" mungkin memerlukan waktu terlalu banyak untuk dilakukan dalam praktik; dekripsi RSA dengan tangan akan membutuhkan banyak minggu).
(Sebenarnya kita bisa memiliki perhitungan tangan yang lebih cepat dengan menggunakan enkripsi McEliece , tetapi kemudian kunci publik - apa yang ditulis Alice pada kartu - akan sangat besar, dan kartu tidak akan melakukannya; Eve harus membawa buku lengkap digit.)