AES 暗号化 / 復号
暗号PBKDF2 派生鍵、ランダム salt と IV による AES-GCM 共通鍵暗号。パスワードベース。
このページの内容
共通鍵暗号とは?#
共通鍵暗号は、ロックにもアンロックにも1 つの共有秘密を使います。平文とパスワードを渡すと、同じパスワードなしでは誰も読み返せない、スクランブルされた塊を返します。これは、何かが語る内容を隠す——機密性——を欲するときの正しいツールであり、(完全性だけを証明する)ハッシュや(真正性を証明する)HMAC とは対照的です。
このページは AES-GCM——新しいコードに推奨される認証付き暗号モード——を使います。「認証付き」が重要な言葉です: GCM はテキストをスクランブルするだけでなく、改ざん不可能なタグを織り込みます。暗号文のビットを 1 つでも反転すれば、復号は黙ってゴミを返すのではなく、派手に失敗します。鍵はあなたのパスワードから PBKDF2(SHA-256 上)で派生され、新しいランダムソルトと既定で 100,000 回の反復を使うため、やや弱いパスワードでもオフラインの総当たりには高くつきます。
すべては Web Crypto を通してブラウザ内で走ります。サーバーも、鍵エスクローも、ネットワーク呼び出しもありません——パスワードを失えば、設計上、暗号文は復元不能です。
使い方#
- モードを選びます: 暗号化(平文入力 → 暗号文出力)または復号(暗号文入力 → 平文出力)。
- パスワードを入力します。これが唯一の共有秘密であり、後で復号する人はまったく同じものを入力しなければなりません。
- オプションを選びます:
- 鍵長 — 128 / 192 / 256(既定 256)。256 がモダンな基準で、他はレガシーシステムに合わせるために存在します。
- 反復回数 — PBKDF2 のラウンド数、既定 100,000。高くすればオフライン cracking は遅くなりますが、あなたも遅くなります。今日では 100,000 が妥当な下限です。
- 出力形式 — Base64(コンパクト、既定)または 16 進数。
- 左ペインに入力を貼り付けます。暗号化なら任意のテキスト、復号なら以前にコピーした塊です。
- 右側で出力を読みます。ステータス行は操作が成功したかを告げます。復号時の間違ったパスワードは、破損テキストではなく、きれいな失敗を示します。
主な特徴#
- AES-GCM 認証付き暗号。 暗号文の改ざんが検出されます——改変された塊は、もっともらしいゴミを生成するのではなく、復号を拒否します。
- 自己記述的な出力。 ソルト、IV、鍵サイズ、反復回数が出力の塊に詰め込まれるため、復号に必要なのはパスワードだけです。それらのパラメータを別々に覚えたり再送したりする必要はありません。
- メッセージごとのランダム性。 新しいランダムソルトと新しい 12 バイト IV が毎回の暗号化で引かれるため、同じテキストを 2 回暗号化すると完全に異なる 2 つの塊になります——どちらも同じ平文に復号されます。
- 調整可能な PBKDF2。 弱いパスワードをオフライン攻撃に対して硬化させるため、反復回数を上げられます。
- ゼロアップロード。 暗号化も復号もローカルです。パスワードも平文もページから外に出ません。
実例#
メッセージ launch at dawn を、パスワード correct-horse-battery-staple、鍵長 256、反復 100000、エンコード base64 で暗号化します。下の出力は実際の検証可能な塊です——同じパスワードで復号にそのまま貼り付けると launch at dawn が戻ります:
AQEAAAGGoPVkwA9k0rjoWLw8GXnalIvQoBTP+awUg4DczQwTK5nxMwUaEaQ35WTQbWK8gLMkvuDf+/ndr04f8fw=
(同じテキストを再び暗号化すると、ソルトと IV が毎回新しくランダムに生成されるため、異なる塊になります。)この塊は単なる暗号文ではありません。次のようなレイアウトの小さなエンベロープです:
version(1) | keyBits(2) | iterations(4) | salt(16) | IV(12) | ciphertext+tag
復号に切り替え、上の塊を入力に貼り戻し、同じパスワードを入力すると、右ペインに launch at dawn が戻ります。ここで少しだけ違うパスワードで復号し直すと——GCM の認証タグが検証されず、ステータス行は半分壊れたテキストを渡すのではなく失敗を報告します。このきれいな失敗こそが、認証なしの古い CBC モードに対して認証付き暗号が買ってくれるものです。
よくある質問#
パスワードを忘れたらどうなりますか?#
データは失われます。PBKDF2 と AES は、塊からパスワードが復元できないように設計されています——「パスワードをお忘れですか」の経路も、バックドアも、リセットできるサーバーもありません。パスワードを単一障害点として扱い、重要なパスワードはパスワードマネージャーに保存することを検討してください。
同じテキストの暗号化で 2 回とも異なる出力になるのはなぜですか?#
毎回の暗号化で新しいランダムソルトと新しいランダムの 12 バイト IV が生成されるためです。これは意図的です: 同じ平文が常に同じ暗号文になったら、攻撃者は繰り返されるメッセージを認識できてしまいます。ソルトと IV は塊の中に同行し自動的に読み戻されるため、このランダム性は復号に影響しません。
反復回数はいくつにすべきですか?#
インタラクティブな用途には 100,000 が妥当な下限です。価値の高いものを保護し、短い待ち時間を許容できるなら、600,000 はあなたには苦痛にならず、攻撃者に意味のある追加コストをもたらします。コストはデータのバイトごとではなく、暗号化または復号ごとに 1 回支払われます。
大きなファイルにも安全に使えますか?#
貼り付けられる任意のテキストは処理できますが、これはページサイズのツールであり、ストリーミングのファイル暗号器ではありません。非常に大きなペイロードには、ハイブリッド方式(データに AES、AES 鍵に RSA または鍵ラッピング)が標準パターンであり——AES-GCM はまさにそのパターンの共通鍵の半分です。