SOCKS5のパスワード認証がバージョン1で始まる理由
SOCKS5のグリーティングと、そのユーザー名/パスワード認証サブネゴシエーションのバージョンフィールドを区別します。
SOCKS5クライアントはバージョン5で始まり、パスワード認証の際にバージョン1を送信します。これは必ずしもダウングレードや誤ったプロキシではありません。
最初の交換ではSOCKS5の認証方式をネゴシエートします。ユーザー名/パスワードが選択されると、RFC 1929がバージョンフィールド0x01を持つ別個のサブネゴシエーションを定義します。
この認証要求には、ユーザー名とパスワードの長さとバイトが含まれます。サーバーはサブネゴシエーションのバージョンとステータスを返します。認証が成功した後にのみ、クライアントはSOCKS5の宛先要求を送信します。
トレースを読むときやクライアントを実装するときは、2つの交換を分けて扱ってください。サービスがSOCKS5と呼ばれるからといって0x05をどこでも繰り返すと、誤った認証メッセージになります。
パスワードのステータスが成功しても、要求した宛先が許可されているとは限りません。続くSOCKS応答はその接続を拒否することがあります。
最後に、このユーザー名/パスワード方式は資格情報を暗号化しません。バージョンバイトはメッセージ形式を示すものであり、暗号化された、あるいはより強力なログイン方式ではありません。