如何完全擦除数据?

时间:2013-09-23 15:55:43

标签: security encryption cryptography

让我们说一下,我想实现一次性垫。假设我有一个安全的随机数生成器,我用随机数创建了一个时间垫。假设我想将其保存在USB记忆棒或文件系统的某些空间中。

现在我有一个脚本或程序可以使用存储的一次性密码接收消息并加密或解密消息。完成后我想尝试以编程方式销毁一次性打击垫。

你会做什么?我知道只是删除文件是不够的,因为数据仍在磁盘上。用0或其他日子覆盖一次性垫是否足够。这会使它真正无法恢复吗?

此外,还需要将焊盘读入RAM和某些阶段进行模运算。确保RAM不再可恢复的最佳做法是什么?

一次性打击垫是否可以真正用软件实现。在考虑如何实现一次性填充时,我还缺少哪些其他因素?

2 个答案:

答案 0 :(得分:3)

我不是专家。这是我的想法。

双方之间的一次性垫要求双方使用相同的垫。对于双方之间交换的每条消息, 每一方将从垫中删除一个“页面”。 在软件的情况下, “页面”是加密密钥。 由于错误可能发生,您需要一些东西才能使它工作:

  1. 您需要一种方式让各方同步他们所在的“页面”。通常在消息交换期间,双方只知道要使用哪个页面(当前页面), 但如果他们不同步, 他们需要决定使用哪个页面。

  2. 当垫子用完时, 各方需要决定是时候使用下一个垫了。 很像页码, 他们只需要一种方法来发出“使用新垫”的信号。

  3. 似乎各方需要一种方法来确定他们使用相同的垫。 你可能想要一种方法来做到这一点,而不会在垫中烧页; 这似乎是对的, 但可能不是必需的。

  4. 删除打击垫(或打击垫中的页面)很棘手。 你将不得不阅读经典的“如何擦除驱动器,使nsa无法恢复它”的东西。 我认为这涉及反复将不同的垃圾写入磁盘上的相同扇区。

  5. 请记住,绝不要两次使用相同的“页面”。 请求的页面与请求响应的页面不同。

答案 1 :(得分:0)

<强> RAM

物理方式

关闭电脑会在一段时间后将其擦除。 RAM可能会被cold boot attack怀疑几秒钟/分钟,但随后数据将逐渐消失。

以程序化的方式

/*C code*/ 

//Ask OS for some ram, the size of our data.
char * SensitiveData = malloc(myDataSize); 

//Copy data from hard drive to the ram memory we
//...just allocated. Implement this function your own way.
load_key_from_hardrive(SensitiveData); 

/*Use key here*/ 

//Now let's overwrite the key:
for (i=0;i<myDataSize;i++)
{
   SensitiveData[i]='\0'; //Fill it with zeros.
}

free (SensitiveData); //Give the memory back to the OS.

硬盘

物理方式

将钥匙保存在USB记忆棒上然后进行物理破坏将保证取下钥匙。

以程序化的方式

有很多方法。这是Linux的一个:创建一个新分区,把密钥放在那里。记下分区号,在此示例中为sda2

要摆脱密钥,零填充分区:

#Linux bash code
dd if=/dev/zero of=/dev/sda2 bs=1M

如果您希望填写随机数据以确定是否可拒,请使用:

#Linux bash code
dd if=/dev/urandom of=/dev/sda3 bs=1M

其他说明

一次填充ram就足够了。零填充一个现代硬盘可能已经足够,但有些人不止一次。

某些操作系统会将磁盘I / O缓存在RAM中,为了安全起见,擦除硬盘后,还应该使用 Ram&gt;物理方式。我可能在这里太偏执了。我不太了解IO缓存,也许其他人会更好地编辑这一部分。

如果可以使用其他一些RAM内存来推断出密钥,请确保以与 Ram&gt;类似的方式将其填充为零。程序化方式