安卓加密怎么这么快?

信息安全 加密 安卓 磁盘加密
2021-08-31 16:21:26

Android 使用全盘加密来加密文件并在启动时对其进行解密。我不明白的是,解密数 GB 的文件必须花费大量时间,如果没有别的,那么至少需要读取存储的所有内容所需的 IO 访问时间,但 android 只需几秒钟即可启动。这怎么可能?

3个回答

加密发生在内存中,而不是磁盘上。

您误解了磁盘加密的工作原理。它不会读取整个磁盘并将其替换为解密版本。相反,当访问加密数据的文件或扇区时,会将其读入内存并在内存中解密。同样,在写入磁盘时,数据会在内存中加密,然后再保存到持久存储中。操作系统将已读取或将要写入内存(文件系统缓冲区)的数据副本保留为性能优化。加密和解密就是在这个内存中进行的。这允许从磁盘读取数据并解密一次,但随后从内存中访问多次。顺便说一句,使用内存来存储经常访问的文件是为什么这么多人错误地认为Linux 吃太多 RAM的原因。

我还想指出,瓶颈通常是 I/O,而不是加密。你说加密千兆字节的数据需要很长时间,但是在大多数现代机器(包括移动设备)上,加密千兆字节的数据可能只需要几秒钟(尤其是在硬件加速的情况下,加密真的非常非常快)。然而,大多数现代 Android 设备中的固态驱动器几乎无法以这些速度读取或写入数据。因此,无论您尝试以多快的速度读取或写入磁盘数据,瓶颈通常始终是 I/O,而不是加密。

使用加密时,较旧的硬件通常确实会降低性能。这是因为当时存储速度的提高速度快于处理器速度。缺乏专门的加密硬件加速和低效的算法通常会导致访问磁盘时明显变慢。在现代系统中,这是相反的。处理器速度如此之快,以至于存储设备难以跟上。任何开销都可以忽略不计。

它不会在启动时解密整个磁盘。相反,当从磁盘读取数据时,它会不断解密从磁盘读取的数据,使磁盘上的实际内容保持不变和加密。由于与磁盘读取相比,解密速度更快,因此它不会显着影响读取速度。当然,它会(略微)增加整体负载。

没有理由在启动时解密千兆字节的文件。Android 只需要解密它需要在启动时加载到内存中的确切文件。

Android 中的 FDE 不加密内核,只加密用户数据分区。您可以在官方网站上阅读更多内容

现代硬件加速加密速度非常快,并且不会使系统速度降低太多。尤其是当只有使用 FDE 加密的用户文件时,它们对速度的要求并不高。还有其他缺点,实际上在链接页面上列出,但速度不是问题。

Android 手机无法在启动时解密整个分区,即使他们想要 - 也没有地方可以存储它。