首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >明文密码保护

明文密码保护
EN

Stack Overflow用户
提问于 2014-09-01 15:03:21
回答 1查看 201关注 0票数 1

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

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

要访问私有对象,我的应用程序打开一个PKCS#11会话(C_OpenSession),然后使用登录名和密码(UTF8字符串)调用PKCS#11 C_Login函数。然后由硬件设备检查这两种设备。如果(登录、密码)组合是有效的,则会话被更新为经过身份验证的会话,我的应用程序可以访问私有对象。

备注:私有对象由harware设备托管,“访问私有对象”意味着“能够在硬件设备中使用它们”(秘密密钥和私钥从未在我的应用程序的虚拟地址空间中导出,每个加密操作都由硬件设备执行)。

因此,密码材料存储似乎得到了正确的解决;但是,我的应用程序必须 C_Login 函数提供密码。

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

我可能错了(我希望是这样),但我认为没有最终的解决方案来防止密码泄漏(任何捕捉C_Login调用的调试器都可以轻松地从正确的C_Login寄存器或它可能指向的内存位置检索密码)。

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

我的意图是提供一个合理的安全级别(即使明文版本的密码将在我的应用程序地址空间中活动,并且将被移动到(或由CPU寄存器引用))。

现在,在我的测试环境中,密码是硬编码的(作为要提供给C_Login函数的明文参数)。由于高效的实时调试预防是一个困难的问题(我只有一双手、一些咖啡和一个GNU编译器),我想“原因”应该是为了防止:

  1. 通过静态分析窃取密码,
  2. 密码副本从明文存储。

因此,我正在考虑使用基于软件的加密在磁盘上存储密码.我的应用程序可以访问由专用用户帐户拥有的本地加密密钥。此密钥将用于加密/解密包含密码的文件(使用软件加密API)。

备注:密钥将托管在密钥存储区(Java、MSCPI/CNG密钥存储提供程序等)。

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

当然,这只是关于报告OS用户管理和身份验证能力的问题。但我在这件事上有点无助,我想不出别的了。

可能有人对如何防止密码泄漏((汇编代码静态分析,对主机的未经授权访问)有想法,当它必须以编程方式提供给函数?的明文参数时。

EN

回答 1

Stack Overflow用户

发布于 2014-09-18 15:08:32

也许某些白盒密码产品可以安排您的二进制文件,这样PKCS#11设备PIN代码就永远不会在内存中的某个位置,并且很容易被调试器访问。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25608640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档