KMIP 向け DuoKey — 概要
DuoKey は OASIS KMIP サーバーをホストするため、標準準拠クライアント(データベース、ストレージアレイ、仮想化プラットフォーム)は、単一の監査済みエンドポイントを通じて暗号鍵を管理できます。
KMIP とは何か
Key Management Interoperability Protocol(KMIP) は、暗号機能を備えたアプリケーション(データベース、ストレージシステム、バックアップアプライアンス)が、中央の鍵マネージャーとどのように通信するかを定義する OASIS 標準です。KMIP は鍵のライフサイクル全体(作成、取得、有効化、失効、破棄)を標準化するため、単一の鍵マネージャーがカスタム統合を必要とせずに多くの異なる製品にサービスを提供できます。
DuoKey が KMIP を実装する方法
DuoKey Cockpit v2 は KMIP サーバーエンドポイント を実行します。準拠クライアントは TLS 経由でこれに接続し、KMIP 操作を発行します。DuoKey は鍵素材を生成して保護し、エンドポイントポリシーに従って返却します(または暗号化/復号を実行します)。
KMIP サーバーは Cockpit v2(Rust/React)の機能であり、PKI サービスエンドポイントとしてプロビジョニングされます。これは Cockpit v1(.NET/Angular)の構成モデルとは無関係です。
プロトコルサポート
| Capability | Details |
|---|---|
| KMIP バージョン | 2.1、2.0、1.4、1.3、1.2、1.1、1.0 をネゴシエートします。デフォルトで通知されるプロファイルは KMIP 2.1 です。 |
| トランスポート | TLS 上のバイナリ TTLV、および JSON-over-HTTPS プロファイル。 |
| デフォルト TLS ポート | 5696(IANA が割り当てた KMIP ポート)。 |
| エンコーディング | 正規の KMIP 2.x 属性。1.x の TemplateAttribute リクエストは受信時に正規化され、2.0 より前のクライアント向けに送信時に適応されます。 |
サポートされる操作
エンドポイントは次の KMIP 操作をディスパッチします。
| Operation | Purpose |
|---|---|
Create | 新しい管理対象鍵を生成します。 |
Register | クライアントが提供した鍵素材をインポートします。 |
Get | 鍵オブジェクトを取得します。 |
GetAttributes | オブジェクトの属性を読み取ります。 |
GetAttributeList | オブジェクト上の属性名を一覧表示します。 |
Locate | 属性フィルターに一致するオブジェクトを検索します。 |
Activate | 鍵をアクティブ状態に移行します。 |
Revoke | 鍵を失効させます(標準的な無効化の手順)。 |
Destroy | 鍵素材を恒久的に削除します。 |
| NaN | サーバー側の暗号操作。 |
ReKey | 新しい識別子の下で鍵を新しい素材にロールします。 |
Check | オブジェクトの使用制約を検証します。 |
Query | サーバー機能を検出します。 |
DiscoverVersions | KMIP プロトコルバージョンをネゴシエートします。 |
非対称鍵の生成および署名操作 — CreateKeyPair、DeriveKey、Certify、Sign、MAC、および属性変更操作 — はサポートされておらず、OperationNotSupported の結果を返します。エンドポイントポリシーにより、デプロイメントごとに許可される操作をさらに制限できます。
オブジェクトとアルゴリズム
| Item | Support |
|---|---|
| 管理対象オブジェクトタイプ | 共通鍵、公開鍵、秘密鍵、証明書、およびシークレットデータ。 |
| 鍵生成 | 共通鍵素材のみ: AES(128 / 192 / 256 ビット、デフォルト 256)および HMAC(256 ビット以上)。 |
| サーバー側暗号 | Encrypt / Decrypt には AES-256-GCM を使用し、自己完結型の nonce ‖ ciphertext ‖ tag ブロブを返します。 |
DuoKey は 共通鍵 素材(AES、HMAC)を生成して保存します。非対称オブジェクトタイプおよび証明書はオブジェクトとして登録・管理できますが、サーバー自体が RSA または EC 鍵ペアを生成することはありません。
鍵の保護方法
生成された鍵素材は、プラットフォーム暗号鍵の下で AES-256-GCM により 保存時に暗号化 されます。これは vault 資格情報や ID プロバイダーのシークレットに使用されるのと同じエンベロープであり、DuoKey データベースに保存されます。鍵は再起動後も存続し、プロセスメモリ内にのみ存在することはありません。Destroy は保存された素材をハード削除します。
KMIP では、鍵は MPC ではなく、プラットフォーム鍵の下でのエンベロープ暗号化によって保護されます。MPC ベースの鍵保護は、ここで説明する KMIP サーバーバックエンドではなく、他の DuoKey 鍵管理フローに適用されます。
クライアント認証
クライアント認証は オプションの相互 TLS(mTLS) です。提示されたクライアント証明書の CommonName が監査対象のクライアント ID になります。エンドポイントごとのポリシー(allowed_auth_methods、require_client_cert)が、どの方式を受け入れるかを決定します。
| Method | How it works |
|---|---|
| mTLS | クライアントが X.509 証明書を提示します。その CommonName が ID になります。 |
| メッセージ内の資格情報 | リクエストヘッダーに含まれる KMIP のユーザー名/パスワード資格情報。 |
| 匿名 | エンドポイントポリシーが明示的に許可する場合にのみ許可されます。 |
mTLS の ID を信頼するには、リスナーを信頼できるクライアント CA の PEM バンドルに向けます。
# PEM bundle of trusted client-CA certificates
KMIP_CLIENT_CA_BUNDLE=/etc/duokey/kmip/client-ca-bundle.pemクライアント CA バンドルが構成されていない場合、提示されたクライアント証明書は CA 検証なしで受け入れられ、その ID を認可のために信頼してはなりません。本番環境ではリスナーは フェイルクローズ し、バンドルが設定されるまで起動を拒否します。
クライアント互換性
任意の OASIS KMIP 1.x または 2.x クライアントが、ポート 5696 のバイナリ TLS トランスポート経由で接続できます。相互運用性は PyKMIP リファレンスクライアントを使用してエンドツーエンドで検証されています(Query → Create → Activate → Get → Encrypt/Decrypt → Locate → Revoke → Destroy)。
KMIP ベースの暗号化の統合対象には次のものが含まれます。
Percona Server
MongoDB および MySQL の保存データ暗号化。
VMware vSphere
vSphere および vSAN の標準キープロバイダー。
NetApp ONTAP
ストレージ暗号化のための外部鍵マネージャー。
プロビジョニング
KMIP サーバーエンドポイントは、DuoKey Cockpit の PKI → KMIP Server から作成します。ウィザードは、エンドポイント名、キー vault、許可される認証方式、トランスポート(バイナリ TLS または JSON/HTTPS)と TLS ポート、デフォルトのアルゴリズムと鍵サイズ、許可されるオブジェクトタイプと操作、監査設定を収集し、エンドポイントをデプロイして起動します。