我试图写使用OTP方法的encrpytion。在与保安理论,保持我需要只存储在内存中的纯文本文件,并永远不会写入到物理驱动器。在使用tmpnam命令似乎是我所需要的,但是从我可以看到它节省了磁盘上的文件,而不是RAM。

使用C ++有任何(独立于平台)方法,它允许一个文件只存在于RAM?我想避免使用如果可能的话RAM盘的方法。

由于

编辑: 谢谢,它更多的只是对我一个学习的事情,我是新来的加密,只是通过不同的方式工作,我实际上并不使用很多(esspecially OTP的计划由于因为“垫加倍的原始文件的大小“)。

如果我完全说实话,我是一个Linux用户,从而抛弃的Windows不会太糟糕,我在找到使用RAM磁盘现在为FUSE似乎是一个“学习”的东西有点大材小用。

有帮助吗?

解决方案

简单的答案是:没有,没有独立于平台的方法。甚至保持数据只在存储器中,它仍然会危险由虚拟内存管理器交换到磁盘。

在Windows中,可以使用 VirtualLock()以强制记忆留在RAM中。也可以使用 CryptProtectMemory()以防止读它的其它过程。

在POSIX系统(例如BSD,Linux的),可以使用在mlock() RAM来锁定存储器。

其他提示

不是真的,除非你算上内存流(如字符串流)。

没有特别专门为安全目的:任何数据可以被交换到磁盘上的虚拟存储器系统。

一般情况下,如果你是担心安全,你必须使用特定于平台的方法来控制访问:有什么好处让您的数据存储在RAM如果大家都看得懂?

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

OTP是任意文件一个可怕的加密方法,除非你有熵的巨量,你可以的保证的永不重复自己(这就是为什么它被称为“一次性”!)

如果你想创建一个只存在于内存中一个类文件对象,你不关心Windows中,我想看看编写定制的FUSE文件系统(的 http://fuse.sourceforge.net/ );这样你保证什么都会,不会被写入磁盘,和您的文件被所有程序访问。

使用std::stringstream的一个或 fmemopen 会得到你的文件,如访问到的存储块。如果(出于安全考虑)你想避免它被换出,使用mlock这是最简单的可能比fmemopen std::stringstream的缓冲区使用。相结合的mlock std::stringstream很可能需要通过定制分配器(用作模板参数)来完成。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top