我有一种场景,公司web应用程序的半敏感1数据将存储在浏览器的本地化存储中(通过JavaScript将索引DB存储为特定的数据库)。
目的是用一个“主”密钥/密码来加密服务器级的数据(AES 256),然后发送一个“时间轰炸”生成的密钥,以便对数据进行解密.但只需要一定的时间,例如2-4小时。
我被引导相信这是可能的,但是我还没有找到任何说明如何生成临时密钥的文档。
如果这个概念是可能的,那么链接或指示API/方法调用的名称将是有帮助的。如果这是可能的,但只适用于其他加密方案(如SHA-512?)我很感激你能朝正确的方向推进。
1 -没有信用卡,金融或其他可怕的东西。只是用户可能不希望随便一个人路过就能读懂的东西。是的,我完全意识到“安全性”和"JavaScript“不应该在同一个句子中使用,但这是HTML5提供的所有内容。
发布于 2015-05-11 22:03:30
首先,特别是关于AES-256 : AES-256是一种对称密码体制.解密和加密使用相同的密钥;如果你用主密钥加密东西,你必须把主密钥给任何正在解密的东西,否则它就不能解密。您可能读过关于主密钥和会话密钥的文章,但这是关于AES加密之前发生的事情--要解密AES-Encrypt(k,m)
的输出,客户端必须知道k
。
第二,对于基于时间的解密:加密和解密算法是数学函数.他们没有一个小时的概念,不能让他们在今天和六周内以一种不同的方式工作。一个函数接受一个输入并给出一个输出;如果给定相同的输入,那么它总是提供相同的输出,不管它在什么地方或什么时候运行。由于密钥和密文都不会随着时间的推移而退化,除非您积极地销毁它,所以不可能完全在客户端进行“时间轰炸”解密。这不是AES特有的;在每个加密系统中,如果您现在拥有解密数据所需的信息,您可以随时使用该信息。
获得某种定时炸弹加密的唯一方法是使客户端不具备解密所需的所有信息。您需要一个系统,在那里它无法解密,除非与您控制的服务器联系,并获得一些否则无法解决的信息。即使这样,如果该信息是本地存储的,除非您重新加密数据,否则攻击者不需要第二次与您联系使用它。
https://security.stackexchange.com/questions/89016
复制相似问题