用語集

鍵導出 とは?

鍵導出とは、パスワード、パスフレーズ、共有シークレットなどのソース値を、高エントロピーの鍵素材を生成するために設計された決定論的アルゴリズムを使って 1 つ以上の暗号鍵に変換するプロセスです。

人間が選んだパスワードは、暗号鍵として本質的に脆弱です。短く、文字セットが限られており、予測可能なパターンに従います。鍵導出関数(KDF)は、パスワードを固定長の暗号化に適した鍵を出力する計算集約的なアルゴリズムで処理することで、このギャップを埋めます。

鍵導出関数は意図的に遅く、リソース集約的に設計されています。速度が重視される一般的なソフトウェアとは反直感的ですが、KDF にとって遅さはセキュリティ上の特性です。パスワードをブルートフォース攻撃しようとする攻撃者は、各推測ごとに KDF を実行する必要があります。KDF が 1 回の試みに 100 ミリ秒かかる場合、10 億のパスワードをテストするには 3 年以上かかります。高速なハッシュ関数では数秒です。

一般的な KDF には PBKDF2、bcrypt、scrypt、Argon2 があります。それぞれ異なる攻撃戦略に対抗するために、異なるリソース(CPU 時間、メモリ、並列性)のバランスを取っています。KDF の選択は環境によって異なります。ブラウザベースのアプリケーションは Web Crypto API から利用できるため通常 PBKDF2 を使用し、サーバーサイドアプリケーションはメモリ強化のために Argon2 を好む場合があります。

Vaulted における 鍵導出 の使われ方

シークレットにオプションのパスフレーズを設定すると、Vaulted は鍵導出を使ってそのパスフレーズをラッピング鍵に変換します。具体的には、Web Crypto API を通じて 100,000 回のイテレーション、SHA-256、ランダムな 16 バイトのソルトで PBKDF2 を実行します。導出された鍵は、元の AES-256-GCM 暗号鍵をラップ(暗号化)するために AES-KW と共に使用されます。受信者は同じパスフレーズを入力して同じラッピング鍵を導出し、暗号鍵をアンラップしてシークレットを復号する必要があります。