用語集

プライバシーと暗号化

これらの言葉はアプリの説明で曖昧に使われがちですが、その違いにこそ価値があります。隠されていることはロックされていることではありません。ロックされていることは暗号化されていることではありません。そして他人が持っている鍵は、実質的にあなたのものではありません。

非表示 と 暗号化

非表示とは、アプリが何かを見せないと約束していることを意味します。暗号化とは、鍵がなければディスク上のバイト列を読み取れないことを意味します。前者は約束であり、後者は計算です。

非表示のフォルダーは、それでも普通のフォルダーです。ディスクを直接読み取るもの——バックアップ、ファイルマネージャー、フォレンジックツール、正しい権限を持つ別のアプリ——は、中身をそのまま見ることができます。ファイル自体には何の変化もないからです。

暗号化はファイルそのものを変えます。ディスク上にあるのはノイズであり、それはアプリを書いた本人を含め、鍵を持たない誰にとってもノイズのままです。この違いが目に見えるのは、それが問題になるまさにその日であり、だからこそ事前に知っておく価値があります。

以下も参照してください。 保存時 と 通信時ChaCha20-Poly1305

ChaCha20-Poly1305

データを隠すと同時に改ざんを検知する、現代的な暗号アルゴリズム。スマホ上で高速に動作し、古い代替方式では必ずしも得られないハードウェアアクセラレーションの恩恵を受けにくい場面でも強みを発揮します。

ChaCha20が暗号化を担い、Poly1305がデータが改ざんされていないことを確認するタグを生成します。この2つを合わせたものが認証付き暗号と呼ばれるもので、改ざんされたファイルに対しては、もっともらしいゴミデータを生成するのではなく、はっきりと復号に失敗します。

これはTLSや現代の安全なメッセージングでも使われているのと同じ構成です。AESアクセラレーションのないハードウェアではAESより明確に高速なため、スマホがこちらを好んで使う傾向があります。

以下も参照してください。 保存時 と 通信時鍵のラッピング

鍵のラッピング

エンベロープ暗号化

ファイルを1つの鍵で暗号化し、その鍵自体を各アクセス経路ごとに別々に暗号化すること。パスコードを変更しても、すべてを再暗号化するのではなく、小さな鍵だけを包み直せば済みます。

ファイルはデバイス上で生成された1つの鍵で一度だけ暗号化されます。その鍵はパスコードによってラップ(暗号化)され、リカバリーコードによっても別途ラップされます。2つの封筒があり、それぞれの中に同じ1つの鍵が入っている、というイメージです。

その結果はすべて実用的なものです。パスコードの変更は数百ギガバイトではなく数百バイトを書き換えるだけで済みます。生体認証によるロック解除も、別のセキュリティモデルではなく、もう一つのラップされたコピーにすぎません。そしてすべてのラッパーを失えば鍵も失われます。鍵はほかのどこにも存在しないからです。

以下も参照してください。 リカバリーコードChaCha20-Poly1305

リカバリーコード

パスコードを忘れたときにマスター鍵のラップを解除できる、1回限りの文字列。誰もそれを再発行できません。アプリを作った側を含め、他の誰もそれを持ったことがないからです。

セットアップ時に一度だけ表示される、2つある扉のうちの2つ目です。デバイス以外の場所に書き留めて保管しておけば、パスコードを忘れても単なる不便で済みます。

パスコードを忘れ、さらにリカバリーコードも失うと、そのファイルは誰にも復号できません。これは議論の余地があるサポート方針ではなく、鍵のコピーが存在しないということそのものです。ファイルにふさわしい慎重さで保管してください。

以下も参照してください。 鍵のラッピングゼロ知識

おとりボールト

プロージブル・デナイアビリティ(もっともらしい否認可能性)

別の、当たり障りのないボールトを開く2つ目のパスコード。アプリのロック解除を強いられた人に対して、開かれるものは、その人が探しているものではありません。

どちらのパスコードも本物で、どちらも実在するボールトを開きます。画面上には、もう一つのボールトが存在することを示すものは何もなく、アプリに対して今どちらを表示しているのか尋ねることもできません。

これは、ロック解除を拒否するという選択肢が取れない状況——国境、要求、目の前に立ちはだかる誰か——のために存在します。そこでは暗号化だけでは助けになりません。問題は鍵そのものではなく、鍵を使うことを強制されることだからです。

