web-dev-qa-db-ja.com

パスフレーズ付きのSSHキーは2FAですか?

これは本当に理論的な質問ですが、パスフレーズ付きのSSHキーを使用してサーバーにログインする場合、これは2要素認証(2FA)と見なすことができますか?

実際、最初の要素と見なすことができるSSH(秘密)キーと、2番目の要素となるパスフレーズが必要です。

ログイン用の単一のパスワードと比較すると、パスフレーズされたSSHキーを持つ2つの「要素」が表示されます。

42
Antonin M.

2番目の要素は、最初の要素とは独立していると定義されます。つまり、要素の1つが危険にさらされていても(そして、危険にさらされていることに気付いていても)、システムは安全なままである必要があります。

たとえば、ドアバッジと指紋は互いに独立しており、ドアバッジまたは指紋を持っているだけでは、アクセスするのに十分ではありません。これは、「多要素認証」の代わりに「多段階認証」と呼ばれることがよくあります。


次に、シナリオを想像してください。強力なパスフレーズで暗号化された秘密鍵があります。これらの2つの要素はありますか?いいえ、秘密鍵はパスフレーズなしでも存在できるためです。したがって、秘密鍵を侵害する攻撃者は、そのパスフレーズを知らなくてもシステムにログインできます。 実際、プライベートキーがパスフレーズで保護されているかどうかは、サーバーで完全に認識されません。

真の多要素認証が必要な場合は、まさにそれを行うSSHモジュールがあります。そうは言っても、強力なパスワードで暗号化された秘密鍵で十分な場合がよくあります。


注:元の質問では、「サーバーにログインするためのパスフレーズを含むSSHキー」について話していますが、これはパスフレーズで暗号化された秘密キーとして解釈されました。

60
MechMK1

いいえ。他の答えはかなり近いですが、重要な要素を見逃しています。

私は他のことを詳細に繰り返すことはしませんが、SSHキーとパスワードが多要素であるためには、「知っているもの」+「所有するもの」でなければならないことを要約します。

私が主張するのは、あなたが効果的に複製するための知識だけを必要とする「あなたが持っているもの」(それで誰がオリジナルでどれがコピーであるかを誰も知ることができない)なら、それは「何か」ではない代わりに「あなたが持っている」「しかしあなたが知っている何か」。

たとえば、自分のパスワードを思い出せず、紙に書いても、「知っている」ということをやめて「持っている」ということにはなりません。それはまだ(覚えにくい場合でも)単なるパスワードであり、誰かがそれを覚えれば、知らないうちにいつでも私になりすますことができます。 SSH秘密鍵と同じです。それは単なるデータであり、データは定義上、「あなたが知っている(そして知っている)ことができる(そして、正確かつ区別が付かないコピーを簡単に作成できる)」ということになります。

「私が持っているもの」の主な特徴は、効果的な「私が持っているもの」の主な特徴は、攻撃者がそれを入手できる唯一の現実的な方法は、私がそれをもう持っていない場合です(見逃していることに気づくはずです)。

もちろん、いくつかの投稿で言及されているように、多くの多くの灰色の領域があります。 CHIPの銀行カードは、本当の意味で機能する複製を作成することが(多大な労力、人、お金なしで)不可能であるため、今日「私が持っているもの」になります。ただし、銀行カードは magstripe によってのみ承認されます。これは、レジ係が25ドルの機器と1ドルの材料でコピーを作成できるもので、もはや効果的ではありません "私が持っているもの」.

また、テクノロジーが進歩するにつれて、定義も変化します。むかしむかし MD4 は暗号ハッシュでした。今日では、それは間違いなくNOTです。これは単なるハッシュであり、単純な チェックサム よりも暗号ハッシュであることに勝るものはありません。

