如何在没有明显延迟时间的情况下有效解密信息?

时间:2012-08-28 13:13:21

标签: performance encryption language-agnostic

我的电脑有一个名为 Bit Locker 的程序,用于加密整个硬盘。硬盘大约500千兆字节。但是,在执行相同的读取操作(例如,加载大文件)时,我没有注意到此计算机与另一台(未加密的)计算机之间存在任何实际延迟时间。

我很好奇这是怎么回事。如果磁盘上的所有内容都经过大量加密,那么在您阅读或查看之前,是否需要花费一些明显的处理时间来解密所有内容?显然,磁盘上的所有内容都不会在启动时自动解密,因为每次解密500千兆字节的数据会导致启动时出现荒谬的等待时间。我想在某个地方可能会有一个本地的解密缓存,但这不会破坏加密的目的吗?

注意:我不是在问这个特定的程序是如何实现的;这只是一个例子。相反,我很好奇加密磁盘如何能够在没有太多 - 或任何 - 人类明显的延迟时间的情况下有效地进行读写,因为显然它是可能的。

谢谢!

澄清:我知道各个数据块可以彼此分开加密/解密。但是,如果每次执行读取(通过打开PDF或Word文件或其他任何内容)时, 还必须对正在读取的数据运行解密算法,那么这将产生一个明显的滞后时间(例如,一台“慢”的计算机)。但事实并非如此。为什么以及如何?

2 个答案:

答案 0 :(得分:3)

当您从磁盘读取块时,CPU花费大量时间完全不做任何操作,等待I / O完成。

假设CPU不忙于其他事情,您可以将前一个块的大量处理装入等待下一个块所花费的时间。只要解密速度足够快,读取合理数量的数据的总时间几乎不受解密的影响。 “足够快”取决于相对于I / O速度的CPU速度,以及CPU在读取期间有多少空闲核心。

我认为BitLocker的解密速度足够快 - 在打开PDF的情况下,还有第二种可能性,即与呈现页面的成本相比,解密的成本可能微不足道。因此,即使读取文件的总时间增加,您也不一定会注意到。

答案 1 :(得分:1)

不是将整个驱动器加密为单个流,而是可以加密单个的数据。这是因为加密不会更改数据的大小,而只会更改其内容。然后可以单独读取这些块,然后即时解密。