今度初めて、ハッシュ関数を使ったスクリプトを作る事になりました。
まず、ハッシュって何?から始まって何となく理解はできたのですが
どう組んでいいのか検討が付きません。
どうか、アドバイスを頂けないでしょうか?
パケット内のMAC Addressを除く128byteをハッシュ値として
L2(RAWデータ) <- MAC Address以外全て
L3(IPv4,IPv6) <- 全て
のhashマスクを制作する。
これから、どうやってハッシュ関数を作ればいいのか分かりません。
糸口を下さい!よろしくお願いいたします
ハッシュ関数について
Re:ハッシュ関数について
ハッシュ関数である MD5 や SHA 等でググると、ハッシュ関数の仕様や処理方法などが見つかりますよ。
Javascript を使ったハッシュ関数を見かけた覚えがありますので探してみてはどうでしょうか。
Javascript を使ったハッシュ関数を見かけた覚えがありますので探してみてはどうでしょうか。
Re:ハッシュ関数について
ありがとうございます。
今まで色々なHPを参考にさせて頂いたのですが
それでも理解出来なかったのでこちらに投稿させていただきました。
どう処理するロジックを組んだらいいのかが分からないんです。悲しい事に・・・
今回はCRC32 それと BObを使用するみたいです。
struct xdata {
char key[32]; // キー
int value; // 値
xdata* next; // 次のデータへのポインタ
};
のようにハッシュテーブルを持ち、データ処理をさせるのでしょうか?
「どこを計算値として割り当てるのか?」
が、分かれば作れるといわれているのですがその値すらどう求めていったらいいのか
分かりません。
今まで色々なHPを参考にさせて頂いたのですが
それでも理解出来なかったのでこちらに投稿させていただきました。
どう処理するロジックを組んだらいいのかが分からないんです。悲しい事に・・・
今回はCRC32 それと BObを使用するみたいです。
struct xdata {
char key[32]; // キー
int value; // 値
xdata* next; // 次のデータへのポインタ
};
のようにハッシュテーブルを持ち、データ処理をさせるのでしょうか?
「どこを計算値として割り当てるのか?」
が、分かれば作れるといわれているのですがその値すらどう求めていったらいいのか
分かりません。
Re:ハッシュ関数について
> どう処理するロジックを組んだらいいのかが分からないんです。悲しい事に・・・
こういうハッシュ関数などのアルゴリズムは、ここで書くよりも他のサイトに掲載されているところを見て覚えた方が理解が早いはずです。
CRC32 は、巡回冗長検査という名称で http://ja.wikipedia.org/wiki/%E5%B7%A1% ... C%E6%9F%BB に載っていて非常に詳しい処理方法が書かれていますし、参考になるソースコードも外部リンクとして掲載されていますよ。
(外部リンク先は外国ですが、ソースコードを見る分には困らないはずです)
あと、BObってアルゴリズム名ですか?
検索しても暗号化の概要に出る、二者(Alice と Bob)の例題しか出てきませんでしたが…。
私は CRC はいじったことが無いので詳しく説明できませんが、
大体のハッシュ関数は、大まかに以下のような構造で処理を行っています。
ハッシュ関数は基本、作業用変数とハッシュ値出力用のデータ、ハッシュ値計算用の関数群で構成され、
(上記の例には書いてませんが)作業用変数の初期化と、ハッシュ関数へのデータを渡し終わった後の処理が含まれるものもあります。
こういうハッシュ関数などのアルゴリズムは、ここで書くよりも他のサイトに掲載されているところを見て覚えた方が理解が早いはずです。
CRC32 は、巡回冗長検査という名称で http://ja.wikipedia.org/wiki/%E5%B7%A1% ... C%E6%9F%BB に載っていて非常に詳しい処理方法が書かれていますし、参考になるソースコードも外部リンクとして掲載されていますよ。
(外部リンク先は外国ですが、ソースコードを見る分には困らないはずです)
あと、BObってアルゴリズム名ですか?
検索しても暗号化の概要に出る、二者(Alice と Bob)の例題しか出てきませんでしたが…。
私は CRC はいじったことが無いので詳しく説明できませんが、
大体のハッシュ関数は、大まかに以下のような構造で処理を行っています。
// ハッシュ関数の作業データ typedef struct MyHashData { unsigned char data[8]; // ハッシュ出力結果(8バイト) int cur; // 作業用 }; // ハッシュ関数の本体。 void my_hash(MyHashData* hash, int size, unsigned char* data){ int i; for(i = 0;i < size;++i){ hash->data[hash->cu[/url] += data; hash->cur = (hash->cur + 1) & 7; } }(即席で作ったハッシュ関数。被りやすく、偏ったハッシュ値を生成するので実用性はまったく無いです^^)
ハッシュ関数は基本、作業用変数とハッシュ値出力用のデータ、ハッシュ値計算用の関数群で構成され、
(上記の例には書いてませんが)作業用変数の初期化と、ハッシュ関数へのデータを渡し終わった後の処理が含まれるものもあります。
Re:ハッシュ関数について
Hashに関するHP等を教えて頂いてありがとうございます。
御津凪様の書いて下さった
例文もすごいわかりやすくて、HP見てても相変わらず何をする為の処理か
とか分からないままなんですが、少し理解できるようになれました。
おはずかしいのですが、
1.フレームの先頭から Source,Destination,MAC Addressを除く
2.IP Payload先頭から全て計算に用いる(ALL 1)
とは、どういった値を128byteのハッシュ値としていくのでしょうか?
※Bobは、暗号キーとしてしか認識がないのですが
CRC32と同列になる関数なんだそうです。
参考になるか分からないんですが一応URLを
http://www.ops.ietf.org/lists/psamp/psa ... 00011.html
御津凪様の書いて下さった
例文もすごいわかりやすくて、HP見てても相変わらず何をする為の処理か
とか分からないままなんですが、少し理解できるようになれました。
おはずかしいのですが、
1.フレームの先頭から Source,Destination,MAC Addressを除く
2.IP Payload先頭から全て計算に用いる(ALL 1)
とは、どういった値を128byteのハッシュ値としていくのでしょうか?
※Bobは、暗号キーとしてしか認識がないのですが
CRC32と同列になる関数なんだそうです。
参考になるか分からないんですが一応URLを
http://www.ops.ietf.org/lists/psamp/psa ... 00011.html
Re:ハッシュ関数について
CRC32 は比較的簡単な構造のハッシュ関数だったので、他の方のソースコードを参考に書いたコードを
こちらで添付しておきましたので参考にしてみてください。
> ※Bobは、暗号キーとしてしか認識がないのですが
> CRC32と同列になる関数なんだそうです。
出来ればもう少し詳しい部分(ソースコードなど)がわかれば、ある程度解説などの説明が出来るのですが…。
(少なくとも日本のサイトには見当たりませんでした)
もしかしたら"Bob"って、共通鍵暗号等の暗号キーのことだったりしませんか?
上記にも書いた、 Alice と Bob の話は、暗号化の原文から登場しているそうですし、
その中の暗号キーにも"Bob"が使われてたりしてます。
あと、"128byteのハッシュ値" のことでひとつ確認ですが、
CRC32 は 4byte(32bit) の値しか出しません。
どのようにして "128byteのハッシュ値" を算出するのでしょうか?
提案(出題?)者がいれば確認を取ってみてください。
(ちなみに MD5 は 128bit のハッシュ値を、 SHA-1 は 160bit のハッシュ値を算出します)
> 1.フレームの先頭から Source,Destination,MAC Addressを除く
> 2.IP Payload先頭から全て計算に用いる(ALL 1)
このあたりは…すみません。私はそこはやったことが無いので詳しくはわからないです。
他の方に知識をお分けしてもらうしか…。
(ハッシュ関数には直接関係のない部分ですし)
こちらで添付しておきましたので参考にしてみてください。
> ※Bobは、暗号キーとしてしか認識がないのですが
> CRC32と同列になる関数なんだそうです。
出来ればもう少し詳しい部分(ソースコードなど)がわかれば、ある程度解説などの説明が出来るのですが…。
(少なくとも日本のサイトには見当たりませんでした)
もしかしたら"Bob"って、共通鍵暗号等の暗号キーのことだったりしませんか?
上記にも書いた、 Alice と Bob の話は、暗号化の原文から登場しているそうですし、
その中の暗号キーにも"Bob"が使われてたりしてます。
あと、"128byteのハッシュ値" のことでひとつ確認ですが、
CRC32 は 4byte(32bit) の値しか出しません。
どのようにして "128byteのハッシュ値" を算出するのでしょうか?
提案(出題?)者がいれば確認を取ってみてください。
(ちなみに MD5 は 128bit のハッシュ値を、 SHA-1 は 160bit のハッシュ値を算出します)
> 1.フレームの先頭から Source,Destination,MAC Addressを除く
> 2.IP Payload先頭から全て計算に用いる(ALL 1)
このあたりは…すみません。私はそこはやったことが無いので詳しくはわからないです。
他の方に知識をお分けしてもらうしか…。
(ハッシュ関数には直接関係のない部分ですし)
Re:ハッシュ関数について
http://www.picfun.com/lan06a.html
http://hp.vector.co.jp/authors/VA027424 ... index.html
まず、上記のようにIPのフレームフォーマットは理解されておられますか?
> 128byte
128bitの間違いじゃないですか?
で、128bitだと仮定して
> 1.フレームの先頭から Source,Destination,MAC Addressを除く
をストレートに解釈してイーサネットヘッダとIPヘッダから上記の物を除くと112bit(14byte)としかないですけどね。
足りない部分は固定の値でパディングするのでしょうか?
もしくは、IPヘッダから送信元IPか送信先IPのいずれか一方だけを除外するということでしょうかね。
それだと、128bitにはなりますね。
提示されている情報だけだとこれ以上は判らないです。
> 2.IP Payload先頭から全て計算に用いる(ALL 1)
2個目のページを見てもらえれば説明不要かと思います。
http://hp.vector.co.jp/authors/VA027424 ... index.html
まず、上記のようにIPのフレームフォーマットは理解されておられますか?
> 128byte
128bitの間違いじゃないですか?
で、128bitだと仮定して
> 1.フレームの先頭から Source,Destination,MAC Addressを除く
をストレートに解釈してイーサネットヘッダとIPヘッダから上記の物を除くと112bit(14byte)としかないですけどね。
足りない部分は固定の値でパディングするのでしょうか?
もしくは、IPヘッダから送信元IPか送信先IPのいずれか一方だけを除外するということでしょうかね。
それだと、128bitにはなりますね。
提示されている情報だけだとこれ以上は判らないです。
> 2.IP Payload先頭から全て計算に用いる(ALL 1)
2個目のページを見てもらえれば説明不要かと思います。
Re:ハッシュ関数について
御津凪 様
ソースありがとうございました!
シンプルで分かり安くて真似て処理プログラム作成してみます
ありがとうございます
>どのようにして "128byteのハッシュ値" を算出するのでしょうか?
1bitづつハッシュ関数に渡して計算させるようになります
>"Bob"って、共通鍵暗号等の暗号キーのことだったりしませんか?
ハードが計算処理して下さるようになったのですが、
共通鍵の暗号キーでまさしく御津凪 様の言うとおりのようです。
Mist 様
提示してくださったURLを見て、ずっと私自身がIPヘッダを見てて、
勘違いしていた事がわかりましたありがとうございます。
1は、MACヘッダ内でSource MAC Address,Destination MAC Address,以外の
部分をhashマスクとして使用し、全bitを立てる処理(bit立ってなかったら立てる)
ようにするマスク処理だったようです。
仕様を勘違いしてました。
> 2.IP Payload先頭から全て計算に用いる(ALL 1)
(このHPわかりやすい!)の通りでした
ハッシュに渡す値の算出方法までお伺いしてしまって(更に分かりにくいものに)
すみませんでした。
ソースありがとうございました!
シンプルで分かり安くて真似て処理プログラム作成してみます
ありがとうございます
>どのようにして "128byteのハッシュ値" を算出するのでしょうか?
1bitづつハッシュ関数に渡して計算させるようになります
>"Bob"って、共通鍵暗号等の暗号キーのことだったりしませんか?
ハードが計算処理して下さるようになったのですが、
共通鍵の暗号キーでまさしく御津凪 様の言うとおりのようです。
Mist 様
提示してくださったURLを見て、ずっと私自身がIPヘッダを見てて、
勘違いしていた事がわかりましたありがとうございます。
1は、MACヘッダ内でSource MAC Address,Destination MAC Address,以外の
部分をhashマスクとして使用し、全bitを立てる処理(bit立ってなかったら立てる)
ようにするマスク処理だったようです。
仕様を勘違いしてました。
> 2.IP Payload先頭から全て計算に用いる(ALL 1)
(このHPわかりやすい!)の通りでした
ハッシュに渡す値の算出方法までお伺いしてしまって(更に分かりにくいものに)
すみませんでした。