web-dev-qa-db-ja.com

FIDO U2Fトークンの安全性

GoogleとYubicoは、FIDO U2F仕様に準拠した暗号化セキュリティトークンの提供を発表しました。これは別の2FAオプションですか、またはSecureIDやTOTPなどのソリューションよりも大幅に優れていますか?

具体的には:

  • U2FはOTPと基本的にどのように異なりますか?
  • U2Fは、OTPシステムと比較して、フィッシング攻撃の実現可能性にどのように影響しますか?
  • U2Fに対する非インタラクティブな攻撃(ブルートフォースなど)はどの程度実行可能ですか?
  • 複数の独立したサービスで単一のU2Fトークンを安全に使用できますか?
  • U2Fは他の商用製品とどのように比較できますか?より良い解決策はありますか?
126
tylerl

私が得た答えは良いものでしたが、システムがなぜ存在するのかを具体的に説明するために、もう少し深さを提供したいと思いました。

免責事項:今はGoogleで働いていますが、何も知りませんでしたこの回答が書かれた時点のこのプロジェクト。ここで報告されたものはすべて公共の情報源から収集されました。この投稿は私自身の意見および観察および解説であり、Googleの意見、見解、または意図を表すものではありません。

私はこれをかなり長い間使用し、いじくり回してきたことを指摘する価値はありますが、ソーシャルエンジニアリングとアカウントの乗っ取りに多くのことを扱ってきた人物として、私は何に驚いたのですか?ここで達成されました。

何か新しいものが必要だった理由

これについて考えてください。Googleはずっと前に2要素認証を導入しました。これはセキュリティを重視する会社であり、彼らは一流です。そして、彼らはすでに利用可能な最高のテクノロジーを使用していましたが、U2Fが従来の2要素より上に提供する追加のセキュリティは非常に重要であるため、会社の時間に見合う価値がありました。そして、彼ら自身が販売していない交換システムを設計、開発、展開、サポートするためのお金。はい、それは彼らがこの道を行くことは非常に社会的に意識した動きですが、それはコミュニティについてだけではありません。彼ら自身も、U2Fだけが提供するセキュリティを必要としているため、Googleもそれを行いました。多くの人々が最も貴重な情報でグーグルを信頼し、危険な政治的環境の一部の人々はグーグルを彼らの生活でさえ信頼しています。 Googleは、その信頼を実現できるようにセキュリティを必要としています。

それはフィッシングに帰着します。フィッシングは大きな問題です。それは非常に一般的で、超効果的です。強化されたターゲットに対する攻撃の場合、フィッシングなどの攻撃は攻撃者にとって最善の策であり、彼らはそれを知っています。そして更に重要なことに:

フィッシング対策は笑えます。二要素認証がありますが、実装はほとんど防御しません。 SecurID、Google Authenticator、メール、電話、およびSMSループなどの一般的なシステム-これらのシステムはすべて、時間に対する保護をまったく提供しません使用フィッシング攻撃ワンタイムパスワードは依然としてパスワードであり、攻撃者に開示される可能性があります。

そして、これは単なる理論的なものではありません。これらの攻撃が実際に実行されるのを見てきました。実際、攻撃者はフィッシングサイトに送信された第2要素の応答をキャプチャし、すぐに実際のログインページで再生します。 これは実際に今起こっています

あなたがGoogleだとしましょう。利用可能な最高の保護を展開しましたが、それらが十分ではないことがわかります。職業はなんですか?他の誰もあなたのためにこの問題を解決していません。あなたはそれを理解する必要があります。

解決策は簡単です。採用は本当の問題です

フィッシングできない二要素ソリューションの作成は驚くほど簡単です。あなたがしなければならないすべてはブラウザを巻き込むことです。 U2Fの場合、デバイスはサイトごとに公開/秘密キーのペアを作成し、サイトのIDを、サイトが認証を要求するために使用することになっている「キーハンドル」に書き込みます。次に、そのサイトIDは、認証が試行される前に毎回ブラウザによって検証されます。サイトIDは、特定のTLS公開鍵に関連付けることもできます。また、チャレンジ/レスポンスプロトコルであるため、再生もできません。また、サーバーが誤ってデータベース違反で「キーハンドル」をリークした場合でも、セキュリティに影響を与えたり、IDを公開したりすることはありません。 このデバイスを使用すると、フィッシングを可能性として効果的に排除できます。これは、セキュリティを重視する組織にとって大きな問題です。

