libgcrypt マニュアルから:
Libgcrypt はセキュア メモリと呼ばれる概念を使用します。これは機密データを格納するために確保されたメモリ領域です。このようなメモリは希少なリソースであるため、事前に固定サイズに設定する必要があります。さらに、ほとんどのオペレーティング システムには、セキュア メモリの使用方法に関する特別な要件があります。たとえば、アプリケーションを「setuid(root)」としてインストールして、そのようなメモリを割り当てられるようにする必要がある場合があります。[...] メモリ内のキーやその他の情報がディスクにスワップ アウトされないように保護し、使用済みメモリと解放済みメモリの自動上書きを有効にする必要がある場合は、[...]
この安全なメモリがどのように機能するかについて、私は少し混乱しています。
私はaes256-cbcファイル暗号化を行うソフトウェアを開発しており、IV + CIPHERTEXTのMAC(sha512を使用したhmac)も計算するため、機密情報を保存するにはセキュアメモリを使用する必要があります。
「セキュアメモリ」の概念について私が理解していないのは次のとおりです。
- 私がこれを持っているとしましょう:
unsigned char *key; key = malloc(32);
. ライブラリは、この変数がセキュア メモリを "malloced" にすることを望んでいることをどのように知ることができますか? - 「解放されたメモリの自動上書き」は、それが消去されることを意味する
free(key)
ので、ポインタを解放する前にメモリをmemsetする必要はありませんか?