以下も参照してください。 リカバリーコード非表示 と 暗号化

キーチェーン

デバイスのセキュリティ用ハードウェアに支えられた、システムが提供する小さな機密情報向けの保護された保管領域。鍵やトークンが置かれるべき場所であり、サイズの大きなものを置くべきではありません。

そこに保存された項目には条件を付けられます——デバイスがロック解除されているときだけ読み取れる、このデバイス上でだけ有効、生体認証やパスコードでの確認後にだけ利用可能、など。これらの条件はアプリが丁寧にお願いするのではなく、ハードウェアによって強制されます。

保存するのはデータではなく機密情報です。鍵・トークン・ラップされた素材はここに置かれ、暗号化されたファイル自体はディスク上に置かれます。ディスクならサイズは問題になりません。

以下も参照してください。 鍵のラッピング保存時 と 通信時

保存時 と 通信時

「保存時に暗号化」とは、ディスク上で読み取れないことを意味します。「通信時に暗号化」とは、ネットワーク上で読み取れないことを意味します。これらは別々の保護であり、ある製品が一方は正直に主張しつつ、もう一方は行っていないこともあり得ます。

HTTPSは通信時の暗号化です——ネットワークを監視している誰からも安全ですが、到着した先のサーバーからは完全に読み取れます。保存時の暗号化は保存されたコピーに関するもので、デバイスを紛失したりディスクをイメージ化されたりしたときに問題になります。

プライバシーに関する主張を注意深く読むというのは、たいていこの2つのどちらについて語っているのかを見極めることを意味します。「あなたのデータは暗号化されています」とだけ書かれ、どちらの言葉も添えられていない文は、あえて言わないよう選ばれた文です。

以下も参照してください。 ChaCha20-Poly1305ゼロ知識

ゼロ知識

運営者が保存内容を読み取れない設計。鍵がユーザーのデバイスから外に出ることがないためです。判定方法はシンプルです——パスワードをリセットしても、なおデータを返せるかどうかです。

もしあるサービスが、あなたがすべてを忘れた後でもアクセスを復元できるなら、そのサービスはあなたのデータを解除できる何かを保持していることになります——つまりそれを使うよう強制され得るということであり、そのサービスに侵入した者は誰でも同じ能力を引き継ぐということです。

このトレードオフは本物であり、純粋な利点として売り込むのではなく、率直に述べられるべきです。真のゼロ知識とは、最後の鍵を失えば本当にアクセスを失うことを意味します。運営者だけは救済できて他の誰にもできない、という第三の選択肢は存在しません。

以下も参照してください。 リカバリーコード保存時 と 通信時

生体認証

Face ID、Touch ID

本人であることを確認するのはアプリではなくデバイスで、アプリにはその可否だけが伝えられます。指紋や顔のデータがアプリに届くことはなく、それ自体がパスワードになることもありません。

生体認証によるロック解除は、秘密そのものの代替ではなく、秘密を包む利便性の層です。それが保護しているのは保存された鍵であり、だからこそその背後には常にパスコードが存在します——生体認証は失敗することがあり、その代わりとなるのは記憶しているものでなければならないからです。

照合は専用のハードウェア内部で行われ、テンプレートがそこから外に出ることはありません。Face IDを提供するアプリは、何かを収集しているのではなく、システムに一つの質問を投げかけているだけです。

以下も参照してください。 キーチェーン鍵のラッピング

匿名分析

誰が行ったかを記録せずに出来事の回数だけを数えること。この主張の価値は、各イベントに何が付随しているか次第で決まります——そしてファイル名・パス・URLは、そうした約束が破られる最も典型的な場所です。

ある画面が開かれたと分かることは、単なる回数です。どのファイルが再生されたかが分かることは、ある人物についての記述です。この2つを分けるのは「匿名」という言葉ではなく、そのイベントがどんな項目を運んでいるかです。

信頼に値する主張は、送っているものと同じくらい具体的に、送っていないものを述べます——ファイル名なし、パスなし、URLなし、認証情報なし、セッションをまたいで残る識別子なし。そして、それら全体を無効にする手段も提供します。

以下も参照してください。 保存時 と 通信時

その他の科目