Таємниці, такі як ключі шифрування та облікові дані, не слід перевіряти в контролі джерел з кількох причин. По-перше, очевидно, що ключі шифрування та облікові дані завжди повинні бути відомими, а керування джерелами не є надійним способом захисту інформації від розкриття. Інша причина, чому ви б не хотіли таких секретів у своєму джерелі управління, як правило, полягає в тому, що секрети зазвичай (але не завжди) специфічні для певного атрибуту середовища, в якому буде працювати ваша програма. (Наприклад, придбання приватного ключа для створення цифрового підпису, необхідного для авторизації веб-служби, конкретна кінцева точка цієї веб-служби може працювати в середовищі якості, що вимагає підпису якості).
Правильний спосіб поводження з навколишнім середовищем (або глобальною таємницею) - це поводження з ним, як і з будь-яким іншим атрибутом екологічної конфігурації, з додатковим контролем безпеки для хорошої міри. Добре розроблений, незалежний та надійний модуль коду повинен бути однаковим у різних середовищах, таким чином, щоб середовище, в яке вони розгорнуті, повідомляло програму про її атрибути (наприклад, деталі підключення до бази даних, облікові дані, кінцеві точки веб-служби, шляхи до файлів тощо). Тепер деталі конфігурації, важливі для вашої програми, зовнішні і стають параметрами конфігурації вашого середовища.
Тепер розглянемо деякі ваші аргументи:
Загалом, чи не просто ми рухаємо проблему?
Не існує такої ідеї, як ідеальна безпека, проте "переміщення" проблеми в область, де можуть бути встановлені додаткові заходи та контроль, покращить труднощі та зменшить ймовірність випадкового або зловмисного розкриття секретів. Хороше правило, яке слід дотримуватися при розробці системи, де конфіденційні дані повинні бути захищені, - це завжди ставити елементи керування в двійки. Що я маю на увазі під цим, це гарантувати, що для випадкового або зловмисного розкриття конфіденційної інформації або інциденту із безпекою сталося б тоді сталася помилка або два та більше контролю.
Хорошим прикладом цього може бути збереження зашифрованого файлу на сервері. У мене також є секретний ключ розшифровки, який я повинен зберігати в конфіденційності в іншому файлі.
- Зберігайте ключ і зашифрований файл на одному сервері (0 елементів керування, будь-хто, хто має доступ до сервера, може тривіально отримати конфіденційну інформацію)
- Виконайте наведені вище дії та захистіть доступ до файлів до обох файлів, щоб його можна було читати лише користувачеві програми, що виконує програму ОС (1 Керування, компрометація пароля кореневого користувача або користувач, що виконує програму, дозволить зловмиснику отримати конфіденційну інформацію)
- Зберігайте ключ у сховищі зовнішніх ключів, придбайте ключ із кількома заходами безпеки, такими як білий список IP-адреси, автентифікація сертифікатів та інші заходи до програми, яка може отримати доступ до зашифрованого файлу у своїй файловій системі. (Для керування конфіденційними даними повинні виникати кілька елементів керування, кілька помилок контролю безпеки)
Знову ж таки, немає такої ідеї, як ідеальна безпека, але мета наявності декількох керуючих механізмів гарантує, що для розкриття необхідно мати кілька помилок.
Мені здається, що такі продукти, як Azure KeyVault, не є кращими і безглуздо складнішими,
Складне так, безглуздо є абсолютно суб'єктивним. Ми не можемо вести дискусію про безглуздість додаткової безпеки, не реально враховуючи, наскільки серйозним було б виявлення конфіденційних даних. Якщо хтось міг би використовувати конфіденційні дані для надсилання незаконних банківських переказів з вашої фінансової установи, то щось на зразок ключового сховища - це найдальше від безглуздого.
ніж зберігати свої секрети в окремому конфігураційному файлі та переконайтесь, що він знаходиться у вашому .gitignore чи еквіваленті.
Поки хтось випадково не перевірив це на контроль джерел, тепер секрет вбудований в історію управління джерелами назавжди.
Звичайно, люди, ймовірно, невпевнено посилають його один одному ...
Безпека - це не лише технічна проблема, це проблема людей. Це було б поза темою, але я відчуваю, що в цей момент ви намагаєтеся поговорити самі, не роблячи потреби.
Чи існує спосіб управління секретами, який не просто пересуває проблему? Я вважаю, що це питання має однозначну чітку відповідь. За аналогією, якби я запитав, як HTTPS не просто пересуває проблему, я відповів би, що ключі CA розповсюджуються у вашій ОС, і ми довіряємо їм, оскільки ми довіряємо способу розповсюдження ОС.
Безпека не завжди усуває проблеми, значну частину часу вона ставить під контроль. Ваша аналогія є короткою, тому що це саме те, що робить криптовалюта з публічно-приватним ключем. Ми «переносимо проблему» до КА, надаючи незмінну та повну довіру до нашого КА, щоб підтвердити особистість суб'єкта, який є державним партнером. В основному, нічого, крім катастрофічного ряду збоїв (наприклад, втрата довіри до CA), не повинно виникнути, щоб призвести до проблеми безпеки.
Як і для багатьох речей, безпека - це лінія, яку ви повинні провести на основі суб'єктивних критеріїв, характеру даних, наслідків розголошення, апетиту до ризику, бюджету тощо ...