5

ワンタイムパッド暗号化を使用して 2 つのファイルを XOR するプログラムがあります。キーファイルは非常に機密性の高い性質のものであるため、キーファイルの痕跡がコンピューターのハードドライブに表示されると、セキュリティが損なわれる可能性があるため、これは望ましくありません。

問題は、プログラムを 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が、それは必要なものではないようでした。

4

1 に答える 1

4

外部メディアからキーファイルを読み取っていて、OTP を含む I/O バッファと共にプロセスがディスクにスワップされることを心配していると思います。おそらく、平文が書かれていることについても同じように心配しているでしょう。mlockposix システム (Linux など) を使用している場合は、 and関数を調べる必要がありmlockallます。これらの呼び出しは、メモリ ページを RAM にロックし、ディスクへのスワップを禁止します。man ページでは、これらの呼び出しのセキュリティ ユース ケースを具体的に示しています。mmap別のオプションは、ファイルに対するものかもしれません。同じ保証はありませんが、マップされたページは外部メディアによってサポートされるため、それらがスワップ スペースに表示されるとは思えません。

于 2012-10-16T15:14:55.097 に答える