Secure Enclave
Secure Enclaveは最新バージョンのiPhone、iPad、Mac、Apple TV、Apple Watch、およびHomePod専用セキュアサブシステムです。
概要
Secure Enclaveは、AppleのSystem on Chip(SoC)に組み込まれた専用のセキュリティサブシステムです。Secure Enclaveはセキュリティ層を追加するためにメインプロセッサから隔離されており、アプリケーションプロセッサのカーネルが侵害された場合でも、ユーザの機密データを安全に保てるように設計されています。Secure EnclaveはSoCと同じ設計原則に従っており、ハードウェア信頼ルートを確立するためのBoot ROM、効率的で安全な暗号化操作のためのAESエンジン、および保護されたメモリを備えています。Secure Enclaveにはストレージは含まれていませんが、アプリケーションプロセッサとオペレーティングシステムで使用されるNANDフラッシュストレージとは別の接続されたストレージに、情報を安全に保存するメカニズムがあります。
Secure EnclaveはほとんどのバージョンのiPhone、iPad、Mac、Apple TV、Apple Watch、およびHomePodに備わるハードウェア機能です。以下のモデルに搭載されています:
iPhone 5s以降
iPad Air以降
Appleシリコン搭載Macコンピュータ
Apple T1チップを搭載した、Touch Bar搭載MacBook Proコンピュータ(2016および2017)
Apple T2セキュリティチップを搭載した、Intelプロセッサ搭載Macコンピュータ
Apple TV HD以降
Apple Watch Series 1以降
HomePodおよびHomePod mini
Secure Enclaveプロセッサ
Secure EnclaveプロセッサはSecure Enclaveのための主要な演算能力を提供します。最大限の隔離を実現するために、Secure EnclaveプロセッサはSecure Enclave専用となっています。これにより、攻撃を受けているソフトウェアと同じ実行コアを共有中の悪意のあるソフトウェアに依存したサイドチャネル攻撃を防止することができます。
Secure EnclaveプロセッサはAppleがカスタマイズしたL4マイクロカーネルのバージョンを実行します。これは低いクロック速度でも効率的に動作するよう設計されており、クロック攻撃や電力攻撃を受けても保護されます。Secure Enclaveプロセッサ(A11およびS4以降)には、メモリ保護エンジン、アンチリプレイ機能を持つ暗号化メモリ、セキュアブート、専用の乱数ジェネレータ、および独自のAESエンジンが搭載されています。
メモリ保護エンジン
Secure EnclaveはデバイスのDRAMメモリの専用領域から動作します。複数の保護層がSecure Enclaveで保護されたメモリをアプリケーションプロセッサから隔離します。
デバイスが起動すると、Secure Enclave Boot ROMによってメモリ保護エンジン用の一時的なランダムメモリ保護鍵が作成されます。Secure Enclaveが専用メモリ領域に書き込むときには、AESをMac XEX(xor-encrypt-xor)モードで使用しているメモリブロックをメモリ保護エンジンが暗号化し、メモリ用にCMAC(Cipher-based Message Authentication Code)認証タグを計算します。メモリ保護エンジンは暗号化されたメモリと共に認証タグを保存します。Secure Enclaveがメモリを読み込むときには、メモリ保護エンジンが認証タグを検証します。認証タグが一致する場合は、メモリ保護エンジンがメモリブロックを復号します。タグが一致しない場合は、メモリ保護エンジンがSecure Enclaveにエラーを送信します。メモリ認証エラーが発生すると、システムがリブートするまでSecure Enclaveはリクエストを受け付けなくなります。
Apple A11やS4 SoCから、メモリ保護エンジンはSecure Enclaveメモリ用のリプレイ保護を追加します。セキュリティ上重要なデータのリプレイを防止するために、メモリ保護エンジンは認証タグと共にメモリブロック用のアンチリプレイ値と呼ばれる一意の使い捨ての番号を保存します。アンチリプレイ値はCMAC認証タグ用の追加の微調整として使用されます。すべてのメモリブロック用のアンチリプレイ値は、Secure Enclave内の専用SRAMをルートとする整合性ツリーを使用して保護されます。書き込み時には、メモリ保護エンジンはアンチリプレイ値および整合性ツリーの各レベルをSRAMまでアップデートします。読み込み時には、メモリ保護エンジンはアンチリプレイ値および整合性ツリーの各レベルをSRAMまで検証します。アンチリプレイ値の不一致は認証タグの不一致と同様に扱われます。
Apple A14、M1、またはそれ以降のSoCでは、メモリ保護エンジンは2つの一時的なメモリ保護鍵に対応します。1つはSecure Enclave専用のデータに使用され、もう1つはSecure Neural Engineと共有されるデータに使用されます。
メモリ保護エンジンはSecure Enclaveに対してインラインで透過的に動作します。Secure Enclaveがメモリの読み込みと書き込みを行うときは、それが通常の暗号化されていないDRAMであるかのように行います。一方、Secure Enclaveの外側にいるオブザーバには、メモリの暗号化され認証されたバージョンしか見えません。つまり、パフォーマンスが低下したりソフトウェアが複雑化したりすることなく、強力なメモリ保護が提供されます。
Secure Enclave Boot ROM
Secure Enclaveは、専用のSecure Enclave Boot ROMを備えています。アプリケーションプロセッサのBoot ROMと同様に、Secure Enclave Boot ROMも、Secure Enclaveにとってハードウェアの信頼の起点となる変更不可のコードです。
システム起動時に、iBootはSecure Enclaveにメモリの専用領域を割り当てます。Secure Enclave Boot ROMは、メモリを使用する前に、メモリ保護エンジンを初期化して、Secure Enclaveで保護されたメモリを暗号化によって保護します。
次に、アプリケーションプロセッサがsepOSイメージをSecure Enclave Boot ROMに送信します。sepOSイメージをSecure Enclaveで保護されたメモリにコピーしたあと、Secure Enclave Boot ROMは暗号学的ハッシュとイメージの署名をチェックし、sepOSがデバイス上での実行を承認されていることを検証します。sepOSイメージがデバイス上で実行されることに関して適切に署名されている場合は、Secure Enclave Boot ROMは制御権をsepOSに移転します。Secure Enclave Boot ROMは、署名が無効な場合に、次にチップがリセットされるまでSecure Enclaveの使用を防止するように設計されています。
Apple A10以降のSoCでは、Secure Enclave Boot ROMはsepOSのハッシュを専用のレジスタにロックします。公開鍵アクセラレータはこのハッシュをオペレーティングシステム固定(OS固定)鍵に使用します。
Secure Enclave Boot Monitor
Apple A13以降のSoCでは、ブートされたsepOSのハッシュで整合性を強化するためのブートモニタがSecure Enclaveに含まれています。
システム起動時には、Secure Enclaveプロセッサのシステムコプロセッサ整合性保護(SCIP)構成によって、Secure EnclaveプロセッサがSecure Enclave Boot ROM以外のコードを実行することを防止できます。ブートモニタはSecure EnclaveがSCIP構成を直接変更することを防止します。読み込まれたsepOSを実行可能とするために、Secure Enclave Boot ROMはブートモニタにリクエストを送信します。このとき、読み込まれたsepOSのアドレスとサイズも送信されます。リクエストを受信したブートモニタはSecure Enclaveプロセッサをリセットし、読み込まれたsepOSをハッシュ化し、読み込まれたsepOSの実行を許可するようにSCIP設定をアップデートし、新しく読み込まれたコード内で実行を開始します。システムがブートしている間は、新しいコードが実行可能となるたびにこの同じプロセスが実行されます。そのたびに、ブートモニタはブートプロセスの実行中ハッシュをアップデートします。ブートモニタは、実行中ハッシュ内の重要なセキュリティパラメータも取り込みます。
ブートが完了すると、ブートモニタは実行中ハッシュをファイナライズして、OS固定鍵に使用できるように公開鍵アクセラレータに送信します。このプロセスの設計により、たとえSecure Enclave Boot ROMに脆弱性があっても、オペレーティングシステム鍵固定がパイパスされることはありません。
真性乱数生成器
真性乱数生成器(TRNG)は安全なランダムデータを生成するのに使用されます。Secure Enclaveがランダムな暗号鍵、ランダムな鍵シードなどのエントロピーを生成するたびにTRNGが使用されます。TRNGは、CTR_DRBG(カウンタモードのブロック暗号に基づくアルゴリズム)で後処理された複数のリングオシレータに基づいています。
ルート暗号鍵
Secure EnclaveはユニークID(UID)のルート暗号鍵を備えています。UIDはデバイスごとに一意であり、デバイス上のそれ以外のいかなる識別子にも結びついていません。
SoCの製造時、ランダム生成されたUIDがヒューズに書き込まれます。A9 SoC以降、UIDは製造中にSecure Enclave TRNGによって生成され、完全にSecure Enclaveで実行されるソフトウェアプロセスを使用してヒューズに書き込まれます。このプロセスにより、製造中にUIDがデバイスの外部からは見えなくなり、Appleやそのサプライヤがアクセスしたり保存したりすることはできません。
sepOSはデバイス固有のシークレットを保護するためにUIDを使用します。UIDは暗号の仕組みを利用して、データを特定のデバイスに関連付けます。例えば、ファイルシステムを保護する鍵階層にはUIDが含まれているので、内蔵SSDストレージをあるデバイスから別のデバイスに物理的に移動した場合、そのファイルにはアクセスできなくなります。保護されるその他のデバイス固有のシークレットとしては、Face IDまたはTouch IDのデータがあります。Macでは、AESエンジンにリンクされた完全に内部のストレージのみがこのレベルの暗号化を受け取ります。例えば、USBで接続された外部ストレージデバイスも、Mac Pro(2019)に追加されたPCIeベースのストレージも、この方法では暗号化されません。
また、Secure EnclaveにはデバイスグループID(GID)があり、これは同じSoCを搭載しているすべてのデバイスに共通しています(例えば、Apple A15 SoCを使用しているすべてのデバイスは同じGIDを共有しています)。
UIDとGIDには、Joint Test Action Group(JTAG)などのデバッグインターフェイス経由でアクセスすることはできません。
Secure Enclave AESエンジン
Secure Enclave AESエンジンとは、AES暗号に基づいた対称暗号を実行するために使用されるハードウェアブロックです。AESエンジンは、タイミングと静的電力解析(SPA)を使用して、情報漏えいに耐えうるように設計されています。A9 SoCから、AESエンジンは動的電力解析(DPA)への対策も備えています。
AESエンジンはハードウェア鍵とソフトウェア鍵をサポートします。ハードウェア鍵はSecure EnclaveのUIDまたはGIDから導出されます。これらの鍵はAESエンジンの内部にとどまり、sepOSソフトウェアからも見ることはできません。ソフトウェアはハードウェア鍵を使用した暗号化と復号をリクエストできますが、鍵を抜き出すことはできません。
Apple A10以降のSoCsでは、AESエンジンに、UIDまたはGIDから導出された鍵を多様化させるためのロック可能なシードビットが含まれています。これによって、デバイスの動作モードに応じてデータアクセスを制限できるようになります。ロック可能なシードビットは、デバイスファームウェアアップデート(DFU)モードからブートするときにパスワード保護されたデータへのアクセスを拒否するときなどに使用されます。詳しくは、パスコードとパスワードを参照してください。
AESエンジン
Secure Enclaveを備えたすべてのAppleデバイスには、NAND(不揮発性)フラッシュストレージとシステムのメインメモリ間の直接メモリアクセス(DMA)パスに専用のAES256の暗号化エンジン(「AESエンジン」)も搭載されているので、ファイルの暗号化が非常に効率良く実行されます。A9以降のAシリーズプロセッサでは、フラッシュストレージサブシステムは隔離されたバス上にあり、ユーザデータが含まれるメモリへのDMA暗号化エンジン経由でのアクセスのみ許可されます。
ブート時には、sepOSがTRNGを使用して一時的なキーラッピング鍵を生成します。Secure Enclaveは、Secure Enclaveの外部にあるソフトウェアからアクセスされることを防止するための専用ワイヤを使ってこの鍵をAESエンジンに伝送します。sepOSはその後、アプリケーションプロセッサのファイルシステムドライバによって使用されるファイルキーを、一時的なラッピング鍵を使ってラップします。ファイルシステムドライバがファイルを読み込んだり書き込んだりするときには、ラッピングされた鍵をAESエンジンに送信し、AESエンジンが鍵をラッピング解除します。AESエンジンがアンラップされた鍵をソフトウェアに公開することはありません。
注記: AESエンジンはSecure EnclaveおよびSecure Enclave AESエンジンのどちらとも別個のコンポーネントですが、その動作は、以下に示すようにSecure Enclaveと密接に関連しています。
公開鍵アクセラレータ
公開鍵アクセラレータ(PKA)は非対称暗号演算を実行するのに使用されるハードウェアブロックです。PKAはRSAおよびECC(楕円曲線暗号)署名および暗号化アルゴリズムをサポートします。PKAは、SPAやDPAなどのタイミング攻撃やサイドチャネル攻撃による情報漏えいに耐えうるように設計されています。
PKAはソフトウェア鍵とハードウェア鍵をサポートします。ハードウェア鍵はSecure EnclaveのUIDまたはGIDから導出されます。これらの鍵はPKAの内側にとどまり、sepOSソフトウェアからも見ることはできません。
A13 SoC以降、PKAの暗号化の実装は、正式な検証手法を使用して数学的に正しいことが証明されています。
Apple A10以降のSoCでは、PKAは、シールドキー保護(SKP)とも呼ばれるOS固定鍵をサポートします。これらの鍵は、デバイスのUIDとデバイス上で実行されているsepOSのハッシュの組み合わせを使用して生成されます。ハッシュはSecure Enclave Boot ROMから提供されます。または、Apple A13以降のSoC上のSecure Enclave Boot Monitorから提供されます。これらの鍵は、特定のAppleサービスにリクエストを送信するときにsepOSバージョンを検証するためにも使用されます。また、ユーザの承認なしでシステムに重大な変更が加えられた場合に鍵マテリアルへのアクセスを防ぐことで、パスコードで保護されたデータのセキュリティを向上させるためにも使用されます。
セキュア不揮発性ストレージ
Secure Enclaveは、専用のセキュア不揮発性ストレージデバイスを備えています。セキュア不揮発性ストレージは専用のI2Cバスを通してSecure Enclaveに接続されているため、Secure Enclaveからしかアクセスできないようになっています。すべてのユーザデータ暗号鍵は、Secure Enclaveの不揮発性ストレージに保存されているエントロピーに基づいています。
A12、S4、またはそれ以降のSoCを搭載したデバイスでは、Secure Enclaveがエントロピーストレージ用のセキュアストレージコンポーネントとペアリングされます。セキュアストレージコンポーネント自体は、変更不可のROMコード、ハードウェア乱数ジェネレータ、デバイスごとの一意の暗号鍵、暗号化エンジン、および物理的改ざん検出機能を備えて設計されています。Secure Enclaveとセキュアストレージコンポーネントは、暗号化および認証されたプロトコルを使用して通信しており、これによってエントロピーに排他的にアクセスできます。
2020年秋以降に初めてリリースされたデバイスは第2世代のセキュアストレージコンポーネントを搭載しています。第2世代のセキュアストレージコンポーネントにはカウンタロックボックスが追加されています。カウンタロックボックスにはそれぞれ、128ビットのソルト、128ビットのパスコードベリファイア、8ビットカウンタ、8ビット最大試行値が保存されています。カウンタロックボックスには、暗号化および認証されたプロトコルを使ってアクセスします。
カウンタロックボックスは、パスコードで保護されたユーザデータのロックを解除するために必要なエントロピーを保持します。このユーザデータにアクセスするには、ペアリングされたSecure EnclaveがユーザのパスコードとSecure EnclaveのUIDから正しいパスコードエントロピー値を導出する必要があります。ペアリングされたSecure Enclave以外のソースから送信されたロック解除試行によって、ユーザのパスコードが学習されることはありません。パスコードの最大試行回数(例えば、iPhoneの場合は10回)を超えると、パスコードで保護されているデータがセキュアストレージコンポーネントによって完全に消去されます。
カウンタロックボックスを作成するために、Secure Enclaveはセキュアストレージコンポーネントにパスコードエントロピー値と最大試行値を送信します。セキュアストレージコンポーネントは、乱数ジェネレータを使用してソルト値を生成します。そのあと、提供されたパスコードエントロピー、セキュアストレージコンポーネントの一意の暗号鍵、およびソルト値から、パスコードベリファイア値とロックボックスエントロピー値を導出します。セキュアストレージコンポーネントは、カウント0、提供された最大試行値、導出されたパスコードベリファイア値、およびソルト値でカウンタロックボックスを初期化します。次に、セキュアストレージコンポーネントは生成されたロックボックスエントロピー値をSecure Enclaveに返します。
あとでロックボックスエントロピー値をカウンタロックボックスから取り戻すために、Secure Enclaveはセキュアストレージコンポーネントにパスコードエントロピーを送信します。セキュアストレージコンポーネントは最初にロックボックスのカウンタを増分します。増分されたカウンタが最大試行値を超えた場合、セキュアストレージコンポーネントはカウンタロックボックスを完全に消去します。最大試行回数に達していない場合、セキュアストレージコンポーネントは、カウンタロックボックスの作成に使用されたのと同じアルゴリズムを使用して、パスコードベリファイア値とロックボックスエントロピー値の導出を試みます。導出されたパスコードベリファイア値が保存されているパスコードベリファイア値と一致する場合、セキュアストレージコンポーネントはロックボックスエントロピー値をSecure Enclaveに返し、カウンタを0にリセットします。
パスワード保護されたデータにアクセスするために使用される鍵は、カウンタロックボックスに格納されたエントロピーに基づいています。詳しくは、データ保護の概要を参照してください。
安全な不揮発性ストレージは、Secure Enclave内のすべてのアンチリプレイサービスに使用されます。Secure Enclaveのアンチリプレイサービスは、アンチリプレイ境界をマークするイベントを介したデータの失効に使用されます。これには以下のものが含まれますが、これらに限定されません:
パスコードの変更
Face IDまたはTouch IDの有効化または無効化
Face IDの顔またはTouch IDの指紋の追加または削除
Face IDまたはTouch IDのリセット
Apple Payカードの追加または削除
すべてのコンテンツと設定の消去
セキュアストレージコンポーネントを備えていないアーキテクチャでは、EEPROM(電気的に消去可能なプログラマブル読み取り専用メモリ)を使用して、Secure Enclaveに安全なストレージサービスを提供します。セキュアストレージコンポーネントと同様に、EEPROMは接続されているSecure Enclaveからのみアクセスできますが、専用のハードウェアセキュリティ機能は含まれていません。また、エントロピー(物理的な接続特性を除く)への排他的アクセスやカウンタロックボックス機能も保証していません。
Secure Neural Engine
Touch IDではなくFace IDを搭載したデバイスでは、Secure Neural Engineは2D画像と深度マップをユーザの顔の数学的モデルに変換します。
A11からA13 SoCsでは、Secure Neural EngineはSecure Enclaveに組み込まれています。Secure Neural Engineはパフォーマンス向上のためにダイレクトメモリアクセス(DMA)を使用します。sepOSカーネルの制御下にあるIOMMU(入出力メモリ管理ユニット)は、この直接アクセスを承認済みのメモリ領域に制限します。
A14、M1、またはそれ以降、Secure Neural EngineはアプリケーションプロセッサのNeural Engineのセキュアモードとして実装されています。専用ハードウェアセキュリティコントローラがアプリケーションプロセッサとSecure Enclaveのタスクを切り替えて、各トランザクションでNeural Engineの状態をリセットしてFace IDのデータの安全性を保ちます。専用エンジンは、メモリ暗号化、認証、およびアクセス制御を利用します。同時に、別々の暗号鍵とメモリ範囲を使用して、Secure Neural Engineを承認済みのメモリ領域に制限します。
電力とクロックのモニタ
すべての電子機器は限られた電圧と周波数の範囲内で動作するように設定されています。この範囲外での動作では電子機器が誤動作する可能性があり、セキュリティ制御がバイパスされる可能性があります。電圧と周波数が安全な範囲内から外れないようにするため、Secure Enclaveは監視回路と連携するように設計されています。これらの監視回路は、Secure Enclaveよりもはるかに大きな動作範囲を持つように設計されています。モニタが不正な動作点を検出した場合、Secure Enclaveのクロックは自動的に停止し、次のSoCリセットまで再開しません。
Secure Enclave機能の概要
注記: 2020年秋に初めてリリースされたA12、A13、S4、およびS5製品は第2世代のセキュアストレージコンポーネントを搭載していますが、同じSoCに基づくそれ以前の製品は第1世代のセキュアストレージコンポーネントを搭載しています。
SoC | メモリ保護エンジン | セキュアストレージ | AESエンジン | PKA |
---|---|---|---|---|
A8 | 暗号化と認証 | EEPROM | あり | なし |
A9 | 暗号化と認証 | EEPROM | DPA保護 | あり |
A10 | 暗号化と認証 | EEPROM | DPA保護とロック可能なシードビット | OS固定鍵 |
A11 | 暗号化、認証、リプレイ防止 | EEPROM | DPA保護とロック可能なシードビット | OS固定鍵 |
A12(2020年秋より前にリリースされたAppleデバイス) | 暗号化、認証、リプレイ防止 | セキュアストレージコンポーネント第1世代 | DPA保護とロック可能なシードビット | OS固定鍵 |
A12(2020年秋よりあとにリリースされたAppleデバイス) | 暗号化、認証、リプレイ防止 | セキュアストレージコンポーネント第2世代 | DPA保護とロック可能なシードビット | OS固定鍵 |
A13(2020年秋より前にリリースされたAppleデバイス) | 暗号化、認証、リプレイ防止 | セキュアストレージコンポーネント第1世代 | DPA保護とロック可能なシードビット | OS固定鍵とブートモニタ |
A13(2020年秋よりあとにリリースされたAppleデバイス) | 暗号化、認証、リプレイ防止 | セキュアストレージコンポーネント第2世代 | DPA保護とロック可能なシードビット | OS固定鍵とブートモニタ |
A14–A17 | 暗号化、認証、リプレイ防止 | セキュアストレージコンポーネント第2世代 | DPA保護とロック可能なシードビット | OS固定鍵とブートモニタ |
S3 | 暗号化と認証 | EEPROM | DPA保護とロック可能なシードビット | あり |
S4 | 暗号化、認証、リプレイ防止 | セキュアストレージコンポーネント第1世代 | DPA保護とロック可能なシードビット | OS固定鍵 |
S5(2020年秋より前にリリースされたAppleデバイス) | 暗号化、認証、リプレイ防止 | セキュアストレージコンポーネント第1世代 | DPA保護とロック可能なシードビット | OS固定鍵 |
S5(2020年秋よりあとにリリースされたAppleデバイス) | 暗号化、認証、リプレイ防止 | セキュアストレージコンポーネント第2世代 | DPA保護とロック可能なシードビット | OS固定鍵 |
S6–S9 | 暗号化、認証、リプレイ防止 | セキュアストレージコンポーネント第2世代 | DPA保護とロック可能なシードビット | OS固定鍵 |
T2 | 暗号化と認証 | EEPROM | DPA保護とロック可能なシードビット | OS固定鍵 |
M1、M2、M3 | 暗号化、認証、リプレイ防止 | セキュアストレージコンポーネント第2世代 | DPA保護とロック可能なシードビット | OS固定鍵とブートモニタ |