2012-10-16 16 views
5

Ich habe ein Programm, das zwei Dateien XORs zusammen mit einer Time-Pad-Verschlüsselung. Da die Schlüsseldatei so sensibel ist, möchte ich keine Spuren der Schlüsseldatei auf der Festplatte des Computers anzeigen, da dies die Sicherheit beeinträchtigen könnte.C - Ausführen eines Programms im RAM

Die Frage ist, wie führe ich das Programm im RAM, um Spuren auf der HD zu vermeiden? Enthält das Ausführen des Programms von einem Flash-Laufwerk Spuren der Schlüsseldatei auf dem Flash-Laufwerk?

Unten ist, wie die Schlüsseldatei im Programm behandelt wird:

/* Check if keyfile can be opened. */ 
if((keyfile = fopen(argv[3], "rb"))== NULL) 
{ 
printf("Can't open keyfile.\n"); 
printf("Please enter a valid filename.\n"); 
printf("USAGE: OTP <source file> <output file> <keyfile>\n"); 
perror("Error"); 
return(1); 
}        

/* Get size of keyfile */ 
fstat(fileno(keyfile), &keybuf); 

/* Check if keyfile is the same size as, or bigger than the sourcefile */ 
if((keybuf.st_size) < (statbuf.st_size)) 
{ 
printf("Source file is larger than keyfile.\n"); 
printf("This significantly reduces cryptographic strength.\n"); 
printf("Do you wish to continue? (Y/N)\n"); 
fgets(buffer, 20, stdin); 
sscanf(buffer, "%c", &ans); 
if(ans == 'n' || ans == 'N') 
{ 
return (1); 
} 
if(ans == 'y' || ans == 'Y') 
{ 
    printf("Proceeding with Encryption/Decryption.\n"); 
    } 

/* Encrypt/Decrypt and write to output file. */ 
while(count < (statbuf.st_size)) 
{ 
key=fgetc(keyfile); 
data=fgetc(sourcefile); 

output=(key^data); 

fputc(output,destfile); 
count++; 
} 

/* Close files. */ 
fclose(keyfile); 
fclose(sourcefile); 
fclose(destfile); 

ich auf eine inram Funktion kam, als diese googeln, aber das scheint nicht zu sein, was ich brauchte.

Antwort

4

Ich nehme an, Sie lesen die Schlüsseldatei von einigen externen Medien und Sie sind besorgt darüber, dass der Prozess mit den I/O-Puffern, die das OTP enthalten, auf die Festplatte ausgelagert wird. Sie sind wahrscheinlich gleichermaßen besorgt über den geschriebenen Klartext. Wenn Sie sich auf einem POSIX-System (wie Linux) befinden, sollten Sie sich die Funktionen mlock und mlockall ansehen. Diese Aufrufe sperren Speicherseiten in den RAM und verhindern deren Austausch auf die Festplatte. Die man-Seite ruft speziell den Sicherheitsanwendungsfall für diese Aufrufe auf. Eine andere Option könnte mmap die Dateien sein. Obwohl es nicht die gleiche Garantie bietet, da die gemappten Seiten durch die externen Medien unterstützt werden, bezweifle ich, dass sie im Swap-Bereich erscheinen.

+0

Vielen Dank! Das scheint genau das zu sein, was ich brauche. Ihre Annahmen waren völlig richtig. – youjustreadthis

+0

Hallo nochmal, ich habe vor kurzem einen anderen Thread: http://stackoverflow.com/questions/12990214/is-this-usage-of-mlockall-correct#12990658 und bekam dort eine verwirrende Antwort, die dem zu widersprechen schien was du hast sagte hier. Könnten Sie vielleicht einen Blick darauf werfen und Ihre Meinung zu der Antwort geben? @ Geoff Reedy – youjustreadthis

Verwandte Themen