从固态驱动器安全删除文件的方法

信息安全 加密 磁盘加密 删除
2021-09-08 07:39:45

我想到了一种安全擦除固态驱动器上单个文件的方法。此方法仅在驱动器已加密时有效,即使有人破解了驱动器的加密密钥,它也将有效。基本上有两个步骤:

  1. 以正常方式删除文件。
  2. 更改您的加密密钥并重新加密您的驱动器。

这样,即使您当前的密钥被泄露,例如通过冷启动攻击,攻击者也无法获取您使用此方法删除的文件。当然,由于您必须重新加密整个驱动器,这需要很长时间,因此这种方法对于您将经常加密和解密的文件没有用处。但是,如果您想为一组您不时访问的文件提供额外的安全保护,那么这种方法可能是一个可行的选择。

所以你怎么看?这是一个好方法吗?或者有没有更好的固态硬盘单文件安全删除方法?

1个回答

这不一定是一个安全的想法。固态驱动器具有所谓的过度配置空间,这是只有硬盘驱动器固件(FTL 或闪存转换层)可以访问的少量空间,用于磨损均衡。这意味着,即使您的硬盘驱动器显示 100% 的使用率,仍有一些未使用的数量。未使用的特定扇区由 FTL 随机选择。不幸的是,这也意味着您存储在加密标头(例如您的 LUKS 或 TrueCrypt 标头)中的主密钥可能不会被擦除,即使您重新加密了整个驱动器。结果,您将不得不一遍又一遍地擦除驱动器,即使那样,也不能保证擦除任何给定扇区的机会,它只是增加概率。

固态硬盘因向操作系统隐藏控制而臭名昭著。您可能可以获得新的开放通道 SSD,这是一种没有 FTL(或具有极其有限的 FTL)的 SSD,它将诸如磨损均衡之类的事情推迟到内核。您也许可以告诉 SSD 擦除所有扇区,它实际上会服从。

许多现代 SSD 都支持 SED,这是一种用于能够快速擦除驱动器的硬件加密。当您发出 ATA 安全擦除命令时,这些 SED 驱动器不会慢慢擦除整个驱动器,而是简单地擦除加密密钥(存储在驱动器的特殊区域中,不受磨损均衡影响),从而呈现驱动器上的所有数据无用)。显然,密钥不提供静态数据安全性,因为它仅用于比其他方式更快地擦除数据。您可以使用 hdparm 工具检查您的 SSD 是否支持 SED。运行“hdparm -I /dev/sdX | grep 'min for'”,其中 X 是 SSD 的标签。如果它显示的任何一个选项的分钟数都非常小(我相信通常是 2 分钟),那么您的驱动器支持 SED。

如果您的驱动器不支持 SED,并且您没有可以存储密钥的硬盘驱动器,当您想擦除 SSD 时可以直接擦除该密钥,您可以尝试实现一种穷人的 SED一种使用 NVRAM 的骇人听闻的方式。在大多数主板上,您的 CMOS RAM(也称为 NVRAM)是少量的非易失性内存,有时是 EEPROM,其中包含 BIOS 配置信息。加载 nvram 模块时,可以将其导出到 /dev/nvram。它的大小通常为 144 字节(如果正好是这个大小,则意味着它是 NVRAM。如果它更大,则意味着它可能是 EEPROM),但其中大部分是未使用的。如果您可以识别未使用的部分,这可以使用某些工具,或者通过了解格式,您可以直接在 /dev/nvram 中写入。因为这个区域由 CMOS 电池(主板上的那个小纽扣电池也为 RTC 供电)提供电池支持,所以它在重新启动后仍然存在。但因为它不是闪存,所以可以立即安全地擦除。您可以轻松地在其中存储 128 或 256 位密钥,可以将其添加到您自己的加密密钥中以加密您的主 SSD 分区。如果您需要完全擦除它,您只需擦除 /dev/nvram 中的密钥,这会使 SSD 上的数据无法访问。

这个故事的寓意是:FTL是个婊子。不要相信 SSD,它们会对你隐藏一些东西。