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.
sumber
Jawaban:
Definisi masalah
Tujuan dari kriptografi adalah untuk memperkirakan suatu proses di mana
tidak menyampaikan informasi tentang x tetapi ada fungsi
decrypt
seperti ituJika mendekripsi dan crypt hanya dilakukan dalam menjalankan yang sama dari program yang sama, Anda bisa menerapkan ini dengan menggunakan kondisi tersembunyi:
Namun dalam praktiknya,
crypt
dandecrypt
dipanggil oleh program yang berbeda atau program yang berbeda dari program yang sama, jadi kita perlu memperkirakancrypt
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
kita dapat memperkirakan sasaran di atas.
crypt
dandecrypt
memiliki konten informasi yang tinggi karena tingginya kandungan informasi rahasia meskipuncrypt_algo
dandecrypt_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
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.sumber
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.
sumber
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.
sumber