【发布时间】:2020-09-29 12:38:16
【问题描述】:
我正在开发一种解决方案,该解决方案为每个客户在数据库中存储一个 RSA 密钥,该密钥将用于签署付款。 这些密钥是通过 SKS HSM 创建的所谓 SIM 密钥,长话短说,我们实际上并没有将密钥存储在我们的数据库中,而只是一个只有 HSM 可以使用的加密 blob。这样一来,除了 HSM 之外,没有人知道密钥是什么。
为了防止可以访问数据库的内部攻击者在用户之间切换密钥,决定为每个密钥计算完整性检查并将其与密钥一起存储。
解决方案是执行customerId + key的HMAC,这样就不可能在不破坏完整性检查的情况下在用户之间切换key。
用于计算 HMAC 的密钥专用于此用例并存储在 HSM 中。然而,这一点是我想改变的,也是我提出这个问题的原因。
从技术上讲,可以使用 RSA 密钥本身计算完整性检查,方法是使用密钥的公共部分加密 customerID + 密钥。 然而,CTO 阻止了这个解决方案,因为他们说永远不应该使用同一个密钥进行签名和加密。
在我看来,使用单独的密钥进行签名和加密的准则不适用于这种情况,实际上该准则是正确的,但前提是我们实际上会公开使用相同密钥执行加密和签名的 API,这并非如此。我们执行的加密操作是针对应用程序本身生成的数据,而不是输入,在密钥的整个生命周期内始终相同,并且仅用于密钥本身的完整性检查。
我正在寻找具有安全知识的人,可以帮助我了解“不要使用相同的密钥进行签名和加密”的原则是否真的适用于这种情况,而我认为这并不适用。
非常感谢。
【问题讨论】:
标签: security encryption hmac sha pci-compliance