Pergunta

Eu estou tentando escrever um encrpytion utilizando o método de OTP. De acordo com as teorias de segurança eu preciso dos documentos de texto simples para ser armazenado apenas na memória e nunca escrito para uma unidade física. O comando tmpnam parece ser o que eu preciso, mas pelo que eu posso ver ele salva o arquivo no disco e não a RAM.

Usando C ++ existe algum método (independente de plataforma) que permite que um arquivo de existir apenas na memória RAM? Eu gostaria de evitar o uso de um método de disco RAM, se possível.

Graças

Edit: Graças, é mais apenas uma coisa de aprendizado para mim, eu sou novo para criptografia e apenas trabalhando através de diferentes métodos, eu realmente não planeja usar muitos deles (esspecially OTP devido à duplicação do tamanho do arquivo original por causa do "pad ").

Se eu sou totalmente honesto, eu sou um usuário Linux de modo afundamento Windows não seria tão ruim, eu estou olhando para usar discos de RAM por agora como FUSE parece um pouco exagero para uma coisa "aprendizagem".

Foi útil?

Solução

A resposta é simples: não, não há nenhuma maneira independente de plataforma. Mesmo mantendo os dados apenas na memória, ele vai ainda o risco de ser trocado para o disco pelo Gerenciador de memória virtual.

No Windows, você pode usar VirtualLock () para forçar a memória para estadia em RAM. Você também pode usar CryptProtectMemory () para impedir que outros processos de lê-lo.

Sistemas On POSIX (por exemplo, BSD, Linux) você pode usar mlock() a memória de bloqueio na RAM.

Outras dicas

Na verdade, não menos que você conte correntes na memória (como stringstream).

No especialmente e especificamente para fins de segurança: qualquer peça de dados podem ser trocados para o disco em sistemas de memória virtual.

Geralmente, se você está preocupado com a segurança, você tem que usar métodos específicos de plataforma para controlar o acesso: Que bom é manter seus dados na RAM se todos pode lê-lo?

Você pode querer olhar em TrueCrypt do código-fonte. Obtendo o código no nível do sistema de arquivos pode ser sua melhor aposta.

OTP é um método de criptografia terrível para arquivos arbitrários, a menos que você tem uma enorme quantidade de entropia que você pode garantia nunca se repete (é por isso que é chamado de "one-time"!)

Se você quiser criar um arquivo do tipo de objeto que só existe na memória e você não se preocupam com o Windows, eu olhar para escrever um sistema de arquivos FUSE personalizado ( http://fuse.sourceforge.net/ ); Desta forma você garante que vai e não vai ficar gravado no disco, e seus arquivos são acessíveis por todos os programas.

Usando um dos std::stringstream ou fmemopen vai te arquivo-como o acesso aos blocos de memória. Se (para a segurança) que pretende evitar que seja trocado, o uso mlock que é provavelmente mais fácil de usar com tampão de fmemopen que std::stringstream. Combinando mlock com std::stringstream provavelmente precisará ser feito através de um alocador personalizado (usado como um parâmetro de modelo).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top