Перш за все, я б не відносився до себе як до експерта з питань безпеки, але мені довелося відповісти на це питання. Те, що я з’ясував, трохи мене здивувало: Не існує такої речі, як повністю захищена система . Ну, я думаю, цілком захищена система була б такою, де всі сервери вимкнено :)
Хтось, хто працював зі мною в той час, описував розробку захищеної системи з точки зору підняття планки для зловмисників. Отже, кожен шар закріплення зменшує можливість нападу.
Наприклад, навіть якщо ви могли повністю захистити приватний ключ, система не є повністю захищеною. Але, правильне використання алгоритмів захисту та оновлення патчів піднімає планку. Але, так, суперкомп'ютер, достатньо потужний і приділений достатньо часу, може порушити шифрування. Я впевнений, що все це зрозуміло, тому я повернуся до питання.
Питання зрозуміло, тому спершу спробую вирішити кожен із ваших питань:
Скажіть, ключ захищений моделлю захисту файлової системи; а як щодо (зловмисних) супер-серверів або платформ, які не забезпечують такої вірності?
Так, якщо ви використовуєте щось на зразок магазину ключів Windows або зашифрований паролем приватний ключ TLS, ви потрапляєте на користувачів, які мають пароль (або доступ) до приватних ключів. Але, я думаю, ти погодишся, що піднімає планку. Файлова система ACL (якщо вона належним чином реалізована) забезпечує досить хороший рівень захисту. І ви в змозі особисто провідати ветеринара та знати своїх супер користувачів.
Або ключ твердо закодований у бінарні програми, але його завжди можна декомпілювати, а що з програмним забезпеченням з відкритим кодом чи інтерпретованим кодом?
Так, я бачив жорсткі коди ключів у двійкових файлах. Знову ж таки, це трохи піднімає планку. Хтось, хто атакує цю систему (якщо це Java), повинен зрозуміти, що Java виробляє байт-код (тощо) і повинен зрозуміти, як її декомпілювати, прочитавши її. Якщо ви використовуєте мову, яка записується безпосередньо до машинного коду, ви можете бачити, що це піднімає планку трохи вище. Це не ідеальне рішення щодо безпеки, але може забезпечити певний рівень захисту.
Якщо ключ генерується, такий алгоритм повинен бути детермінованим (імовірно), і тоді ця сама проблема стосується і початкових даних.
Так, по суті тоді алгоритм стає інформацією приватного ключа для створення приватного ключа. Отже, це потрібно було б зараз захистити.
Отже, я думаю, ви визначили основну проблему з будь-якою політикою безпеки, управлінням ключами . Встановлення ключової політики управління є ключовим для забезпечення захищеної системи. І, це досить широка тема .
Отже, питання полягає в тому, наскільки безпечною повинна бути ваша система (а отже, і приватний ключ)? Наскільки високо у вашій системі потрібно підняти планку?
Тепер, якщо ви готові платити, там є люди, які виробляють рішення для цього. Ми закінчилися за допомогою HSM (Hardware Security Module) . Це, в основному, захист від несанкціонованого захисту, який містить ключ апаратного забезпечення. Потім цей ключ можна використовувати для створення інших ключів, які використовуються для шифрування. Ідея тут полягає в тому, що (якщо налаштовано правильно), ключ ніколи не залишає HSM. HSM коштують багато . Але в деяких підприємствах (захист даних кредитних карток дозволяє сказати) вартість порушення значно вище. Отже, є баланс.
Багато HSM використовують ключові картки для обслуговування та адміністрування функцій. Кворум ключових карт (5 з 9 можливостей) повинен бути фізично введений на сервер, щоб змінити ключ. Таким чином, це піднімає планку досить високо, дозволяючи лише порушити, якщо кворум супер користувачів змовився.
Можливо, там є програмні рішення, які надають аналогічні функції HSM, але я не знаю, що вони є.
Я знаю, що це лише певним чином відповідає на питання, але я сподіваюся, що це допомагає.