提取至 RAM

提取至 RAM

我有一个加密文件,要解密它,我使用以下命令:

 openssl aes-256-cbc -d -in encrypted_file -out unencrypted_file

但是当我这样做时,会创建一个未加密的文件,我必须在完成后删除它。这意味着如果有人拿到我的电脑并使用某种数据恢复工具,他们就可以获得未加密的文件。有没有办法在不创建另一个文件的情况下访问加密文件中的数据?

答案1

我假设您正在使用 Linux,并且有一些想法......

提取至 RAM

一种简单的方法是仍然创建解密文件,但不要将其写入磁盘。将其放入 RAM 中,例如内存文件系统或者临时文件文件系统。但是,问题可能是:

  • 该文件可能不适合内存
  • ramfs 的大小可能会增加,直到所有 RAM 都用完(随后可能会崩溃)
  • 临时文件可能会写入磁盘交换(另请参阅该链接了解 tmpfs 和 ramfs 之间的区别)。

您的/tmp或其他文件夹(如/run,,/run/shm/run/user可能已被挂载为 tmpfs,您可以使用 进行检查mount|grep tmpfs


创建新的临时文件您可以这样做(如果您愿意,可以选择以字节为单位的大小,类似于-o size=16384,我认为它默认为 RAM 的一半):

sudo mount -v -t tmpfs  tmpfs /mountpoint

要使用较旧的内存文件系统,不会被写入交换,但没有大小限制,这应该可以工作:

sudo mount -v -t ramfs  ramfs /mountpoint

虽然链接在上面警告:

ramfs 文件系统的大小不能像基于磁盘的文件系统那样受到容量限制。ramfs 将继续使用内存存储,直到系统耗尽 RAM 并可能崩溃或无响应

还,内核文档在这里还警告说:

ramfs 的一个缺点是,您可以不断向其中写入数据,直到填满所有内存,而 VM 无法释放它,因为 VM 认为文件应该写入后备存储(而不是交换空间),但 ramfs 没有任何后备存储。因此,只有 root(或受信任的用户)才应被允许对 ramfs 挂载进行写访问。

A内存文件系统衍生品称为临时文件创建的目的是增加大小限制,以及将数据写入交换空间的能力。普通用户可以被允许对 tmpfs 挂载进行写访问。有关更多信息,请参阅 Documentation/filesystems/tmpfs.txt。

提取至加密设备或文件夹

如果上述 RAM 问题严重,你可以使用其他程序来加密磁盘上的文件再次,但可以“即时”读取和使用未加密的文件(例如,解密后的版本看起来和使用起来都像普通文件,但在磁盘上保持加密状态)。您可以使用 dm 创建加密分区或容器文件-crypt/LUKS/truecrypt 与 cryptsetup或加密文件夹加密文件系统或者加密文件系统,然后在那里解密您的文件。

  • 例如,要创建一个 1GB 的 ext4 LUKS 容器文件,并将其挂载到文件夹mountpoint-folder,请执行以下操作:

    head -c 1G /dev/zero > 1G
    sudo cryptsetup -v luksFormat 1G
    sudo cryptsetup -v luksOpen 1G container
    sudo mkfs.ext4 -v /dev/mapper/container
    sudo mount -v /dev/mapper/container <mountpoint-folder>
    

    然后将文件解密到mountpont-folder可读的位置,即使它再次以加密形式写入磁盘。

  • eCryptFS 已经安装在 Linux Mint、Ubuntu 和许多其他发行版中,您可能只需要运行ecryptfs-setup-private然后使用创建的~/Private文件夹。

  • 可能需要安装 EncFS(类似于apt-get install encfs),然后查看它的手册页在这里或者这里,像这样的命令encfs ~/.secret ~/decrypted应该可以工作。

    此外,EncFS 还有一个巧妙的--reverse功能,即“将源纯文本数据作为源并根据需要生成加密数据。这对于创建远程加密备份非常有用,因为您不希望本地文件保持未加密状态。

答案2

如果数据可以由接受来自 stdin 输入的程序处理,那么您也可以使用管道。例如: openssl aes-256-cbc -d -in encrypted_plain_text_file | less

相关内容