2012-10-16 19 views
5

시간 패드 암호화를 사용하여 두 개의 파일을 XOR하는 프로그램이 있습니다. 키 파일은 매우 민감한 특성을 지니고 있기 때문에 키 파일의 흔적이 컴퓨터의 하드 드라이브에 나타나서 보안을 손상시킬 수 있습니다.C - RAM에서 프로그램 실행

질문은 어떻게 RAM에서 프로그램을 실행하여 HD에 흔적이 남지 않았는지 확인하는 것입니다. 또는 플래시 드라이브에서 프로그램을 실행하면 키 파일의 흔적이 플래시 드라이브에 포함됩니까? 다음은

는 키 파일이 프로그램에서 처리하는 방법입니다 :이 인터넷 검색을하지만 내가 필요로 무엇을 할 것 같지 않았다 때 내가 inram 기능을 통해 온

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

.

답변

4

일부 외부 미디어에서 키 파일을 읽는 중이며 OTP가 포함 된 I/O 버퍼와 함께 디스크로 스왑되는 프로세스가 걱정됩니다. 당신은 평문이 쓰여지고있는 것에 대해 똑같이 우려하고 있습니다. POSIX 시스템 (리눅스와 같은)을 사용하고 있다면 mlockmlockall 함수를 조사해야합니다. 이러한 호출은 메모리 페이지를 RAM으로 잠그고 디스크로 스와핑을 금지합니다. man 페이지는 이러한 호출에 대한 보안 사용 사례를 구체적으로 호출합니다. 또 다른 옵션은 파일 mmap 일 수 있습니다. 매핑 된 페이지는 외부 미디어에 의해 백업되므로 동일한 보증이 적용되지는 않지만 스왑 공간에 표시 될지는 의문입니다.

+0

감사합니다. 그게 정확히 내가 원하는 것 같다. 귀하의 가정은 아주 옳았습니다. – youjustreadthis

+0

안녕하세요, 최근에 또 다른 스레드가 있습니다 : http://stackoverflow.com/questions/12990214/is-this-usage-of-mlockall-correct#12990658 그리고 당신이 뭘했는지 모순 된 것처럼 보이는 혼란스러운 대답이 있습니다. 여기에 말했다. 당신은 아마도 한 번 둘러보고 대답에 대한 당신의 의견을 말할 수 있습니까? @ Geoff Reedy – youjustreadthis