它可能是重复的,但我无法找出正确的搜索关键字。你可以通过告诉我这些话来提供帮助,我很擅长谷歌:)
我想开发类似于对每个文件进行加密的文件存储。只有一个用户,所有数据(和代码)都存储在他的本地机器上。用户可以导入一些文件并读取以前导入的文件。
要求
主要攻击媒介是未经授权的数据读取。无需防止非法导入文件。
另外,我想实现plausible deniability。它看起来像这样:实际上有两个存储,其中一个使用空密码加密,并且可以将其内容暴露给任何人。它用于掩盖隐藏某些东西的事实。只是一个额外的盾牌。
整个系统安全性的关键是用户的密码只存储在他的脑海中,即无法通过编程方式访问(除非有键盘记录器、心灵感应软件或带有高分辨率摄像头的卫星可以看到你在打字)。
执行
现在我已经结束了以下方案。
用户密码是用于加密/解密随机生成的 2 级密码的密钥。使用对称密码(例如,目前被认为是安全的 AES)。
2 级加密是非对称的。从外部源导入未加密文件时使用加密(公共)密钥。解密(私有)密钥用于读取文件。由于非对称算法很慢,这些密钥实际上用于保护会话密钥(每个文件唯一)。仅当加密会话密钥时,私钥在内存中以纯文本形式可用。
第 3 级使用对称加密、再次使用 AES 或一些安全流密码(仅在性能好得多的情况下,因为安全是首选)。它用于实际加密/解密文件内容。
你终于读到了最后 :) 以下是问题:
如何在不损害安全性的情况下简化该方案?简而言之:去掉中间层。尽管如此,仍然必须使用两个级别,以防止密码疲劳/熵耗尽并满足我的偏执狂:)
如何增强它的安全性?我知道这里有错误,加密是一件棘手的事情。非常感谢@DeerHunter 指出潜在的缺陷。
谷歌和阅读什么?请不要像Shneier这样的基本东西:)好吧,我有足够的术语和概念来深入研究。至少目前是这样。
我仍然不确定是否应该使用非对称密码(在第一级)。我认为这将有助于分散风险:解密(私钥)密钥仅以明文形式生成,而加密(公钥)密钥甚至可以暴露给所有人。但是与对称密码相比,我仍然有一个密钥可以在 RAM 中保护,并且还有额外的(公共)密钥需要担心。
编辑1。我不想设计自己的标准,这远远超出了我的知识范围。我会尽可能使用被证明是安全的东西。例如。我自己要做的就是将 Crypto++ 的几个类组合在一起工作。我只需要正确的设计来做到这一点。目前我认为全盘加密不适合我的情况。我考虑过 TrueCrypt 等,但它不允许隐藏加密数据的存在。我更喜欢按文件加密的解决方案(加密标准或协议)。
编辑2。重新排列文本以拆分要求和实施,添加可否认的合理性要求。
EDIT3还有一个关于非对称加密的问题。