
X25519 + ML-KEM-768 と AES-256-GCM を組み合わせた耐量子ハイブリッド暗号ライブラリ
ポスト量子ハイブリッド暗号化および鍵管理サーバー。
Citadelは、NISTのポスト量子移行に向けたハイブリッドアプローチに従い、鍵カプセル化にX25519 + ML-KEM-768、データ暗号化にAES-256-GCMを組み合わせています。アプリケーションはREST APIを通じてデータを暗号化・復号します。Citadelが鍵の生成、ローテーション、失効、アクセス制御、監査ログを管理します。
ステータス: 動作する実装。未監査。本番導入実績なし。以下のセキュリティを参照。
Your Application Citadel Database
| | |
|-- POST /encrypt ------->| |
| |-- hybrid KEM (X25519+ML-KEM) |
| |-- derive AES-256 key (HKDF) |
| |-- encrypt with AES-256-GCM |
|<-- encrypted blob ------| |
| |
|-- store blob ------------------------------------------>|
アプリケーションが生の鍵マテリアルに触れることはありません。暗号化ブロブは自己完結型です。ラップされた鍵、アルゴリズム識別子、暗号文が含まれます。任意のデータベースに保存できます。同じAADとコンテキストを付けてCitadelに送り返すことで復号できます。
citadel-envelope Hybrid encryption core (X25519 + ML-KEM-768 + AES-256-GCM)
citadel-keystore Key lifecycle management, 4-level hierarchy, threat-adaptive policies
citadel-api HTTP server, scoped API key auth, rate limiting, real-time dashboard
# Clone
git clone https://github.com/mrcord77/rust_citadel.git
cd rust_citadel
# Set your admin API key
echo -n "your-secret-key" | sha256sum | cut -d' ' -f1
# Copy the hash
# Start
CITADEL_API_KEY_HASH=<paste-hash> docker compose up -d
# Verify
curl http://localhost:3000/health
# {"status":"ok","version":"0.2.0"}
ダッシュボード: http://localhost:3000
Rust 1.75+ が必要です。
cargo build --release -p citadel-api
CITADEL_API_KEY="your-secret-key" CITADEL_SEED_DEMO=true ./target/release/citadel-api
import requests
api = "http://localhost:3000"
headers = {"Authorization": "Bearer your-secret-key"}
# Encrypt
r = requests.post(f"{api}/api/keys/{dek_id}/encrypt", headers=headers, json={
"plaintext": "sensitive data",
"aad": "record-001", # binds ciphertext to this record
"context": "patient-records" # domain separation
})
blob = r.json()
# Decrypt
r = requests.post(f"{api}/api/decrypt", headers=headers, json={
"blob": blob,
"aad": "record-001",
"context": "patient-records"
})
plaintext = r.json()["plaintext"]
AADバインディング、鍵ローテーション、脅威対応アプリケーション動作を含む完全な動作例については、citadel_example.pyを参照してください。
# Status
curl http://localhost:3000/api/status -H "Authorization: Bearer $KEY"
# List keys
curl http://localhost:3000/api/keys -H "Authorization: Bearer $KEY"
# Encrypt
curl -X POST http://localhost:3000/api/keys/$DEK_ID/encrypt \
-H "Authorization: Bearer $KEY" \
-H "Content-Type: application/json" \
-d '{"plaintext":"hello","aad":"test","context":"demo"}'
Root Key
└── Domain Key (per environment / business unit)
└── KEK — Key Encrypting Key (wraps DEKs)
└── DEK — Data Encrypting Key (encrypts application data)
NIST SP 800-57に準拠しています。各階層が侵害時の影響範囲を封じ込めます。KEKが分離されているため、DEKが漏洩しても他のDEKは露出しません。
| Scope | Permissions |
|---|---|
read | 鍵、ステータス、メトリクス、脅威レベルの表示 |
encrypt | データの暗号化と復号 |
manage | 鍵の作成、ローテーション、失効、破棄 |
adminは他のすべてのスコープを含みます。最小権限の原則に従い、監視ダッシュボードにはread、アプリケーションサービスにはread + encrypt、管理ツールにはadminを付与してください。
Citadelはセキュリティイベントを監視し、鍵ポリシーを自動的に調整します:
脅威レベルを引き上げるイベント: 認証失敗、復号失敗、高速なアクセスパターン、手動エスカレーション。スコアは時間とともに減衰します。
ハイブリッド構成: 両方の共有秘密を連結し、HKDFに入力します。X25519とML-KEM-768のいずれかが安全であり続ける限り、セキュリティは維持されます。
version[1] || suite_kem[1] || suite_aead[1] || flags[1] || kem_ct_len[2] ||
x25519_ephemeral_pk[32] || mlkem768_ct[1088] || nonce[12] || aead_ct[variable]
自己記述型、バージョン管理済み、ネゴシエーションなし(ダウングレード攻撃を防止)。完全な仕様はSPEC.mdを参照してください。
subtleクレートによるAPIキー検証でタイミング攻撃を防止Zeroizing<T>でラップし、ドロップ時にゼロ化Citadelは未監査のソフトウェアです。
実装は、確立されたRustクレート(ml-kem、x25519-dalek、aes-gcm、hkdf)を通じてNIST標準化されたプリミティブを使用しています。暗号アルゴリズム自体は実装していません。価値は斬新な数学ではなく、正しい構成にあります。
実施済み:
未実施:
独立したレビューなしに機密データには使用しないでください。 脆弱性の報告についてはSECURITY.mdを参照してください。
34のNIST SP 800-57コントロールに対してマッピング済み: 26件が満たされ、7件が部分的、1件がギャップ。完全なマッピングはCOMPLIANCE_MATRIX.mdを参照してください。
関連フレームワーク: NIST SP 800-57(鍵管理)、CNSA 2.0(PQCタイムライン)、HIPAA(保存データの暗号化)、SOC 2(アクセス制御と監査)。
rust_citadel/
├── citadel-envelope/ # Core hybrid encryption library
│ ├── src/
│ │ ├── envelope.rs # Encrypt/decrypt operations
│ │ ├── kem.rs # X25519 + ML-KEM-768 hybrid KEM
│ │ ├── kdf.rs # HKDF-SHA256 key derivation
│ │ ├── wire.rs # Wire format encode/decode
│ │ ├── aead.rs # AES-256-GCM wrapper
│ │ ├── aad.rs # Additional authenticated data
│ │ ├── error.rs # Uniform error types
│ │ └── sdk.rs # High-level API
│ ├── tests/ # KAT + roundtrip tests
│ └── fuzz/ # Fuzz targets
├── citadel-keystore/ # Key lifecycle management
│ └── src/
│ ├── keystore.rs # Key CRUD + state machine
│ ├── policy.rs # Crypto-period policies
│ ├── threat.rs # Adaptive threat intelligence
│ ├── storage.rs # File-based key storage
│ ├── audit.rs # Integrity-chained audit log
│ └── types.rs # Key types and states
├── citadel-api/ # HTTP server
│ └── src/
│ ├── main.rs # API routes, auth, rate limiting
│ └── dashboard.html # Real-time security dashboard
├── citadel_example.py # Python integration example
├── Backup-Citadel.ps1 # Backup/restore tooling
├── docker-compose.yml # Development deployment
├── docker-compose-production.yml # Production with TLS
├── SPEC.md # Wire format specification
├── THREAT_MODEL.md # Security goals and attacker model
├── COMPLIANCE_MATRIX.md # NIST 800-57 control mapping
└── CITADEL_OVERVIEW.md # Commercial overview
このプロジェクトはデュアルライセンスです:
商用環境で本ソフトウェアを使用する場合、またはAGPLの条件に従いたくない場合は、商用ライセンスを取得する必要があります。
商用条件についてはCOMMERCIAL_LICENSE.mdを参照してください。
AGPLの全文はAGPL-3.0.txtおよびCOPYINGに記載されています。
連絡先: [email protected]
Andre Cordero — [email protected]
| Endpoint | Method | Scope | Description |
|---|
/health | GET | — | ヘルスチェック |
/api/status | GET | read | 脅威レベル、鍵数 |
/api/metrics | GET | read | セキュリティメトリクス |
/api/keys | GET | read | 全鍵の一覧 |
/api/keys | POST | manage | 新しい鍵の生成 |
/api/keys/:id | GET | read | 鍵の詳細の取得 |
/api/keys/:id/activate | POST | manage | 保留中の鍵を有効化 |
/api/keys/:id/rotate | POST | manage | 鍵のローテーション(新バージョン) |
/api/keys/:id/revoke | POST | manage | 鍵を完全に失効 |
/api/keys/:id/destroy | POST | manage | 鍵マテリアルの破棄 |
/api/keys/:id/encrypt | POST | encrypt | データの暗号化 |
/api/decrypt | POST | encrypt | データの復号 |
/api/threat | GET | read | 脅威インテリジェンスの詳細 |
/api/policies | GET | read | アクティブな鍵ポリシー |
/api/auth/whoami | GET | read | 現在のAPIキー情報 |
/api/auth/keys | GET | admin | APIキーの一覧 |
/api/auth/keys | POST | admin | APIキーの作成 |
/api/auth/keys/:id | DELETE | admin | APIキーの失効 |
admin | 上記すべて + APIキーの管理 |
| Level | Trigger | Response |
|---|
| LOW | 通常運用 | 標準の暗号利用期間 |
| GUARDED | 軽微な異常 | わずかに短いローテーション間隔 |
| ELEVATED | 疑わしいパターン | 短縮されたローテーションスケジュール |
| HIGH | アクティブな脅威兆候 | 強制ローテーション、使用量制限の引き下げ |
| CRITICAL | 攻撃を受けている | 最大制限 |
| Component | Algorithm | Standard |
|---|
| 鍵カプセル化(古典) | X25519 ECDH | RFC 7748 |
| 鍵カプセル化(ポスト量子) | ML-KEM-768 | FIPS 203 |
| データ暗号化 | AES-256-GCM | NIST SP 800-38D |
| 鍵導出 | HKDF-SHA256 | NIST SP 800-56C |
| Document | Audience |
|---|
| SPEC.md | ワイヤーフォーマット仕様 |
| THREAT_MODEL.md | セキュリティ目標と前提条件 |
| COMPLIANCE_MATRIX.md | NIST 800-57コンプライアンスマッピング |
| CITADEL_OVERVIEW.md | 商用ポジショニング |
| SECURITY.md | 脆弱性の報告 |
| API_FREEZE.md | API安定性の保証 |
| DEPLOYMENT.md | 本番導入ガイド |
| QUICKSTART.md | はじめに |