私はopenssl speed
を実行し、使用可能な最長のDSA鍵サイズ(2048ビット)をCPUで出力しました。
sign verify sign/s verify/s
rsa 2048 bits 0.029185s 0.000799s 34.3 1252.3
dsa 2048 bits 0.007979s 0.009523s 125.3 105.0
正直に言うと、RSAを使用するための引数としてキー検証の時間を与えるこれら2つのアルゴリズムの使用を比較することがよくあるため、キーの検証に長い時間がかかると予想していました。エンドユーザーはより頻繁にそれを確認します。
何かが欠落している必要があります。キーはほんの一瞬で検証されるため、電子メールを読んでいるときに1人のユーザーが1日に2回だけキーを検証するだけなら、RSAの方が優れているとは言えません。またはプログラムをダウンロードします。
検証速度が重要である、または他に何か不足している理由はありますか?
いいえ、何も不足していません。デスクトップとラップトップ用の現在のプロセッサーはとんでもないほど高速です。 OpenSSLは、そのほとんどを実現できるネイティブアプリケーションです。
一般に、ラップトップのCPU速度はそれほど問題ではありません。もちろん組み込みデバイスでは問題になる可能性があります。または高レベルの言語で。または、レイテンシが非常に重要な場合(たとえば、多くのTLS接続の認証)。通常、1つのチャレンジ/レスポンスを検証する必要はなく、証明書のチェーンも検証する必要があることに注意してください。したがって、検証速度が突然再び重要になる理由はたくさんあります。
一般に、最初にセキュリティに焦点を当て、後で最適化を実行する方がはるかに優れています。優れた柔軟な設計があれば、あらゆる署名生成アルゴリズムが可能になります。ランタイムシステムの知識がなくても、2048ビットキーにDSA 速度の問題のためを使用しないように言われたら、その経験レベルに真剣に質問します。
Java new
実装のメソッドでtoString
を使用しないように指示するマネージャーのようなものです。アプリケーションが遅くなる可能性があるためです。
2048ビットのキーは、高度なセキュリティを必要とするアプリケーションでは快適に使用できないほど小さくなり始めています。たとえば、3Kiキーを使用すると、パフォーマンスwillが低下します(ただし、RSA署名の生成を使用するアルゴリズムが最も影響を受けます)。
もちろんDSAよりもRSAを選択する他の理由 があるかもしれません。 RSAを使用すると、これらの厄介なドメインパラメータとサブキーのサイズについて知る必要もありません。 RSAは、DSAやECDSAと比較して、理解と使用がかなり簡単です。その意味で、RSAを使用すべきではない理由を自問することができます。
正直なところ、鍵の検証にはもっと長い時間が必要でした
1:
クライアントがあなたであり、サーバーがこのウェブサイトであるとしましょう:
このWebサイトを使用できるようにするための最終応答を取得する前に必要なプロセスは、TLSハンドシェイクプロトコル(ここで[〜#〜] rsa [〜#〜]、[〜#〜] dsa [〜#〜]、AES ...は展開できます)単純化は次のようなものです:
ここへのアクセスは、ステップ9が満たされた後にのみ許可されることを知っているので、鍵検証プロセスがごく短時間で発生したとは思わないほど幸運であると想像できます。
2:
OpenSSLの作成者は、opensslバイナリに直接ベンチマークスイートを開発し、speed
コマンドを介して使用できるようにしました。 manual をチェックすると、その説明が表示されます。
このコマンドは、暗号化アルゴリズムのパフォーマンスをテストするために使用されます。
特定の時間に実行できる操作の数(1秒あたりに実行できるバイト数)をテストしますが、得られる出力は コマンドが実行されているハードウェアに完全に依存します です。
私はこれがあなたが少し混乱していることを知らせるために述べました:openssl速度を使用してテストするRSAとDSAのパフォーマンスはそれらのセキュリティを反映していないか、または私があなたに説明した理由でどちらがどちらが優れているかを必ずしも反映していません。
これはあなたの質問に完全に答えると思います。ここで、これら2つのアルゴリズムの比較に関心がある場合は、この質問の承認済みの回答を読むことができます。 RSAとSSH認証キーのDSA