安全擦除java实现

时间:2012-01-19 19:51:50

标签: java algorithm erase

我需要实现Gutmann的算法来安全地擦除数据库表中的一些数据。 首先,它在数据库中有效吗?

我不确定35个步骤。对于1-4和32-35,很明显,生成一些随机数据。但是步骤5-31我不确定。 在Wikipedia表中,给定步骤给出了3个字节,这些步骤是随机运行的,其中一些是相同的,有些不同。请参见HEX中的第8步:49 24 92.现在假设我有一个要删除的列,其长度为25个字节。我如何以3字节为基础?第25个字节怎么样?

2 个答案:

答案 0 :(得分:3)

不幸的是,问题是安全擦除驻留在磁盘上的数据的唯一方法是“擦除”驱动器上任何未使用的扇区。这适用于基于文件的解决方案,因为当您删除文件时,操作系统会将扇区标记为可用(即:未使用),因此,您可以擦除它们。

数据库的问题在于您无法控制实际的文件结构;数据库为您提取所有内容。因此,例如,您可能会删除数据库中的列或行中的数据,但是根据数据库处理的删除方式,数据最初所在的扇区仍可能被数据库使用标记。由于表的所有数据都保留为同一文件的一部分(即:DB的持久文件状态),因此无法确定数据最初放在磁盘上的位置,而且无法确保数据库没有'已经把这个空间换回了其他东西。

即使您要安全地写入/擦除/重写数据库中的相同字段,也无法保证(实际上不太可能)将数据写入驱动器上的同一扇区。

所有这些都说,已经进行了一些研究表明,从磁性介质中恢复删除/覆盖的数据(而不仅仅是释放的扇区空间)虽然在理论上是可能的,但是很成问题并且不太可能成功。

请记住,在处理SSD时(因为正在使用的扇区可以更改以确保数据写入的均匀分布)甚至在某些RAID设备中,安全擦除数据的原则会发生显着变化。

不幸的是,对于SSD,我不知道是否有任何解决方案可以确保所有扇区都已完全清理。使用RAID,您需要打破RAID,然后单独安全擦除每个驱动器以确保。

答案 1 :(得分:0)

值得一提的是,我想提一下这篇论文http://dl.acm.org/citation.cfm?id=1496285,它基本上表明在今天的磁盘上你不需要超过两遍,通常一个就足够了。 我知道它没有回答关于如何为数据库实现这个问题的问题,而且我会在SQL级别上对所有这些似乎无法做到的评论进行回答。