どちらも公開鍵と秘密鍵を必要とする暗号化アルゴリズムのようです。クライアントサーバーアプリケーションで暗号化を提供するために、一方を選択するのはなぜですか?
RSA
RSA暗号化と復号化は交換可能です
したがって、デジタル署名スキームとして直接使用できます
RSAスキームを指定{(e、R)、(d、p、q)}
メッセージMに署名するには、次を計算します。
S = M乗d(mod R)
署名を検証するには、次を計算します。
M = S電力e(mod R)= M電力e.d(mod R)= M(mod R)
RSAは暗号化とデジタル署名の両方に使用できますが、 指数の使用順序を逆にするだけです。署名を作成するための秘密指数(d)、署名を検証するための公開指数(e)。それ以外はすべて同じです。
DSA(デジタル署名アルゴリズム)
DSAはElGamalのバリアントであり、Schnorrアルゴリズムは320ビットの署名を作成しますが、512〜1024ビットのセキュリティでは、離散対数の計算の難しさもまた広く受け入れられています
DSAキー生成
最初に共有されたグローバル公開キー値(p、q、g)が選択されます。
大きな素数p = 2乗Lを選択
ここで、L = 512〜1024ビットで、64の倍数です。
qを選択します。p-1の160ビット素因数
g = h power(p-1)/ qを選択します
任意のh1
各ユーザーは秘密鍵を選択し、公開鍵を計算します。
x compute y = g power x(mod p)を選択します
DSAキーの生成は、エルガマルよりも関連していますが、やや複雑です。主に、計算を高速化し、結果の署名のサイズを小さくするために使用されるセカンダリ160ビットモジュラスqの使用が原因です。
DSA署名の作成と検証
メッセージMに署名する
ランダム署名キーkを生成し、k計算します
r =(g power k(mod p))(mod q)
s = k-1.SHA(M)+ x.r(mod q)
メッセージとともに署名(r、s)を送信
署名を検証するには、次を計算します。
w = s-1(mod q)
u1 =(SHA(M).w)(mod q)
u2 = r.w(mod q)
v =(g power u1.y power u2(mod p))(mod q)
v = rの場合、署名が検証されます
署名の作成は、メッセージごとの一時署名キーkを使用するElGamalに似ていますが、最初にmod pを計算し、次にqを修正して結果のサイズを小さくします。ハッシュ関数SHAの使用はここでは明示的であることに注意してください。検証は、2つの計算を比較することでも構成されます。これもEl Gamalよりも少し複雑ですが、関連しています。
ほぼすべての計算がmod qであるため、はるかに高速であることに注意してください。
ただし、RSAとは異なり、DSAはデジタル署名にのみ使用できます
DSAセキュリティ
サブリミナルチャネルの存在は、DSAだけでなく、多くのスキーム(乱数を選択する必要があるスキーム)に存在します。優れたアルゴリズムだけでなく、「システムセキュリティ」の必要性を強調しています。
以下のAVAの答え を確認してください。
私の古い答えは間違っているようです
ところで、DSAで暗号化することはできず、署名のみです。それらは数学的に(ほぼ)同等ですが、デジタル署名スキームとしてのみDSAを暗号化スキームとして実際に使用することはできません。
man ssh-keygen
を参照すると、DSAキーの長さは、NISTのFIPS 186-2への準拠を維持するために、正確に1024ビットに制限されます。それでも、より長いDSAキーが理論的には可能です。 FIPS 186-3は明示的に許可します。さらに、1024ビット長のRSAキーまたはDSAキーではセキュリティが保証されなくなりました。
結論として、2048ビットのRSAキーが現在最良の選択です。
安全なSSH接続を確立するには、安全な暗号化キーペアテクノロジを選択するよりも多くが必要です。エドワード・スノーデンのNSAの啓示を考慮して、以前は十分であると思われていたものよりもさらに警戒する必要があります。
1つの例を挙げると、安全な鍵交換アルゴリズムを使用することも同様に重要です。以下に、現在の SSH強化のベストプラクティス の概要を示します。
そして、上記のニースの答えに加えて。
RSAは、Ron R ivest、Adi S hamirおよびLeonard A dlemanの略です。