2012-10-16 13 views
5

Mam program, który XORs dwa pliki razem za pomocą jednego szyfrowania padu czasu. Ponieważ plik klucza ma tak delikatną naturę, nie chcę, aby na dysku twardym komputera pojawiały się ślady pliku klucza, ponieważ mogłoby to zagrozić bezpieczeństwu.C - Uruchamianie programu w pamięci RAM

Pytanie brzmi, w jaki sposób uruchomić program w pamięci RAM, aby uniknąć pozostawiania śladów na dysku HD? Alternatywnie, czy program z dysku flash będzie zawierał ślady pliku klucza na dysku flash?

Poniżej jest jak keyfile jest traktowany w programie:

/* 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); 

natknąłem funkcji inram podczas googlowania to, ale to nie wydaje się być to, czego potrzebowałem.

Odpowiedz

4

Zakładam, że czytasz plik klucza z niektórych zewnętrznych nośników i martwisz się o proces wymiany na dysk wraz z buforami I/O zawierającymi OTP. Prawdopodobnie jesteś równie zaniepokojony pisaniem zwykłego tekstu. Jeśli korzystasz z systemu posix (np. Linux), powinieneś zajrzeć do funkcji mlock i mlockall. Połączenia te będą blokować strony pamięci w pamięci RAM i uniemożliwiać ich zamianę na dysk. Strona podręcznika specyficznie wywołuje przypadek użycia zabezpieczeń dla tych połączeń. Inną opcją może być mmap plików. Chociaż nie ma tej samej gwarancji, ponieważ odwzorowane strony będą wspierane przez zewnętrzne media, wątpię, aby pojawiły się w przestrzeni wymiany.

+0

Dziękujemy! To wydaje się być dokładnie tym, czego potrzebuję. Twoje założenia były całkiem poprawne. – youjustreadthis

+0

Witam ponownie, mam ostatnio inny wątek: http://stackoverflow.com/questions/12990214/is-this-usage-of-mlockall-correct#12990658 i dostałem mylącą odpowiedź tam, która wydawała się zaprzeczać temu, co masz powiedział tutaj. Czy mógłbyś rzucić okiem i wyrazić swoją opinię na temat odpowiedzi? @Geoff Reedy – youjustreadthis

Powiązane problemy