セッション キーの格納
Note
このセクションでは、ユーザーが一連の公開/秘密キー ペアを持っていることを前提としています。 キー ペアを作成する手順と例については、「C プログラムの例: キー コンテナーの作成とキーの生成」を参照してください。
セッション キーを格納する方法
- CryptExportKey 関数を使用して単純なキー BLOB を作成します。 これにより、CSP からアプリケーションのメモリ領域にセッション キーが転送されます。 キー BLOB の署名に交換公開キーを使用するように指定します。
- 署名されたキー BLOB をディスクに格納します。 すべてのディスクが安全でないと見なされます。
- キーが必要になったら、ディスクからキー BLOB を読み取ります。
- CryptImportKey 関数を使用して、キー BLOB を CSP にインポートして戻します。
セッション キーを作成し、そのキーをディスク ファイルに書き込むことができる 単純なキー BLOB にエクスポートする例については、「C プログラムの例: セッション キーのエクスポート」を参照してください。
この手順では、最小限のセキュリティのみが提供されます。 保存されたセッション キーを使用して、後日データを暗号化する場合、前述の手順では適切なセキュリティが提供されません。
セキュリティを強化するには、ディスクに格納する前に、交換秘密キーを使用してキー BLOB に署名します。 キー BLOB が後でディスクから読み取られるとき、その署名を検証して、キー BLOB が完全なままの状態であることを確認できます。
キー BLOB が署名されていない場合、キーが格納されているディスクまたはその他のメディアにアクセスできるユーザーは、新しいセッション キーを作成できます。
新しいセッション キーは、元のユーザーの公開キー交換キーで暗号化でき、この新しいキーは元のキーに置き換えることができます。 ユーザーが知らず知らずのうちに置換されたセッション キーを使用してファイルとメッセージを暗号化した場合、この代替キーを作成した個人は簡単に暗号化を解除できます。
デジタル署名については、「ハッシュとデジタル署名」で詳しく説明されています。