如何永久删除SD卡上的数据

时间:2014-10-23 05:43:44

标签: android linux encryption filesystems sd-card

我正在开发一个Android应用程序,允许用户永久擦除SD卡上的数据。重要的是删除的数据无法通过CardRecover等软件恢复。

据我所知,现在主要有两种方法。

  1. 直接使用File.delete()方法。见this thread
  2. 使用IMountService和ServiceManager格式化SD卡。见this thread
  3. 但是,CardRecover能够在这两种情况下恢复数据。

    我知道如果整个SD卡都被覆盖,数据就无法恢复了。我尝试过这种方法,但性能难以接受。

    那么我该如何实现这一目标呢?

    我现在有两个想法,但我不确定它们是否合适。

    • 加密SD卡上的所有文件。
    • 打破SD卡上的所有文件,就像病毒一样。

1 个答案:

答案 0 :(得分:2)

使用File#delete()删除文件或重新格式化卡片相当于书写书籍索引中章节的页码,或者撕下索引页面。您无法再找到所需内容轻松,但实际内容(即数据)仍然存在。

为了删除数据本身,您需要逐个覆盖它。可能不再需要使用多个传递ala shred,但您仍然需要至少一次传递,因此性能较低。

请记住,如果SD卡使用任何形式的wear leveling,那么覆盖数据实际上并不能保证将其从物理介质中删除 - 一个坚定的(装备精良的)攻击者仍然可以恢复一些数据。使用日记文件系统(在与Android一起使用的SD卡上相当不可能,但仍然......)也可能导致类似的问题。

加密不是真正的解决方案,除非它由操作系统或创建文件的应用程序透明地执行。在事实之后加密文件仍然需要写入相同数量的数据,除非就地执行,否则还会给您带来安全删除原始文件的问题。此外,在解密之前,您的应用程序将无法访问该文件。

至于“打破”文件,该技术的有效性在很大程度上取决于所讨论文件的细节。例如,视频文件通常可以在体面的播放器(例如VLC)上查看,即使文件的重要部分已损坏。没有泛型技术可以在不完全覆盖文件的情况下使文件无用,尤其是针对具有专门取证工具的攻击者。通过例如销毁文件只覆盖他们的标题只会提供一种虚假的安全感。

如果我是你,我会坚持使用有效的方法并且只是覆盖整个文件......