Kerahasiaan kunci vs kerahasiaan Algoritma


8

itu pernyataan yang terkenal itu

" Keamanan kriptografi harus bergantung pada kunci rahasia alih-alih algoritma rahasia ."

Saya ingin bertanya tentang detailnya. Dan apa perbedaan mereka?

Saya melihat hal yang jelas bahwa untuk sistem multi-pengguna, menghasilkan kunci jauh lebih mudah daripada menghasilkan alghoritma yang berbeda untuk setiap pasangan pengguna, (dan bahkan untuk satu pasangan pengguna pun dapat berargumen bahwa memperbarui kunci lebih mudah)

Tapi, apakah itu satu-satunya argumen?

Maksud saya, jika kita mendefinisikan

AlgorithmA = AlgorithmX + key A
AlgorithmB = AlgorithmX + key B

Maka perubahan pada kunci tidak berbeda dari perubahan dalam algoritma.

Satu-satunya perbedaan yang saya lihat adalah untuk sepasang pengguna / kunci baru

  • Sebagian besar struktur Algoritma tetap konstan dalam kasus kunci rahasia,

  • Sebagian besar struktur Algoritma perlu diubah dalam kasus Algoritma rahasia

Tapi di mana batasnya? "sebagian besar" artinya?

Saya ingin memiliki lebih banyak pandangan dan petunjuk untuk memahami mengapa perbedaan ini biasanya disebutkan.


Jawaban:


4

Definisi masalah

Tujuan dari kriptografi adalah untuk memperkirakan suatu proses di mana

crypt(x)

tidak menyampaikan informasi tentang x tetapi ada fungsi decryptseperti 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, cryptdan decryptdipanggil oleh program yang berbeda atau program yang berbeda dari program yang sama, jadi kita perlu memperkirakan cryptmenggunakan 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 diperlukandecryhaltcryhalt=sayadentsayaty.

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. cryptdan decryptmemiliki konten informasi yang tinggi karena tingginya kandungan informasi rahasia meskipun crypt_algodan decrypt_algomemiliki konten informasi yang rendah.

secretperlu 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_algosulit, 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.


Saya pikir ini adalah jawaban yang benar, algoritma tidak memiliki struktur dan kunci, dan itulah kuncinya =)
Hernan_eche

5

Perbedaan yang ingin Anda buat antara kunci dan algoritma yang tepat tidak didasarkan pada apakah sebagian besar operasi terkandung dalam satu atau yang lain, tetapi pada di mana kompleksitasnya. Saya tidak berbicara tentang kompleksitas algoritmik di sini, tetapi kompleksitas dalam artinya sehari-hari: kesulitan untuk memahami dan alasan.

Algoritme yang tepat rumit dan sulit untuk dipikirkan. Ini biasanya melakukan sejumlah manipulasi bit yang tampak sewenang-wenang, operasi logis dan aritmatika, dan pengocokan umum data. Sangat sulit bagi orang awam atau bahkan seorang ahli kriptografi untuk mengetahui berapa banyak privasi yang benar-benar dimanipulasi oleh semua manipulasi itu untuk Anda, dan jenis analisis kriptografi yang mungkin rentan. Jadi cara terbaik untuk percaya diri tentang keamanan algoritma adalah dengan meletakkannya di tempat terbuka dan memeriksanya oleh para ahli seluas mungkin. BUATNYA PUBLIK.

Kuncinya, di sisi lain, adalah konsep sederhana: itu adalah sekelompok bit yang perlu acak. Tidak perlu meninjau kunci untuk memastikan kebenaran kripto. Kunci apa saja seharusnya sekuat kunci lainnya (dan jika ini tidak benar maka pada prinsipnya dapat ditemukan dengan meninjau algoritma, bukan kunci). Kita tahu bahwa kualitas keacakan yang tersedia untuk menghasilkan kunci kurang dari sempurna, jadi dalam praktiknya beberapa kunci mungkin lemah karena kurangnya keacakan, tetapi setidaknya semua orang bisa tahu tanpa perlu menjadi ahli kriptografi ahli dan tanpa perlu membuat analisis sulit tentang kunci bahwa keacakan yang baik AKAN menyebabkan kunci yang baik. Jadi gunakan keacakan terbaik yang Anda miliki maka Anda tidak perlu (HARUS tidak!) Berbagi kunci dengan semua orang untuk memiliki kepercayaan pada kripto Anda.


Saya pikir ini layak mendapat komentar. Saya sudah membaca jawaban Anda, dan saya mengerti maksud Anda, benar di beberapa titik, tetapi saya sudah memilih jawaban @Mike Samuel yang dengan luar biasa mengatakan dengan tepat kebalikannya !. Yaitu, bahwa algoritme kurang kompleks daripada kunci, karena algoritme memiliki (dan membutuhkan) struktur, tetapi kunci (tidak perlu memiliki struktur). Saya setuju. Alih-alih, Anda mengatakan: "Kuncinya, di sisi lain, adalah konsep sederhana: itu adalah kumpulan bit yang perlu acak", pada kenyataannya 'konsep' sederhana bukan 'data' sederhana. Kompleksitas data 'acak', adalah kompleksitas maksimum yang mungkin!
Hernan_eche

@Hernan_eche Kuncinya memiliki kompleksitas Kolmogorov tinggi sehubungan dengan bit-string lain dengan panjang yang sama. Tapi, secara konseptual, itu hanya string acak bit dan, sebagai konsep, itu jauh lebih mudah dipahami daripada algoritma kripto yang baik.
David Richerby

2

Saya mengajukan pertanyaan yang sama beberapa tahun yang lalu dari salah satu pakar kriptografi terkenal.

Poin yang lebih menarik di sini adalah Anda dapat memikirkan kunci untuk memuat kode algoritma dan algoritma tersebut menjadi Universal Turing Machine (UTM) sederhana. Ingat yang ingin kami lakukan adalah memiliki algoritme tetap untuk tugas kriptografi yang tidak berubah dari satu run algoritme ke run lainnya, jika Anda menganggap kunci sebagai bagian dari algoritme maka algoritme perlu diubah setiap kali untuk pastikan itu aman. Dengan algoritme tetap plus kunci yang dipilih secara acak, kami tidak memiliki masalah itu.

Perbedaan aslinya lebih jelas jika Anda berpikir tentang kriptografi pra-modern. Jika musuh tahu algoritma semuanya hilang, itu tidak ada gunanya, menjaga algoritma itu penting. Jika dalam satu kasus tertentu algoritma diketahui semuanya akan hilang untuk semua penggunaan di masa depan. Dalam kriptografi modern, kuncinya bukan bagian dari algoritma , itu dipilih secara acak , mengungkapkan algoritma kriptografi (dan bahkan kunci yang sebelumnya digunakan) tidak mengganggu keamanan penggunaannya di masa depan karena di masa depan berjalan kuncinya akan seperti yang lain string yang dipilih secara acak dan yang akan memberikan keamanan, kunci yang digunakan sebelumnya tidak membantu memecahkan menjalankan baru.

Jadi apa yang terjadi jika kita mempertimbangkan UTM plus kunci acak? Kecuali jika kunci memiliki struktur yang bagus Anda tidak dapat membuktikan bahwa algoritma akan aman, misalnya kunci yang dipilih secara acak dari distribusi seragam tidak akan berfungsi. Kuncinya harus "pada dasarnya" algoritma tetap ditambah string acak dalam hal ini tidak benar-benar berbeda dari memindahkan bagian algoritma tetap dari kunci ke UTM, itu tidak berubah dari satu run ke yang lain.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.