Definisi masalah
Tujuan dari kriptografi adalah untuk memperkirakan suatu proses di mana
crypt(x)
tidak menyampaikan informasi tentang x tetapi ada fungsi decrypt
seperti itu
decrypt(crypt(x)) == x
Jika mendekripsi dan crypt hanya dilakukan dalam menjalankan yang sama dari program yang sama, Anda bisa menerapkan ini dengan menggunakan kondisi tersembunyi:
var map = {}; // A hidden hashmap.
function crypt(x) {
var k = unique_unforgeable_value();
map[k] = x;
return k;
}
function decrypt(k) { return map[k]; }
Namun dalam praktiknya, crypt
dan decrypt
dipanggil oleh program yang berbeda atau program yang berbeda dari program yang sama, jadi kita perlu memperkirakan crypt
menggunakan fungsi deterministik yang outputnya tidak dapat dibedakan dari bit acak - ia harus tidak dapat dimampatkan (dalam pengertian pengkodean Shannon) jadi ada tidak ada bit struktur tambahan yang dapat digunakan untuk mengumpulkan informasi tentang x.
Algoritma sangat terstruktur sehingga dapat dikompresi. Jadi yang kita butuhkan adalah cara untuk mendapatkan keacakan yang jelas sambil mempertahankan determinisme yang diperlukande c r yp t ∘ c r yp t = i de n t i t y.
Menjawab
Dengan menjelajah algoritma kompresibel sederhana dengan rahasia yang tidak dapat dimampatkan
crypt = crypt_algo(secret)
decrypt = decrypt_algo(secret)
kita dapat memperkirakan sasaran di atas. crypt
dan decrypt
memiliki konten informasi yang tinggi karena tingginya kandungan informasi rahasia meskipun crypt_algo
dan decrypt_algo
memiliki konten informasi yang rendah.
secret
perlu dijauhkan dari penyerang agar ini berfungsi karena jika tidak penyerang bisa melakukan kari di atas. Algoritma tidak perlu dirahasiakan karena hanya menyediakan sebagian kecil dari isi informasi dari fungsi yang dikeringkan.
Peringatan
"Keamanan kriptografi harus bergantung pada kunci rahasia alih-alih algoritma rahasia."
Saya tidak setuju dengan bagian bukannya .
Anda mungkin mendapatkan beberapa tingkat pertahanan mendalam dengan menjaga kedua rahasia, tetapi pengujian crypt_algo
sulit, sehingga secara historis, algoritma rahasia yang dikembangkan di rumah oleh amatir telah bernasib lebih buruk ketika mengalami serangan daripada yang telah ditinjau dengan cermat oleh sejumlah besar kriptografer profesional. Inilah mengapa keamanan oleh ketidakjelasan mendapatkan nama yang buruk. "Ketidakjelasan" di sana mengacu pada upaya untuk menjaga rahasia algoritma sebagai pengganti kunci yang dilindungi dengan benar.