最高の公開と秘密Keygenのアルゴリズム–となぜ

重力は、この記事を後援しました.

Virag Mody
Viragは、Ethereumアプリケーションのソフトウェアコード監査会社を共同設立した後、2020年1月にGravitationalに入社しました。 彼はトレンド技術について学び続け、高品質の書かれたビデオコンテンツを制作しています。

秘密鍵を放置するよりも悪いことは何ですか? ブルート強制できる公開鍵を持っています。

“secure shell”の”secure”は、ハッシュ、対称暗号化、非対称暗号化の組み合わせから来ています。 一緒に、SSHは暗号化プリミティブを使用してクライアントとサーバーを安全に接続します。 創業以来25年間で、ムーアの法則に従った計算能力と速度は、ますます複雑な低レベルのアルゴリズムを必要としてきました。2020年現在、PKIの世界で最も広く採用されている非対称暗号アルゴリズムは、RSA、DSA、ECDSA、およびEdDSAです。 だから、どちらが最高ですか?

では、どちらを使用するのですか?

適切なアルゴリズムを選択することは、いくつかの基準に依存します:

  • 実装:専門家がそれを処理することはできますか、それともロールする必要がありますか?
  • 互換性:メソッドをサポートしていないSSHクライアントはありますか?
  • パフォーマンス:十分に安全な鍵を生成するのにどれくらいの時間がかかりますか?
  • セキュリティ:公開鍵は秘密鍵から派生できますか? (暗号化を破るための量子コンピューティングの使用は、この記事では説明されていません。)

RSA

実装 RSAライブラリは、詳細なライブラリ

(JS、Python、Go、Rust、C)を含むすべての主要な言語で見つけることができます。

互換性 SHA-1(OpenSSH)または2048ビット未満の公開鍵の使用はサポートされていない可能性があります。
パフォーマンス 大きなキーを生成するには、より多くの時間が必要です。
セキュリティ 二次ふるいや一般数体ふるいのような特殊なアルゴリズムは、特定の性質を持つ整数を因数分解するために存在します。

時間はRSAの最大の同盟国と最大の敵となっています。 1977年に最初に公開されたRSAは、すべてのSSHクライアントと言語で最も幅広くサポートされており、信頼性の高い鍵生成方法として真に時の試練に立 その後、数十年にわたってムーアの法則の対象となり、キービット長のサイズが大きくなりました。 NISTの標準によれば、128ビットのセキュリティを実現するには、3072ビットの長さの鍵が必要ですが、他のアルゴリズムではより小さな鍵を使用します。 ビットセキュリティは、キーをブルートフォースするために必要な試行の数を測定します。 128ビットセキュリティとは、2128回の試行が中断されることを意味します。

実装 DSAは1994年にFIPS-184によって採用されました。 RSAと同様に、主要な暗号ライブラリで十分な表現をしています。
互換性 DsaはPuTTYベースのクライアントをサポートしていますが、OpenSSH7.0はデフォルトでDSAを無効にします。
パフォーマンス 推奨されるビット長はRSAと同じですが、同等のセキュリティ強度を達成するために鍵生成時間が大幅に改善されました。
セキュリティ DSAでは、ランダムに生成された予測不可能で秘密の値を使用する必要があります。

DSAをRSAと異なるものにするのは、DSAが別のアルゴリズムを使用することです。 これは、方程式、要素およびステップの異なるセットを使用して、離散対数問題として知られている全く異なる問題を解決します。

このアルゴリズムには、ランダムに生成された数mが使用され、秘密鍵kとともにメッセージに署名する際に使用されます。 値misは、多くの暗号プロトコルに含まれる一意の値であるnonceであることを意味していました。 しかし、予測不可能性と秘密性の追加条件は、ノンスをキーに似たものにし、したがって非常に重要にします。

Sponsor Note

sponsor logo

Gravitationalは、最小限の労力であらゆるインフラストラクチャにわたってクラウドネイティブアプリケーションを配信、アクセス、管理するOSSを提供しています。 Teleportは、SSHとKubernetesを介してサーバーインフラストラクチャへの特権アクセスを管理するためのセキュリティゲートウェイです。 でそれらを試してみてくださいgravitational.com…..

