2012-10-16 12 views
5

Ho un programma che raggruppa due file XOR utilizzando una crittografia a tempo. Poiché il file di chiavi è di natura così sensibile, non voglio che alcuna traccia del file di chiavi appaia sul disco rigido del computer in quanto ciò potrebbe compromettere la sicurezza.C - Esecuzione di un programma nella RAM

La domanda è: come si esegue il programma nella RAM in modo da evitare la presenza di tracce sull'HD? In alternativa, l'esecuzione del programma da un'unità flash contiene tracce del file di chiavi sull'unità flash?

seguito è riportato come il file di chiavi è trattato nel programma:

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

mi sono imbattuto in una funzione inram quando googling questo, ma che non sembrano essere quello che mi serviva.

risposta

4

Suppongo che tu stia leggendo il file di chiavi da alcuni media esterni e sei preoccupato che il processo venga scambiato su disco insieme ai buffer I/O contenenti l'OTP. Probabilmente sei altrettanto preoccupato per il testo in chiaro che viene scritto. Se si utilizza un sistema posix (come Linux), è necessario esaminare le funzioni mlock e mlockall. Queste chiamate bloccheranno le pagine di memoria nella RAM e proibiranno il loro scambio su disco. La pagina man specifica specificamente il caso di utilizzo della sicurezza per queste chiamate. Un'altra opzione potrebbe essere quella dei file mmap. Anche se non ha la stessa garanzia, dal momento che le pagine mappate saranno supportate dai media esterni, dubito che sarebbero comparsi nello spazio di swap.

+0

Grazie! Questo sembra essere esattamente ciò di cui ho bisogno. Le tue ipotesi erano giuste. – youjustreadthis

+0

Ciao di nuovo, ho recentemente un altro thread: http://stackoverflow.com/questions/12990214/is-this-usage-of-mlockall-correct#12990658 e ho ottenuto una risposta confusa che sembrava contraddire ciò che hai detto qui. Potresti dare un'occhiata e dare la tua opinione sulla risposta? @Geoff Reedy – youjustreadthis