Я использую Perl/MySQL/Apache для создания небольшого внутреннего приложения для обмена информацией. Будут пользователи с разными уровнями безопасности, и многие из этих пользователей, вероятно, будут иметь привилегии root/admin для хост-сервера и других частей нашей сети.
Я изначально разработал что-то вроде этого:
Главный ключ будет использоваться для шифрования всего содержимого, но, очевидно, я не хочу, чтобы этот ключ хранился в виде простого текста (в коде или в БД), поэтому будет таблица Keys, в которой открытый ключ каждого пользователя используется для зашифровать копию шифра. Если по какой-то причине мастер-ключ необходимо будет изменить, все копии ключа могут быть сгенерированы заново, и никакие данные не будут потеряны.
У каждого пользователя будет запись в таблице Users с его паролем и закрытым ключом, зашифрованным с помощью хэша их обычного текстового пароля. При входе в систему текст будет использоваться для расшифровки и сравнения с сохраненным зашифрованным паролем для проверки личности, а затем для расшифровки закрытого ключа, хранящегося на сервере в переменной сеанса до выхода из системы.
Что я хотел бы сделать, так это использовать аутентификацию AD через LDAP вместо локального пароля для всех, кроме пользователя-администратора. Но, поскольку пароли пользователей могут меняться между входами в систему, я не могу полагаться на это как на зашифрованный текст для шифрования/дешифрования закрытых ключей.
Итак, мой вопрос таков: какой достаточно безопасный фрагмент личных данных я могу использовать из AD в качестве шифра? Я не хочу, чтобы это было очевидно для всех, у кого есть доступ к AD Users & Computers или тому подобному, хотя я, конечно, должен был бы каким-то образом получить эту информацию от серверного процесса. (Может быть, через олицетворение пользователя?)
Любые другие идеи или зияющие дыры в этом процессе? Я знаю, что процесс сервера потенциально может быть использован для создания дампа содержимого памяти, или пользователь root может прочитать то же самое через необработанный доступ, но это приемлемый риск. В конечном счете любой, у кого есть root или физический доступ, обычно заслуживает доверия. Тем не менее, я хочу, чтобы содержимое базы данных было зашифровано, чтобы честные люди оставались честными.