我正在研究旧闪存驱动器的安全处置,我遇到的标准之一是它们应该被覆盖三次。为什么一次不够?我认为做这个过程三次比做一次更昂贵。
为什么驱动器在处理时会被覆盖 3 次?
覆盖数据要么不足,要么无用,这取决于设备本身在内部是如何完成的。闪存的寿命有限,以读/写周期表示。总而言之,您可以拥有一个充满零的数据块;位可以单独从零更改为一,但一次只能对一个完整的块进行重置为零,如果你这样做超过 10000 次左右,那么块就会失败。块的大小为几十千字节。
因此,如果基于闪存的驱动器简单地使用从逻辑扇区(从计算机上看)到闪存块的直接映射,它们将是缓慢且不可靠的:扇区的每次写入都会覆盖先前的非全零值将需要读取整个块,清除它,然后用新的扇区值写回它。相反,闪存驱动器使用磨损均衡方法,其中写入分布在整个设备块中,以便最大限度地减少所需的块清除次数,并避免某些块比其他块使用得更多。此外,闪存驱动器通常具有比其标称大小更多的物理块,这既可以为磨损均衡算法提供一些喘息的空间,也可以重新映射一些故障块,从而在块开始损坏时延长驱动器的使用寿命。
结果是,当您覆盖整个磁盘时,您无法确定是否真的清除了物理介质上的所有数据。事实上,如果驱动器应用了磨损均衡,那么几乎可以保证单次覆盖不会覆盖物理级别的所有数据轨迹,因为物理块比逻辑总驱动器大小更多。
使用三个连续覆盖是为了确保更完整的覆盖。但它依赖于一些关于磨损均衡如何工作的假设,这可能是没有根据的,因为没有标准。由于磨损均衡完全由驱动器本身在其固件中处理,因此没有理由对此类算法进行标准化甚至记录在案;甚至可以大胆指出,磨损均衡算法是驱动器供应商商业机密的一部分,因此不太可能全部记录在案。三个覆盖是否超过需要,或者相反,不足以确保数据销毁,根本不知道。
此外,如果驱动器透明地重新映射故障块,则故障块仍然包含大部分完整的数据,并且由于此后固件将避免使用该块,因此无论您执行多少次覆盖,该数据将一直保留到时间结束. 该故障块永远无法到达主机。(请注意,此论点也适用于磁盘,但故障扇区的重新映射对于经典磁盘来说是罕见的事件,而在闪存驱动器中却很常见。)
所以三个覆盖的主要好处是心理上的。这是一个非常明显的程序,有助于让经理和审计员相信安全正在发生,从而证明相应的预算线是合理的。如果您想真正清除旧驱动器,请刻录它。
正如 Tom Leek 所解释的那样,这样做是徒劳的,但幸运的是,这也不是必需的。多次覆盖的想法非常古老,其目的是在磁介质上覆盖数据时会留下残留物。多次覆盖将(应该)使实验室恢复更难或不可能。
所有现代驱动器,包括磁性驱动器,都会定期执行透明重新映射,并且固态驱动器在此之上堆叠磨损均衡,因此您实际上没有机会知道您是否真的覆盖了您的想法,也不知道磁盘上还剩下什么。
这就是为什么您总是希望确保关键的安全相关数据位于不可交换的内存区域中的原因。一旦在磁盘上,您将无法再控制它的生命周期。
现在好消息...
除了向数据添加前向纠错的传统硬盘之外,闪存驱动器会加密所有数据(好吧,无论如何它们都应该这样做,而且大多数都这样做)。这除了是一个很酷的营销噱头(盒子上的“使用 AES 加密”标签)之外,还有两个效果。
首先,一些磨损均衡算法的工作效率更高,因为所有数据都是“随机查找”的。整体寿命增加。
其次,您可以扔掉驱动器的钥匙(根据您的要求,这可能称为出厂重置、安全擦除或裸机格式,或其他一些花哨的名称——制造商的设置工具会这样做)。这样做会使驱动器上的所有数据(包括已重新映射的扇区)不可读。
这是为了消除以前记忆的任何痕迹。不是专家,但这是我的理解。
内存以二进制格式存储:0 和 1。因此您可以将内存视为 0 和 1 的大数组,我们将其称为位。位不完全是 0 和 1,例如可能是 0.01 或 0.99。
如果某个位是 1,而您将其重写为 0,则它可能是 0.02。另一方面,如果某个位之前为 0 (0.01),而您将其重写为 0,则它可能仍为 0.01。因此,前 1 位留下了可以检测的痕迹。
通过多次重写,您可以删除该跟踪。
编辑
这个答案仅适用于现代计算机中不再使用的磁带。重写很多次都是从那个时候开始的,但现在可能没用了,只是习惯了。