web-dev-qa-db-ja.com

RSAキーのようなブラウザー認証は可能ですか?

今日、パスワードベースの認証は支持されておらず、インターネットはRSAキーベースの認証に移行しています。

その事実から来て、通常のウェブサイトでその使用を広めることには本当にメリットがあるのだろうか?私は次のように使用法を見て、それはあなたが通常期待するのとまったく同じです:

  1. Webリソースにサインアップすると、ユーザーのブラウザーはパブリック/プライベートペアを生成するとともに、このキーに与えようとするスコープを生成します(デフォルトではroot/adminではありません)
  2. ブラウザーは秘密鍵を暗号化し、ユーザーは公開鍵をWebリソースに通信します

その他のすべてのリクエストでは、ブラウザに保存されている秘密鍵により、ユーザーは自動的にログインします。ユーザーはフェデレーションプロファイルを使用してサインイン(サインアップ)することもできるはずですが、このメソッドのみがroot/adminのようなスコープを提供することに注意してください。このrootユーザーは、侵害された場合に鍵ペアを取り消すことができます。

1つの管理者パスワードしか存在しないため、誰もが直面している「N個のWebサイトのN個のパスワード」問題が解決されませんか(Webリソースでは認識されません)。

はい、私はちょっとホイールを再発明したい気がします、そしてこれがそれほど明白であるなら、なぜ誰もそれを使用しないようです?

3
dgan

あなたの直感は正しいです!私が知っている2つのプロトコルは、Webサイトにログインする方法として公開鍵暗号を使用しています。 (実際にはどちらもSSHではありません)

TLSクライアント証明書

私たちは皆、TLS(ブラウザバーの緑色の錠のアイコン)に精通しています。通常、これには2つの目的があります。

  1. あなたとサーバー間のトラフィックを暗号化します。
  2. サーバーが彼らが言うとおりの人物であることを証明します。

緑の鍵をクリックすると、現在接続しているサイトのサーバー証明書も表示されます。

TLSは「相互認証」と呼ばれるモードもサポートしていることがわかります。このモードでは、サーバーがそのIDを証明する証明書を提供することに加えて、あなた(ユーザー)もそれを行います。

Diagram of the TLS handshake with a client certificate

これを行うには、個人証明書(通常は問題のWebサイトによって発行されます)を取得し、証明書と一致する秘密鍵の両方をブラウザーに(通常は.p12ファイルを介して)インポートします。必要なサイトに接続すると、次のようなポップアップが表示されます。

Safari popup for TLS client auth


FIDO Universal 2nd Factor(U2F)USBスティック(Yubikeyなど)

これは、USB暗号化デバイスをコンピューターに接続し、Webサイトがデバイスと通信してユーザーを認証するテクノロジーです。これにはクライアント証明書と比較して長所と短所がありますが、1つの大きな長所は、秘密キーが暗号化ハードウェアに格納されるため、ラップトップへの管理者アクセス権を持つユーザーでもキーのコピーを作成できないことです。

Picture of a Yubikey plugged into a laptop

wikipedia から:

Universal 2nd Factor(U2F)は、特別なUSBまたはNFCスマートカードにある同様のセキュリティテクノロジーに基づくデバイスを使用した2要素認証(2FA)を強化および簡素化するオープン認証標準です。

U2FセキュリティキーはGoogleでサポートされていますChromeバージョン38以降およびOperaバージョン40以降。U2Fセキュリティキーは、2段階認証の追加方法として使用できます。 Google、Dropbox、GitHub、GitLab、Bitbucket、Nextcloud、FacebookなどのU2Fプロトコルをサポートするオンラインサービス。

4
Mike Ounsworth

Ssh公開鍵に近いものはHTTPに存在しますか?はい、これはクライアント証明書と呼ばれ、強力な認証が本当に必要な場合に使用されます。ヨーロッパ諸国では​​、スマートカード証明書は、署名入りの紙と同じ法的価値を与える必要があります。ただし、秘密鍵が常に所有者の排他的な管理下にあり、証明書が適切な人物に配布されていることが確認できます。

なぜそれは広く使われていないのですか?鶏と卵の問題に近い。証明書を持っているクライアントが少ないため、サイトサーバーやWebアプリケーションに証明書を実装しても無駄です。そしてそれを受け入れるサーバーはほとんどないので、クライアントが証明書を購入するのは無駄です。また、認証はSSLプロトコルの初期段階で行われるため、実装はそれほど簡単ではありません。要求が実際のサーバーに到達する前に、プロキシシステムとCDNの悪夢の可能性については話されていません。

米国政府またはヨーロッパ諸国がすべての市民がそのIDカードに証明書を持っているべきであると決めたならば、物事は簡単に変わるかもしれません。その後、サーバー側の実装の市場は劇的に成長しますが、それまでは...

さらに、2FA認証は(サーバーの観点から)証明書よりもはるかに単純であり、一般に標準的なセキュリティニーズに対して十分に安全であると見なされています。それでも、クライアント証明書を広く採用しない理由の1つです。

2
Serge Ballesta