したがって、「SSH秘密鍵+パスフレーズ」は、実際には2つの要素で2要素認証方式に失敗します。

  1. SSH秘密鍵は単なる情報であり、物理的なオブジェクトではありません。そのため、定義としては「知っているもの」であり、「持っているもの」ではありません。
  2. ある認証要素が攻撃者が認証に成功するのを困難にするのにまったく効果がない場合でも、それを認証要素と呼ぶことができますか?サーバーでパスワードの最大長が1文字で、試行回数に制限がない場合でも、認証要素ですか?厳密な理論ではそうかもしれませんが、実際には セキュリティシアター です。

これは、ssh秘密鍵+パスフレーズが悪いことを意味するものではないことに注意してください。これは、プレーンパスワードや保護されていない秘密鍵よりもはるかに優れています。しかし、それは2要素ではありません。

ただし、sshの2要素認証によって提供される追加のセキュリティが必要な場合は、 sshで2要素認証を設定する 、できればさらに秘密鍵をパスフレーズで保護する。

10
Matija Nalis

はい

2FAには、2つの異なる 要因またはカテゴリ 認証が必要です。 (これらは異なるカテゴリでなければなりません。パスワードとPINは2FAとは見なされません。)

Wikipedia は、要素の優れたリストを提供します。

  • 知識の要素:パスワード、PIN、秘密の質問
  • 所持要因:
    • 切断されたトークン(人間が読める形式):Google認証システム
    • 接続されたトークン(機械可読):YubiKey
    • ソフトウェアトークン:X.509証明書、SSH秘密鍵
  • 固有の要因:
    • 生体認証:指紋、音声、虹彩
    • 動作:キーストローク、署名
  • 場所:物理的に安全なネットワーク

パスワードは知識の要素です。 SSHキーは所有要素です。

複製の容易さはnotがSSH鍵を所有要素から除外することに注意してください。物理キーは カメラ、プリンター、ソーダ缶 でコピーできます。彼らはまだ所有要因です。


多要素認証の目的は、複数のタイプの認証の利点を活用して、侵害のリスクを減らすことです。

パスワードは十分に短いため、決して書き込まれることはないため、取得することは困難です。 SSHキーが長いため、推測が困難です。

一緒に、彼らは成功する可能性を低くします。


いくつかの人々は、キーは暗号化されずに使用できるため、もはや2FAではないと主張しています。

それは単にばかげています。

暗号化されていないSSHキーが存在し、その情報を使用して必要なすべてのことを要求できる場合は、作業を保存してサーバーのファイルのコピーを存在させてみませんか?

言う

サーバーのファイルにアクセスするために必要なのは、暗号化されていないSSHキーだけです

言うことと同じです

サーバーのファイルにアクセスするために必要なのは、サーバーのファイルのZipだけです。

確かに....しかし、どうやってそれを手に入れたのですか?

server-enforceable 2FAの使用ではないことは事実です。組織の設定では、2FAを一元的に実施できるようにする必要があることがよくあります。だが

  1. それは問題ではありません。

  2. とにかく、サーバー強制は決してセキュリティシステムの最終的な言葉ではありません。

    1. ドアに物理的なキーとキーパッドのPINが必要な場合、そのドアは誰でもできる限り2FAを「強制」します。しかし、PINをすべてのキーに印刷すると、1FAシステムになります。

    2. 同様に、因子を増やすことができます。物理的な鍵を備えたドアの後ろのパスワードで保護されたラップトップは2FAですが、両方の要素を強制する単一のコンポーネントはありません。部屋からラップトップを取り外してセキュリティを1FAに下げることもできますが、実際にそれを行うまでは2FAシステムがあります。

8
Paul Draper

サービスの観点から:いいえ、パスフレーズで保護されたSSH秘密鍵は多要素認証ではありません。

