4

我们正在设计一个数据库系统来存储加密的信息串,加密和解密使用公钥加密技术在客户端执行。 如果密钥曾经更改过,则需要重新加密所有记录客户端,这是非常不切实际的。 有没有什么办法可以在不暴露原始(旧)解密密钥或消息文本的情况下执行服务器端?在不暴露明文的情况下更改加密密钥

我想我以后是一个关联的密码,这样的事情:

T(Eo(m)) = En(Do(Eo(m)))

其中EO(m)是密文,EO /做旧酒吧/私法密钥对, En新的酒吧钥匙,消息文本和T魔法重新加密功能。 编辑:T计算客户端,然后发送到服务器使用。

+0

可能会在[crypto.stackexchange.com(http://crypto.stackexchange.com/)更好,但我不知道社区有多大那边。 – 2011-12-18 06:07:43

回答

1

不能追溯反正禁用旧的密钥。无论您做什么,访问旧数据和旧密钥的人都可以解密数据。

我会建议干脆保持一个密钥环。将新密钥添加到环中并将其标记为活动状态。标记旧密钥过期。对客户端进行编码,以便如果发现任何使用过期密钥加密的数据,则使用活动密钥对其进行重新加密。如果需要的话(或者不。我们需要的取决于你的实现要求的详细信息。)

,一段时间后,你可以扫对于仍与旧的密钥加密的任何数据重新加密。

不能消除旧密钥的曝光反正,永远 - 人谁可以找到旧的密钥才能解密,如果他们有旧密钥加密的数据的备份或复制。加密密钥必须永远受到保护,否则就会发生维基解密外交电报向公众发布的失败告示,告密者的姓名完好无损。

+0

谢谢大卫。没有客户端可以访问完整的数据库,因此如果私钥遭到破坏,损害将会受到限制,所有记录都可以立即重新加密。 – 2011-12-18 06:21:15

+0

问题是,破坏密钥的人可能已经拥有加密数据。 [你必须保护永远键或者是有史以来该密钥被泄露保护的任何数据。(http://www.google.com/hostednews/afp/article/ALeqM5iCMb6pr6EYGK3d57io_C8yfpIG2g?docId=CNG.faa7076ee940283688916c2ee187655c.01) – 2011-12-18 06:24:48

+0

我把这看作是一个风险管理问题 - 破坏私钥的机会,要么完全违反数据库要么保留备份低于每个私钥。 (无论如何,备份都使用单独的密钥进行加密,并提供第二层加密) – 2011-12-18 06:33:29

0

想想你的安全周边。如果您担心服务器遭到入侵,请考虑构建一个难以破解的子系统,进行密码转换。您可以通过非网络连接的服务器进行此操作,该服务器仅通过非常严格验证的链接协议(通过串行线路)或专用硬件安全模块进行联系。但是,如果你这样做,你必须考虑你的密钥是如何被保护的;如果攻击者可以从你的服务器上窃取短暂的明文,他们是否可以窃取保护它的密钥?

相关问题