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