我们正在设计一个数据库系统来存储加密的信息字符串,并使用公钥加密技术在客户端执行加密和解密。 如果密钥曾被更改过,则需要重新加密客户端的所有记录,这是非常不切实际的。 有没有办法在不暴露原始(旧)解密密钥或消息文本的情况下执行服务器端?
我想我所追求的是一个关联密码,类似这样:
T( Eo(m) ) = En( Do(Eo(m) ))
其中Eo(m)是密文,Eo / Do是旧的pub / priv密钥对,En是新的pub密钥,m是消息文本,T是神奇的重新加密函数。 编辑:T在客户端计算,然后发送到要使用的服务器。
答案 0 :(得分:1)
无论如何,您无法追溯性地禁用旧密钥。无论您做什么,任何有权访问旧数据和旧密钥的人都可以解密数据。
我建议只需保留一圈钥匙。将新密钥添加到环中并将其标记为活动状态。标记旧密钥已过期。对客户端进行编码,以便在找到任何使用过期密钥加密的数据时,使用活动密钥对其进行重新加密。 (或者不需要。需要什么取决于您的实施要求的细节。)
如果需要,在一段时间后,您可以扫描仍使用旧密钥加密的任何数据并重新加密。
无论如何,你无法消除旧密钥的暴露 - 任何能够找到使用旧密钥加密的数据备份或副本的人都可以解密它,如果他们有旧密钥的话。加密密钥必须永远受到保护,否则您将获得向公众发布维基解密外交电报的惨败,并且信息提供者的姓名完好无损。