首页 文章

明文密码保护

提问于
浏览
1

我正在设计一个C应用程序,使用PKCS#11加密API的第三方实现来监视硬件安全模块的加密操作 .

PKCS#11标准指定(除其他事项外)库可能负责的加密对象的基本访问控制(密钥,证书等) .

要访问私有对象,我的应用程序打开PKCS#11会话( C_OpenSession ),然后使用登录名和密码(UTF8字符串)调用PKCS#11 C_Login 函数 . 然后由硬件设备检查它们 . 如果(登录,密码)对是有效的,则会话更新为“已验证的”,并且我的应用程序可以访问私有对象 .

Note :私有对象由harware设备托管,"accessing the private objects"表示"being able to use them within the hardware device"(密钥和私钥永远不会在我的应用程序的虚拟地址空间中导出,并且每个加密操作都由硬件设备执行) .

因此,加密材料存储似乎得到了妥善解决;但是,我的申请必须 provide the password to the C_Login function .

Note :我的应用程序的加密部分不会由用户启动;这里不能使用键盘输入的密码或基于智能卡的认证/密码解密 . 密码混淆(或明文存储...)也不是一种选择 .

我可能是错的(我希望如此)但我认为没有 ultimate 解决方案来防止密码泄漏(任何调试者捕获 C_Login 调用都会轻易地从正确的CPU寄存器中检索密码 - 或者它可能指向的内存位置) .

所以我不是在寻找防止这种泄漏的方法(当然,如果有人能解决这个问题 - 我认为这是一个非常普遍的问题(防止CPU处理敏感数据引起的泄漏) - ,I很乐意阅读它!) .

我的目的是提供合理的安全级别(即使密码的明文版本在我的应用程序地址空间中仍然存在,并且将被移入(或由CPU寄存器引用)) .

目前,在我的测试环境中,密码是硬编码的(作为提供给 C_Login 函数的明文参数) . 由于高效的实时调试预防是一个难题(我只有一双手,一些咖啡和一个GNU编译器),我猜«理由»将是关于防止:

  • 密码窃取静态分析,
    从明文存储中复制
  • 密码 .

因此,我在想 password storage on disk with software-based encryption . 我的应用程序可以访问专用用户帐户拥有的本地加密密钥 . 该密钥将用于加密/解密包含密码的文件(使用软件加密API) .

Note :密钥将托管在密钥库中(Java密钥库,MSCPI / CNG密钥存储提供商等)

它不会阻止密码被CPU泄露,但至少要求用户通过操作系统进行身份验证 . 然后,我的代码的任何(静态)逆向工程都不会泄漏密码,只有授权用户才能解密它 .

当然,它只是报告操作系统用户管理和身份验证能力的问题 . 但是我对这一点很无助,我想不出别的什么 .

Maybe someone has an idea on the ways to prevent password leaks (static analysis of assembly code, unauthorized access to host machine) when it has to be programmatically provided as plaintext argument to a function ?

1 回答

  • 0

    也许一些whitebox-crypto产品可以安排您的二进制文件,以便PKCS#11设备PIN码永远不会在内存中的一个位置,因此调试器可以轻松访问 .

相关问题