Secure Enclave(セキュアエンクレーブ)はAppleが開発した、iOS/iPadOSデバイスやMacのTouch IDあるいはFace ID対応モデルのApple A7, T1以降、Apple TV、Apple Watch、HomePod に搭載されているセキュリティコプロセッサである。
FileVault と安全な起動に必要な暗号化キーを保護し、Touch IDセンサーから指紋データを処理・一致しているかどうかを判断する役割も担っている。

## 概要

Secure Enclave Processorとも表記され、略してSEPと呼ばれることもある。

Touch IDの指紋データ、またはFace IDの顔認証データ、Apple Payのカードデータは、このSecure Enclave内の、アプリケーションプロセッサーやアプリからは隔離された特殊な領域に保存される。

そのため、インターネット経由やApp経由(システム含む)からはアクセスが不可能になっている。

OSバージョン毎にアップデートされる。

ある程度のバージョン間では互換性があるが、特殊な方法で互換性のないOSバージョンとSEPの組み合わせになると、そのバージョンを使用している間は生体認証が使用できなくなりパスコード認証のみとなる。

再度Apple Configurator等で最新版にアップデートすると利用可能状態に戻る。

## 構成

Secure Enclaveはメインプロセッサやアプリケーションプロセッサから隔離されていて、アプリケーションプロセッサのカーネルが侵害された場合でも、ユーザの機密データを安全に保てるように設計されている。Secure EnclaveはSoCと同じような設計で、ハードウェア信頼ルートを確立するための専用のBoot ROM、効率的かつ安全な暗号化操作のためのAESエンジンと保護されたメモリで構成されている。

Secure Enclaveにはストレージは含まれてないが、アプリケーションプロセッサとiOSで使用されるNANDフラッシュストレージとは別の接続されたストレージに、情報を安全に保存するメカニズムがある。

Secure Enclaveプロセッサはセキュリティための主要な演算を担当する。最大限の隔離を実現するため、Secure EnclaveプロセッサがiOS上で担当するのはセキュリティ処理のみとなっている。これにより、悪意のあるソフトウェアに依存したサイドチャネル攻撃を防止することができる。

## メモリ保護エンジン

Secure EnclaveはデバイスのDRAMメモリの専用領域で動作し、複数の保護層によってアプリケーションプロセッサからの隔離が確保されている。

iOS起動時に、Secure Enclave Boot ROMがメモリ保護エンジンのために一時的なランダムなメモリ保護鍵を生成し、Secure Enclaveがデータを専用領域に書きこむ際、メモリ保護エンジンはAESを用いてメモリブロックを暗号化しCMAC認証タグを計算する。メモリの読み込み時には認証タグを検証し、一致すればメモリブロックを復号し、不一致の場合はエラーを送信する。このエラーが発生すると、システムが再起動するまでSecure Enclaveは停止することで強力なセキュリティを実現する。

さらにA11やS4 SoCからSecure Enclaveメモリ向けにリプレイ保護を追加し、重要なデータのリプレイを防ぐ。アンチリプレイ値と認証タグを使用し、Secure Enclave内のSRAMを基にした整合性ツリーで保護する。A14、M1、以降のSoCでは、Secure EnclaveとSecure Neural Engineのそれぞれに対応した2つの一時的な保護鍵をサポートする。メモリ保護は透過的で、安全性を確保しながら性能を維持する。

## Secure Enclave Boot ROM

Secure Enclaveは専用のSecure Enclave Boot ROMを備えている。このBoot ROMはSecure Enclaveの信頼の起点となる変更不可のコードである。システム起動時、iBootはSecure Enclaveにメモリの専用領域を割り当てる。Secure Enclave Boot ROMはメモリを暗号化で保護するため、メモリ保護エンジンを初期化する。アプリケーションプロセッサがsepOSイメージを送信し、その後イメージのハッシュと署名を検証する。有効であれば、Boot ROMはsepOSに制御を移す。無効の場合、チップがリセットされるまで使用を防止する。Apple A10以降のSoCでは、Boot ROMはsepOSのハッシュを専用レジスタにロックし、OS固定鍵として利用する。

## Secure Enclave Boot Monitor

