デジタル署名アルゴリズム(DSA)は、公開鍵暗号方式であり、モジュラーべき乗と離散対数問題という数学的概念に基づいた、デジタル署名のための連邦情報処理標準です。デジタル署名システムでは、秘密鍵と公開鍵からなる鍵ペアが用いられます。このシステムでは、公開鍵を宣言した署名主体は秘密鍵を用いて署名を生成でき、検証者は宣言された公開鍵を用いて署名が正しく検証されれば、その署名元を証明できます。DSAは、シュノール署名方式とエルガマル署名方式の派生形です。[ 1 ]: 486
米国国立標準技術研究所(NIST)は、1991年にデジタル署名標準(DSS)で使用するためにDSAを提案し、1994年にFIPS 186として採用しました。[ 2 ]初期仕様に対して5回の改訂版がリリースされています。しかし、最新の標準では、DSA署名生成に対するNISTの承認が削除されました。[ 3 ]
DSAは公開鍵暗号システムの枠組みで動作し、モジュラーべき乗の代数的性質と、計算上困難とされる離散対数問題に基づいています。このアルゴリズムは、公開鍵と秘密鍵からなる鍵ペアを使用します。秘密鍵はメッセージのデジタル署名を生成するために使用され、その署名は署名者の対応する公開鍵を使用して検証できます。デジタル署名は、メッセージの認証(受信者はメッセージの発信元を検証できる)、完全性(受信者は署名後にメッセージが変更されていないことを検証できる)、および否認防止(送信者はメッセージに署名していないと偽って主張できない)を提供します。
1982年、米国政府は公開鍵署名標準の提案を募集した。1991年8月、米国国立標準技術研究所(NIST)は、デジタル署名標準(DSS)で使用するためにDSAを提案した。当初は、特にRSA暗号システムに基づいたデジタル署名ソフトウェアの開発に既に投資していたソフトウェア企業から、大きな批判があった。 [ 1 ] : 484それにもかかわらず、NIST は 1994 年に DSA を連邦標準 (FIPS 186) として採用しました。最初の仕様の 5 つの改訂版がリリースされています。1998 年に FIPS 186-1、[ 4 ] 2000 年に FIPS 186-2 、 [ 5 ] 2009 年にFIPS 186-3、 [ 6 ] 2013 年に FIPS 186-4、[ 3 ]および 2023 年に FIPS 186-5です。 [ 7 ]標準 FIPS 186-5 は DSA による署名を禁止していますが、標準の実装日以前に文書として生成された署名の検証は許可しています。これはEdDSAなどの新しい署名方式に置き換えられる予定です。[ 8 ]
DSAは、1991年7月26日に出願され、現在は失効している米国特許第5,231,668号でカバーされており、元NSA職員のDavid W. Kravitz氏[ 9 ]に帰属しています。この特許は「商務長官が代表するアメリカ合衆国、ワシントンDC」に付与され、NISTはこの特許を世界中で無償で公開しています[ 10 ] 。Claus P. Schnorr氏は、自身の米国特許第4,995,082号(これも現在は失効)がDSAをカバーしていると主張していますが、この主張は争われています[ 11 ] 。
1993年、デイブ・バニサーはFOIAの請求を通じて、DSAアルゴリズムはNISTではなくNSAによって設計されたものであるという確認を得ることに成功した。[ 12 ]
2023年2月、NISTはFIPS 186-5をリリースし、新しい署名の生成にはDSAの使用を非推奨としたが、既存の署名の検証には使用を許可した。[ 3 ]
OpenSSHはDSAが2025年に削除されることを発表しました。バージョン10.0ではサポートが完全に廃止されました。[ 13 ] [ 14 ]
DSAアルゴリズムは、鍵生成(鍵ペアを作成する)、鍵配布、署名、署名検証の4つの操作から構成されます。
Key generation has two phases. The first phase is a choice of algorithm parameters which may be shared between different users of the system, while the second phase computes a single key pair for one user.
The algorithm parameters are (, , ). These may be shared between different users of the system.
Given a set of parameters, the second phase computes the key pair for a single user:
is the private key and is the public key.
The signer should publish the public key . That is, they should send the key to the receiver via a reliable, but not necessarily secret, mechanism. The signer should keep the private key secret.
A message is signed as follows:
The signature is
The calculation of and amounts to creating a new per-message key. The modular exponentiation in computing is the most computationally expensive part of the signing operation, but it may be computed before the message is known. Calculating the modular inverse is the second most expensive part, and it may also be computed before the message is known. It may be computed using the extended Euclidean algorithm or using Fermat's little theorem as .
One can verify that a signature is a valid signature for a message as follows:
The signature scheme is correct in the sense that the verifier will always accept genuine signatures. This can be shown as follows:
First, since , it follows that by Fermat's little theorem. Since and 素数です、注文が必要です 。
署名者は計算します
したがって
以来順序がある我々は持っています
最後に、DSAの正しさは以下から導かれる。
DSAでは、ランダム署名値のエントロピー、秘密性、および一意性が向上します。は非常に重要です。これら 3 つの要件のいずれか 1 つでも違反すると、攻撃者に秘密鍵全体が漏洩する可能性があります。[ 17 ]同じ値を 2 回使用する (たとえ保持しながらでも)秘密情報)、予測可能な値を使用する、または数ビットでも漏洩する複数の署名のそれぞれにおいて、秘密鍵を明らかにするのに十分である。[ 18 ]
この問題はDSAと楕円曲線デジタル署名アルゴリズム(ECDSA )の両方に影響を及ぼします。2010年12月、 fail0verflowグループは、ソニーがPlayStation 3ゲーム機のソフトウェア署名に使用していたECDSA秘密鍵の復元を発表しました。この攻撃は、ソニーが新しい乱数を生成できなかったために可能になりました。署名ごとに。[ 19 ]
この問題は、RFC 6979で説明されているように、秘密鍵とメッセージハッシュから決定論的に。これにより、 それぞれ異なります秘密鍵を知らない攻撃者にとっては予測不可能。
さらに、DSAおよびECDSAの悪意のある実装は、次のような場合に作成できます。署名を介して情報を潜在的に漏洩させるために選択されます。たとえば、無害に見える署名のみをリリースする完璧なオフラインデバイスからオフラインの秘密鍵が漏洩する可能性があります。[ 20 ]
以下は、DSAをサポートする暗号ライブラリの例です(すべてを網羅しているわけではありません)。
{{cite web}}: CS1 maint: bot: 元の URL の状態が不明です (リンク)