デジタル署名プリミティブを使用すると、データが改ざんされていないことを確認できます。署名されたデータの真正性と完全性は確認できますが、秘匿性を実現するものではありません。デジタル署名は非対称であり、鍵ペア(公開鍵と秘密鍵)を使用します。
デジタル署名プリミティブには次のプロパティがあります。
- 真正性: 秘密鍵がない場合、
PublicKeyVerify.Verify(signature, message)によって検証される署名は作成できません。 - 非対称: 署名を作成するときと、署名を確認するときでは、異なる鍵が使用されます。したがって、公開鍵を配布することができ、署名を自分で作成できないパーティーに向けた署名をそのパーティーが検証できます。
非対称性が必要ない場合は、代わりに、よりシンプルで効率的な MAC プリミティブの使用を検討してください。
デジタル署名の機能は、Tink では次の 2 つのプリミティブのペアとして表されます。
- データの署名用の PublicKeySign
- 署名を検証するための PublicKeyVerify
キーの種類を選択する
ほとんどのユースケースでは ML_DSA_65 または ECDSA_P256 を使用することをおすすめしますが、さまざまなオプションがあります。一般に、次のことが当てはまります。
- ML-DSA-65 は量子安全です。現在、積極的に実装を進めており、利用可能なプログラミング言語では推奨されています。
次の非ポスト量子アルゴリズムについては、近い将来に鍵タイプを変更する必要が生じる可能性があります。
- ECDSA_P256 は最も広く使用されているオプションであり、妥当なデフォルトです。ただし、ECDSA 署名は改ざん可能です。
- ED25519 は決定論的署名を作成し、ECDSA_P256 よりも優れたパフォーマンスを提供します。
- RSA_SSA_PKCS1_3072_SHA256_F4 は決定論的署名を作成し、最高の検証パフォーマンスを提供します(ただし、署名は ECDSA_P256 や ED25519 よりもはるかに遅くなります)。
最小限のセキュリティ保証
- 署名対象のデータは任意の長さにできます
- 楕円曲線ベースのスキームに対する適応的選択メッセージ攻撃に対する 128 ビットのセキュリティ レベル
- RSA ベースのスキームに対する適応的選択メッセージ攻撃に対する 112 ビットのセキュリティ レベル(2,048 ビットの鍵を許可)
延性
署名スキームは、攻撃者がすでに署名されたメッセージに対して別の有効な署名を作成できる場合、可鍛性があります。ほとんどのシナリオでは問題になりませんが、有効なシグネチャが一意であることをプログラマーが暗黙的に想定している場合があり、予期しない結果につながる可能性があります。
使用例
データにデジタル署名するをご覧ください。