簡體   English   中英

C - 在RAM中運行程序

[英]C - Running a program in RAM

我有一個程序,使用一次性密碼加密將兩個文件進行異或。 由於密鑰文件具有如此敏感的特性,我不希望密鑰文件的任何痕跡出現在計算機硬盤驅動器上,因為這可能會危及安全性。

問題是,如何在RAM中運行程序以避免在HD上留下任何痕跡? 或者,從閃存驅動器運行程序是否包含閃存驅動器的密鑰文件的痕跡?

下面是程序中如何處理密鑰文件:

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

谷歌搜索時遇到了一個inram函數,但這似乎不是我需要的。

我假設您正在從某些外部介質讀取密鑰文件,並且您擔心將進程與包含OTP的I / O緩沖區交換到磁盤。 您可能同樣關注正在編寫的明文。 如果您使用的是posix系統(如linux),那么您應該查看mlockmlockall函數。 這些調用會將內存頁鎖定到RAM中並禁止它們交換到磁盤。 手冊頁專門為這些調用調出安全用例。 另一種選擇可能是mmap文件。 雖然它沒有相同的保證,但由於映射的頁面將由外部媒體支持,我懷疑它們會出現在交換空間中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM