500,000ラウンドのSHA-512を使用してユーザーパスワードを暗号化するようにサーバーを構成しました。
問題は、標準のAES-128-CBCで暗号化されたSSH秘密鍵スタックを、同じ(または同様の長さ)のパスワード/パスフレーズを使用した場合、どのようにしてそれをスタックするかです。もちろん、これは人間が入力できるパスフレーズである必要があり、この場合のエントロピーの欠如が(うまくいけば)ここで最も弱いリンクです。私の理解では、キー強化は、パスフレーズがどれほど弱いかに関係なく、パスフレーズを総当たりにするために必要な労力を拡大するということです。
公開鍵は公開されており、秘密鍵の検証に使用できるため、その秘密鍵のセキュリティはパスフレーズに依存することは明らかです(RSA鍵の長さは、それを明らかにする)。チェックはかなり高速になると思うので、ラウンド数を増やし、より強力な暗号スイートを使用して、パスフレーズの総当たりプロセスが遅くなるようにするのが理想的です。
SSH秘密鍵で PKCS#8を使用 を使用すると、パスフレーズのセキュリティをどれだけ追加できますか?
これを潜在的に改善する方法についても疑問に思っています。この暗号化を行う方法はありますか
openssl pkcs8 -topk8 -v2 des3
デフォルトよりもさらに多くのラウンドを使用しますか(それでもssh
で受け入れられます)?また、使用できるより強力なスイートはありますか?私はここではCentos 6.4を扱っています(キックスタートスクリプトが好きなので)。もし私がそれを助けることができるなら、安全なプログラムスイートをいじらないことはおそらく良い考えですが、おそらくより強力な対称暗号スイートが存在するでしょう使用できるPKCS#8?
私が気づいたことの1つは、ここでのPBKDF2は、使用される基になるハッシュを指定していないようです。 リスト を見ると、SHA1よりも優れているようには見えません。
ブルートフォースに必要な計算量を最大化するために、認証を成功させるために許容できる最大0.5秒を最大限に活用する方法を見つけたいと思います。
私が強化を本当に気にかけているのであれば、私は scrypt を検討する必要があると思いますが、そのツールにはネイティブサポートがないため、これは日常のSSH秘密鍵には使用できません管理(ただし、特別なアプリケーションでの使用に適している場合があります)。
編集:興味深い。 CentOSで暗号化した秘密鍵は次のようになります。
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,D3A046CD...
これは、AES-128-CBC(私のMacが作成したもの)よりも必ずしも悪いとは思いません。
新しいOpenSSHclientバージョン(> = 6.5)は、適切な鍵派生関数を使用する新しいOpenSSH固有の秘密鍵形式をサポートしています。現時点では、bcryptのみがkdfname
としてサポートされています(この 仕様書 を参照)。 OpenSSH 7.8 以降、この形式がデフォルトで使用されます。
古いバージョン(<7.8)の場合、-o
オプションをssh-keygen
に渡します。これにより、新しいOpenSSH形式が強制的に使用されます。結果の秘密鍵は次のようになります。
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jYmMAAAAGYmNyeXB0AAAAGAAAABCm1gDucj
atDrjXom9j2Hb8AAAAEAAAAAEAAAEXAAAAB3NzaC1yc2EAAAADAQABAAABAQCquRcOc4bw
...
59VrTpkgqVZYc88GJwFFU+8awxP0qm+ZBHdR/ZlcCHdYt4XmIbfIR8GPtNQQ84Ft7YbMTF
mqCJOcWg==
-----END OPENSSH PRIVATE KEY-----
この投稿 は、-a
オプションでのカスタムのラウンド数の使用など、他の考慮事項に言及しています(ssh-keygen
のマニュアルページも参照してください)。
(反復回数が多い の付いた古いPKCS#8キーがある場合は、まずそれを復号化してから、パスワードを設定して新しい形式に変換します。
# WARNING: /tmp/mykey will contain the unencrypted key.
# If /tmp is a tmpfs, this is ok.
openssl pkcs8 -in ~/.ssh/id_rsa -out /tmp/mykey
ssh-keygen -p -f /tmp/mykey
# validate the key and then move back:
mv /tmp/mykey ~/.ssh/id_rsa