AES-256-GCMと60万回のPBKDF2をわかりやすく解説
写真保管庫の機能一覧に並ぶ数字が実際に何を意味するのか。そして、それがカバーしないものについての正直な説明。
AES-256-GCMは、256ビットの鍵を使うAES暗号化方式を、GCMと呼ばれる方法で使うものです。注目すべきはGCMの部分です。データをスクランブルするだけでなく確認もするため、改ざんされたファイルは黙って間違った状態で返ってくるのではなく、開けなくなります。600,000回のPBKDF2は、わざと時間をかけてパスワードを鍵に変えるため、攻撃者の推測1回ごとに600,000回分の手間がかかります。この数字は私たちではなく、OWASPが公開している推奨値です。
ただしどれも、保管庫が開いている間に侵害されたiPhoneや、ほかの誰かが知っているパスワードからは守れません。詳しい内容と限界は以下のとおりです。
写真保管庫の機能一覧には、AES-256、GCM、600,000回、PBKDF2といった数字が並んでいます。それだけで十分だと言わんばかりに並んでいて、多くの読者は賢明にも読み流します。それでも10分かけて読む価値はあります。それぞれの意味がわかれば、具体的な主張と、すごそうに聞こえるだけの主張を見分けられます。このページでは、それぞれの用語をわかりやすく説明します。そのうえでセクション8では、暗号化では守れないものを説明します。判断を変えるのは、この後半の部分です。
1. かんたんなまとめ
| 用語 | 役割 |
|---|---|
| AES | 暗号化方式。鍵を使ってデータをスクランブルするための、公開された標準です。 |
| 256 | 鍵の大きさ(ビット)。すべての鍵を試すことが現実的でないほど大きいものです。 |
| GCM | 改ざんのチェックも行うAESの使い方。書き換えられたデータは、黙って受け入れられるのではなく見破られます。 |
| ノンス | 暗号化のたびに一度だけ使う数値。同じ鍵で二度使ってはいけません。 |
| PBKDF2 | パスワードを鍵に変える処理。わざと時間をかけます。 |
| 600,000回 | どれだけ時間をかけるか。攻撃者の推測1回ごとに600,000回分の手間がかかります。 |
| ソルト | 混ぜ込むランダムなデータ。攻撃者が答えを事前に用意して、ユーザをまたいで使い回すことを防ぎます。 |
2. AES-256とは
AESはAdvanced Encryption Standard(高度暗号化標準)の略です。数年にわたる公開コンテストを経て、2001年に米国国立標準技術研究所(NIST)が公開した暗号化方式です。秘密ではなく、誰のものでもありません。設計は公開されています。大学や産業界の専門家が20年以上研究してきましたが、方式全体を破る実用的な方法は見つかっていません。
256は鍵の大きさをビットで表したものです。この大きさの鍵をすべて試すには、2の256乗通りを探す必要があります。これは、もっと速いコンピュータを待てばよいという話ではありません。ふつうのコンピュータが到達できる範囲をはるかに超えています。実際に、方式そのものが失敗の原因になることがほとんどないのはこのためです。
だからこそ「AES-256を使っています」という言葉は、見た目ほど多くを語っていません。それは最低ラインに近い条件にすぎません。本当に大切なのは、何が暗号化されているか、どう使われているか、そして鍵がどう作られているかです。
3. GCMで加わるもの
暗号化そのものはデータを秘密にします。鍵がなければ読めません。しかしそれだけでは、データが無傷であることは約束されません。開こうとしているものが、入れたものと同じだとは教えてくれないのです。
この隙間は現実のものです。確認をしない方式では、保存されたファイルを書き換えられる人が、スクランブルされたデータを改変できます。それを開くと、エラーも出ないまま、元とは違う間違ったデータが出てきます。データは返ってきます。ただし入れたデータとは違い、そのことを何も教えてくれません。
GCMは、その確認を加えます。スクランブルしたデータと一緒にチェック用の値を作り、データを開くたびにその値が検証されます。私たちのセキュリティ文書から:
「ディスク上の1バイトが変更されると、わずかに間違った平文を返すのではなく、復号がはっきりと失敗します。これにより『復号できた』ことが『暗号化以降、変更されていない』ことと同じ意味になります。」
機能一覧で探すべきものとして、これがいちばん役に立ちます。正確さが表れるところだからです。「AES-256」は方式を示しています。「AES-256-GCM」は方式とその使い方を示していて、改ざんのチェックがあるかないかが決まるのは、まさにその部分です。
4. ノンスと、よくある失敗
GCMを使う仕組みでは、暗号化のたびにノンスを使います。一度だけ使う数値という意味です。秘密である必要はありません。ある鍵に対して、重複しないことが必要です。
同じ鍵でノンスを繰り返すと、GCMの保護は大きく崩れます。これはまれな特殊ケースではありません。GCMを使う現実の仕組みが破られた、いちばんよくある原因です。AESの弱点ではなく、作り方の手抜きから生まれるものです。
決して重複させないための確かな方法は2つあります。1つは、暗号化のたびに新しい乱数を使うことです。Obscura Photo Vaultは単一のファイルにこの方法を使っています。毎回新しい96ビットの乱数と、128ビットのチェック値です。もう1つは、決して重複しないことが証明できるカウンターです。大きなビデオ用の私たちの形式はこちらを使っています。ファイルごとに選んだ乱数と断片の番号を組み合わせるため、どのファイルのどの2つの断片も、同じノンスを共有しません。
どちらの方法がより正しいということはありません。大切なのは、アプリが意図してどちらかを選んだことです。それは公開された設計文書からはわかっても、機能一覧からはわからない種類のことです。
5. 弱点はパスワード
256ビットの鍵には256ビット分のランダムさがあります。パスワードにはありません。良いパスフレーズでもおそらく60〜80ビット程度で、ふつうのパスワードならはるかに少なくなります。もしパスワードをそのまま鍵として使えば、鍵の大きさは意味を失います。攻撃者は鍵ではなく、パスワードを推測すればよいからです。
パスワードを鍵に変える処理が、その橋渡しをします。PBKDF2はパスワードとソルトを受け取り、ハッシュ関数に決まった回数だけ繰り返し通して、鍵を作ります。繰り返す目的はコストです。あなたが鍵を作るのはロック解除1回につき1度だけで、そのための1秒ほどはほとんど気になりません。何百万回も推測を試す攻撃者は、その1回1回でそのコストを払います。
探すべき数字はこれで、いちばん省かれやすい数字でもあります。アプリは、パスワードを1回の処理だけで鍵に変えていても、AES-256を使っていると正直に言えます。そうすると、この処理が防ぐためにあるオフラインでの推測攻撃に、まさにさらされることになります。
6. なぜ600,000回なのか
この数字はでたらめではなく、私たちが決めたものでもありません。OWASP Password Storage Cheat Sheetは、この分野でいちばん広く使われている公開の参考資料です。HMAC-SHA-256を使うPBKDF2を、600,000回以上で使うよう推奨しています。Obscura Photo Vaultが保管庫のパスワードに使っているのはこの回数です。
正直に添えておくべき注意点が2つあります。
数字は動いていきます。推奨される回数は、ハードウェアが速くなるにつれて上がります。現在の数字は、今日のグラフィックチップでの検証にもとづいています。数年前には十分だった数字が今では十分ではなく、今日の数字もいつまでも十分なわけではありません。公開されている回数は、日付つきの主張として扱ってください。
パスワードの強さを掛け算で増やすもので、置き換えるものではありません。回数によって、1回の推測にかかるコストは大きく上がります。しかし必要な推測の回数は変わりません。少ない選択肢から選んだパスワードは、600,000回でも弱いままです。攻撃者はその少ない選択肢を順に試すだけでよいからです。この処理で稼げる時間は、もともとのパスワードの推測しにくさに比例します。
ですから、暗号化された保管庫に対する実用的なアドバイスは、地味ですが正しいものです。互いに関係のない単語を並べた長いパスフレーズを使い、安全な場所に書き留めておくことです。鍵が本当にパスワードから作られるアプリでは、その書き留めたものが、存在する唯一のコピーです。それが保管庫のパスワードを忘れたらどうなるかについてのガイドのテーマです。
7. ソルト
ソルトは、パスワードが鍵になる前に混ぜ込むランダムなデータです。暗号化されたデータの隣に保存されます。秘密ではなく、秘密である必要もありません。
その役割は、攻撃者に事前の準備をさせないことです。ソルトがなければ、攻撃者はよくあるパスワードの一覧について一度だけ鍵を計算し、その一覧をアプリのすべてのユーザに使い回せます。保管庫ごとに固有のランダムなソルトがあれば、その作業は相手ごとに一からやり直す必要があります。ユーザをまたいで手間を共有することができなくなるのです。
Obscura Photo Vaultは保管庫ごとに32バイトのランダムなソルトを使い、保管庫ファイル自身のヘッダーに保存しています。
8. どれも守れないもの
ここまでの内容はすべて、保存されている状態のデータ、つまり使われずにストレージに置かれているファイルについてです。それは本物の、役に立つ保護です。同時に、範囲は狭いものです。私たちのセキュリティ文書のセクション11に、その範囲の外にあるものを挙げています。わかりやすく言えば:
- 保管庫が開いている間に侵害されたiPhone。写真を表示するには、アプリはそれを元に戻す必要があります。そのため鍵と読める状態の写真はメモリ上にあります。その瞬間にアプリの中で動いているものは、その両方に届きます。アプリ単位の暗号化では、破られたiPhoneは直せません。
- パスワードを持っている人。暗号化には、持ち主と、入力するところを見ていた人や教えてもらった人とを区別できません。
- スクリーンショット、画面収録、のぞき見。画面に表示されているものは、すでに元に戻されています。これは暗号化の対象外です。
- ほかの場所に作ったコピー。カメラロールに残っている元の写真、メッセージで送ったもの、移す前に作られたクラウドのバックアップ。1つのコピーを暗号化しても、ほかのコピーには何の効果もありません。
- アプリが存在すること。暗号化は中身を隠します。隠しているものがあること自体は隠しません。
部品の質の良さを説明してきたこのページで、あえてこれを書くのには理由があります。現実に失敗が起きたとき、暗号化方式が原因であることはほとんどありません。たいていは、上の5つのどれかです。
9. 「軍用レベル」について
この言葉に技術的な意味はありません。たいていはAESを指していますが、AESは誰でも使える公開の標準で、軍のためのものではありません。主要なOS、ブラウザ、メッセージアプリはどれもAESを使っています。
問題は、この言葉が嘘だということではありません。何も約束していないことです。方式も、使い方も、鍵の大きさも、パスワードを鍵に変える処理も示していません。そのため、すべてのファイルを暗号化するアプリも正直にこの言葉を使えますし、設定だけを暗号化するアプリも使えます。
これはこの言葉そのものへの不満ではありません。この言葉を使いながら、何かを伝えている掲載ページもあります。確かめようとする人にとって主張が役に立つかどうかは、その後に続くもので決まります。方式、使い方、鍵の処理、回数、そして対象範囲です。この言葉で止まっている掲載ページは、何も約束していません。その後でそれらを示している掲載ページは、何で始まっていても確かめられます。
10. よくある質問
AES-256-GCMとはどういう意味ですか?
AESは公開されている暗号化方式です。AES-256は、256ビットの鍵を使う版です。GCMはその使い方の一つで、データが改ざんされていないかも確認します。日常的にいちばん大切なのはこの確認です。書き換えられたファイルは、黙って間違ったデータとして開くのではなく、開けなくなります。
AES-256とAES-256-GCMの違いは何ですか?
後者は方式だけでなく、その使い方も示しています。GCMは改ざんのチェックを加えるため、書き換えられたデータは、黙って間違った状態で返ってくるのではなく、開くときに見破られます。
写真保管庫アプリはなぜ600,000回のPBKDF2を使うのですか?
パスワードは短く、推測できるものです。暗号化の鍵はそうではありません。そのためパスワードは、わざと遅くした処理で鍵に変える必要があります。1回ごとに、攻撃者のすべての推測に手間が加わります。600,000回は、この方式(HMAC-SHA-256を使うPBKDF2)についてOWASP Password Storage Cheat Sheetが推奨している回数です。
AES-256暗号化は安全ですか?
AES-256は公開された標準です。専門家が20年以上研究してきましたが、方式全体を破る実用的な方法は見つかっていません。現実のアプリでは、方式が弱点になることはまれです。使い方の誤り、推測できるパスワード、ロックが解除されている間にiPhoneに触れられることのほうが、起こりやすい問題です。
AES-256はAES-128より優れていますか?
鍵が大きいほうが余裕があります。どちらも、今日の方法とハードウェアですべての鍵を試すことに対して安全だと考えられています。実際には、どちらを選ぶかでアプリの安全性が決まることはまずありません。
「軍用レベルの暗号化」とはどういう意味ですか?
技術的な意味はありません。たいていはAESを指していますが、AESは誰でも使える公開の標準で、軍のためのものではありません。この言葉は方式も、使い方も、鍵の大きさも示していないため、すべてを暗号化するアプリでも、ほとんど何も暗号化しないアプリでも使えます。
量子コンピュータでAES-256は破られますか?
量子コンピュータで知られている近道、Groverのアルゴリズムは、このような鍵の強さをおよそ半分にします。256ビットの鍵なら、それでも非常に大きな余裕が残ります。256ビットの鍵が長期的に妥当な選択とされている理由の一つです。インターネットで鍵を交換するのに使われる種類の暗号化のほうが、AESよりはるかに大きな量子の問題を抱えています。
600,000回だとロック解除に時間がかかりますか?
最近のiPhoneなら、ロック解除1回につき1秒ほどかかります。この不釣り合いこそが狙いです。1回ならほとんど気にならず、何百万回となると致命的な負担になります。
反復回数が多ければ、弱いパスワードでも大丈夫ですか?
いいえ。これはいちばんよくある誤解です。回数が多いと1回の推測にかかるコストが上がりますが、弱いパスワードに必要な推測の回数は減りません。短いパスワードは弱いままです。
出典
- OWASP Password Storage Cheat Sheet(PBKDF2の計算コストについて)
- NIST FIPS 197(Advanced Encryption Standard)
- Obscura Photo Vault セキュリティ文書(基本要素と鍵の階層についてのセクション2〜4)
- セキュリティ文書のセクション11(脅威モデルの対象外となるものについて)
Obscura Photo Vault
iPhone用の暗号化された写真保管庫です。写真とビデオはデバイス上でAES-256-GCMにより暗号化されます。アカウント、サーバー、分析はなく、ネットワーク接続も必要ありません。パスワードを忘れると、私たちを含め誰も中身を復元できません。
App Storeで見る →