Android Pie の Keystore の新機能
Android
Keystore にはユーザーのデータを保護するために設計された暗号化ツール群があり、アプリ デベロッパーの皆様にご利用いただけます。Keystore では、ソフトウェア ライブラリで用意されている暗号プリミティブを Android OS から取り出したり、セキュア ハードウェアに移動したりします。アプリの機密情報をさまざまな形式の攻撃から守るため、鍵は保護されており、セキュア ハードウェアの内部でのみ使用されます。Keystore を利用すると、鍵の使用方法や使用時期についての制限をアプリで指定できるようになります。
Android Pie では Keystore に新機能が導入されています。この投稿では、そのうちの 2 つをご紹介します。1 つ目の新機能では、機密情報を保護するために鍵の使用について制限を設けることができます。2 つ目の新機能では、キーマテリアルをアプリやオペレーティング システムから保護しながら、鍵を安全に利用できるようになります。
キーガードがバインドされた鍵
モバイルアプリでデータを受信しても、ユーザーが現在デバイスを使用していない場合はそのデータにすぐにアクセスする必要はない、ということがあります。デバイスの画面がロックされているときにアプリに送信された機密情報は、ユーザーがその情報にアクセスしようとする時点まで安全に保持しておく必要があります。Android Pie では、キーガードがバインドされた暗号鍵を導入することで、この状況に対応しています。
画面がロックされている場合、この鍵は暗号化や検証の処理には使用できますが、復号や署名には使用できません。デバイスが PIN、パターン、パスワードのいずれかでロックされている場合、この鍵を使用しようとすると無効な処理と見なされます。キーガードがバインドされた鍵では、デバイスがロックされている間はユーザーのデータが保護され、ユーザーが必要とした場合にのみデータが利用できるようになります。
キーガード バインディングと認証バインディングは同じように機能しますが、1 つだけ重要な違いがあります。キーガード バインディングでは鍵の使用可能性と画面ロックの状態を直接関連付けますが、これに対し、認証バインディングでは一定のタイムアウトを使用します。キーガード バインディングの場合、デバイスがロックされるとすぐに鍵は使用できなくなり、ユーザーがデバイスをロック解除すると、再び使用できるようになります。
注目すべきは、キーガード バインディングはセキュア ハードウェアではなく、オペレーティング システムによって実行されるという点です。これは、セキュア ハードウェアには画面がいつロックされているのか認識する方法がないためです。ハードウェアによって実行される Android Keystore の保護機能(認証バインディングなど)とキーガード バインディングを組み合わせることで、より高度なセキュリティを実現できます。さらに、キーガード バインディングはオペレーティング システムの機能であるため、Android Pie を搭載しているどのデバイスでもご利用いただけます。
デバイスで対応しているアルゴリズムであれば、そのアルゴリズムに対する鍵にキーガードをバインドすることができます。キーガードがバインドされた鍵を生成したりインポートしたりするには、鍵の生成時やインポート時に
KeyGenParameterSpec または
KeyProtection ビルダー オブジェクトの
setUnlockedDeviceRequired(true) を呼び出します。
鍵の安全なインポート
鍵の安全なインポートは Android Pie の新機能です。アプリは既存の鍵をより安全な方法で Keystore に供給できるようになります。鍵の提供元(オンプレミスのデータセンターやクラウドに存在するリモート サーバー)は、ユーザーのデバイスで生成された公開ラッピング鍵を使用して、安全な鍵を暗号化します。
SecureKeyWrapper 形式で暗号化された鍵(インポートされた鍵の使用方法に関する説明も含まれている)は、ラッピング鍵を生成した特定のデバイスに属している Keystore ハードウェアでのみ復号できます。鍵は転送時には暗号化され、アプリやオペレーティング システムからは解読できない状態になっています。つまり、インポート先のセキュア ハードウェアの内部でのみ利用可能です。
鍵の安全なインポートは、アプリで Android デバイスと秘密鍵を共有させたいが、鍵が傍受されたりデバイスから発信されたりするのを防ぎたい、という状況で役に立ちます。Google Pay では、鍵の安全なインポートを利用して Pixel 3 スマートフォンで鍵を提供することにより、鍵が傍受されたり、メモリから抽出されたりするのを防いでいます。また、企業でのさまざまな使用事例もあり、たとえば、複数のデバイスで同じ鍵を使ってメールを復号できるように S/MIME 暗号鍵を認証局のエスクローから復元する場合が挙げられます。
この機能を活用するには、
こちらのトレーニング記事をご覧ください。鍵の安全なインポートはセキュア ハードウェアの機能であるため、一部の Android Pie デバイスでのみご利用いただけます。デバイスがこの機能に対応しているかどうか確認するため、アプリは
PURPOSE_WRAP_KEY を格納した KeyPair を生成することがあります。