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


194

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



ダイジェスト認証では、サーバーがパスワードを知っているか、検証のためにダイジェストをバックエンドに転送する必要がありますか?
Massimo、

回答:


194

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

一方、基本認証では、暗号化されていない base64エンコーディングが使用されます。

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

参照してくださいRFC-2617を、すべての血みどろの詳細については。


1
基本認証はどのように暗号化されていませんか?私はこのウェブサイトを使用してユーザー名とパスワードのデータをデコードしましたbase64decode.org
Dot Freelancer

65
エンコードと暗号化は同じものではありません。そのサイトを使用して資格情報をデコードできるという事実は、それらが暗号化されていないことを示しています。
アンディ

@Andyダイジェスト認証と暗号化認証に違いはありますか?それとも彼らは同じことを言及していますか?ありがとう。
user224567893 2014年

1
@Andy「資格情報をデコードする」とはどういう意味ですか?
ハッシュ化

8
そう、基本認証はハッシュされた認証情報を使用せず、base64でエンコードされています。
アンディ

111

HTTP基本アクセス認証

  • ステップ1:クライアントが情報を要求し、ユーザー名とパスワードをプレーンテキストでサーバーに送信します
  • ステップ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ダイジェストアクセス認証は、次のように機能するより複雑な認証形式です。

  • ステップ1:クライアントがサーバーにリクエストを送信する
  • ステップ2:サーバーは特別なコード(つまり、n umberは1回だけ使用されます)、レルム(ハッシュ)を表す別の文字列で、クライアントに認証を要求します
  • ステップ3:クライアントは、このナンスと、ユーザー名、パスワード、およびレルム(ハッシュ)の暗号化されたバージョンで応答します。
  • ステップ4:クライアントのハッシュがユーザー名、パスワード、およびレルムの独自のハッシュと一致する場合、サーバーは要求された情報で応答します。一致しない場合はエラーになります。

長所:

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

短所:

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

要約すると、HTTP Digestは本質的に少なくとも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では次のようになります。

ここに画像の説明を入力してください

注意:

  • Basicおよびダイジェストスキームは、ユーザー名とシークレットを使用して認証に専念しています。
  • 無記名方式は、トークンを使用した認証に専用されています。

1
Webサーバーでは、クライアントを制御していない場合でも、すべてのhttp要求に対してhttpsにリダイレクトすることはできませんか?
15

しかし、私はそれについてもっと考えます。彼らがhttpを介してそこに資格情報を送信し、あなたのサイトに到達すると仮定すると、リダイレクトできますが、悪意のあるサイトにヒットした場合、あなたは助けることができません。
2015

3
Digestを使用して、データベースに保存する前にパスワードを暗号化できず、それを引き出すときに復号化できないのはなぜですか?
papiro 2017年

選択された答えは質問に近いですが、初心者には長所と短所があるため、この答えが好きです。
coder0h1t 2017

1
@ 10cool httpでWebサイトにアクセスすると、遅すぎます...残念ながら。直後にhttpSにリダイレクトされた場合でも、user:passは既にネットワーク上で平文で送信されています。
ジュリアン

41

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

1. Http基本認証

ベーシック

クライアントがWebサーバーからの要求に応じて正しいusername:passwordを入力するとすぐに、Webサーバーはデータベースに資格情報が正しいかどうかをチェックし、リソースへのアクセスを許可します。

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

ここに画像の説明を入力してください 最初のパケットで、クライアントはリソースでPOSTメソッドを使用して資格情報を入力しlab/webapp/basicauthます。その結果、サーバーはhttp応答コード200 okで返信します。つまり、ユーザー名:パスワードは正しかったです。

HTTPパケットの詳細

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

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

これまでは基本認証が送信する見ているユーザ名:パスワードダイジェスト認証.But、ネットワークを介して平文では送りHASHハッシュアルゴリズムを使用してパスワードのを。

以下は、クライアントからのリクエストとサーバーからのレスポンスを示すパケットです。

ダイジェスト

クライアントがサーバーから要求された資格情報を入力するとすぐに、パスワードはresponseアルゴリズムを使用してに変換され、サーバーに送信されます。サーバーデータベースがクライアントからの応答と同じ応答を持っている場合、サーバーはリソースへのアクセスを許可しますそれ以外の場合は401エラー。

詳細なダイジェスト認証パケット 上記ではAuthorizationresponse文字列が値を用いて計算されるUsernameRealmPasswordhttp-methodURI及びNonce画像に示すように:

応答アルゴリズム (コロンが含まれています)

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


6
これはチャートにとってより有益で好意的なものであるため、受け入れられた答えになるはずです。
mak 2018

しかしwiresharkでは、httpプロトコルを使用してパケットをスニッフィングしているだけですか?httpsプロトコルを使用している場合はどうなりますか?
JohnRDOrazio

WiresharkによってHttpとHttpsのどちらを探知するかは決定されません。プロトコルで構成されているのはWebサーバーです。
BoRRis

1
ナンセンス。基本認証は、HTTPS経由での使用のみを目的としています。したがって、実際の比較は、HTTPS経由の基本認証とHTTP経由のダイジェスト認証です。最近のWebサイトはすべてのトラフィックを暗号化しているため、HTTPS経由の基本認証を使用することもできます。
ギリ

-3

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

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


1
Base 64エンコーディングは暗号化されていません。
Thomas Sobieck
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.