Apple A13以降のSoCでは、Secure Enclaveが起動時の整合性を強化するためにブートモニタを利用する。ブートモニタは、Secure EnclaveプロセッサがSecure Enclave Boot ROM以外のコードを実行するのを防ぎ、sepOSの実効性を確保するためにハッシュを生成してSCIP設定を更新する。このプロセスは、新しいコードが実行可能になるたびに実行される。最後に、実行中のハッシュはファイナライズされ、OS固定鍵作成に使用される。これにより、Secure Enclave Boot ROMの脆弱性があっても鍵固定がバイパスされることはない。

## 真性乱数生成器(TRNG)

真性乱数生成器(TRNG)は、安全なランダムデータを生成するために使用される装置である。Secure Enclaveがランダムな暗号鍵やランダムな鍵シードなどのエントロピーを生成する際には、必ずTRNGが用いられることになる。TRNGは、CTR\_DRBG(カウンタモードのブロック暗号に基づくアルゴリズム)で後処理されており、複数のリングオシレータに基づいている。

## Secure Enclave AESエンジン

Secure Enclave AESエンジンは、AES暗号に基づく対称暗号を実行するハードウェアブロックである。AESエンジンは、タイミングと静的電力解析(SPA)に対する耐性を持ち、A9 SoC以降では動的電力解析(DPA)に対する対策も備えている。AESエンジンは、Secure EnclaveのUIDまたはGIDから導出されたハードウェア鍵とソフトウェア鍵をサポートする。これらの鍵はAESエンジン内にとどまり、sepOSソフトウェアでも確認できない。ユーザーは暗号化と復号をリクエストできるが、鍵を抜き出すことはできない。Apple A10以降のSoCsでは、AESエンジンにUIDまたはGIDから導出された鍵を多様化するためのロック可能なシードビットが含まれており、デバイスの動作モードに応じてデータアクセスを制限できる。この機能は、デバイスファームウェアアップデート(DFU)モードでの起動時に、パスワード保護されたデータへのアクセスを拒否する場合などに使用される。

## セキュア不揮発性ストレージ

Secure Enclaveは、専用のセキュア不揮発性ストレージデバイスを備えている。このストレージはI2Cバスを通してのみSecure Enclaveに接続され、利用可能である。ユーザデータの暗号鍵はSecure Enclaveのストレージに保管されるエントロピーに基づく。A12、S4、またはそれ以降のSoC搭載デバイスでは、Secure Enclaveはセキュアストレージコンポーネントとペアリングされる。これはROMコード、乱数ジェネレータ、一意キー、暗号化エンジン、改ざん検出機能を備える。

2020年秋以降に初めてリリースされたデバイスは、第2世代セキュアコンポーネントを有し、カウンタロックボックスが追加されている。カウンタロックボックスはパスコードエントロピーを保持し、アクセス時には暗号化プロトコルを使用する。10回を超えるロック解除試行でデータは消去される。

カウンタロックボックス生成には、パスコードエントロピーと最大試行値がSecure Enclaveから送られる。ソルト値が乱数で生成され、パスコードベリファイアとエントロピー値が導出され、カウンタ0で初期化される。その後、エントロピー値がSecure Enclaveに返される。

データ保護にはカウンタロックボックスのエントロピーに基づく鍵が使用され、安全なストレージはSecure Enclaveのアンチリプレイサービスにも使用される。Secure Enclaveはイベントによってデータの無効化を行い、各種セキュリティ設定に影響を与える。セキュアストレージコンポーネントを持たないアーキテクチャではEEPROMが使用され、専用のハードウェアセキュリティ機能は含まれない。

## Secure Neural Engine

Face ID搭載デバイスでは、Secure Neural Engineが2D画像と深度マップを顔の数学的モデルに変換する。A11からA13 SoCsまで、Secure Neural EngineはSecure Enclaveに組み込まれており、DMAを使用してパフォーマンスを向上させる。sepOSカーネルのIOMMUは、このアクセスを承認済みメモリに制限する。A14、M1以降では、Secure Neural EngineはアプリケーションプロセッサのNeural Engineのセキュアモードとして実装され、専用ハードウェアセキュリティコントローラがトランザクション毎に状態をリセットし、データの安全性を保つ。専用エンジンはメモリ暗号化、認証、アクセス制御を利用し、承認済みメモリに制限する。