(Примечание: ИМО вопрос в основном касается WinAPI и DACL, а не CNG, поэтому, пожалуйста, читайте дальше!)
В настоящее время я пытаюсь модифицировать пример поставщика хранилища ключей CNG из пакета Microsoft Cryptographic Provider Development Kit таким образом, чтобы он не сохранял ключи в отдельных файлах. Однако у меня проблемы с дескрипторами безопасности, которые могут быть назначены закрытым ключам.
В оснастке «Сертификаты» консоли управления Windows Server можно управлять закрытыми ключами сертификатов, т. е. можно изменить владельца, DACL и SACL ключа, что приводит к вызову NCryptSetProperty с дескриптором безопасности в качестве параметра. Для DACL оснастка позволяет разрешать/запрещать только «полный доступ» или «чтение», что приводит к установке бита GENERIC_ALL или GENERIC_READ в маске доступа ACE.
Как я понял, эти общие биты должны быть сопоставлены с правами конкретного приложения, иначе AccessCheck не будет работать. Но мне действительно нужно сделать это вручную???
CreatePrivateObjectSecurity+SetPrivateObjectSecurity не всегда работает, так как CreatePrivateObjectSecurity очень разборчив в отношении владельца и группы во входном дескрипторе безопасности. Более того, при применении сопоставления общие биты в маске доступа сбрасываются, в результате чего оснастка показывает неверные настройки (как я уже сказал, оснастка учитывает только биты GA и GR при отображении текущих разрешений).
Кажется, мне не хватает некоторых частей здесь...