Mik*_*Top 5 encryption cryptography public-key-encryption public-key
我们正在设计一个数据库系统来存储加密的信息字符串,加密和解密在客户端使用公钥密码术进行。但是,如果密钥被更改,则需要重新加密客户端的所有记录,这是非常不切实际的。有什么办法可以在不暴露原始(旧)解密密钥或消息文本的情况下在服务器端执行?
我想我想要的是一个关联密码,就像这样:
T( Eo(m) ) = En( Do(Eo(m) ))
其中 Eo(m) 是密文,Eo/Do 是旧的公钥/私钥对,En 是新的公钥,m 是消息文本,T 是神奇的重新加密函数。编辑: T 在客户端计算,然后发送到要使用的服务器。
无论如何,您都无法追溯禁用旧密钥。任何有权访问旧数据和旧密钥的人都可以解密数据,无论您做什么。
我建议只保留一串钥匙。将新密钥添加到环中并将其标记为活动状态。将旧密钥标记为已过期。对客户端进行编码,以便在发现任何使用过期密钥加密的数据时,它会使用活动密钥重新对其进行加密。(或者不这样做。需要什么取决于您的实施要求的详细信息。)
如果需要,在一段时间后,您可以扫描仍使用旧密钥加密的任何数据并重新加密。
无论如何,您永远无法消除旧密钥的暴露 - 任何可以找到使用旧密钥加密的数据的备份或副本的人都可以解密它(如果他们拥有旧密钥)。加密密钥必须得到永久保护,否则就会遭遇惨败,维基解密的外交电报被公之于众,而线人的姓名却完好无损。