C# 关于AES(CBC)和IV的问题(是否可以继续使用AES(CBC)加密?,…)

C# 关于AES(CBC)和IV的问题(是否可以继续使用AES(CBC)加密?,…),c#,aes,encryption,C#,Aes,Encryption,我对C#和加密技术相对较新,所以请耐心听我说。我正在将一些数据写入一个文件,我想使用Aes(CBC)对其进行加密,但我每天都会获得新数据,我想每周、每月、每年将所有数据写入一个文件,这取决于内容。因此,“服务器”将被重新启动/关闭(它不是真正的服务器),我想知道是否有可能以某种方式获取(并保存到文件中)最新的初始化向量,在重新启动后,我可以使用该向量继续加密数据并将其写入同一文件。所以当我解密文件的时候,我会在某个地方得到文件的iv,然后用那个iv解密它 伪代码: 加密: 1.)根据iv和密钥加

我对C#和加密技术相对较新,所以请耐心听我说。我正在将一些数据写入一个文件,我想使用Aes(CBC)对其进行加密,但我每天都会获得新数据,我想每周、每月、每年将所有数据写入一个文件,这取决于内容。因此,“服务器”将被重新启动/关闭(它不是真正的服务器),我想知道是否有可能以某种方式获取(并保存到文件中)最新的初始化向量,在重新启动后,我可以使用该向量继续加密数据并将其写入同一文件。所以当我解密文件的时候,我会在某个地方得到文件的iv,然后用那个iv解密它

伪代码:

加密:

1.)根据iv和密钥加密数据

2.)数据流停止后,“特殊iv”保存到另一个文件

3.)数据流停止,一段时间后,“服务器”关闭或重新启动

4.)从文件中读取“特殊iv”并继续加密 3.四,。循环一周、一个月、一年

解密:

1.)从该文件中读取(以某种方式获取)iv和密钥

2.)使用该iv和密钥解密文件

解密不应该注意到加密曾经停止,应用程序退出。。。 我不知道如何实现这一点,如何获得“特殊iv”。但我认为这应该是可以实现的

你认为,有没有一种合理的方法来获得这种特殊的静脉注射?有什么办法吗

非常感谢您的时间和回答


编辑:我正在使用AES的.NET(4.0)实现,如果可能的话,我更愿意使用它

您提到的“特殊IV”只是加密一天数据结束时的当前IV;您的加密库应该能够将其提供给您。解密一个块只需要该块的密钥和IV,所以你可以保存(比如)每天的IV来解密它的数据。

你提到的“特殊IV”只是加密一天数据结束时的当前IV;您的加密库应该能够将其提供给您。块的解密只需要该块的密钥和IV,因此您可以保存(比如)每天的IV来解密其数据。

要在CBC模式下解密任何块,您只需要先前加密的块:明文将是“当前块的AES解密XOR先前密码块”。 加密时,将只将块大小的倍数写入文件,因为CBC就是这样工作的。当你开始加密时,所以当你开始填充文件时,你必须选择一个IV(随机的,对于你创建的每个文件都不同,所以它取决于时间或类似的事情),你把它作为第一个“密文块”写入文件,然后对于每个实际数据块,你将它与文件中的前一个块异或(开头是IV),然后用分组密码加密。当你以后得到新数据时,我们只使用你已经拥有的最后一个块


微妙的一点:由于你只写块的倍数,你需要填充。这样你就知道有多少字节是填充的,有多少字节是“真实数据”。当你开始下一批数据时,你应该以某种方式标记上一个块以“数据单元”结尾,这样您就知道,在解密时,您知道需要删除哪些块的填充以获取实际数据。因此,您需要对其进行包装,或者了解数据的内部结构(格式)这是需要注意的。

要在CBC模式下解密任何块,您只需要先前加密的块:明文将是“当前块的AES解密或先前密码块”。 加密时,您只会将块大小的倍数写入文件,因为CBC就是这样工作的。当您开始加密时,因此当您开始填充文件时,您必须选择一个IV(随机,创建的每个文件都不同,因此取决于时间或类似的事情),您将其作为第一个“密文块”写入文件,然后对于每个实际数据块,将其与文件中的前一个块(开头是IV)异或,然后使用分组密码进行加密。当您稍后获得新数据时,我们只使用您已经拥有的最后一个块


微妙的一点:由于你只写块的倍数,你需要填充。这样你就知道有多少字节是填充的,有多少字节是“真实数据”。当你开始下一批数据时,你应该以某种方式标记上一个块以“数据单元”结尾,这样您就知道,在解密时,您知道需要删除哪些块的填充以获取实际数据。因此,您需要对其进行包装,或者了解数据的内部结构(格式)将始终使这一点明确无误。这是需要注意的。

您提出的建议实际上并不完全安全。有关潜在攻击的描述,请参见 Gregory V.Bard撰写的论文《SSL上具有挑战性但可行的分块自适应选择明文攻击》

问题是CBC要求攻击者无法预测IV。但是,如果分段加密明文,则攻击者可能会学习到最新的密文块,该密文块基本上将用作下一个加密块的IV,因此违反了要求。本文包含了一些示例,当攻击发生时这是可行的,但当然,正如报纸所说,这并不容易开发。
不过,使用例如CTR模式可能更好,该模式没有此限制。

您提出的建议实际上并不完全安全。关于潜在攻击的描述见 Gregory V.Bard撰写的论文《SSL上具有挑战性但可行的分块自适应选择明文攻击》

问题是CBC要求静脉注射不能由患者预测