Encryption 在不公开明文的情况下更改加密密钥

Encryption 在不公开明文的情况下更改加密密钥,encryption,cryptography,public-key-encryption,public-key,Encryption,Cryptography,Public Key Encryption,Public Key,我们正在设计一个数据库系统来存储加密的信息字符串,在客户端使用公钥密码进行加密和解密。 但是,如果更改了密钥,则需要对客户端的所有记录重新加密,这是非常不切实际的。 是否有任何方法可以在不公开原始(旧)解密密钥或消息文本的情况下在服务器端执行此操作 我想我想要的是一个关联密码,比如: T(Eo(m))=En(Do(Eo(m))) 其中,Eo(m)是密文,Eo/Do是旧的pub/priv密钥对,En是新的pub密钥,m是消息文本,T是神奇的重新加密函数。 编辑:T在客户端计算,然后发送到服务器使用

我们正在设计一个数据库系统来存储加密的信息字符串,在客户端使用公钥密码进行加密和解密。 但是,如果更改了密钥,则需要对客户端的所有记录重新加密,这是非常不切实际的。 是否有任何方法可以在不公开原始(旧)解密密钥或消息文本的情况下在服务器端执行此操作

我想我想要的是一个关联密码,比如:

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

其中,Eo(m)是密文,Eo/Do是旧的pub/priv密钥对,En是新的pub密钥,m是消息文本,T是神奇的重新加密函数。
编辑:T在客户端计算,然后发送到服务器使用。

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

我建议只保留一圈钥匙。将新钥匙添加到戒指上,并将其标记为激活状态。将旧密钥标记为过期。对客户端进行编码,以便在发现任何使用过期密钥加密的数据时,使用活动密钥对其重新加密。(或者不需要。需要什么取决于实施需求的细节。)

如果需要,在一段时间后,您可以扫描仍然使用旧密钥加密的任何数据,然后对其重新加密


无论如何,您都无法消除旧密钥的泄露——任何人只要能找到用旧密钥加密的数据的备份或副本,就可以在拥有旧密钥的情况下对其进行解密。加密密钥必须永远受到保护,否则你就会遭到一场惨败,维基解密向公众发布了外交电报,而告密者的姓名却完好无损。

想想你的安全周长。如果你担心服务器遭到破坏,请考虑建立一个更难破解的子系统,执行子系统的转换。您可以使用非网络连接的服务器来实现这一点,该服务器仅通过经过严格验证的链路协议(例如,通过串行线路)或专用硬件安全模块进行联系。然而,如果你这样做,你必须考虑如何保护你的钥匙;如果攻击者可以从您的服务器窃取瞬态明文,他们还会窃取保护它的密钥吗?

可能会更好,但我不确定那里的社区有多大。谢谢David。没有客户端具有完全的数据库访问权限,因此如果私钥被泄露,损坏将受到限制,所有记录都可以立即重新加密。问题是泄露密钥的人可能已经拥有加密数据。我将此视为一个风险管理问题—泄露私钥并完全破坏数据库或获取备份的可能性比单独使用的可能性低。(无论如何,备份都是用一个单独的密钥加密的,提供了第二层加密)我同意。因此,不需要重新加密数据。如果攻击者无法同时获取密钥和加密数据,则无论您是否重新加密,都会确保您的安全。如果攻击者可以同时获得密钥和加密数据,则无论是否重新加密,您都将受到惩罚。如果私钥被泄露且没有响应,他们将有无限的时间确定如何破坏数据库。在我的设置中,两者都必须同时被破坏。