アプリケーションがPKCS#11/KSP/etcを使用してHSMを呼び出すとき。 2つの間で実際に何が交換されますか?たとえば、CAがCRLに署名する必要がある場合、CRL全体が実際に署名のためにHSMに送信されますか?
CRLへの署名は、他のデータへの署名に似ており、いくつかの手順が含まれます。
署名するデータを読み取ります。
署名するデータからハッシュを計算します。このハッシュは、初期データ長に関係なく同じ長さであり、データが異なるとハッシュも異なります。
ハッシュを秘密鍵で暗号化します。この操作の結果が実際の署名です。
次に、この署名を署名済みデータに追加して(CRLに追加して、最終的な署名付き証明書を取得し、例に従ってください)、署名済みデータを取得します。
ご覧のとおり、秘密鍵は最後のステップでのみ使用されます。データ全体をHSMに送信するのはリソースの無駄になるため、ハッシュはアプリケーション側で計算され、ハッシュのみがHSMに送信されて署名が取得されます。
PKCS#11 APIの一部である関数を見てください。 CRLを作成すると、C_Sign
関数が必要であり、ハッシュ値が渡されます。ほとんどのPKCS#11トークンはハッシュ機能も提供します。本当に必要な場合は、ソフトウェアではなくトークンで行うこともできますが、これが行われることはほとんどありません。