委任パス検証(DPV)は、デジタル証明書の証明書パス検証作業をクライアントから信頼できるサーバーにオフロードするために使用される暗号化手法です。[ 1 ]このプロセスは、公開鍵基盤(PKI)に依存するさまざまなセキュリティプロトコルに不可欠です。DPVは、このタスク専用のサーバーを活用し、検証結果をクライアントに提供することで、証明書パス検証の効率性を高めることを目的としています。このアプローチは、クライアントが広範な証明書検証を自ら実行するための計算能力を持たない、リソースが限られた環境で特に有用です。 [ 1 ]

証明書パス検証は、PKIにおける重要なプロセスであり、デジタル証明書の真正性と信頼性を保証します。このプロセスはRFC 5280で標準化されており、検証対象の証明書(エンドエンティティ証明書)から信頼できるルート証明機関(CA)までの証明書チェーンを検証します。 [ 2 ]検証プロセスには、いくつかの重要なステップが含まれます。[ 2 ]
これらのチェックがすべて正常に通過した場合、証明書パスは有効であるとみなされ、エンドエンティティ証明書は信頼できます。[ 2 ]
DPV を使用すると、サーバーは、検証ポリシーと呼ばれる一連の定義済みルールに基づいて、パス検証プロセス全体を処理できます。[ 1 ]このポリシーには、複数のトラスト アンカーが含まれる場合があります。トラスト アンカーは、公開鍵、証明機関 (CA) 名、および有効期間によって特徴付けられ、追加の制約を持つこともできます。[ 3 ]自己署名証明書を使用して、トラスト アンカーの公開鍵、発行者名、および有効期間を指定できます。認証ポリシー制約や命名制約など、トラスト アンカーの追加の制約を定義できます。これらの制約は、自己署名証明書の一部にすることもできます。[ 1 ]パス検証を正常に行うには、エンド エンティティ証明書とトラスト アンカーの間に有効な認証パスを確立し、パス内の証明書が期限切れまたは失効していないこと、およびパスのすべての制約が満たされていることを確認する必要があります。[ 1 ]検証ポリシーは、次の 3 つの主要コンポーネントで構成されます。[ 1 ]
RFC 3379では、効果的かつ安全な委任パス検証を保証するためのいくつかの重要な要件が規定されています。
まず、クライアントがDPVサーバーがサポートしていない特定の検証ポリシーを要求した場合、サーバーはエラーを返す必要があります。これにより、クライアントは要求されたポリシーを適用できないことを認識できます。クライアントが検証ポリシーを指定しなかった場合、サーバーはレスポンスでどの検証ポリシーが使用されたかを示す必要があります。この透明性により、クライアントは検証がどのような根拠に基づいて行われたかを理解できます。[ 1 ]
検証ポリシーは複雑になる場合があり、ルート自己署名証明書などのパラメータが含まれることがあります。DPVプロトコルでは、クライアントがリクエストにこれらのポリシー依存パラメータを含めることができる必要があります。ただし、ほとんどのクライアントは、アプリケーションに適した検証ポリシーを参照するか、DPVサーバーのデフォルトの検証ポリシーを受け入れることが想定されます。[ 1 ]
クライアントは、DPVサーバーに対し、現在時刻以外の特定の時刻における証明書の有効性を確認するよう要求することもできます。この場合、サーバーは指定された検証時刻に関連する失効ステータス情報を取得する必要があります。必要な失効ステータス情報を取得できない場合、サーバーは証明書が無効であることを示すステータスを返さなければなりません。また、無効の理由に関する追加情報を提供する場合もあります。[ 1 ]
検証を進めるには、証明書がリクエスト内で直接提供されるか、CA識別名、証明書シリアル番号、証明書ハッシュなどの詳細によって明確に参照される必要があります。これにより、正しい証明書が検証されることが保証されます。[ 1 ]
DPVクライアントは、検証対象となる各証明書に関連する有用な証明書と失効情報を検証サーバーに提供できる必要があります。これには、証明書の現在のステータスを確認するために不可欠なOCSPレスポンス、CRL、およびDelta CRLが含まれます。[ 1 ]
DPVサーバーは、検証が必要な証明書にアクセスできる必要があります。リクエストに証明書が含まれていない場合、サーバーは証明書を取得し、クライアントが提供した参照と一致することを検証する必要があります。レスポンスには、特にCA鍵の侵害が関与する場合には、サーバーは証明書または証明書への明確な参照のいずれかを含める必要があります。[ 1 ]
DPVサーバーからの応答は、次のいずれかのステータスを示す必要があります。[ 1 ]
証明書が有効でない場合、サーバーはその理由も提供する必要があります。一般的な理由としては、証明書パスを構築できない、構築したパスが検証アルゴリズムに失敗した、証明書が要求された時点で有効でなかった(有効期限開始前や一時停止中など)などが挙げられます。[ 1 ]
さらに、DPVプロトコルは、クライアントがサーバーに応答に追加情報を含めるよう要求できるようにする必要があります。この追加情報は、DPVサーバーを信頼していない証明書利用者が、証明書の検証が正しく行われたことを確信するのに役立ちます。DPV応答はDPV要求にバインドされている必要があり、これは応答に要求の一方向ハッシュを含めることで実現できます。このバインドにより、応答の構築においてすべての要求パラメータが考慮されることが保証されます。[ 1 ]
クライアントがDPVサーバーを信頼していることを確認するには、応答を認証する必要があります。クライアントが証明書の検証が正しく処理されたことを第三者に証明するには、エラーを報告する場合を除き、DPV応答にデジタル署名が必要です。DPVサーバーの証明書はサーバーを認証する必要があり、これにより検証プロセスに信頼性とセキュリティの新たなレイヤーが追加されます。[ 1 ]

