修剪作为安全擦除 SSD 的替代方案

修剪作为安全擦除 SSD 的替代方案

安全擦除 SSD 的推荐方法是ATA 安全擦除。大多数 BIOS 通过冻结驱动器来禁用此功能。存在一些绕过 BIOS 冻结的技巧,这些技巧可能有效,也可能无效,具体取决于设置。这使得 ATA 安全擦除难以使用。

修剪功能是否会被滥用来替代安全擦除 SSD 的方案?

可以删除任何现有分区表并创建一个新的 GPT,其中一个 ext4 分区填充整个 SSD。修剪 ext4 分区将导致 SSD 擦除 SSD 上的所有逻辑块,但保留 GPT 和 ext4 超级块的块除外。未分配给逻辑块的保留块将根据定义被擦除。这样,所有物理块要么被擦除,要么包含无用的 GPT/ext4 元信息。

你认为这个计划有什么缺陷吗?

请不要回答应该使用 ATA 安全擦除来安全擦除 SSD,这不是问题。

答案1

让我们这样说吧:

事实是,在大多数(如果不是全部)SSD 中,ATA Secure Erase这相当于完​​整的设备 TRIM。除了那些具有“硬件加密”的 SSD,ATA Enhanced Secure Erase基本上是加密密钥的重新生成。所以毕竟ATA Secure EraseSSD 并不是那么安全,除非您的 SSD 支持“硬件加密”。

另一方面,fstrim并​​不是 TRIM 设备的唯一方法。您可以使用blkdiscard它来擦除整个块设备(磁盘/分区),包括 GPT 和超级块等。

但是,请注意,某些磁盘中的 TRIM 实现在发出的 TRIM 命令中有一个“要求”,因此只有当该要求得到满足时,驱动器上的所有块才会在 TRIM 之后“读为零”。

例如,Intel 530 SSD 要求 TRIM 块范围“对齐”到 8 个块。因此,当我想使用blkdiscard或将其擦除时hdparm,我需要确保没有“最小单位”被两个 TRIM 范围“覆盖”。

使用blkdiscard,我需要指定-p 33550336(65528 个块 * 512 字节,其中 65528 = 65535(单个范围内的最大块数)- 65535 % 8),假设起始偏移量为 0(或 [8 * 512] 的倍数),否则将有剩余的块不会被擦除。这可以hexdump在 TRIM 之后使用类似的东西进行检查。

sda看看我的 Intel 530 ( ) 和 Silicon Power S70 ( )的区别sdb

在此处输入图片描述

以及范围不对齐和对齐时的区别:

在此处输入图片描述

(由于 65535 * 2 = 131070 不是 8 的倍数,因此最后仍然有剩余,但可以看到 131064 个块 [0x3FFF000 / 512] 被连续擦除。)

别作弊:

在此处输入图片描述

PS 我还看到过 SanDisk 的驱动器,其“头部”和“尾部”无法以任何形式使用 TRIM 命令擦除。其“最小单位”是 256 个块。

答案2

如果您担心数据安全,请注意 SECURE_ERASE 和 TRIM 都不会真正擦除闪存单元。SSD 固件会保留已分配单元和未分配单元的列表。TRIM 只是将单元标记为未分配,就像删除文件会导致文件系统将群集标记为未分配一样。不会尝试真正擦除数据。从未分配单元发出的读取请求只会导致设备返回 0x00(或其他位模式),而不会真正检查单元的内容。

目前没有有效的方法可以安全地擦除 SSD。可以直接与固件交互的取证工具可以看到单元的内容。此外,设备上的存储空间比用户空间可访问的存储空间要大。这些额外的单元用于垃圾收集。垃圾收集可以动态重新分配单元,即使在 100% 满的驱动器上仍可工作。SECURE_ERASE 可能(可能会)修剪这些单元,但肯定blkdiscard不会fstrim,因为它们使用扇区号来标识要修剪的区域。

安全擦除 SSD 的唯一方法是销毁它。这是大多数医疗、银行和政府部门在处理剩余设备时采取的政策。

相关内容