Временный файл, который существует только в оперативной памяти? - PullRequest
2 голосов
/ 16 февраля 2009

Я пытаюсь написать код, используя метод OTP. В соответствии с теориями безопасности мне нужно, чтобы текстовые документы хранились только в памяти и никогда не записывались на физический диск. Мне кажется, что мне нужна команда tmpnam, но, насколько я вижу, она сохраняет файл на диске, а не в ОЗУ.

При использовании C ++ существует ли какой-либо (независимый от платформы) метод, позволяющий файлу существовать только в ОЗУ? Я хотел бы избежать использования метода RAM-диска, если это возможно.

Спасибо

Edit: Спасибо, для меня это больше просто учеба, я новичок в шифровании и просто работаю с разными методами, я не планирую использовать многие из них (особенно OTP из-за удвоения исходного размера файла из-за "pad" «).

Если я полностью честен, я пользователь Linux, так что отказ от Windows не будет слишком плохим, сейчас я изучаю использование RAM-дисков, так как FUSE кажется немного излишним для "обучения".

Ответы [ 5 ]

11 голосов
/ 16 февраля 2009

Простой ответ: нет, не существует независимого от платформы способа. Даже если данные хранятся только в памяти, они все равно могут быть выгружены менеджером виртуальной памяти на диск.

В Windows вы можете использовать VirtualLock () , чтобы заставить память оставаться в оперативной памяти. Вы также можете использовать CryptProtectMemory () , чтобы другие процессы не могли его прочитать.

В системах POSIX (например, BSD, Linux) вы можете использовать mlock() для блокировки памяти в ОЗУ.

5 голосов
/ 16 февраля 2009

Не совсем, если не считать потоки в памяти (например, stringstream).

Нет специально и специально для целей безопасности: любой фрагмент данных может быть перенесен на диск в системах виртуальной памяти.

Как правило, если вы беспокоитесь о безопасности, вы должны использовать платформо-зависимые методы для контроля доступа: что хорошего в том, чтобы хранить ваши данные в оперативной памяти, если каждый может их прочитать?

3 голосов
/ 16 февраля 2009

Возможно, вы захотите взглянуть на исходный код TrueCrypt . Лучше всего получить код на уровне файловой системы.

1 голос
/ 16 февраля 2009

Использование одного из std::stringstream или fmemopen предоставит вам файловый доступ к блокам памяти. Если (для безопасности) вы хотите избежать его замены, используйте mlock, который, вероятно, проще всего использовать с буфером fmemopen, чем std::stringstream. Сочетание mlock с std::stringstream, вероятно, потребуется выполнить с помощью специального распределителя (используемого в качестве параметра шаблона).

1 голос
/ 16 февраля 2009

OTP - ужасный метод шифрования для произвольных файлов, если только у вас нет огромного количества энтропии, которое вы можете гарантировать никогда не повторяется (вот почему это называется «разовым»!)

Если вы хотите создать файловый объект, который существует только в памяти, и вам нет дела до Windows, я бы посмотрел на написание пользовательской файловой системы FUSE (http://fuse.sourceforge.net/);, таким образом вы гарантируете, что будет и не будет записан на диск, а ваши файлы доступны для всех программ.

...