SSHサーバーは、秘密鍵が暗号化されているかどうかを知る方法がありませんであり、現在のパスフレーズがどのような場合であっても知る方法はありません。サーバーが取得できる最も近いものは、サーバーでキーペアが生成されている場合、その時点でパスフレーズを取得できます。 (これは非常に珍しいことであり、私はこれを行うすべてのシステムのセキュリティに質問します。)秘密鍵がサーバーを離れると、それが主張できる唯一のことは、ある時点で誰かがパスフレーズを使用してキーを復号化します。サーバーは、認証の一部として数秒前に復号化されたかどうか、または秘密鍵が現在クライアントマシンのディスクに完全に暗号化されていないかどうかを知りません。

したがって、秘密鍵をパスフレーズで暗号化することは良い習慣ですが、クライアントとサーバー間の認証ハンドシェイクはそのパスフレーズを使用しないため、パスフレーズは認証の一部ではありません。

秘密鍵が持っているものであるか知っているものであるか秘密鍵をサーバーに直接渡さないため、これはあなたが持っているものであると私は主張します。秘密鍵を持っていることを証明しています:

認証ハンドシェイクは次のようになります。

  1. クライアントは使用するキーを選択し、キーのIDをサーバーに送信します。
  2. サーバーは~/.ssh/authorized_keysから公開鍵を取得し、nonceを生成して、その公開鍵で暗号化します。
  3. クライアントはナンスを秘密鍵で復号化し、MD5は共有セッションでソルトとしてそれをハッシュします。
  4. サーバーが予期したハッシュを取得すると、ユーザーは認証されます。

これは、パスワードを渡すこととは異なるプロセスです。特定の公開鍵で暗号化されたメッセージの復号化を実行できるシステムがあることを証明しているだけでなく、知識も証明しています。

物理的なセキュリティでは、知っていることはチャレンジ/レスポンスで実装されます:警備員が単語を呼び出し、あなたが応答します。 (これにより警備員も認証されます。制服を着ているという理由だけで、その日のパスワードを誰かに教えないでください。)

同様に、物理的なセキュリティでは、持っているものが鍵となります。はい、キーにはコピーしやすく、記憶することさえできる情報が含まれていますが、そのデータが物理的なオブジェクトにカットされない限り、データは役に立ちません。キーを使用すると、知識だけでなく、タンブラーのピンを正しい高さまで持ち上げることができるオブジェクトがあることを証明します。また、秘密鍵のパスフレーズが認証の一部ではないように、タンブラーを回転させるために使用されるツールが意図された鍵、コピー、またはロックピックのセットであるかどうかも、認証の一部ではありません。

7
Ghedipunk

まあ、正しい答えはいくつかありますが、コメントで続いている議論はそれらが十分に明確ではないことを示しているため、次の重要なポイントを強調する余地はまだあると思います。

  • 多要素認証は、検証が要求者に複数の(理想的には独立した)認証要素を要求する認証ポリシーです。

ここでの設定は、ある種の認証プロトコルであり、2つのパーティで使用されます。

  1. A 要求者特定のアイデンティティを主張し、それを証明する必要があります。
  2. A verifier主張された身元を確認し、なりすましを拒否しようとしています。

SSHでは、要求者はクライアントであり、検証者はサーバーです。最も一般的な構成では、サーバーはクライアントの秘密鍵をパスワードで暗号化することを要求しません。つまり、MFAではありませんです。秘密鍵を暗号化するかどうかは、クライアントの裁量によるものです。

1
Luis Casillas

@ MechMK1の答えに加えて、認証メカニズムの「要因」は3つのカテゴリに分類されます-

  1. 知っていること-パスワード、PIN
  2. 持っているもの-クレジットカード、USBドライブ
  3. あなたについての何か-生体認証、顔認識

2FAが必要な場合は、各カテゴリから1つを選択する必要があります。例えば。指紋とパスワード、クレジットカードとプラスPINなど)。同じカテゴリから2つの要素を持つことは、1つだけを持つことと同じです。たとえば、2つのパスワードは2FAとしてカウントされません。

質問に戻ると、SSHキーとパスフレーズも「知っているもの」に属しているため、2FAとしてカウントされません。

0
Ayush Ambastha