2012-10-16 20 views
5

Bir kerelik bir zaman şifrelemesi kullanarak iki dosyayı birlikte XOR olarak yaptığım bir programım var. Anahtar kelime böyle hassas bir yapıya sahip olduğundan, bilgisayar sabit diskinde güvenlikten ödün verebileceğinden, ana karenin hiçbir izinin görünmesini istemiyorum.C - RAM'da bir program çalıştırılıyor

Sorun şu ki, RAM üzerinde herhangi bir iz kalmaması için programı RAM'de nasıl çalıştırırım? Alternatif olarak, programı bir flash sürücüden çalıştıracak anahtar sürücünün flash sürücüsüne izleri var mı? Aşağıda

keyfile programında tedavi edilir nasıl: Bu Googling, ama bu ne gerekli olduğu görünmüyordu zaman bir inram işlevi rastladı

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

.

cevap

4

Bazı dış ortamlardan gelen anahtar kelimeyi okuduğunuzu ve OTP'yi içeren G/Ç arabellekleriyle birlikte diske değiştirilmekte olduğundan endişe duyuyorsunuz. Muhtemelen yazılan düz metin hakkında endişeleniyorsunuz. Eğer bir posix sisteminde (linux gibi) iseniz, o zaman mlock ve mlockall fonksiyonlarına bakmalısınız. Bu çağrılar, bellek sayfalarını RAM'e kilitler ve takas diskini yasaklar. Adam sayfası, bu aramalar için güvenlik kullanım durumunu özellikle çağırır. Başka bir seçenek dosyaları mmap olabilir. Aynı garantiyi taşımadığı halde, eşlenen sayfalar dış medya tarafından destekleneceğinden, takas alanında görüneceklerinden şüpheliyim.

+0

Teşekkür ederiz! Tam olarak ihtiyacım olan şey bu gibi görünüyor. Varsayımlarınız gayet haklıydı. – youjustreadthis

+0

Yine selamlar, geçenlerde bir başka konu var: http://stackoverflow.com/questions/12990214/is-this-usage-of-mlockall-correct#12990658 ve orada kafa karıştırıcı bir cevap aldık. burada dedi. Muhtemelen bir bakıp cevaba dair fikrinizi verebilir misiniz? @Geoff Reedy – youjustreadthis

İlgili konular