# 耐量子暗号 (QRC)

## 概要

QRCは、従来の楕円曲線暗号 (ECDH-P256)と、NISTで標準化された耐量子暗号ML-KEM-1024 (モジュール格子ベース鍵カプセル化方式) を組み合わせることで、KeeperのAPIセキュリティを強化します。このハイブリッド方式により、現在の安全性と将来の量子耐性の両立を実現します。

QRCを有効にすると、コマンダーから送信されるすべてのAPIリクエストで二重構成の暗号化が使用され、いずれか一方の暗号方式が将来破られた場合でも、データ保護が維持されます。

## 要件

| 要件          | 詳細                              |
| ----------- | ------------------------------- |
| Pythonバージョン | 3.11以降                          |
| パッケージ       | `keeper-mlkem` (自動的にインストールされます) |

要件を満たしている場合、QRCは自動的に有効になります。追加の設定は不要です。

## 仕組み

QRCが有効な状態でコマンダーがAPIリクエストを送信する際の処理は、以下のとおりです。

1. **ECDHによる鍵交換**\
   コマンダーが一時的な楕円曲線鍵ペアを生成し、サーバーの公開鍵を用いてECDHを実行
2. **ML-KEMによるカプセル化**\
   サーバーのML-KEM-1024公開鍵を使用し、共有シークレットをカプセル化
3. **鍵導出**\
   2つのシークレットをHKDF-SHA256で結合し、AES-256鍵を生成
4. **暗号化**\
   生成された鍵を使用し、AES-GCMで通信鍵を暗号化

## 代替動作

以下の場合、コマンダーは自動的に従来の楕円曲線暗号方式に切り替わります。

* Pythonのバージョンが3.11未満の場合
* `keeper-mlkem` パッケージがインストールされていない場合
* 暗号化処理中にQRC関連のエラーが発生した場合

いずれの場合もユーザー側での操作は不要で、接続は中断されずに継続されます。

## QRCの有効状態の確認

QRCが有効かどうかは、デバッグログを有効にすることで確認できます。

```
keeper shell --debug
```

QRCが有効な場合、次のようなログが表示されます。

```
Using QRC hybrid encryption (ML-KEM key ID: 136, EC key ID: 10)
ECDH completed: 32 byte shared secret
ML-KEM-1024 completed: 32 byte secret, 1568 byte encapsulation
HKDF completed: derived 32 byte AES key
AES-GCM completed: 60 byte ciphertext
```

## セキュリティ上の利点

| 特性             | 説明                                                  |
| -------------- | --------------------------------------------------- |
| 量子耐性           | ML-KEM-1024により、Shorのアルゴリズムを用いた将来の量子コンピュータ攻撃への耐性を確保  |
| ハイブリッド防御       | 将来、ML-KEMまたはECDHのいずれかが破られた場合でも、もう一方の暗号方式によるデータ保護を維持 |
| NIST標準         | ML-KEMはNIST FIPS 203に準拠し、厳格な安全性検証を通過                |
| 定数時間処理         | C拡張による実装により、タイミング攻撃などのサイドチャネル攻撃を回避                  |
| AES-256-GCM暗号化 | 認証付き暗号により、機密性と完全性の両立を実現                             |


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.keeper.io/keeperpam/jp/commander-cli/commander-installation-setup/quantum-resistant-cryptography-qrc.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
