Где хранить закрытый ключ на сервере цифровой подписи? - PullRequest
3 голосов
/ 15 апреля 2011

Я разрабатываю клиент-серверное приложение, которое требует, чтобы некоторые файлы были подписаны закрытым ключом перед отправкой клиенту. Затем клиент проверит подпись с помощью открытого ключа. Поэтому закрытый ключ должен постоянно находиться на сервере и быть доступным для чтения приложению сервера.

Проблема в том, что мне было интересно, где хранить мой закрытый ключ, который более защищен от утечки в случае взлома сервера.

Стоит ли хранить его в базе данных или хранить в виде файла и использовать разрешение на управление файлом?

Спасибо.

Ответы [ 2 ]

5 голосов
/ 15 апреля 2011

Опциональным вариантом является использование двоичного файла setuid, который запускается от имени другого пользователя для подписи сертификата.

У этого другого пользователя был бы доступ на чтение к ключу, но у «обычного» пользователя сервера приложений не было бы доступа на чтение. Поэтому, если кто-то скомпрометирует учетную запись сервера приложений, он сможет подписать только произвольные сертификаты, а не украсть закрытый ключ CA.

Другая возможность может заключаться в том, чтобы иметь некоторый механизм RPC для передачи запроса подписи другому процессу, выполняющемуся как другой пользователь, возможно, на другом хосте. Или другая виртуальная машина на том же хосте (но не внутри компьютера сервера приложений).

Любой из этих подходов просто уменьшает влияние компромисса, но все равно это плохо.

4 голосов
/ 15 апреля 2011

Если ключ хранится на самом сервере, то если этот сервер взломан, он будет найден.Хранение в БД / файлах вряд ли предотвратит это - большинство взломов сервера происходит через сервисы, которые он обслуживает.

Один из вариантов - хранить закрытые ключи в отдельном аппаратном модуле, называемом Hardware Security Module,или HSM.HSM генерирует подписи по запросу, но не раскрывает закрытый ключ серверу.Если сервер скомпрометирован, они могут заставить его подписывать файлы на время их доступа, но не могут получить сам ключ и должны сохранить доступ к серверу, чтобы продолжить генерировать подписи.Для нечастых приложений смарт-карта может служить простым HSM.

...