【问题标题】:Temp file that exists only in RAM?仅存在于 RAM 中的临时文件?
【发布时间】:2010-10-07 18:52:22
【问题描述】:

我正在尝试使用 OTP 方法编写加密。为了与安全理论保持一致,我需要将纯文本文档仅存储在内存中,并且永远不会写入物理驱动器。 tmpnam 命令似乎是我需要的,但据我所知,它将文件保存在磁盘上而不是 RAM 上。

使用 C++ 是否有任何(平台无关)方法允许文件仅存在于 RAM 中?如果可能,我想避免使用 RAM 磁盘方法。

谢谢

编辑: 谢谢,这对我来说只是一个学习的东西,我是加密新手,只是通过不同的方法工作,我实际上并不打算使用其中的许多方法(尤其是 OTP,因为由于“pad”而使原始文件大小增加了一倍")。

老实说,我是 Linux 用户,因此放弃 Windows 并不会太糟糕,我现在正在考虑使用 RAM 磁盘,因为 FUSE 对于“学习”而言似乎有点矫枉过正。

【问题讨论】:

    标签: c++ temporary-files ram one-time-password


    【解决方案1】:

    除非您计算内存中的流(如 stringstream),否则不会。

    没有,特别是出于安全目的:任何数据都可以交换到虚拟内存系统上的磁盘。

    一般来说,如果您担心安全性,则必须使用特定于平台的方法来控制访问:如果每个人都可以读取数据,那么将数据保存在 RAM 中有什么好处?

    【讨论】:

      【解决方案2】:

      OTP 对任意文件来说是一种糟糕的加密方法,除非你有大量的熵可以保证永远不会重复(这就是它被称为“一次性”的原因!)

      如果你想创建一个只存在于内存中的类文件对象并且你不关心 Windows,我会考虑编写一个自定义 FUSE 文件系统 (http://fuse.sourceforge.net/);这样您就可以保证哪些内容会写入磁盘,哪些不会写入磁盘,并且所有程序都可以访问您的文件。

      【讨论】:

        【解决方案3】:

        简单的答案是:不,不存在独立于平台的方式。即使只将数据保存在内存中,它仍然存在被虚拟内存管理器交换到磁盘的风险。

        在 Windows 上,您可以使用 VirtualLock() 强制内存留在 RAM 中。您还可以使用 CryptProtectMemory() 来防止其他进程读取它。

        在 POSIX 系统(例如 BSD、Linux)上,您可以使用 mlock() 将内存锁定在 RAM 中。

        【讨论】:

          【解决方案4】:

          您可能想查看TrueCrypt 的源代码。在文件系统级别获取代码可能是您最好的选择。

          【讨论】:

          • 这是一个非常好的建议:TrueCrypt 是一个了不起的作品。
          【解决方案5】:

          使用std::stringstreamfmemopen 之一将使您能够像文件一样访问内存块。如果(出于安全考虑)您想避免它被换出,请使用mlock,这可能比std::stringstream 更容易与fmemopen 的缓冲区一起使用。将mlockstd::stringstream 结合可能需要通过自定义分配器(用作模板参数)来完成。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-08-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-10-20
            • 2015-06-27
            • 2021-01-26
            • 1970-01-01
            相关资源
            最近更新 更多