暗号もそのアプリケーションも新しいものではありません。どちらもよく理解され、信頼されています。技術は決して困難ではありませんでした。困難は採用です。しかし、グーグルは、このような解決策を通常妨げる障壁を克服する立場にある少数のプレーヤーの1人です。 Googleは最も人気のあるブラウザーを作成しているため、デフォルトで互換性があることを確認できます。彼らは最も人気のあるモバイルOSを作るので、それが同様に機能することを確認できます。また、最も人気のあるメールサービスを実行しているため、このテクノロジーに適切なユースケースがあることを確認できます。

必要以上にオープン

もちろん、Googleはそのポジションを活用して、市場での競争上の優位性を確保できたはずですが、実際はそうではありませんでした。そして、それはかなりクールです。 YahooとMicrosoftが競合する電子メール製品を含め、すべての人がこのレベルの保護を必要としています。クールなのは、競合他社でも安全に独自に作成できるように設計されていることです。テクノロジーについては何もGoogleに関連付けられていません。ハードウェアでさえ完全に使用に依存しません。

このシステムは、Googleだけで使用しないことを前提に設計されています。プロトコルの重要な特徴は、トークンが決してitselfを識別しないことです。実際 specifications は、この設計が共謀サービス間の追跡に使用できる「スーパークッキー」を作成する可能性を防ぐために選択されたと述べています。

したがって、単一のトークンを取得して、Gmailだけでなく、U2Fをサポートする他のサービスでも安全に使用できます。これはあなたのためにお金を置く多くの理由を与えます。また、Yubico 公開 PHP、Java、およびPythonでのサーバーソフトウェアのリファレンス実装なので、独自のサーバーで認証を取得して実行することは、小規模なショップでさえ安全です。

85
tylerl

U2Fは、公開鍵暗号を使用して暗号化されたチャネルを使用して、適切なサーバーのみがワンタイムトークンを取得できるようにすることができます。つまり、フィッシングサイトに接続しても、何も起こりません。つまり、アカウントにアクセスできません。代わりに、XSSやローカルマルウェアなどの技術的な攻撃に依存する必要があります。

複数のサービスに同じデバイスを使用しているという事実を隠すことができるはずなので、サイトAとサイトBの両方を制御している誰かが、同じデバイスを両方で使用していることを知ることはできません。安全なはずです。

それは主に進行中の標準化プロセスとそれに対する幅広い支持と勢いのために現在利用可能な最良のオプションのようです。

から FIDO仕様

オンラインサービスへの登録時に、ユーザーのクライアントデバイスは新しいキーペアを作成します。秘密キーを保持し、公開キーをオンラインサービスに登録します。認証は、チャレンジに署名することにより、サービスへの秘密鍵の所有を証明するクライアントデバイスによって行われます。クライアントの秘密鍵は、ユーザーがデバイス上でローカルにロックを解除した後でのみ使用できます。ローカルロック解除は、指をスワイプする、PINを入力する、マイクに向かって話す、二要素デバイスを挿入する、ボタンを押すなど、ユーザーフレンドリーで安全なアクションによって実現されます。

35
Natanael

私はまだ完全に仕様を調査していません。だが:

  1. U2FはOTPと基本的にどのように異なりますか?
    U2FはOTPを使用していません。それは本当にサイトの認証と秘密鍵の所持を要素として使用することです。

  2. OTPシステムと比較して、U2Fはフィッシング攻撃の実現可能性にどのように影響しますか?
    時間制限のあるOTPシステムは、盗むのが難しいため、フィッシング対策(資格情報の盗用)に優れています。 U2Fは、実際にはMiTM攻撃と戦うことを目的としています。

  3. U2Fに対する非インタラクティブな攻撃(ブルートフォースなど)はどの程度実行可能ですか?
    ブルートフォース攻撃は、実際に進むべき道ではありません。サーバーまたはクライアントからキーを盗む必要があります。マルウェアなどの処理方法が重要です。実装は非常に重要です。

  4. 複数の独立したサービスで単一のU2Fトークンを安全に使用できますか?
    もちろんです。そのため、公開秘密鍵は共有シークレットよりも優れています。

  5. U2Fは他の商用製品とどのように比較できますか?より良い解決策はありますか?
    私は私たちとしか話すことができません。それは私たちの商用バージョンとオープンソースバージョンの両方にあります。主な違いは、ターゲットサイトのssl証明書のハッシュを認証サーバーに格納し、認証サーバーの秘密キーで暗号化されたOTPで配信することです。ユーザーがOTPを取得する前に、ソフトウェアトークンはユーザーの接続を介してターゲットサイトの証明書をフェッチし、それをハッシュして2つを比較します。それらが一致する場合、OTPが表示され、クリップボードにコピーされ、ブラウザーがそのURLで起動されます。そうでない場合、エラーが発生します。

    したがって、必要なサーバーやブラウザに変更はありません。キーは、Webサーバーとは別のサーバーに格納されます。 OTPはプロセスの一部です(ただし、削除/非表示にすることはできます)。オープンソースです。一方、「ペイ・トゥ・プレイ」コンソーシアムであるにもかかわらず、U2Fには勢いがあります。 U2Fは、いくつかの「安全な」ハードウェア製品で利用できます。私たちのものをそれらに実装することができます(例:暗号USBドライブ)。 YMMV。

    WiKIDの相互認証の詳細についてはこちらをご覧ください: https://www.wikidsystems.com/learn-more/technology/mutual_authentication とハウツー: http://www.howtoforge.com/prevent_phishing_with_mutual_authentication

