質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

解決済

1回答

2062閲覧

PPPoE CHAP認証について

vfg

総合スコア13

Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

0クリップ

投稿2017/01/09 14:22

編集2017/01/11 07:28

###前提・実現したいこと

perlでPPPoEクライアントを実装し、負荷試験に使用したいと考えております。

###発生している問題・エラーメッセージ

CHAP認証で、応答パケットを送信する際に、MD5ハッシュ値を生成する必要があり、
Digest::MD5::md5_hex を使用していますが、期待値※になりません。
参考になるサイトやperlでの実装例をご存知でしたら、教えていただけませんでしょうか。

※CiscoルータとWindows7クライアントを使用して、wiresharkでキャプチャーした結果を参照しています。

###該当のソースコード
抜粋です。

#!/usr/bin/perl
use utf8;
use Digest::MD5 qw(md5 md5_hex md5_base64);

&main();

sub main{
my $id = 1;
my $pass = "PASSWORD0001";
my $random = "595b4900b8ceefa1414fbe03c29f5bf4";
print md5_hex( $id, $pass, pack( 'H*', $random )), "\n";
print "8ee3f5b2a10f67cc5e0f9a20e3fe7831\n"; # 期待値
}

challenge

response

###試したこと
md5_hexを使用して、チャレンジパケットのID、ランダム値、該当ユーザのパスワードを順番を入れ替えて入力、
またpack関数のパラメータを変更して試していますが、うまくいっていません。
またRFC1994やpppoeクライアントのソースコードを参照しています。

###補足情報(言語/FW/ツール等のバージョンなど)
perl

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ikedas

2017/01/09 16:10

ご自分で書いたPerlのソースコードを示して下さい。ご質問に直接関係ない部分はそう断って省いてもらって結構ですから。
vfg

2017/01/11 07:30

コメントありがとうございます。サンプルコードとパケットキャプチャーの結果を追加しました。
guest

回答1

0

ベストアンサー

RFC1994, §4.1には

Identifier

The Identifier field is one octet. The Identifier field MUST be changed each time a Challenge is sent. The Response Identifier MUST be copied from the Identifier field of the Challenge which caused the Response.

とあり、

Value
...

The Response Value is the one-way hash calculated over a stream of octets consisting of the Identifier, followed by (concatenated with) the "secret", followed by (concatenated with) the Challenge Value. The length of the Response Value depends upon the hash algorithm used (16 octets for MD5).

とありますから、$idがIdentiferの数値、$passがsecretの文字列、$randomがチャレンジの16進表記なら、レスポンスの16進表記は、

md5_hex( pack( 'C', $id ), $pass, pack( 'H*', $random ))

投稿2017/01/11 08:31

編集2017/01/11 08:35
ikedas

総合スコア4335

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

vfg

2017/01/11 09:50

ご回答ありがとうございました! 期待通りの値になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問