Pertama-tama, saya tidak akan menyebut diri saya sebagai ahli keamanan, tetapi saya berada dalam posisi harus menjawab pertanyaan ini. Apa yang saya temukan sedikit mengejutkan saya: Tidak ada sistem yang sepenuhnya aman . Yah, saya kira sistem yang sepenuhnya aman akan menjadi salah satu di mana semua server dimatikan :)
Seseorang yang bekerja dengan saya pada saat itu menggambarkan mendesain sistem yang aman dalam hal meningkatkan standar bagi para penyusup. Jadi, setiap lapisan pengamanan mengurangi peluang serangan.
Misalnya, bahkan jika Anda benar-benar dapat mengamankan kunci privat, sistemnya tidak sepenuhnya aman. Tetapi, dengan benar menggunakan algoritma keamanan dan memperbarui dengan tambalan memunculkan bilah. Tapi, ya, komputer super yang cukup kuat dan diberi waktu yang cukup dapat merusak enkripsi. Saya yakin semua ini dipahami, jadi saya akan kembali pertanyaannya.
Pertanyaannya jelas jadi saya pertama-tama akan mencoba membahas masing-masing poin Anda:
Katakanlah kunci dilindungi oleh model keamanan sistem file; tapi bagaimana dengan pengguna super (jahat), atau platform yang tidak memberikan kesetiaan seperti itu?
Ya, jika Anda menggunakan sesuatu seperti Windows Key Store atau kunci privat TLS yang dienkripsi, Anda dihadapkan pada pengguna yang memiliki kata sandi (atau akses) ke kunci privat. Tapi, saya pikir Anda akan setuju yang meningkatkan standar. Sistem file ACL (jika diterapkan dengan benar) memberikan tingkat perlindungan yang cukup baik. Dan Anda berada dalam posisi untuk secara pribadi memeriksa dan mengetahui pengguna super Anda.
Atau kuncinya adalah hardcoded menjadi binari perangkat lunak, tetapi selalu bisa didekompilasi dan bagaimana dengan perangkat lunak open source atau kode yang ditafsirkan?
Ya, saya telah melihat kunci hardcoded dalam biner. Sekali lagi, ini sedikit meningkatkan bar. Seseorang yang menyerang sistem ini (jika itu adalah Java) harus memahami bahwa Java menghasilkan kode byte (dll) dan harus memahami cara mendekompilasinya. Jika Anda menggunakan bahasa yang menulis langsung ke kode mesin, Anda dapat melihat bahwa ini meningkatkan bilah sedikit lebih tinggi. Ini bukan solusi keamanan yang ideal, tetapi dapat memberikan tingkat perlindungan tertentu.
Jika kunci dihasilkan, algoritma seperti itu perlu deterministik (mungkin) dan kemudian masalah yang sama berlaku untuk seed.
Ya, pada dasarnya maka algoritma menjadi informasi kunci pribadi untuk membuat kunci pribadi. Jadi, sekarang perlu dilindungi.
Jadi, saya pikir Anda telah mengidentifikasi masalah inti dengan kebijakan keamanan apa pun, manajemen kunci . Memiliki kebijakan manajemen utama di tempat adalah pusat untuk menyediakan sistem yang aman. Dan, itu adalah topik yang cukup luas .
Jadi, pertanyaannya adalah, seberapa amankah sistem Anda (dan, karenanya, kunci privat) perlu? Seberapa tinggi, dalam sistem Anda, apakah bilah perlu dinaikkan?
Sekarang, jika Anda bersedia membayar, ada beberapa orang di luar sana yang menghasilkan solusi untuk ini. Kami akhirnya menggunakan HSM (Modul Keamanan Perangkat Keras) . Ini pada dasarnya adalah server anti-perusak yang berisi kunci dalam perangkat keras. Kunci ini kemudian dapat digunakan untuk membuat kunci lain yang digunakan untuk enkripsi. Idenya di sini adalah bahwa (jika dikonfigurasi dengan benar), kuncinya tidak pernah meninggalkan HSM. HSM harganya sangat mahal . Tetapi dalam beberapa bisnis (misalnya melindungi data kartu kredit), biaya pelanggaran jauh lebih tinggi. Jadi, ada keseimbangan.
Banyak HSM menggunakan kartu kunci dari pemeliharaan dan admin fitur. Kuorum kartu kunci (misalkan 5 dari 9) harus dimasukkan secara fisik ke server untuk mengubah kunci. Jadi, ini meningkatkan standar dengan membiarkan pelanggaran jika kuorum pengguna super berkolusi.
Mungkin ada solusi perangkat lunak di luar sana yang menyediakan fitur serupa dengan HSM tapi saya tidak tahu apa itu.
Saya tahu ini hanya beberapa cara untuk menjawab pertanyaan, tapi saya harap ini membantu.