22
nowen

デバイスが実際の(プライベート)キーを格納しているかどうかを知りたいので、仕様の一部を読みました。いくつかの質問に答えてみます。

OTPは単純に1回限りのトークンですが、U2Fは公開鍵暗号に基づいています。具体的には、Yubico Fido U2Fキーは楕円曲線暗号を使用しているようです。

U2Fはフィッシング攻撃からの保護に役立つはずです。ボタンを押すなど、手動でトランザクションを確認する必要があるためです。キーを盗むには、デバイス自体を盗む必要があります。これは、OTPピンを格納する場所によっては、OTPピンよりも難しい場合があります。もちろん、どちらのアプローチも依然としてMitM攻撃に対してある程度脆弱です。攻撃者が何らかの方法でユーザーとサービスの間を行き来し、進行中のセッションに干渉できる場合、実行できることはあまりありません。トラフィックは暗号化され、エンドポイントが検証され、誰もがコンピューターにフルアクセスできないようにする必要があります。明白なもの。

U2Fキーを解読する可能性は、特定のハードウェアキーに実装されている公開キーアルゴリズムの強度に依存すると思います。 Yubicoキーは、P-256 NIST楕円曲線でECDSAを使用しているようです。ビット数(および曲線のソース)が十分に安全で信頼できるかどうかを判断してください...

FIDOの概要ドキュメントでは、実際の秘密鍵は保存せず、暗号化(ラップ)して「キーハンドル」に保存する「安価なU2Fデバイス」について言及しています。これは、秘密鍵と公開鍵をリンクして送信される識別子です。リモートサービス。したがって、私がそれを正しく理解すると、リモートサービスは公開キー(現状のまま)と秘密キー(キーハンドルで暗号化された)の両方を取得するため、セキュリティはハードウェアデバイスで使用されるアルゴリズムのセキュリティに完全に対応します。リモートサイトにはあなたの秘密鍵があります!ある意味で、これはCookieに暗号化されたユーザーのセッションを保存することの逆です。ここでは、リモートサイトがキーを保持します。秘密キーの部分は暗号化され、理論的にはハードウェアデバイスによってのみ復号化できます。興味深いことに、このYubicoデバイス自体はそのようなデバイスのようです。つまり、キーはデバイスに含まれるのではなく、デバイスから離れます。

経済的で使いやすい動機–これらの種類のデバイスのチップに多くのキーペアを保存する方がコストが高くなる–は理解していますが、このアプローチが好きかどうかはわかりません。

したがって、複数の独立したサービスでのトークンの使用についての質問に戻ると、キーのペアはサービス自体に保存されるため、デバイスは必要な数のペアを生成できます。ログインすると、デバイスは秘密鍵のラップを解除し、署名を確認します。メッセージにはオリジンが含まれているため、キーはその特定のサービスでのみ機能します。

安全性の高い目的のために、秘密鍵を格納する(または生成する)デバイスを使用して、まったく取得できず、デバイスから離れることはできません。これらのデバイスの電気的側面については何も知りませんが、デバイスが最新のスマートカードで使用されているのと同じチップを使用していると仮定すると、キーを取得するために物理的なハードウェアを盗み、解読するにはかなり高度な攻撃者が必要になると思います、シム、およびその他の形式のハードウェア暗号。

出典:

一般的な概要:「7.安価なU2Fデバイスの許可」

実装に関する考慮事項:「U2Fトークンは秘密鍵の素材を格納せず、代わりにラップされた秘密鍵を鍵ハンドルの一部としてエクスポートする場合があります。」

FIDOの「生のメッセージ形式」ドキュメントも確認してください。このドキュメントでは、まだ価値があるとは思えないため、SEからリンクできません。

17
wvh

