临时文件只存在于RAM中?

发布于 2024-07-13 07:17:58 字数 409 浏览 7 评论 0原文

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

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

谢谢

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

如果我完全诚实的话,我是一名 Linux 用户,所以放弃 Windows 也不会太糟糕,我现在正在考虑使用 RAM 磁盘,因为 FUSE 对于“学习”的东西来说似乎有点大材小用。

I'm trying to write an encrpytion using the OTP method. In keeping with the security theories I need the plain text documents to be stored only in memory and never ever written to a physical drive. The tmpnam command appears to be what I need, but from what I can see it saves the file on the disk and not the RAM.

Using C++ is there any (platform independent) method that allows a file to exist only in RAM? I would like to avoid using a RAM disk method if possible.

Thanks

Edit:
Thanks, its more just a learning thing for me, I'm new to encryption and just working through different methods, I don't actually plan on using many of them (esspecially OTP due to doubling the original file size because of the "pad").

If I'm totally honest, I'm a Linux user so ditching Windows wouldn't be too bad, I'm looking into using RAM disks for now as FUSE seems a bit overkill for a "learning" thing.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

请叫√我孤独 2024-07-20 07:17:58

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

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

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

The simple answer is: no, there is no platform independent way. Even keeping the data only in memory, it will still risk being swapped out to disk by the virtual memory manager.

On Windows, you can use VirtualLock() to force the memory to stay in RAM. You can also use CryptProtectMemory() to prevent other processes from reading it.

On POSIX systems (e.g. BSD, Linux) you can use mlock() to lock memory in RAM.

何时共饮酒 2024-07-20 07:17:58

事实并非如此,除非您计算内存中的流(例如 stringstream)。

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

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

Not really unless you count in-memory streams (like stringstream).

No especially and specifically for security purposes: any piece of data can be swapped to disk on virtual memory systems.

Generally, if you are concerned about security, you have to use platform-specific methods for controlling access: What good is keeping your data in RAM if everyone can read it?

错爱 2024-07-20 07:17:58

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

You might want to look at TrueCrypt's source code. Getting code at the file system level might be your best bet.

花开柳相依 2024-07-20 07:17:58

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

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

OTP is an awful encryption method for arbitrary files, unless you have a massive amount of entropy that you can guarantee never repeats itself (that's why it's called "one-time"!)

If you want to create a file-like object that only exists in memory and you don't care about Windows, I'd look at writing a custom FUSE filesystem (http://fuse.sourceforge.net/); this way you guarantee what will and will not get written to disk, and your files are accessible by all programs.

瀟灑尐姊 2024-07-20 07:17:58

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

Using one of std::stringstream or fmemopen will get you file-like access to blocks of memory. If (for security) you want to avoid it being swapped out, use mlock which is probably easiest to use with fmemopen's buffer than std::stringstream. Combining mlock with std::stringstream would probably need to be done via a custom allocator (used as a template parameter).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文