【发布时间】:2012-11-24 20:09:21
【问题描述】:
首先,关于我们系统的一些信息,该系统基本上是建筑行业的电子招标解决方案。
所以:
- 列表项
- 我们的系统有多家公司
- 每个公司都有多个用户
- 每个公司都可以创建多个拍卖
- 然后其他公司可以为可用的拍卖提交他们的投标。出价包含成百上千个单独的项目,我们只需要加密这些记录的“价格”部分。
我们面临的问题是,我们的大客户不希望我们获得投标价格,至少在投标过程中是这样,这是完全可以理解的。目前,我们只是通过对称加密对价格进行加密,因此即使价格在数据库中被有效加密,他们担心的是我们拥有解密价格的密钥。
因此,我们正在研究某种形式的公钥加密系统。 以下是我们对解决方案的初步想法:
- 当公司注册时,我们使用 OpenSSL 为其创建一个公钥/私钥对,并将其保存在 S3 中或直接保存到数据库中。为了真正有用,我们将强制用户对私钥使用强密码,这当然不会保存在数据库中。
- 当公司提交拍卖投标时,我们会使用拍卖所有者公司的公钥对价格进行加密并将其保存到数据库中。
- 当拍卖投标期结束,发行公司想第一次生成报告时,我们要求他输入密码并使用该密码和他公司的私钥来解密价格。
- 为了使后续流量更快,我们缓存了解密的数据(并可能使用简单的对称加密系统对其进行加密)
以下是问题(不幸的是,我们不是安全专家,如果这些问题很愚蠢,请见谅):
- 这是否有任何意义,还是完全荒谬或矫枉过正的解决方案?
- 我们会使用 OpenSSL、OpenPGP 还是其他解决方案生成密钥?
- 如果用户想要更改密码或生成新密钥会怎样?除了用新密钥对所有内容进行解密/重新编码之外,别无他法?
- 此解决方案存在哪些缺陷?
- 您有什么更好的解决方案可以推荐吗?
【问题讨论】:
标签: ruby security encryption private-key public-key