U2Fトークンは、公開鍵暗号を使用して チャレンジレスポンスアルゴリズム を実装します。新しいOriginを登録することと、チャレンジへの応答を計算することの2つの機能を提供します。

したがって、 One Time Password(OTP) の生成は実装されていません。

新しいオリジンの登録

(Origin文字列は、リモートサーバーのホスト名などのリモートシステムを識別します。)

新しいOriginを登録するとき、トークンはOrigin文字列を入力として受け取り、

  • 新しく生成された公開鍵(KA)、
  • 証明証明書(つまり、証明公開鍵と、証明秘密鍵を使用したKAを介した署名)、
  • キーハンドル(H)、および
  • 署名(Origin、KA、H上)

新しく作成した秘密鍵を使用します。アテステーションキーペアは、同じベンダーが作成したデバイスのグループ間で共有され、通常は有名なCAによって署名されます。キーハンドルは、KAを識別する文字列です。これらのアイテムはすべてOriginに送信されます。

チャレンジに署名する

チャレンジに署名する(つまり、応答を生成する)とき、トークンはOrigin文字列、チャレンジデータ(セッション情報を含む)、およびキーハンドルを入力として受け取ります。

  • キーハンドルの生成時にOriginがOriginと一致しない場合、エラーが返されます。
  • キーハンドルが不明な場合、エラーが返されます。
  • それ以外の場合は、チャレンジデータの署名と内部トランザクションカウンターの値が計算され(キーハンドルによって参照される秘密キーを使用)、カウンター値と一緒に返されます。

可能なトークン実装

  1. 有効なU2Fトークン実装には、潜在的に大きな書き込み可能 連想配列 があり、キーハンドルは秘密キーとOrigin情報にマップされます。この配列はそのトークンを残してはならず、したがって、それを読み取られないように保護する必要があります。

    U2F仕様では、異なるオリジンの秘密鍵を再利用することはできません。したがって、大きな配列が必要です。

  2. または、読み取り/書き込みメモリなしのU2Fトークンの実装 これも可能です :トークンは、秘密鍵とOriginをトークン内に保存する代わりに、内部鍵(K0)で対称的に暗号化します。結果はキーハンドルとして返されます。健全なハードウェア設計では、K0はトークンを離れることができません。つまり、秘密鍵とOrigin文字列は外部に保存され、キーハンドルとして使用されるため、オリジンに配布されます。これは、暗号化が解除されない限り問題ありません。

基本的にほとんどの利用可能なU2Fトークンは2番目の方法を実装しているため、比較的安価に作成できます(Amazonで約5ユーロから:「FIDO U2F」を検索)。 Yubikey U2F は、このような実装の example です。

攻撃

通常の状況では、ブルートフォース攻撃は実行不可能です。このような攻撃の1つは、公開鍵がわかっている場合に、Origin固有の秘密鍵をブルートフォースにしようとすることです。

  • 安価なU2Fトークンが使用されていると仮定すると、Origin固有のキーハンドルがわかっているときに、内部キー(K0)をブルートフォースにしようとすることもできます。これは、トークンベンダーが設計ミスをした場合にのみ可能です。たとえば、ベンダーが各トークンを同じ内部キーで出荷し、キーが何らかの形で漏洩した場合です。
  • または、内部キーK0が各トークンごとに異なりますが、K0はエンドユーザーが再初期化できず、ベンダーによって保持され、(自発的または非自発的に)別のパーティーと共有されている場合、そのパーティーは少ない1つのキーハンドルをブルートフォースで強制する試み(そのベンダーによって生成されたトークンから発生)。
  • もう1つのリスクは、トークン内で使用される弱い対称暗号化アルゴリズムの実装であり、これにより、キーハンドルHの暗号化されたデータをブルートフォースで簡単に強制できるようになります。

一部の フィッシング および man-in-the-middle シナリオは defeated です。これは、U2Fトークンがオリジンを確認し、セッション固有のデータがチャレンジとして使用されるためです。

10
maxschlepzig

トークンのユーザーが、トークンのボタンを押して実際に同意するアクションが表示されないのは非常に悪いことだと思います。さもなければ、公共の信頼できないPCでOSに感染したユーザーは、Facebookにログインする代わりに、悪意のあるプログラムを自分の銀行口座に無意識のうちに侵入させることができます。

ただし、U2Fプロトコルには、現在のアクション(URI、AppID、およびオプションのTLSチャネルID)に関する情報が含まれています。これらのデバイスの使用を開始する前に、これらの情報(少なくともAppID)を表示する小さなLCD画面でU2Fトークンが表示されるのを待ってから、それがあなたが期待するものではないことが判明した場合は、行動に同意しないでください。

6