【发布时间】:2014-09-02 00:52:53
【问题描述】:
我正在实现一个基于 Web 的文件存储服务 (C#)。文件存储在服务器上时会被加密,但挑战在于如何实现解密功能。
文件可以是任何大小,从几 KB 到几 GB。数据传输是分块完成的,因此用户从偏移量 50000、75000 等处下载数据。这对于未加密的文件很好,但如果使用加密,则必须在从偏移量读取每个块之前解密整个文件.
所以,我正在研究如何解决这个问题。到目前为止,我的研究表明可以使用 ECB 和 CBC。 ECB 是最基本的(也是最不安全的),每个块都是单独加密的。欧洲央行的工作方式正是我所寻找的,但安全性是一个问题。 CBC 类似,但您需要在解密当前块之前解密前一个块。只要从头到尾读取文件就可以了,并且在服务器上解密时保留数据,但归根结底,这并不比在传输之前解密整个文件服务器端好多少。
有谁知道我应该考虑的其他替代方案吗?我现在还没有代码,因为我还只是在做理论研究。
【问题讨论】:
-
你只需要随机读访问和顺序写访问(即文件一次写入)吗?
-
您需要完整性检查吗?我强烈推荐使用 MAC。如果没有身份验证,您可以做很多奇怪的事情。
-
"CBC 类似,但在解密当前块之前需要先解密前一个块。"错误的。拥有前一个块的密文就足够了。你不需要明文。在维基百科上查看 CBC。他们有一些很好的图表。
-
@CodesInChaos:是的,只有随机读取访问。整个文件只有在完全上传时才会加密,因此是一次性写入的。我不知道仅使用 CBC 中前一个块的密文就足够了 - 每天都学习一些东西! :)
标签: encryption download random-access ecb cbc-mode