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