khe*_*lal 5 ruby security encryption public-key private-key
首先,我们系统的一些信息,基本上是建筑行业的eTendering解决方案.
所以:
我们面临的问题是,我们的大客户不希望我们能够获得投标价格,至少在投标正在进行时,这是完全可以理解的.现在,我们只是通过对称加密来加密价格,因此即使价格在数据库中有效加密,他们担心的是我们有解密价格的关键.
因此,我们正在研究某种形式的公钥加密系统.以下是我们对解决方案的初步想法:
所以这里有问题(我们很遗憾不是安全专家,如果这些是愚蠢的问题,那就很抱歉):
所以这是我的建议,如果你想用加密来解决这个问题......
几个关键点:
为了充分披露并且可能是一些微妙的营销,我碰巧是一家名为Gazzang的公司的架构师和首席技术官,该公司已经实施了一个名为zTrustee的产品,其运行完全如上所述;-)
需要明确的是:我有一种预感,您的客户可能不愿意牺牲让您的系统管理某些加密技术所带来的所有便利;您可能应该提出几种选择以及它们的缺点与便利性。
首先,您首先从一个明确的威胁模型开始,涵盖您能想到的每种可能的攻击。即使您选择不解决某些攻击(处理所有攻击是不现实的),您也会找出更明显的攻击,并且至少有一组基本步骤来处理其他攻击(如果发生)。
我认为一般前提虽然对客户来说有些过分,但从安全角度来看是有道理的。您的客户想要一个加密安全的系统;很公平。
但是,关于您提出的解决方案的一些要点:
通过允许客户通过网络传递密码,攻击者(您的客户似乎认为可能是您)只需操纵该密码即可访问定价数据。
客户确保您无法访问定价数据的唯一真正加密安全的方法(据我所知)是对其进行加密,而您的系统只是充当加密数据的代理。实际上,这使您成为加密数据包和公钥的中间人,但您的系统永远不应该看到私钥。
问题是:客户是否愿意管理自己的密钥,或者这对他们来说太麻烦了?您至少可以自动化其中的大部分(客户端应用程序/网站将处理在本地存储私钥,并且还将负责收集其他感兴趣方的公钥以解密他们的加密出价)
其实这并不重要;这些选项中的每一个都只是定义公钥/私钥和任何元数据的容器格式。使用最适合您的语言/平台的一种。
主要决策点应该是哪种加密算法和密钥强度:RSA-2048?RSA-4096?椭圆曲线?还有别的东西吗?
特定于 Ruby:您可能只想使用OpenSSL库,因为它是标准库的一部分。但重申我上面的观点:如果您的服务器永远看不到私钥,那就更好了(如果客户端可以在更好的安全性和便利性之间进行权衡)
更改密码很简单:私钥本身只是使用某种对称算法加密的。更改密码涉及解密现有密钥,并使用新密钥重新加密。如果客户丢失密码,则无法恢复。
生成新密钥可能更安全,但需要您更加勤奋(加密的有效负载需要识别它们匹配的密钥,并且客户端一次可能有多个活动密钥)。不过,这是一件好事;定期轮换密钥是一种常见的做法,即使它们没有受到损害。
| 归档时间: |
|
| 查看次数: |
438 次 |
| 最近记录: |