ハイライト
量子コンピュータの登場により、RSA や楕円曲線暗号を用いた公開鍵アルゴリズムは指数時間で解読される可能性があります。攻撃者はすでに「今収集して後で復号」という戦略を実行しています。iOS 26 では、URLSession と Network.framework で TLS の量子安全鍵交換がデフォルトで有効化され、CryptoKit には Post-quantum HPKE、X-Wing、ML-KEM、ML-DSA が新たに追加されました。
主要内容
脅威は SF ではありません。攻撃者は、今日時点で暗号化された通信データをハードディスクに保存し、量子コンピュータが実用化された時点で復号する「Harvest Now, Decrypt Later」という手法を既に用いています。この攻撃は、ネットワークを介して送受信される健康データ、位置情報、写真などの機密データに対して有効であり、機密性を破壊します。もう一つの脅威は署名の偽造です。量子コンピューティングの力を手に入れた攻撃者は、公開されている署名から秘密鍵を逆算し、ユーザーになりすましてサーバーに対して操作を実行できます。これは WebAuthn、多要素認証、資産署名などの認証シナリオに影響を与えます(03:18)。
Apple の対策は二層構造になっています。対称暗号は定数倍の弱体化にとどまるため、AES-128 を AES-256 に引き上げれば十分です。公開鍵暗号はアルゴリズムを変更する必要があります。推奨されるのは「post-quantum hybrid(後量子ハイブリッド)」方式です。これは、後量子アルゴリズムと従来のアルゴリズムを重ね合わせる構成で、攻撃者は両方を同時に破る必要があります(06:32)。実装の流れとしては、iMessage は iOS 17.4 で既に PQ3 プロトコルに移行しています。iOS 26 では量子安全 TLS がデフォルトで有効化され、CloudKit、APNs、iCloud Private Relay、Safari、Weather、Maps も追随しています。CryptoKit には Post-quantum HPKE、X-Wing、ML-KEM、ML-DSA の 4 つの API が新たに追加され、Secure Enclave によって保護され、形式検証も済んでいます。
詳細
この session のデモプロジェクトは、ロッククライミングの App です。ユーザーの健康データ、トラッキング情報、写真をエンドツーエンドで暗号化し、自分の他のデバイスと同期します。TLS だけでは不十分です。TLS はクライアントから TLS 終端(つまり中継サーバー)までのリンクのみを保護するため、ここではサーバー自体に対しても機密性を保つ必要があります(14:14)。そのため、カスタムプロトコル + Post-quantum HPKE を採用しています。
let ciphersuite = HPKE.Ciphersuite.XWingMLKEM768X25519_SHA256_AES_GCM_256
// Recipient
let privateKey = try XWingMLKEM768X25519.PrivateKey.generate()
let publicKey = privateKey.publicKey
// Sender
var sender = try HPKE.Sender(recipientKey: publicKey, ciphersuite: ciphersuite, info: info)
let encapsulatedKey = sender.encapsulatedKey
// Recipient
var recipient = try HPKE.Recipient(privateKey: privateKey, ciphersuite: ciphersuite, info: info, encapsulatedKey: encapsulatedKey)
// Sender encrypts data
let ciphertext = try sender.seal(userData, authenticating: metadata)
// Recipient decrypts message
let decryptedData = try recipient.open(ciphertext, authenticating: metadata)
#expect(userData == decryptedData)
主なポイント:
HPKE.Ciphersuite.XWingMLKEM768X25519_SHA256_AES_GCM_256:X-Wing ハイブリッド KEM(ML-KEM-768 + X25519)を採用し、HKDF-SHA-256 で鍵を導出し、AES-GCM-256 で対称暗号化します。これは iOS 26 で HPKE に新たに追加された後量子暗号スイートです。XWingMLKEM768X25519.PrivateKey.generate()と.publicKey:受信側で X-Wing の鍵ペアを生成し、公開鍵を送信側に渡します。従来の HPKE からの移行では、ciphersuite と key type の数行を変更するだけです(15:16)。HPKE.Sender(recipientKey:ciphersuite:info:):送信側は受信側の公開鍵を使って sender を構築し、encapsulatedKeyは暗号文とともに相手に送る必要のあるカプセル化鍵です。HPKE.Recipient(privateKey:ciphersuite:info:encapsulatedKey:):受信側は自身の秘密鍵と、送信側から受け取った encapsulatedKey を使ってセッション鍵を復元します。sender.seal(_:authenticating:):ユーザーデータを暗号化し、metadata を AAD として暗号文に紐付け、改ざんを防ぎます。recipient.open(_:authenticating:):同じ metadata を使って検証と復号を行い、元のデータを取得します。
より低レベルな機能も公開されています。X-Wing KEM は単体で利用可能、ML-KEM-768 は後量子プリミティブとして直接利用でき、署名側には ML-DSA が提供されており、アプリケーション層で post-quantum ハイブリッド署名(17:53)を組み立てることができます。ML-KEM と ML-DSA はどちらも Secure Enclave をサポートしており、鍵の操作をハードウェアの隔離環境で強制的に実行できます。コアな実装は FIPS 203 に照らし合わせて形式検証されています。サーバー側では、Swift Crypto を使えば CryptoKit と同じ API を利用でき、または標準の後量子アルゴリズムをサポートする任意のライブラリに置き換えることもできます(18:26)。
iOS 26 でデフォルトで有効化される範囲は URLSession と Network.framework に限定されています。古い Secure Transport は後量子アップグレードを受けず、移行を急ぐ必要があります。独自のサーバーを運用する場合は、TLS ライブラリと設定を自分でアップグレードする必要があります。CDN やマネージドサービスを利用している場合は、多くのプロバイダーが既に対応しており、スイッチを有効化するだけです(10:53)。
重要ポイント
- プロトコル内の「転送中のデータ」箇所を棚卸しする:App 内で暗号化転送や署名を行っているすべての箇所を列挙し、TLS かカスタム HPKE / 署名かをマークします。URLSession に任せられる部分は優先的に委譲し、iOS 26 で TLS の量子安全鍵交換にアップグレードされることはゼロコストで利益を得られます。
- 従来の HPKE を Post-quantum HPKE に置き換える:すでに CryptoKit の HPKE をエンドツーエンド暗号化に利用している場合(例:IM、デバイス間同期、バックアップ復号)、変更点は ciphersuite と key type の 2 箇所のみです。まずテスト環境で X-Wing スイートを動作確認し、サーバー側の鍵配布を段階的に移行します。
- 署名チェーンで ML-DSA の導入を評価する:ユーザーログイン、デバイス証明書、資産署名などの長期間有効な署名は、量子コンピューティングが利用可能になった時点で遡及的に解読されるリスクがあります。秘密鍵を Secure Enclave に移行し、post-quantum ハイブリッド署名(従来 + ML-DSA)への移行パスを早めに準備しておきます。
- サーバー側は Swift Crypto または標準ライブラリを利用する:iOS 26 の CryptoKit と Swift Crypto の API は完全に一致しており、Swift のバックエンドではコードを直接共有できます。他の言語の場合は、FIPS 203(ML-KEM)/ FIPS 204(ML-DSA)標準に準拠した実装を選び、独自実装は避けます。
- Secure Transport と独自ネットワークスタックを廃止する:Apple は既存の API に後量子アップグレードを行わないことを明確にしています。残っている Secure Transport の呼び出しを URLSession に置き換えるか、独自スタックを Network.framework 上に構築し、今回のセキュリティアップグレードと併せて一括で整理します。
関連セッション
- Filter and tunnel network traffic with NetworkExtension — NetworkExtension でのトラフィックのフィルタリングとトンネリング。TLS の量子安全アップグレードと合わせて、リンクの境界を理解する
- Finish tasks in the background — バックグラウンドタスクのスケジューリング更新。鍵のネゴシエーションや鍵のローテーションなど、バックグラウンドで完了させる必要がある作業に影響する
- Deliver age-appropriate experiences in your app — プライバシーとセキュリティの同じ方向性で、宣言的インターフェースを使った機密機能の統合について議論する
- Optimize home electricity usage with EnergyKit — EnergyKit も iOS 26 のシステムサービス層で新しい API を導入しており、TLS のデフォルト動作の変化と対比して確認できる
コメント
GitHub Issues · utterances