3

我正在实现一个基于 Web 的文件存储服务 (C#)。文件存储在服务器上时将被加密,但挑战在于如何实现解密功能。

这些文件可以是任何大小,从几 KB 到几 GB。数据传输是分块完成的,因此用户从偏移量 50000、75000 等处下载数据。这对于未加密的文件很好,但如果使用加密,则必须在从偏移量读取每个块之前解密整个文件.

所以,我正在研究如何解决这个问题。到目前为止,我的研究表明可以使用 ECB 和 CBC。ECB 是最基本的(也是最不安全的),每个块都是单独加密的。欧洲央行的工作方式正是我所寻找的,但安全性是一个问题。CBC 类似,但您需要在解密当前块之前解密前一个块。只要从头到尾读取文件就可以了,并且在服务器上解密时保留数据,但归根结底,这并不比在传输之前解密整个文件服务器端好多少。

有谁知道我应该考虑的其他选择?我现在没有代码,因为我仍然只是在做理论研究。

4

1 回答 1

2

不要使用 ECB(电子密码本)。明文中的任何模式都将在密文中显示为模式。CBC(密码块链接)具有随机读取访问权限(调用代码知道密钥,IV 是前一个块的结果),但写入一个块需要重写所有后续块。

更好的模式是Counter (CTR)。实际上,每个块使用相同的密钥,并且每个块的 IV 是该块从定义的开始的偏移量和初始 IV 的总和。例如,块 n 的 IV 是 IV + n。CTR 模式在NIST SP800-38a的第 15 页有详细描述。有关密钥和 IV 推导的指南可在NIST SP800-108中找到。

还有一些其他类似的模式,例如(Galois Counter Mode) GCM

于 2012-09-06T12:12:46.860 回答