特定のネットワーク環境、特にファイアウォールが設置されている環境では、DPVサーバーが検証要求を処理するために必要な情報をすべて取得することが困難になる場合があります。この問題に対処するために、DPVサーバーを他のDPVサーバーのサービスを活用するように構成することができます。このようなシナリオでは、クライアントはプライマリDPVサーバーが要求を処理するために追加のサーバーを利用していることに気づきません。基本的に、プライマリDPVサーバーは別のDPVサーバーのクライアントとして機能し、より包括的な検証プロセスを促進します。エンドクライアントとは異なり、DPVサーバーは通常、より大規模なコンピューティングリソースとメモリリソースを備えているため、リレー、リダイレクト、またはマルチキャストメカニズムを利用できます。[ 1 ]
これらの操作をサポートするために設計されたプロトコルには、DPVサーバー間のリレー、リダイレクト、またはマルチキャストを容易にするためのオプションフィールドや拡張機能が含まれる場合があります。ただし、DPVクライアントがこれらの機能をサポートすることは想定されていません。プロトコルがこれらの機能を組み込む場合、これらの高度な機能をサポートしていないDPVクライアントおよびサーバーとの互換性を確保し、基本的なプロトコル要件を遵守するためのメカニズムも提供する必要があります。[ 1 ]
DPVプロトコルには、リプレイ攻撃を防ぐためのメカニズムが組み込まれている必要があり、悪意のあるエンティティが検証要求を再利用して不正アクセスを取得できないようにする必要があります。[ 1 ]重要なのは、このリプレイ防止はクライアントとサーバー間の同期されたクロックに依存してはならないことです。クロックが正確に調整されていない場合、脆弱性が発生する可能性があります。[ 4 ]
指定されたポリシーに従って証明書が正常に検証された場合、DPVサーバーはクライアントからの要求に応じてこの情報を応答に含める必要があります。ただし、証明書が無効であると判明した場合、またはサーバーがその有効性を判断できない場合、サーバーは機密情報を含む可能性のある情報の不必要な開示を避けるため、この情報を省略する場合があります。[ 1 ]
DPVサーバーが使用する失効ステータス情報は、クライアントのリクエストで指定された検証時刻に関係します。この検証時刻は、証明書の秘密鍵が文書またはトランザクションに署名するために実際に使用された時刻と異なる場合があります。[ 1 ]そのため、DPVクライアントは、いくつかの遅延を考慮して検証時刻を調整する必要があります。[ 1 ]
これらの要素を考慮することで、DPVプロトコルは失効ステータス情報が証明書の現在の有効性を正確に反映していることを確認し、検証プロセスの全体的なセキュリティと信頼性を高めます。[ 1 ]