我正在实施基于 Microsoft 白皮书“在 Windows 7 和 Windows Server 2008 R2 中使用一次性密码进行强身份验证”的 OTP 解决方案。
该白皮书相关部分的摘要是通过为 Windows CNG 子系统实现自定义密钥存储提供程序 (KSP) 来从本质上伪造智能卡读卡器的存在。但是,按照所述说明进行操作后,我无法在需要时让操作系统使用我的自定义 KSP。
在我的凭据提供程序中,我正在创建一个具有 KERB_CERTIFICATE_LOGON 和 KERB_SMARTCARD_CSP_INFO 结构的身份验证包。根据需要在 KERB_SMARTCARD_CSP_INFO 中引用了我的自定义 KSP(它也已正确注册,可以枚举,并且可以与 NCrypt API 一起使用)。但是,在 ICredentialProviderCredential::GetSerialization 返回后(甚至没有将 DLL 加载到内存中)或在我的独立测试应用程序中调用 LsaLogonUser() 期间,操作系统永远不会加载它。
该问题与 MSDN 论坛中描述的问题相同(没有任何答案),我得出了相同的结论,即问题与 KERB_SMARTCARD_CSP_INFO 的内容有关(示例用法可以在此处找到)-但是由于几乎没有文档和这种罕见情况没有一个例子,我不知道该怎么办......