随机访问加密文件

时间:2012-09-06 11:50:44

标签: encryption download random-access ecb cbc-mode

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

文件可以是任意大小,从几KB到几GB。数据传输以块的形式完成,以便用户从偏移量50000,75000等下载数据。这适用于未加密的文件,但如果使用加密,则必须在从偏移量读取每个块之前解密整个文件。

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

有谁知道我应该考虑的其他替代方案?我现在没有代码,因为我还在做理论研究。

1 个答案:

答案 0 :(得分: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