如何安全地删除存储在 SSD 上的文件?

c08*_*089 29 security file-management ssd

来自一篇(很长,但绝对值得一读)关于 SSD 的文章

当您删除操作系统中的文件时,硬盘驱动器或 SSD 都没有反应。直到您覆盖扇区(在硬盘驱动器上)或页面(在 SSD 上),您才会真正丢失数据。文件恢复程序充分利用了此属性,这就是它们帮助您恢复已删除文件的方式。

但是,HDD 和 SSD 之间的主要区别在于覆盖文件时会发生什么。虽然 HDD 可以简单地将新数据写入同一扇区,但 SSD 将为覆盖的数据分配一个新的(或以前使用的)页面。包含现在无效数据的页面将被简单地标记为无效,并且在某些时候它会被删除。

那么,安全擦除存储在 SSD 上的文件的最佳方法是什么?除非您覆盖整个驱动器,否则我们习惯于从硬盘覆盖随机数据(例如使用“shred”实用程序)将不起作用......

tea*_*bot 22

如何加密卷本身?删除的数据仍然存在,但没有适当密钥的任何人都无法访问。


bk1*_*k1e 14

如果 SSD 驱动器支持 ATA 安全模式功能集,则它具有内置的安全擦除功能,您应该能够使用安全擦除之类的工具访问该功能,记录在此处此处

  • 但该功能也仅适用于完整的驱动器,不是吗? (3认同)
  • +1 表示 ATA 安全模式功能集。SecurityTube.net 上有一个很好的视频 (2认同)

bwD*_*aco 14

由于NAND闪存的特性,SSD不能直接覆盖数据。在删除之前反复覆盖文件不会安全地将其擦除在 SSD 上——数据只会写入 NAND 上的其他地方。

要理解为什么会这样,有必要解释 SSD 在内部是如何工作的。

  • NAND 闪存分为多个,每个由一组大小通常为 4 KB的页面(加上纠错代码)组成。大多数现代 SSD 使用具有 128 页块的 NAND,块大小为 512 KB,尽管某些驱动器,尤其是较旧的驱动器,可能使用 256 KB 或更小的块。下图假设 256 KB 块,但无论块大小如何,概念都是相同的。

NAND 块中的页图
来源–维基百科的音乐分类器,CC BY-SA 3.0

  • 每个页面可以单独写入,但是页面在擦除之前不能被重写,并且擦除只能在整个块中进行。这意味着每当数据被重写时,SSD 必须将受影响页面中的数据标记为无效并在其他地方重写它,可能在不同的块中。在更合适的时间,理想情况下,当驱动器空闲并且块中的所有页面都被标记为无效时,SSD 可以擦除不再使用的块。此清理过程称为垃圾收集

  • 为了让 SSD 知道哪些块可以被擦除,操作系统必须告诉它哪些块不再包含有效数据。这是使用ATA TRIM命令完成的。然后 SSD 可以自由地对那些未使用的块进行垃圾收集。

SSD 尝试在 NAND 上均匀分布写入以避免过早出现故障,这一过程依赖于驱动器可用的可用空间。

  • 每个 NAND 块只能维持有限数量的写入/擦除周期。当今许多消费级 SSD 使用 19-21 纳米 NAND,其中每个块可使用约 3,000 个周期后变得无法使用,但使用更耐用类型 NAND 的企业级 SSD 和几种高端消费级 SSD 已商用。

  • 但是,在所有情况下,SSD 都必须将写入分散到整个驱动器上,以避免在任何单个块上造成过度磨损,从而避免驱动器过早出现故障,通过称为磨损均衡的过程。只有在保留一定数量的空间(过度配置)以允许根据需要进行高效垃圾收集时才能实现有效的磨损平衡,即使驱动器几乎已满。

  • 在要求 SSD 写入数据的速度快于擦除旧块的速度(在写入繁重的数据中心工作负载中很常见)的极端条件下,它可能会被迫将一个块中的数据重写到另一个块中,然后立即擦除旧块在新数据有机会执行垃圾收集之前,为新数据让路。

  • 块的强制重写不太理想,因为它会降低性能并导致写入放大,其中写入底层 NAND 的数据多于指示驱动器写入的实际数量。通过提供更多的备用空间来重写数据和擦除旧块,增加的预留空间有助于减轻写放大。这就是为什么三星 SSD 845DC PRO 等高端企业 SSD 的大小为 200 GB 和 400 GB,尽管该驱动器实际上分别包含接近 256 GB 或 512 GB 的 NAND。另请参阅:为什么 SSD 的尺寸很奇怪?

  • 三星的 SSD 白皮书系列全面解释了 SSD 的内部工作原理。白皮书 04 中解释了写入和擦除 NAND 页面和块以及垃圾收集。

真正擦除 SSD 上数据的唯一方法是使用 ATA 安全擦除命令。

  • Secure Erase 指示驱动器擦除所有存储的数据,包括可能保留在过度配置的 NAND 区域中的数据。完成此操作后,所有块都将被擦除,从而产生原始驱动器。

  • 在具有自加密功能的驱动器中,只需擦除加密密钥即可实现安全擦除。由于加密驱动器的 NAND 上的数据在没有密钥的情况下无法读取,因此无需像在未加密驱动器上那样擦除所有块。

  • 由于我们无法做出一揽子声明/成功保证,因此我们必须假设*至少某些*驱动器没有正确实现它。如果我们假设某些驱动器没有正确实现它,那么安全的做法是假设*没有*驱动器正确地实现它,除非另有证明。而且这并不容易证明 - 擦除对您来说可能看起来是正确的,同时保留闪存芯片上的信息,这意味着您应该“始终”对任何真正敏感的东西进行物理销毁。 (2认同)

Mic*_*rdt 10

即使您覆盖整个驱动器,您也不能绝对确定,因为 HD 和 SSD 都包含在发生故障时替换的备用扇区,或者在 SSD 的情况下有助于磨损均衡

如果您想绝对确定数据不可恢复,您必须物理销毁驱动器,无法恢复。覆盖为您提供了对 HD 的合理确定性 - 在 SSD 上,甚至没有真正实现这一目标的方法。如果您填满整个驱动器,则数据所在的块仍有可能已切换到备用块以进行磨损均衡,并且稍后会重新出现。


c08*_*089 6

正如@teabot 所说,使用全盘加密软件将避免安全删除问题,因为您不必再​​这样做了。但是,如相关问题所述,这将产生巨大的性能影响,因为这会阻止许多控制器的功能,如压缩和修剪,并且据报道将性能降低到普通硬盘比昂贵硬盘快的水平固态硬盘。对于基于 SandForce 的设备,有一个更好的解决方案:这些设备默认做 AES 加密,当你使用 ATA 安全删除功能时,密钥将被擦除,除非攻击者可以破解 AES(当前 128 位,256 位),否则所有数据都无法访问对于 2011 年 3 月发布的新驱动器)。