我想在 CBC 模式下使用 AES 加密文件(也许另一种模式更适合文件加密......我不知道,但欢迎提出建议!)。
我通常做的是我先写一些随机数据(256位,只是为了搅浑水),然后是我的盐和我的IV(它们都是uuid4 ...或从安全的PRNG生成)在开头加密文件,然后是加密块。
我想知道该解决方案是否不如其他解决方案安全?无论如何,我真的不知道我该怎么做!
我想在 CBC 模式下使用 AES 加密文件(也许另一种模式更适合文件加密......我不知道,但欢迎提出建议!)。
我通常做的是我先写一些随机数据(256位,只是为了搅浑水),然后是我的盐和我的IV(它们都是uuid4 ...或从安全的PRNG生成)在开头加密文件,然后是加密块。
我想知道该解决方案是否不如其他解决方案安全?无论如何,我真的不知道我该怎么做!
盐和 IV 不是一回事。salts 用于密码散列,IV 用于启动某些加密模式。不过,两者都不是秘密的。否则我们会称它们为“钥匙”。将 IV 和/或 salt 放在文件头中是安全的。
您添加“一些随机数据(256位,只是为了混水)”相当于牺牲一只鸡来祭祀上帝。如果需要这样的仪式才能让你感觉良好,那为什么不呢?但是相信它会改变您的实际安全性会有些天真。
CBC模式需要一个随机的、不可预测的IV;这是一个硬性要求。使用 UUID 在几个方面是危险的:
CBC 不再是课堂上最好的模式;我们发现更好。特别是:
较新的模式通过容忍简单的 IV(非重复计数器就足够了)、不需要填充以及在集成已充分完成的情况下具有集成 MAC 来解决这些问题。特别参见GCM和EAX。
一个未加密的、密码安全的散列理论上不应该提供任何关于消息内容的提示,只要消息是唯一的。但是,当窃听者怀疑该消息是有限数量的已知消息之一时,他们可以将散列与这些已知消息的散列进行比较,并找出它是其中之一。
示例:假设我将获得版权电影的非法副本,现在我想将其重新分发给您。版权所有者怀疑我是盗版电影,因此正在窃听我们的联系。他们知道互联网上流传的所有非法副本,并自己获取它们来计算它们的哈希值。
当我使用您的加密方案时,他们可以看到我发送的文件的哈希值,并将它们与他们拥有副本的文件的哈希值进行比较。当他们发现我的一条消息与他们的哈希值匹配时,他们以极高的确定性证明了我分发了他们受版权保护的内容,即使没有破解加密。
添加盐并没有多大帮助,因为当盐未加密时,他们可以使用每条消息的盐重新计算文件的哈希值。
在散列之前添加无意义的数据到“浑水”不会增加任何安全性,因为它只是默默无闻的安全性。密码分析师很快就会注意到数据可以被忽略。
结论:更好地加密散列和内容。