web-dev-qa-db-ja.com

ダイジェスト認証と基本認証の違いは何ですか?

DigestBasic Authenticationの違いは何ですか?

167
Dot Freelancer

ダイジェスト認証は、ハッシュ関数をユーザー名、パスワード、サーバーが提供するナンス値、HTTPメソッド、および要求されたURIに適用することにより、暗号化された形式で資格情報を通信します。

一方、基本認証は暗号化されていないbase64エンコードを使用します。

したがって、基本認証は通常、httpsなどのトランスポートレイヤーセキュリティが提供されている場合にのみ使用する必要があります。

すべての厄介な詳細については、 RFC-2617 を参照してください。

171
Andy

HTTP基本アクセス認証

  • STEP 1:クライアントは情報を要求し、ユーザー名とパスワードをプレーンテキストでサーバーに送信します
  • STEP 2:サーバーは必要な情報またはエラーで応答します

基本認証は、base64エンコーディング(暗号化ではなく)を使用して、ユーザー名とパスワードの情報を含む暗号文字列を生成します。 HTTP BasicはSSLを介して実装する必要はありませんが、実装しない場合はまったく安全ではありません。だから、私はそれなしでそれを使用するというアイデアを楽しませるつもりはありません。

長所:

  • 実装が簡単であるため、クライアント開発者が行う作業が少なくなり、配信にかかる時間が短縮されるため、開発者はAPIを使用する可能性が高くなります。
  • ダイジェストとは異なり、bcryptなどの任意の暗号化方式でサーバーにパスワードを保存して、パスワードをより安全にすることができます
  • 情報を取得するには、サーバーへの呼び出しが1回だけ必要です。これにより、クライアントは、より複雑な認証方法よりもわずかに高速になります。

短所:

  • SSLは基本的なHTTPよりも実行が遅いため、クライアントの速度がわずかに遅くなります
  • クライアントを制御できず、サーバーにSSLの使用を強制できない場合、開発者はSSLを使用せず、セキュリティリスクを引き起こす可能性があります

概要–クライアントを制御できる場合、またはクライアントがSSLを確実に使用できる場合は、HTTP Basicが適しています。 SSLの遅さは、リクエストを1つだけ行う速度でキャンセルできます。

基本認証の構文

Value = username:password
Encoded Value =  base64(Value)
Authorization Value = Basic <Encoded Value> 
//at last Authorization key/value map added to http header as follows
Authorization: <Authorization Value>

HTTPダイジェストアクセス認証
ダイジェストアクセス認証では、ハッシュ(つまり、ダイジェストは小さな断片に分割する)方法論を使用して暗号化結果を生成します。 HTTPダイジェストアクセス認証は、次のように機能する認証のより複雑な形式です。

  • STEP 1:クライアントがサーバーにリクエストを送信します
  • STEP 2:サーバーは特別なコード( nonce すなわちnと呼ばれる)で応答しますumberのみonce)、 を表す別の文字列realm (ハッシュ)クライアントに認証を要求します
  • STEP 3:クライアントはこのノンスと、ユーザー名、パスワード、およびレルムの暗号化バージョン(ハッシュ)で応答します
  • STEP 4:クライアントハッシュがユーザー名、パスワード、およびレルムの独自のハッシュと一致する場合、サーバーは要求された情報で応答し、そうでない場合はエラー

長所:

  • ユーザー名やパスワードはプレーンテキストでサーバーに送信されないため、SSL経由で送信されないHTTP Basicリクエストよりも非SSL接続の方が安全です。これは、SSLが必要ないことを意味し、各呼び出しが少し速くなります

短所:

  • 必要なすべての呼び出しに対して、クライアントは2にする必要があり、プロセスをHTTP Basicよりもわずかに遅くします。
  • HTTPダイジェストは、man-in-the-middleセキュリティ攻撃に対して脆弱です。これは、基本的にハッキングされる可能性があることを意味します
  • HTTP Digestは、強力なパスワード暗号化の使用を防止します。つまり、サーバーに保存されているパスワードがハッキングされる可能性があります。

概要では、HTTPダイジェストは本質的に少なくとも2つの攻撃に対して脆弱ですが、HTTP Basic over SSLでパスワードに強力な暗号化を使用するサーバーはこれらの脆弱性を共有する可能性が低いです。

ただし、クライアントを制御できない場合、クライアントはSSLなしで基本認証を実行しようとする可能性があります。これは、ダイジェストよりもはるかに安全性が低くなります。

RFC 2069ダイジェストアクセス認証の構文

Hash1=MD5(username:realm:password)
Hash2=MD5(method:digestURI)
response=MD5(Hash1:nonce:Hash2)

RFC 2617ダイジェストアクセス認証の構文

Hash1=MD5(username:realm:password)
Hash2=MD5(method:digestURI)
response=MD5(Hash1:nonce:nonceCount:cnonce:qop:Hash2)
//some additional parameters added 

ソース および

Postmanでは次のようになります。

enter image description here

注:

  • BasicおよびDigestスキームは、ユーザー名とシークレットを使用した認証専用です。
  • Bearerスキームは、トークンを使用した認証専用です。
94
Premraj

Wireshark(送受信パケットを分析するツール)を使用した2つのHTTP認証の違いを見てみましょう。

1。 HTTP基本認証

Basic

クライアントがWebサーバーの要求に従って、正しいusername:passwordを入力するとすぐに、Webサーバーは資格情報が正しく、リソースへのアクセスを提供します。

パケットの送受信方法は次のとおりです。

enter image description here 最初のパケットで、クライアントはリソースでPOSTメソッドを使用して資格情報を入力します-lab/webapp/basicauth http応答コード200 okで返信します。つまり、ユーザー名:パスワードは正しいです。

Detail of HTTP packet

ここで、Authorizationヘッダーでは、BasicAuthorizationの後にランダムな文字列が続くことが示されています。この文字列はエンコードされた(Base64)バージョンの資格情報admin:aadd(コロンを含む)。

2。 HTTPダイジェスト認証(rfc 2069)

これまでのところ、基本認証がネ​​ットワーク上にプレーンテキストでusername:passwordを送信することがわかりましたが、ダイジェスト認証はハッシュハッシュアルゴリズムを使用したパスワード。

クライアントが行った要求とサーバーからの応答を示すパケットがここにあります。

Digest

クライアントがサーバーから要求された資格情報を入力するとすぐに、パスワードはアルゴリズムを使用してresponseに変換され、サーバーに送信されます。 resource、それ以外の場合は401エラー.

Detailed digest auth packet 上記のAuthorizationでは、response文字列は、画像に示すように、UsernameRealmPasswordhttp-methodURIおよびNonceの値を使用して計算されます。

Response algorithm (コロンが含まれます)

したがって、ダイジェスト認証はハッシュ(MD5暗号化)を伴うため、より安全であることがわかります。したがって、パケット認証ツールは、基本認証ではWiresharkに正確なパスワードが表示されていても、パスワードを探知できません。

34
BoRRis

基本認証では、ユーザー名とパスワードの情報を含む暗号化文字列を生成するために、base 64 Encoding を使用します。

ダイジェストアクセス認証では、ハッシュ手法を使用して暗号化結果を生成します

0