Где хранится приватный ключ (private key) в контексте инфраструктуры открытых ключей (PKI)?

«Где хранится приватный ключ (private key) в контексте инфраструктуры открытых ключей (PKI)?» — вопрос из категории Безопасность, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Приватный ключ — критически важный секретный материал, который должен храниться максимально защищенно. Места хранения:

  1. Зашифрованные файлы ключевых хранилищ (Keystore Files):

    • Форматы: JKS (Java KeyStore), PKCS#12 (.p12 или .pfx).
    • Защита: Доступ к хранилищу и ключу защищен паролями.
      // Пример загрузки ключа из PKCS#12 в Java
      KeyStore ks = KeyStore.getInstance("PKCS12");
      try (FileInputStream fis = new FileInputStream("keystore.p12")) {
      ks.load(fis, "storePassword".toCharArray());
      PrivateKey privateKey = (PrivateKey) ks.getKey("myAlias", "keyPassword".toCharArray());
      }
  2. Системные хранилища операционной системы:

    • Windows: Windows-MY (интегрировано с Certificate Store).
    • Linux/macOS: Часто через openssl или в файлах типа ~/.ssh/id_rsa (для SSH).
  3. Аппаратные модули безопасности (HSM — Hardware Security Module):

    • Физическое устройство, исключающее извлечение ключа. Ключ генерируется и используется внутри HSM, никогда не покидая его. Это наивысший уровень безопасности.

Best Practice: Никогда не храните приватный ключ в виде простого текстового файла, не коммитьте его в системы контроля версий (Git) и используйте надежные пароли для хранилищ.