デジタル署名を使用すると、データが改ざんされていないことを確認できます。署名されたデータの真正性と完全性は提供されますが、秘匿性は提供されません。非対称であり、鍵ペア(公開鍵と秘密鍵)を使用します。
署名には次の特性があります。
- 真正性: 秘密鍵がない場合、
PublicKeyVerify.Verify(signature, message)
によって検証される署名は作成できません。 - 非対称: 署名を作成するときと、署名を確認するときでは、異なる鍵が使用されます。これにより、公開鍵を配布して、署名を自分で作成できないパーティーに向けた署名を検証できます。
非対称性が必要ない場合は、よりシンプルで効率的な MAC の使用を検討してください。
デジタル署名の機能は、Tink において次のプリミティブのペアとして表されます。
- PublicKeySign: データに署名します
- 署名を検証する PublicKeyVerify
キータイプの選択
ほとんどのユースケースでは ECDSA_P256 を使用することをおすすめしますが、さまざまなオプションがあります。一般的には、次のことが当てはまります。
- ECDSA_P256 は最も広く使用されているオプションであり、妥当なデフォルトです。ただし、ECDSA 署名は悪意のある可能性があります。
- ED25519 は決定論的な署名を作成し、ECDSA_P256 よりも優れたパフォーマンスを提供します。
- RSA_SSA_PKCS1_3072_SHA256_F4 は確定的な署名を作成し、最適な検証パフォーマンスを提供します(ただし、署名は ECDSA_P256 や ED25519 よりもはるかに遅くなります)。
最小限のセキュリティ保証
- 署名するデータの長さは任意にできます
- 楕円曲線ベースのスキームでの適応型選択メッセージ攻撃に対する 128 ビット セキュリティ レベル
- RSA ベースのスキームに対する適応型選択メッセージ攻撃に対する 112 ビット セキュリティ レベル(2,048 ビット鍵を許可)
使用例
データにデジタル署名を行いたいをご覧ください。
適応性
攻撃者がすでに署名済みのメッセージに対して別の有効な署名を作成できる場合、署名スキームは順応可能です。ほとんどのシナリオでこれは問題になりませんが、プログラマーが有効な署名は一意であると暗黙的に決めてしまい、予期しない結果が生じる可能性があります。