マシン内で真のランダム性を確保することは困難であるだけでなく、不適切な実装は暗号化を破る可能性があります。 例えば:

  1. AndroidのJava SecureRandomクラスは、衝突するR値を作成することが知られていました。 言い換えれば、クラスはいくつかのランダムに生成された数を再利用しました。 これは、彼らの秘密鍵を盗まれたことに異なるAndroidベースのビットコイン財布の数を公開しました。 ノンスmの要件は、同じノンス値を持つ任意の二つのインスタンスがリバースエンジニアリングされ、トランザクションの署名に使用される秘密鍵
  2. これをさらに一歩進めて、Fail0verflowはSony Playstation3のファームウェアアップデートに署名するために使用される秘密鍵を発見しました。 言い換えれば、プログラマは自分のコードを書いて、公開された秘密鍵で署名し、PS3で実行することができます。 結局のところ、ソニーは各メッセージに署名するために同じ乱数を使用していました。

ECDSAとEdDSA

上記の2つの例は完全に誠実ではありません。 ソニーとビットコインプロトコルの両方がECDSAを採用しており、DSAは適切ではありません。 ECDSAはdsaの楕円曲線実装です。 機能的には、RSAとDSAが128ビットのセキュリティを提供するために3072ビットのキー長を必要とする場合、ECDSAは256ビットのキーだけで同じことを達成できます。 ただし、ECDSAはdsaと同じレベルのランダム性に依存しているため、唯一のゲインはセキュリティではなく速度と長さです。

楕円曲線の所望の速度と望ましくないセキュリティ上のリスクに対応して、別のクラスの曲線がいくつかの悪評を得ています。 EdDSAはdsa/ECDSAと同じ離散対数問題を解決しますが、Edwards曲線と呼ばれる楕円曲線の別のファミリを使用します(EdDSAはねじれたEdwards曲線を使用します)。 ECDSA上の速度のわずかな利点を提供している間、人気は保証の改善から来る。 Nonce値の乱数に依存するのではなく、EdDSAはnonceをハッシュとして決定的に生成し、衝突に強いものにします。

一歩後退すると、楕円曲線を使用しても、ある程度のセキュリティが自動的に保証されるわけではありません。 すべての曲線が同じではありません。 唯一のいくつかの曲線は、厳格なテストを過ぎてそれを作っています。 幸いなことに、PKI業界は徐々にCurve25519を採用するようになりました—特にEdDSAのために。 公開鍵署名アルゴリズムEd25519を作成することをまとめます。

実装 EdDSAはかなり新しいものです。 Crypto++とcryptlibは現在EdDSAをサポートしていません。
互換性 新しいクライアントとの互換性、Ed25519はEdward曲線の中で最大の採用を見てきました;NISTはまた、Sp800-186の最近のドラフトでEd448を提案しました。
パフォーマンス Ed25519は、すべてのメトリックで最速の実行アルゴリズムです。 ECDSAと同様に、公開鍵は目的のビットセキュリティの2倍の長さです。
セキュリティ EdDSAは、キーの長さと比較して最高のセキュリティレベルを提供します。 また、ECDSAで見つかった不安を改善します。

基本的に、RSAまたはEdDSA

それがそれに来るとき、選択はRSA2048/4096とEd25519の間であり、トレードオフはパフォーマンスと互換性の間です。 RSAはSSHクライアント間で普遍的にサポートされていますが、EdDSAははるかに高速に実行され、大幅に小さいキーで同じレベルのセキュリティを提供します。 Peter Ruppelは答えを簡潔に言います:

“これに対する短い答えは次のとおりです:鍵の強さが近い将来に十分である限り、それは本当に重要ではありません。 ここでは、SSHセッション内の認証のための署名を検討しているためです。 署名の暗号強度は、現在の最先端の攻撃に耐える必要があります。 ECDSA/DSAを使用しないでください!

特徴画像を経由して。

新しいスタックは、この記事に記載されている以下の企業の投資家であるInsight Partnersの完全子会社です。

Leave a Reply