05/07/03 15:46:30 IZCijWVL
上記の理由より、外部からの匿名性は高くなるが、
内部の「悪意あるノード」に対しては、対処出来ない。
むしろ、内部からの攻撃には非常に脆いと考えられる。
「認証」を、どのようにするか?コレが問題
424:login:Penguin
05/07/03 18:51:41 I4l1Sle2
結局、プロバイダに対して偽装をするとなると、インターネットoverインターネットを
構築することになって激しく面倒。
どっちみち、むこうさんから見れば激しいUpトラフィックを打ち落とせばいいだけだし。
確か、ノードにIDを振り、自分以外の誰にもIPアドレスとの対応を明かさないで、
バケツリレーでたまたま自分のところにきたものを黙って受け取る、とかいうルーティングしてた
P2Pソフトがあったと思われ。
muteだったはず。蟻がどうのこうののルーティング手法らしい。
425:login:Penguin
05/07/05 23:27:28 3m7vbi8S
現在のWinnyを鍵と暗号化ファイルを別々に管理できる仕様、つまり、
暗号化ファイルだけダウンロード、鍵だけダウンロードできる仕様にする。
このとき、暗号化ファイルのファイル名などから、鍵を連想して、P2Pネット内から、検索、
鍵をダウンロード出来ないようにする。
『鍵』をハッシュにかけた値を暗号化ファイルのファイル名にするのが妥当だろうか?
つまり、意味のある「キーワード検索」で引っかかるのは、鍵だけにする。
そして、鍵を落としたら、鍵をハッシュにかけて、再び検索クエリを流す。
理論的に、暗号化ファイルから、鍵を連想して、P2Pネット内から鍵を
落とす事は不可能になる。
鍵のキャッシュ保管用ディレクトリを、ハードディスクに物理的に1MBのパーミッションを
設定する。
ヤバイと、思ったときは即座に、そのパーミッションをフォーマット・・・
一瞬で終わるぞ・・・・(w
そして、暗号化ファイルは論理的に「闇」に葬られる。
その後、暗号化ファイルは、まったく意味を成さないかと言うとそうでもない。
自分自身が、再び落としてくるファイルの中にキャッシュに含まれるファイルを
落とす可能性が高いからである。
鍵を落とすだけであれば、殆ど時間は要らないだろう。
コレだけで、匿名性は十分だと思うのだが・・・どうなのだろう?
426:login:Penguin
05/07/06 01:23:30 7XIcnn6N
そうか、P2Pネット上存在する鍵を全て落として、
虱潰しに調べれば可能なのか?
1000万の鍵があったとして、ダウンロードは、3日あれば出来るのかな?
ハッシュに0.01秒、照合に0.001秒、かかると考えても、110000秒・・・・・30時間半
つまり、最悪4日程度あれば、キャッシュファイルの1つは、復号されてしまう。
50MBのファイルとして、復号には15秒程度かかるが・・・いくつか復号されるだけでも
キャッシュファイルは、まる見え当然。
問題点は、ハッシュの計算は極めて速い点にあり、鍵から、暗号化ファイルの連想に
時間がかかれば問題なくなる。例えば、ハッシュを繰り返した10万回目の値とか・・・
1000秒程度、連想時間があれば、最悪300年以上かかる・・・
10倍の処理速度を持つ計算機でやっても30年・・・
100倍の処理速度を持つ計算機でやっても40ヶ月・・・
1000倍の処理速度を持つ計算機でやっても110日・・
しかし、これではユーザにも、足かせになるな。
・・・なんせ、計算だけで16分もかかるから
427:login:Penguin
05/07/06 03:31:05 Vmpb7hhF
Winnyの例でいうと、(といってもその時代に参加してなかったが)
暗号化キーがかけられたファイルというのがあって、暗号化キーがわからない限り
キャッシュが復号できない機能が存在してた。が、後になくなった。
消えた理由は、使われなくて不評だったから。
キャッシュですら消されてしまうのに、得体の知れない復号できないキャッシュを
残しておいてくれるお人よしな人はいなかったらしい。
簡単に復号できないキャッシュは、そういう運用をされることを考えた方がいいと思う。
なんかメリットがないか、ペナルティがないと持っててくれないと思う。
428:login:Penguin
05/07/06 16:34:55 pbi5Lyod
>>427
Winnyの暗号は、知っているもの同士が、集まって決めて、知らないものは
利用できなかったから、結果的に廃止になったのだと思う。
>>425の例では、クラスタワードに引っかかるのが、復号のための鍵の情報しか持っていない
キーファイルだけにして、キーファイルからハッシュなどの方法で連想できる値を元に、
再び検索をかけているので、暗号化ファイルは誰からも閲覧可能である。
キーファイルから暗号化ファイルは連想できるが、暗号化ファイルからキーファイルが
連想できない原理は、「1632412」から「偶数」であることを「連想」できても、
「偶数」から、「1632412」が「連想」できないのと同じこと。
429:login:Penguin
05/07/06 17:06:53 665Lc0RY
>>426
ハッシュは、128bitあれば十分か?
共通鍵は乱数で決めるとしても、衝突の危険性がない訳ではない。
キーファイルには、暗号化していないファイルのハッシュと共通鍵を
書いておき。暗号化ファイルのファイル名には、元ハッシュ値と共通鍵を
文字連結させて、決められた回数分だけ再びハッシュをかけたものを使う。
衝突の危険性は、低くなるだろう
あと、1000秒ってのは長すぎるだろ?
どうにかして、10秒程度に抑える必要あり。
こうしては、どうだろうか?
例えば、アプリ起動時にパスワード(英数字4文字で十分)を要求するようにする。
そのパスワードが書かれたファイルは、キーが保管されるパーミッションに保管される。
別に暗号化する必要はなく、昔のUNIXのpasswdファイルのように平分のままでもいい。
起動のパスワードを忘れたら、そのファイルを見ればいい。
アプリの隅っこに、「闇」ボタンがあり「闇」ボタンを押すと、
起動時パスワードをメモリに保存。
キーが保管されるパーミッションをフォーマット。
暗号化ファイルのファイル名を起動時パスワードで暗号化。
すべての設定をデフォルトにする。
430:login:Penguin
05/07/06 17:10:19 665Lc0RY
このときの暗号化強度は強いものである必要はないが、暗号化したかどうか
分からないようにすることが必要。つまり、ファイル名が16文字だった場合、
16文字のままでないといけない。誰かが、暗号化ファイルからデータを複合
しようとしても、ファイル名が暗号化されているかどうかは、本人しか知らない。
暗号化されていると分かって、シラミツブシにファイル名を復号して、ファイルを復号しようとしても、
500万のキーファイル
キーファイルから暗号化ファイルの連想に10秒かかる。
起動時パスワードは、数字だけ使っても10000通り。
辞書攻撃を受けても、3000~2000年以上かかる計算になる。
ほとぼりが冷めた所で、暗号化ファイルのファイル名を復号すればいい。
起動時に毎回要求されているパスワードなので忘れることもないだろう。
起動時に要求するパスワードは、パスワードを覚えさせることを目的としているため
変えないほうがよいと考えられる。
さらに、中継ノードは暗号化ファイルはキャッシュするが、キーファイルはキャッシュしないとなどの
仕様をつけ足せば、無闇にキャッシュを消す事もなくなるだろう。自分のクラスタが特化されている場合、
暗号化ファイルの中に自分が欲しているファイルがある可能性がある。キーファイルは、1KB以下のファイル
だが、暗号化ファイルは、それよりも遥かに大きい。よって、無闇にキャッシュを消すと、逆に欲しい
ファイルを手に入れるのに時間がかかってしまう。
431:login:Penguin
05/07/07 01:25:37 Wgy7DjVN
キーファイルがある->キャッシュを消せる。
キーファイルがない->クラスタ化できない。
432:login:Penguin
05/07/07 05:31:46 4ekhGbja
>>428
キャッシュから直接に鍵が検索できない、っていう仕様であってる?
中継ノードが復号できない仕様は、中継でたまったキャッシュを消される危険性が高いと思うんだが。
433:425
05/07/07 23:38:38 SQnN0+8k
たぶん、>>426 >>428と同一人物です。
Linuxは使ってますが、プログラマじゃないです(SEでもないです
だから、半ば「妄想」です。
ネットワークは、多少分かるので、オープンにしてもFreenet以上の匿名性が保て、
Winnyの70%ぐらいの使い心地のプロトコル「LINNY」を提案したいと思います。
間違えがあれば、どんどん指摘してください。
間違えがなくても、どんどん指摘してください。
錆び付いたこのスレを、皆で、暇つぶしに復活させましょう(w
434:425
05/07/07 23:39:34 SQnN0+8k
>>431
基本的に、キーファイルのクラスタは、「自然言語」によってクラスタが特化されて行き、
暗号化ファイルのクラスタは、キーファイルから連想できる値(これを「連想鍵」と呼ぶ
ことにする)によって、クラスタが特化されて行くので、まったく『独立』しています。
ですが、キーファイルを持っているノードは、高い確率で暗号化ファイルを持っているので
探索経路は、高い相関関係はあります。
つまり、キーファイルだけを見るとWinnyっぽいけど、暗号化ファイルの検索はFreenet的になる。
>>429-430
言ってることは、全体的に面白いし参考になります。
やはり、10秒ぐらいが妥当ですね。(「闇」ボタンは実装必須?
しかし、キーファイルをキャッシュさせないってのは、意味が分かりません。
キーファイルを途中経路、暗号化するなりしてキャッシュさせない場合、
匿名性は向上するが、使い勝手は非情に悪い。
キーファイルの探索経路上に自分のノードがある場合、高い確率で暗号化ファイルの
探索経路上にもあるので、キーファイルをキャッシュさせた方が、無闇にキャッシュを
消される事もないと思います。
>>432
>中継でたまったキャッシュを消される危険性が高いと思うんだが。
その通りです。こればっかりは仕方がありません。70%ですから・・・
しかし、キャッシュされたキーファイルに対応する暗号化ファイルは、
高い確率で、キャッシュされているはずです。
435:425
05/07/07 23:41:59 SQnN0+8k
今後の課題
いちいち、キーファイル用のパーティションなんか用意しないで、FDとかの
別の外部記憶に保存した方が良さそうですね。
さらに言えば、暗号化ファイル以外、メモリースティックにアプリ自体を含め全ての
データを保存した方がさらに良さそう(Linuxじゃメモリースティックは使えねーな
匿名性については、暗号化ファイルの受け渡しのみを見るとFreenetを超えていると思っています。
暗号化することで、ファイル自体に匿名性(何のファイルかわからない)があるからです。
上位ノードも、そのファイルが何かは、復号していない限りわからない。
下位ノードは、中継なのか、希望している「本人」なのか、上位ノードからは分からない。
しかし、普通にTCP使って、キーファイルの受け渡しを行った場合、匿名性はWinMX並になる。
ノード間の通信を暗号化しても、「外部」からの盗聴を阻止するだけで、内部の
「悪意あるノード」に対しては、簡単に盗聴を許してしまうからです。
そこで、キーファイルの検索,受け渡し専用に、内部,外部,に対する匿名性を、>>419-423 が
提案しているような、ネットワークレベルで実現する方法を考えています。
問題点は、まだありそうな気もしますが、大枠は見えてきたので、また明日にでも書きます。
あと、「悪意あるノード」の定義や「外部からの攻撃」の定義もしていかないといけない
436:login:Penguin
05/07/08 01:49:08 kxCjllha
>425
>中継キャッシュを消される
これを心配したのは、中継動作を理由にしらばっくれるつもりの仕様であれば、
ある程度の確率の中継キャッシュが残ることが必要だと思ったから。
今言われている仕様だと、中継ノードがキャッシュを持つ理由がなく
(暗号化をキャッシュから直接復号できないので、直接メリットがユーザにみえない)
キャッシュを持っているのが、放流主とリクエストした人だけという状況にならないかなと。
>内部の情報収集ノード対策
ある程度は諦めた方がいいと思う。
あるノードがファイルを要求するときに、あるクラスタ内で情報が閉鎖的になりすぎていると
検索ができないことになる。オープンソースでやるのなら、キー情報を溜めておいて
ダウンを有利に進めようとする改良ノードが出てもおかしくない。
これらの正規の情報収集ノードと、悪意の情報収集ノードとが、システムからは
区別できないと思う。
437:login:Penguin
05/07/08 23:32:43 +d41giv6
「鍵」から「ファイル」を「連想」するってあたりが、面白そうですね。
うまくいけば、本当に枠組み作れるかもしれませんよ。
>>436
>放流主とリクエストした人だけという状況にならないかなと。
勝手にレスさせてもらいますが、私はキャッシュされることは匿名性とは
無関係だと思います。
「中継」は、「誰」が「誰」に送っているか分からなくする為だけであり、
「キャッシュ」は、中継局の回線資源を有効に使うためだけに存在します。
最終的に、提供者と、もらった人だけがファイルを持ったとしても、
大事なのは、そのことが『誰にも分からない』ということです。
>>435
>キャッシュされたキーファイルに対応する暗号化ファイルは、
>高い確率で、キャッシュされているはずです。
???? そんなはずはないと思いますよ。
私は、終端ノードが同じ可能性は高いのですが、途中経路は高い確率で
「まったく違う」経路をたどると思います。
理由は、暗号化ファイルのクラスタは、連想鍵が似ている方向に探索クエリを
送信し、キーファイルのクラスタは、自然言語が似ている方向に探索クエリを
送信してするからです。
438:login:Penguin
05/07/08 23:34:26 +d41giv6
たとえば、Aのノードがキーファイルを自然言語で検索する時、
/**********************************************************************************/
自然言語は、Bのノードに対して近い位置にあるとすると、キーファイルの検索は、Bのノードに委譲される。
そこで検索され、最終的にXで発見され、XからBのノードを経由して、Aが落とします。
Aは、キーファイルから連想鍵を生成して、暗号化ファイルを検索すると、連想鍵はCのノードに対して近い位置にある
という場合が考えられる。いや、確率的に考えれば、むしろ、そのほうが高いはずです。
最終的にXで発見されたとしても、暗号化ファイルは、XからCのノードを経由して、Aに落とされます。
このとき、Bにはキーファイルがキャッシュされ、Cには暗号化ファイルがキャッシュされる。
/***********************************************************************************/
それぞれのノードが知っている情報をまとめると以下の通りになる。
1)Cは、暗号化ファイルがXから来たこともAに送った事も知っています。しかし、中継かどうかは分かりません。暗号化ファイルの内容も意味も分かりません。
2)Cは、Aがどのようにして、キーファイルを手に入れたのかも分かりません。
3)Bは、キーファイルがXから来たこともAに送った事も知っています。しかし、中継かどうかは分かりません。Aにキーファイルを渡したあと、Aが暗号化ファイルを検索したのかどうか分かりません。
4)『X』が、キーファイルと暗号化ファイルの『両方の検索クエリを中継している、または、両方を持っていることを知っている者』は、誰もいません。
439:login:Penguin
05/07/08 23:36:27 +d41giv6
つまり、暗号化ファイルの探索経路からキーファイルの探索経路が予測でいないので、
ファイル提供者『X』の匿名性は、Freenetぐらい高いと思います。
しかし、中継局は意味の分からないファイルをキャッシュさせられるので、使い勝手は、
Freenetに毛が生えた程度です。
特に、暗号化ファイルは中継局からすれば、わけの分からない「ごみ」です。
でも、分からないだけで、自分が落としたいファイルも暗号化ファイルのキャッシュの中にあるかも知れません。
キーファイルを落としてきて、暗号化ファイル検索したら自分の中にあったら、なんとなく得した気分にになり、
暗号化ファイルが「宝の山」に見えるような心掛けよう。
でも、そりゃ無理ですね。
>>436の言う通り、直接的なメリットは何もないので、「中継局に為らないやつは吊るし上げろ!」
(最終的に、親になってくれるノードがいなくなり孤立する)ってカンジのシステムを作るれば、
中継することを義務付けれます。そうすると、キャッシュを消してしまうと、同じ検索クエリが来たとき、
再度、回線資源を食われてしまいます。つまり、ディスク資源か、回線資源のどちらかを提供しないといけません。
ふつう、回線資源のほうが貴重(ダウンロードが遅くなるのはイヤ)だから、結果的にキャッシュを消すことも少なくなるでしょう。
>>430は、そういうことを言いたかったのではないでしょうか?
>そこで、キーファイルの検索,受け渡し専用に、内部,外部,に対する匿名性を、>>419-423 が
>提案しているような、ネットワークレベルで実現する方法を考えています。
ソフトイーサを利用したIP偽装とか聞いたことはありますが、管理が面倒だし、
逆にセキュリティホールになってしまいそうな気味します。
第一、ネットワークを偽装して、自己ルーティングしても、内部からは分かってしまうので意味がないのでは?
440:login:Penguin
05/07/09 00:05:42 wPON5jd/
あかん・・・パラドックスや・・・
オープンソースでセキュアなP2Pなんてやっぱ無理やで
441:login:Penguin
05/07/09 06:46:08 c1VczgQE
>>440
どのあたりが矛盾しているかを書くのがいいと思われ。
人はいるみたいだし、何か知恵が出るかも。
442:425
05/07/09 08:28:10 yQGfiko3
>>437
>私は、終端ノードが同じ可能性は高いのですが、途中経路は高い確率で
>「まったく違う」経路をたどると思います。
仰る通りです。私が勘違いしていました。
クラスタの独立は、匿名性の向上には繋がりますが、中継ホストに残った
暗号化ファイルは、ホストにとってはタダのゴミ。
中継を嫌がるホストが増えるので、システム全体として中継を拒むホストを
孤立させていくような仕組みが必要になりますね。
>第一、ネットワークを偽装して、自己ルーティングしても、内部からは分かってしまうので意味がないのでは?
一応、内部からも分かりにくい方法を考えてみたのですが、逆に攻撃の対象にされてしまうかも知れませんし、
ネットワークに負荷がかかるので止めます。
ネットワーク偽造は、また問題があったときに考え直します。
しかも、上記のような、クラスタの独立による途中経路不一致から、
十分に、匿名性はありそうですし。
443:425
05/07/09 08:47:29 Aqub9gDD
>>440
最終的に、内部ノードが通信相手のIPをかき集めれば、ネットワークに参加しているものが
見えてしまっても(これはしょうがないので諦めます)、「誰」が「何処」へ「何」を送って
いるのか分からなくしてしまえば、まったく問題ありません。
>>238が説明してくれているように、ファイル提供者『X』の匿名性は十分守られています。
現実世界で目を付けられるような行動をしてない限り、この匿名性が破られる事はありません。
目星を付けられていても、ファイル提供者『X』は、ローカルにあるキーファイルを消しまえば
良いだけだと思うのだが、どうだろう?(w
落とすだけの輩も、中継ホストになって貰えば、システム上十分な役目を果たしてくれる。キャッシュされなくても、そのホストさえ通ってくれれば、
良い訳ですし、キャッシュしなかった場合、回線資源が喰われて、ダウンロードが遅くなります。
他に、情報が漏れてしまうような箇所はあるでしょうか?
444:425
05/07/09 08:48:16 Aqub9gDD
あとは、「クラッカー」対策
このシステム最大の弱点は、情報が書き換えられたキーファイルや、悪意あるノードが
初めから暗号化ファイルをが存在しないキーファイルを大量にネットワーク内に生成し、
大量に出回ると、対応する暗号化ファイルに辿り着けないキーファイルが出て来て、
結果ネットワークが機能しないと言う恐ろしい自体が起こります。
逆に、暗号化ファイルを書き換えられたりしても、キーファイルからは辿り着けない。
この問題を解決するには、2042bit公開鍵を使った署名システムが1番確実で安直でしょう。
キーファイルには、電子署名と公開鍵が付属し、途中で書き換えが起これば、
即座に分かります。
電子署名と公開鍵が双方とも書き換えられている場合は、連想した暗号化ファイルに問題、
または、ファイルが見つからないと言う事が続くようであれば、
その公開鍵が付属する、キーファイルを一切信用しないで捨てる。
このように、公開鍵を一種のIDとしても扱えます。
これは、公開鍵の設計に時間がかかる性質を利用したシステムです。
ファイルアップ用の公開鍵は、インストール時に作成し、その後、変える必要もありません。
445:login:Penguin
05/07/09 11:50:32 3O2EbHgy
ある特定の個人or集団が同じ秘密鍵で署名し続ければ、発信元がわかってくる可能性があるのだが。
この公開鍵のついたキーファイルはあのプロバイダのどこどこ地域から出てくるとかね。
かといって、毎回違う鍵を使えば、署名の意味が全くない。
446:425
05/07/09 22:44:19 7r68v9eE
>>444の続きです
急用が出来たので、書いている途中で飛び出してしまいました。
公開鍵の暗号方式は、RSAです。
2042bitなのは、暗号の強度を上げるためではなく、公開鍵の設計を難しくするためです。
クラッカーが、大量に粗悪なキーファイル(暗号化ファイルを持たないキーファイル)を
アップしたとしても公開鍵が同じであれば、全て無視できます。
よって、クラッカーは大量に公開鍵を設計する必要があります。
2042bitの鍵を生成するには、恐らく、最低十数秒はかかるので、
クラッカーに大きな負担となります。
一方、ユーザのは悪質な公開鍵を信用しなければいいし、逆に、常に
暗号化ファイルが存在する良い公開鍵を信用すればいいわけです。
ここで、ポイントとなるのは良い公開鍵になるためには、その公開鍵の秘密鍵を知らなければ不可能である事です。
これによって、良い公開鍵の成り済ましを防げます。
この公開鍵は、変えるのも自由ですが出来るだけ変えないほうが良いでしょう。
447:425
05/07/09 22:54:49 7r68v9eE
さらに、キーファイルに信用性の無い公開鍵が載っていたとしても、そのキーファイル自体は良質(暗号化ファイル)が
あれば、そのキーファイルを、別の人間が電子署名と公開鍵を上書き(公開鍵と電子署名を消して書き直)します。
ただし、その別の人間の公開鍵は分かっても、その人間が誰かは、本人しか知りえません。
その公開鍵が、信用性が高い公開鍵であれば信用できます。この動作を「信用性公開鍵の上書き認証」と呼ぶ事にします。
この「認証」は誰でも出来るようにします。と言うより、理論的に誰でも出来てしまいます。
ここで重要になってくるのは、「キーファイルに載っている公開鍵 = ファイル提供者の公開鍵」の公式が
必ずしも、一致しないと言う点です。逆にいえば、ファイル提供者の公開鍵である必要性はないと言うことです。
つまり、公開鍵は「このキーファイルの内容は私(誰か分からないが公開鍵は分かる)が保障する」程度の意味しかありません。
次に問題になってくる攻撃は、信用のある公開鍵が既に上書き認証しているキーファイルを、さらに悪質な公開鍵が認証を
上書きすると言うものです。
そこで、公開鍵を検索ワードに入れることを許す仕様にします。つまり、
「ある公開鍵」と「検索ワード」を含む検索を可能にすると言うコトです。
(念のため、言っておきますが、ここで言う「信用」は、基本的に、そのノードの「経験」によるものです。
つまり、ノードは公開鍵に関する経験をデータベース化しておく必要があります)
運用しだすと、認証を専門に行う「認証屋」が出てくると思います。
つまり、これの狙いは「認証局の分散処理」です。
448:425
05/07/09 22:59:22 7r68v9eE
>>445
> ある特定の個人or集団が同じ秘密鍵で署名し続ければ、発信元がわかってくる可能性があるのだが。
> この公開鍵のついたキーファイルはあのプロバイダのどこどこ地域から出てくるとかね。
「ファイルアップ用」の公開鍵と別に、「ノード間経路暗号用」の公開鍵も実装させ、
これにより、外部からの参照を不可能になり、出来るのは内部ノードの情報収集のみになります。
内部のノードが可能な情報収集手段は極々限られている上、上位ノードから流れてきたキーファイルが、
中継なのかどうなのかも分かりません、トラフィックを分析した所で、キーファイルは小さすぎて、
別のトラフィックで埋もれてしまいます。
現実世界で、ボロを出さない限りまったく問題はありません。
「ノード間経路暗号用」の公開鍵は、ECC40bitあたりでどうかなと思っています。
これも、インストールした時点で決めます。(変えるのは、完全に自由です)
449:425
05/07/10 16:44:13 m7iyk48S
クラッカー対策に、いろいろ考えていると、かなり大掛りなものになってしまった。
とりあえず、暫定的に考えている事を、全てまとめてみる。
ノード間通信
検索、キーファイルの受け渡し ⇒ 暗号化(SSLモドキ)
暗号化ファイルの受け渡し ⇒ 暗号化なし(元々してある)
基本構成
「元ファイル」から、「キーファイル」 と 「暗号化ファイル」を生成し、
この2つを、「共有」する。
「キーファイル」は、データを元に「連想鍵」を生成し、
「連想鍵」を元に、「暗号化ファイル」を検索する。
終端ノードで「連想鍵」から「暗号化ファイル」が発見されると、そのノードは、
「暗号化ファイル」から「暗号化チェックサム・キー」を返す。
「暗号化チェックサム・キー」のキャッシュは起こりません。
(キャッシュした所で、共有できない無意味なデータになる)
「暗号化チェックサム・キー」から、「絶対連想鍵」を生成し、
「絶対連想鍵」を元に、再び「暗号化ファイル」を検索する。
つまり、
「キーファイル」(自然言語)のクラスタ
「連想鍵」(暗号化ファイル)のクラスタ
「絶対連想鍵」(信用性情報)のクラスタ
の3つのクラスタが形成され、やや煩雑なものになる。
450:425
05/07/10 16:46:00 m7iyk48S
キーファイルが持っている情報
1-1)自然言語のクラスタキーワード
1-2)鍵(暗号化ファイルの共通鍵)
1-3)暗号化チェックサム
1-4)1-1),1-2),1-3)の電子署名
1-5)4)に対する公開鍵(RSA 2048bit)
暗号化ファイルが持っている情報
2-1)連想鍵(MD5)
2-2)絶対連想鍵(MD5)
2-3)暗号化チェックサム・キー
2-3)データフィールド(元ファイルの暗号化データ)
451:425
05/07/10 16:50:15 m7iyk48S
連想鍵
暫定的には、1-2),1-3)を文字連結させ、それを数千回(何回にするかは検討中)
ハッシュにかけた値。ここで使うハッシュは衝突対策で、MD5を想定している。
冗長性などの問題から、計算方法は変わる可能性あり。
絶対連想鍵
絶対連想鍵は、ノードにキャッシュされる度、毎回計算され上書きされる。2-3)をMD4で
ハッシュにかけた値を、連想鍵と文字連結させ、さらにMD5でハッシュにかけた値。
『最終的』に、この値によってダウンロードするファイルを決定する。
452:425
05/07/10 16:51:40 m7iyk48S
暗号化チェックサム・キー
3-1)連想鍵
3-2) 暗号化チェックサムの共通鍵
3-3)3-1),3-2)の電子署名
3-4)3-2)に対する公開鍵(RSA 2048bit)
以上4つのフィールドを、1-2)で「暗号化」したもの。
つまり、正しい「キーファイル」がないと、「暗号化チェックサム・キー」は復号できない。
そして、「暗号化ファイル」単体では、意味を成さないフィールド。
暗号化チェックサム
4-1)2-3)データフィールドのハッシュ値(MD4) を、3-2)で「暗号化」したもの。
つまり、正しい3-1)が無ければ、「暗号化チェックサム」は復号できない。
そして、「キーファイル」単体では、意味を成さないフィールド。
様々な、情報があるが、これらを美味く使えば、悪質なノードを排除したり、
壊れた暗号化ファイルを、出回らなくするように出来るでしょう。
例外処理は、今日はしんどいので、また今度書きます。
453:425
05/07/10 17:00:37 m7iyk48S
訂正
2-1)連想鍵(MD5)
2-2)絶対連想鍵(MD5)
2-3)暗号化チェックサム・キー
2-4)データフィールド(元ファイルの暗号化データ)
////////////////////////////////////////////////
絶対連想鍵は、ノードにキャッシュされる度、毎回計算され上書きされる。2-4)をMD4で
ハッシュにかけた値を、連想鍵と文字連結させ、さらにMD5でハッシュにかけた値。
//////////////////////////////////////////////////////////
4-1)2-4)データフィールドのハッシュ値(MD4) を、3-2)で「暗号化」したもの。
//////////////////////////////////////////////////////////
つまり、正しい3-2)が無ければ、「暗号化チェックサム」は復号できない
説明で、横着するとろくなコトがない・・・
454:login:Penguin
05/07/10 17:39:23 m7iyk48S
>425
ソンナメンドクサソウナモンダレガツカウ?
って言いたい所だが、オープンソースってのに既に問題があるんじゃないの?
プロトコル名に「LINNY」ってのも、どうなんだ?
オープン仕様、オープンソースならば、Windowsでもいいわけだが・・・
プロトコル名は、「Anonymous Winny」をもじって、「ANONY」に一票。
455:login:Penguin
05/07/10 18:24:15 hZ/9wEx5
「ONANY」
456:login:Penguin
05/07/10 23:06:13 pnHySe/b
まともなファイルすら取得できなさそう。もしかしたらfreenet以下かもね。
457:login:Penguin
05/07/10 23:14:38 kOFHOXTv
鍵の長さって、現時点で論じるべきことなのかと思うがね。
458:login:Penguin
05/07/10 23:22:09 SZNYDAl1
最初は無暗号で徐々に暗号化を実装とかは?
459:login:Penguin
05/07/10 23:23:12 rhhJYpWd
で、コード書くやつはいるのか
460:login:Penguin
05/07/10 23:31:36 kOFHOXTv
リスクを背負う事無く安全に流通させる経路さえあれば誰か書くんじゃない?
461:425
05/07/11 01:33:11 MZK+5YtJ
>>456
>まともなファイルすら取得できなさそう。もしかしたらfreenet以下かもね。
やっぱり、そう思います?
やはり、「匿名性」と「セキュリティ」と言う相反するものを同居させるには
かなりムリがでてきますね。
この世界、あまりにOSIモデルのように、厳密で繁雑なシステムは
嫌われるので、もう少し簡略化したプロトコルが必要。
簡略化をする方法の1つは、連想鍵と言う概念を無くす方法です。 つまり、
キーファイルに暗号化ファイルのハッシュ値を直接貼り付けておき、
そのハッシュ値を元に、暗号化ファイルを探す方法
詳細は抜きにして、メリット・デメリットについて。
メリット
検索は高速。仕組みは簡単なので、暗号化ファイルの改ざん対策が容易
デメリット
「暗号化ファイル」から「キーファイル」が、解かってしまう。
つまり、キーファイルがなくても、ハードディスクを没収されると、P2Pネット内から
キーファイルを落として、復号されてしまう危険性がある
「キーファイル」検索条件に制限をかけるなどの対策を取れば、ある程度OK?
プロトコル名は、>>454にあやかって「Simple ANonymous winNY」を
もじって「SANNY」なんてのを考えてみる。
462:login:Penguin
05/07/11 16:32:40 /TB8jfv9
階層がわかりにくい…だれか図示してくれ…
何に対しての匿名性を確保して、何に対しての改変耐性を確保する予定なのかを
示してもらえると、もう少しわかりやすくなるかも。
連想鍵で1階層噛ましているの理由がよくわからん。
正規の検索かければ誰でも復号できるんでしょ?
攻撃側に対する耐性になってないと思う。
463:425
05/07/11 22:29:31 iaGb8hb0
>>462
>何に対しての匿名性を確保して
「誰」が「何のファイル」を、落としているかを「誰」にも分からなくし、
「誰」が「何のファイル」を、上げているのかを「誰」にも分からなくする。
「暗号化ファイル」単体では、何のファイルで何がかかれているか、
まったく不明にするコトで、完全な匿名性を実現しようとしたもの。
要は、国が本気で動いても、よく言われる「匿名の度合い」での、
「疑いの域を出ない」(Level 5)を実現しようとしたもの。
勿論、「言論の自由」のために(w
>何に対しての改変耐性を確保する予定なのか
運用しだすと、よくありそうなのは、「暗号化ファイル」を落としてみると
どこぞの会社の宣伝だったとか、と言う「騙し」ファイルの蔓延
キーファイルだけ作りまくる輩・・・など
464:425
05/07/11 22:33:50 iaGb8hb0
>連想鍵で1階層噛ましているの理由がよくわからん。
何故こんなに煩雑なものになったのかと言うと、
キーファイル ⇒ 暗号化ファイル は、分かっても、
暗号化ファイル ⇒ キーファイル は、絶対に分からなくする。
つまり、「キーファイル」と「暗号化ファイル」は、「同じデータ」を持ってはいけない。
という、前提条件があるからです。
具体的に言うと、壊れていたり、改ざんされている暗号化ファイルを ネットワーク内で、蔓延させないためには、
暗号化ファイルを キャッシュしたノードは、毎回、暗号化ファイルのハッシュを 行い、その値を公開する。
そして、検索者はそのハッシュ値を元に暗号化ファイルを検索し、
落とすと、壊れたり、改ざんされている暗号化ファイルは、
それ以上、蔓延することは無く消えていく。
これは、Freenetで実装されている技術です(ただし、暗号化はされていない)。
じゃあ、キーファイルに、「暗号化ファイルのハッシュ」を
直接貼り付けると、どう言う事が起こるでしょうか?
暗号化ファイルのハッシュ値は、暗号化ファイルから直ぐに分かってしまい、結果、
「キーファイル」と「暗号化ファイル」は、「同じデータ」を持ってしまっている。
で、こんなのになったワケ。
よく見ていただくと分かると思うが、「キーファイル」と「暗号化ファイル」は「同じデータ」を
一つも持っていません。(持っていますが、暗号化されていて分かりません)
ま、はっきり言って、私も、まともに動くとは思えない。(システム全体が重過ぎる
もう少し、使い勝手のいい、安易なものの方がいい。
465:login:Penguin
05/07/11 22:53:31 /qz9fPP7
URLリンク(s2net.s41.xrea.com)
アイデアだけはいっぱい出ているし、国内外問わず研究論文もたくさんある。
問題なのは規模が大きくなったときに(検索,転送効率等が)破綻せずに動くかと
いうこともあるし
いくら理論が優れていても導入がめんどくさいとかUIがコマンドラインしか使えない
だったら誰も使わないだろう
466:login:Penguin
05/07/11 23:20:09 wBE6vaKT
> いくら理論が優れていても導入がめんどくさいとかUIがコマンドラインしか使えない
> だったら誰も使わないだろう
そこはオープンソースなんだから、UI は誰かが作ってくれるだろう。
通信部分は Winny の時に散々ループしてた dll なり so なりにすればいいじゃん。
467:425
05/07/12 02:03:25 cTi5k0J7
>>465
>問題なのは規模が大きくなったときに(検索,転送効率等が)破綻せずに動くかと
確かにいえる。ノードは、全て信用できるものであれば、簡単でしょうけど
規模が大きくなれば、なるほど信用性は薄くなる。
Winnyでも、ウイルス流れたしね。
468:login:Penguin
05/07/12 11:11:49 nQBkc+7e
> Winnyでも、ウイルス流れたしね。
どんなウィルス?
469:login:Penguin
05/07/12 13:43:43 nQBkc+7e
ん?
> ヤバイと、思ったときは即座に、そのパーミッションをフォーマット・・・
なんだこれ。
470:login:Penguin
05/07/12 14:16:23 5JN9Gt1s
>>463
>「誰」が「何のファイル」を、落としているかを「誰」にも分からなくし、
>「誰」が「何のファイル」を、上げているのかを「誰」にも分からなくする。
「意図してダウンロードを開始した、末端ノード」に対しては、
「あるファイル(の暗号化されたもの)」であることはわかるのでは。
「意図して最初にシステムに投入した、末端ノード」に対しても
同様ではないか。
その情報がどこまで伝播してしまうか、で。
隣から見た場合、意図してダウンロードを始めたか否かで
「知っているかどうか」を知ることができるのは危険かなと。
>どこぞの会社の宣伝だったとか、と言う「騙し」ファイルの蔓延
「人間の認識するファイルの情報」と、「データそれ自体」が一致しているかどうかは
実際にファイルを展開できたノードにしか判定できない。
その情報を伝播させて大丈夫かな。
それとは別に、システムで検知できる改変(チェックサムが違うとか)は
これだと弾けそうだけど。
471:425
05/07/13 00:34:25 dIg+n2Qr
>「意図してダウンロードを開始した、末端ノード」に対しては、
>~中略~「知っているかどうか」を知ることができるのは危険かなと。
言っている意味が、分かりにくいので、良ければ、具体例を上げて
その危険性を、教えて欲しえてくれませんか?。
>「人間の認識するファイルの情報」と、「データそれ自体」が一致しているかどうかは
>実際にファイルを展開できたノードにしか判定できない。
キーファイルが、「信用」出来る場合を考えてみますと、
ハッシュ値、つまり「メッセージダイジェスト」は、データ情報の特徴を圧縮したもので、同じデータを
ハッシュにかければ、同じ値になるが、1バイトでも違うと、まったく違う値になります。
要は、ハッシュ値が一緒であればファイル内容も同じ(厳密に言うと、非常に低い確率で違う場合もあり)
であると言うことです。
つまり、ハッシュ値を元に検索を行えば、改ざんや破壊が起こっていないファイルを
探す事がで来ます。
そして、改ざんや破壊が起こったファイルは、参照される事無くいつしか消えていきます。
472:470
05/07/13 03:23:59 MNJFxM92
>>471
ちゃんと理解できてないんで、誤解してると思うけど。
例えば、このスレの過去ログをネットワークに投入したいとする。
投入する1次upノードは、当然内容を知っているはず。
ネットワークから、このスレの過去ログをダウンロードしようとしたノードは、
(その情報が確かなら)そのデータは過去ログであることを知っているはず。
隣接ノードに、1次upノードであること、またはダウン要求ノードであることが
(ダウン要求の内容(この場合は過去ログであること)も含めて)ばれてしまうことは、
例えどんな暗号化がされていようとも、内容を知った上で送受信しているという事になる。
これは、このスレの過去ログが発禁扱いになっていて、政府が監視中であるなら
危険なことだと思う。言論の自由を目指すんだしw
ダウン要求の内容がばれてしまうことは、ある要求をシステムでの要求に変えることと等価である。
あるファイルが落とせるってことは、投入側と取得側でなんらかの同意がいるってことでしょ。
取得するのと同じやり方で、取得方法だけ持っておいて、ネットワークを流れる要求を
監視されたらやばいんでないの、という意味。
当然中継ノードなら、内容は知らずに、P2Pネットワークとしての責務として
ただ踏み台にされただけだから、(現時点の世界では)こういう心配はしなくていいのでは、と。
473:470
05/07/13 03:32:35 MNJFxM92
>後段
キーファイルが信頼できるかどうかがそもそもやばいんで内科医ということ。
プロトコル的に、データが改変損傷してないのは保障するとして、
例でいうところの、このスレの過去ログではなく、Winny本スレの過去ログがおちてくる場合
そのキーファイルやら暗号化データはどうするのってこと。
そういうことする香具師はたくさんいるし、ミスってそうなることもあるよ。
内容知っている人にしかネットワークの暗号データは評価できないんだけど、どうやって排除すべきか。
内容が合ってるかどうかを流すことのできるノードも、情報を知っていることになって監視対象入りかも。
そういうことも含めて、誰が何の情報を知っていて、何の情報を知っていることになっていて
隠すべきものは何かな、と考えてたらよくわからなくなってしまって聞いたんだけど。
474:425
05/07/13 15:46:02 OdrjvaIG
このシステムは、Winnyと言うより、Freenet的だったので、
さまざまな部分で、効率が悪い。
今度は、Winnyベースの高速な匿名性ファイル共有で、特にファイル提供者の
匿名性が非常に高い物を思いついたので、まとまり次第うpします。
(キーファイルと暗号化ファイルに分けるという点は変わりません。)
>>472
このシステムにおいて、Freenetのような、アップデートの概念はありません。
あるのは、「検索」と「ダウンロード」だけです。
まず、「あるファイル」を自分の公開領域に置き、その存在をネットワークに知らせます、
知らせる、といっても、「ここにあるよ」と言ったら、匿名性もへったくれもないので、
ネットワークに、そのファイルの「検索クエリ」を送信します。
そして、その検索クエリは、高い確率で自分のノードに戻ってきます。
その時、自分自身で返事を返してやれば、誰にも悟られずに、そのファイルを
ネットワークのクラスタに追加できます。
しかし、キーファイルのような軽いファイルであれば問題ないが、重いファイルの場合、
Freenet同様問題がでてくるので、根本的な見直しが必要
475:425
05/07/13 15:54:48 OdrjvaIG
>>473
まぁ、人間ミスするのでそれは、大した問題ではないと思う(笑
そう言うのは、排除する必要もないんじゃ?
問題になってくるのは、例えば『ダイエット本』で検索した時、『ダイエット本』に
関係するキーファイルが落とされます。
しかし、『ダイエット本』と書きながら、暗号化ファイルを落として復号してみたら、
何故か『サラ金の広告』だった場合は問題です。
このための公開鍵です。要は、公開鍵はIDです。信用できないIDは、信用しなければいいだけです。
(その公開鍵であれば、無条件で消す)
そして、このような信用できない公開鍵があれば、信用できる公開鍵も存在するはずです。
公開鍵は、一種のIDです。ならば、信用性のある公開鍵の「なりかわり」の心配はないか?
それは、公開鍵に対する秘密鍵が分からない限り、不可能です。
476:login:Penguin
05/07/13 18:17:25 4rsiUBe0
で、いつごろまで屁理屈こねくりまわすの?
477:login:Penguin
05/07/13 18:28:32 +oLOISW/
おまえがしびれを切らして愚痴るまで。
つまりあともう少しだな。
478:login:Penguin
05/07/13 20:32:46 MNJFxM92
>>474
Freenetよか遅いのは考える意味がないw
この案はこの辺りが潮時か…
>「検索クエリ」
この送受信を傍受されたらどうするのって言ってるんだが。
>公開鍵
信用できる鍵にあたるまでがんばれってか。
攻撃側は信用できない鍵をばら撒くんだから、どうやって区別するんだと。
>>445 で指摘されてるように、固定は危険だし。
479:login:Penguin
05/07/13 20:59:14 4rsiUBe0
>>477
すでに愚痴ってるわけだが。
480:425
05/07/14 16:51:28 5jVfH12S
>>478
>Freenetよか遅いのは考える意味がないw
私もそう思います。ですが、キーファイルの通信は非常に軽いので
そのあたりで使えると思っています。
>この案はこの辺りが潮時か…
一応、暗号化ファイルの通信を独立させた、次の案があるので、
もう、暫く付き合っていただけませんか?
>この送受信を傍受されたらどうするのって言ってるんだが。
通信を暗号化したレイヤでトンネリング(SSLっぽいの)すれば、外部からのチャプチャリングは、
シャットアウトできます。
内部ノードは、自分の上位ノードと下位ノードのことしか、分からないので、
どのような経路を辿って「検索クエリ」が来たのかは、一切分かりません。
481:425
05/07/14 16:52:55 5jVfH12S
・・・続き
>信用できる鍵にあたるまでがんばれってか。
むしろ、信用できる鍵の方が多くなると私は考えています。
RSA2048bit公開鍵の鍵セットを作るには、どんなに強力なマシンでも
かなり時間を喰らうのにくらべ、「除外(一切受け付けない)」のは一瞬で終わる。
「攻撃者」が、鍵セットを作り続けたとしても、どっちが不利かといえば、
圧倒的に「攻撃者」が不利。
かといって、「攻撃者」は、「他の公開鍵」に成り代わろうとしても、
相手の「秘密鍵」を、知らなければいけない。
その「攻撃者」が、RSA2048bitをクラックできるとしたら、ネットバンキングは
とっくの昔に破綻しています。
ならば、そんな馬鹿な事を実際にする香具師は、殆ど現れないはずです。
482:425
05/07/14 16:54:57 5jVfH12S
>攻撃側は信用できない鍵をばら撒くんだから、どうやって区別するんだと。
上記の理由で、「なりかわり」は、理論上できません。
となれば、「同じ鍵」であれば「同一人物」です。
要は、「あなたは、何を基準に『人』を信用しますか?」ということです。
少なくとも、3回連続で、暗号化ファイルが存在しない悪質なキーファイルの鍵は
「信用できない」
5回連続で、きちんとした暗号化ファイルが存在するキーファイルの鍵は、ある程度は、
「信用できる」
って、ことです。
上記のような簡単な判断は、アプリ側に任せていいと思います。
あと、公開鍵の情報を保存しておく必要もあります。
>>445 で指摘されてるように、固定は危険だし。
外部からの、キャブチャリングは暗号化してしまえば、不可能です。
内部ノードは、上位ノードと下位ノードの事しか知りません。
その状況で、「公開鍵」の発信元を調べるのは、非常に困難を極めます。
「公開鍵」の発信元を調べるスピードよりも、ファイルが拡がるスピードの方が
圧倒的に速いからです。
一旦ファイルが拡がってしまえば、誰が発信元かなんて、絶対に分かりません。
483:login:Penguin
05/07/14 17:31:19 D9NFH06e
で、何%までできた?。机上の空論もいいけど、コード書いて実装できなきゃ
意味ないぞw
484:login:Penguin
05/07/14 17:39:02 TU8gjza9
よし、使用言語はObj-Cで決まり。
485:login:Penguin
05/07/14 18:27:54 +fLeQjmb
>>482
> 少なくとも、3回連続で、暗号化ファイルが存在しない悪質なキーファイルの鍵は
> 「信用できない」
これだと単純すぎると思う。
暗号化ファイルはちゃんと存在するけど、内容が期待したのと違うっていうような攻撃が来るんじゃないかな。
こういう攻撃だと、除外する側は暗号化ファイルを受信して、内容を調べて判断しなきゃいけない。
鍵を作る手間に比べて、受信した内容を確認・判断する手間って、むしろ大きいんじゃないかな。
期待通りのファイルかどうかを判断するのは、自動化が難しい問題だろうし。
486:login:Penguin
05/07/14 20:11:14 PKmLnshm
実際にコード書いて検証すればいいだけだのに、
どうして机上の空論を書くのに精を出しているのだろう。
487:login:Penguin
05/07/14 21:13:19 E+/HEPIn
しびれを切らして愚痴りだした香具師がいるなw
机上の空論、大いに結構。
488:login:Penguin
05/07/14 21:20:30 PKmLnshm
はて。
476 :login:Penguin :sage :2005/07/13(水) 18:17:25 (p)ID:4rsiUBe0(2)
で、いつごろまで屁理屈こねくりまわすの?
477 :login:Penguin :sage :2005/07/13(水) 18:28:32 ID:+oLOISW/
おまえがしびれを切らして愚痴るまで。
つまりあともう少しだな。
489:login:Penguin
05/07/14 21:35:52 ey7oBSjc
425は机上の空論の妄想野郎。
>>433で本人が認めてるし。こいつ自身は実装やる能力がない。
そんな、脳ナシに標準化なんか出来るか。Freenetに任せとけ。
490:login:Penguin
05/07/14 23:14:16 HLeFWI2x
わからんかなぁ
ほら、あれと同じ雰囲気を楽しむスレなんだよここは。
居酒屋や串焼き屋でだ、仲間内で出来もしない事を熱く議論することがあるだろ。
そういう空気が好きなんだよ俺等
491:login:Penguin
05/07/14 23:26:53 PKmLnshm
釣り堀スレか。
492:きたろう
05/07/14 23:38:17 3X5YI5cJ
常に欲求不満でイライラしている。
自分の能力に劣等感を持っている。
出る杭は徹底的に叩かないと気が済まない。
そんなネガティブな感情に流されてる暇人の存在を感じます、父さん!
493:login:Penguin
05/07/16 03:35:55 qxGyOozH
>>486
実際に手を動かせるくらいできてればこんなところで考える前に
ダウソで"ちょっとまちなー"ができるって。
システムが中途半端だとコーディングする意味ないし。
>>480
>通信の傍受
外部からの、ではなく、内部からのってこと。
つまり(正規の動作をある程度行う)スパイノードの存在は大丈夫かなと思って。
>どのような経路を辿って「検索クエリ」が来たのかは、一切分かりません。
検索システムがどのように予定されてるのかはわからないけど。
例えばクエリが帰ってくるようにリターンアドレスを入れておくような実装だと、
「誰が」リクエストを出したのかがばれてしまう、というような情報漏れを心配している。
>一旦ファイルが拡がってしまえば、誰が発信元かなんて、絶対に分かりません。
1次Upノードが特に危険だと思うんだが。
Shareとかは強制拡散してるみたいだし、Freenetとかはバッファにプッシュして
所持ノードの概念がなくなるみたいだし、いろいろ工夫してると思う。
Winnyは、何もしない、という戦略をとったが。
494:425
05/07/16 23:10:58 jAChWphq
新案をコトコト煮詰めています。
暗号化ファイルは、StaticNATを使った面白いネットワーク偽装を
考えています。
>>493
キーファイルの共有は、完全なFreenetスタイルを考えています。
つまり探索とかもいっしょ、大量のノードが協力しない限り、
要求者を求めるのは難しい。
>1次Upノードが特に危険だと思うんだが。
「自分自身」で「自分自身しか持っていないファイル」を探索するクエリを、
隣のノードに送信すると、どうなると思います?
Freenetでは、経路上に多くのループが発生します。
つまり、必ず探索クエリは、自分自身に戻ってきます。
そこで、アップロードしながらダウンロードしたらどうなるでしょうか?
自分の下位ノードは、自分がそのファイルを中継しているか、アップしている
かは分かっても、誰がその要求を出しているのか分かりません。
逆に、上位ノードは、自分がそのファイルを中継しているか、要求している
かはわかっても、そのファイルが何処から流れてきているのかわかりません。
そして、途中経路では「複製」が出来ます。
つまり、1次Upノードは、誰にも悟られる事なくネットワーク上にファイルの
複製を作れます。
つまり、これで誰が1次Upノードかは謎になる。
495:login:Penguin
05/07/17 00:28:28 iMIptb/B
ほんとにできてるの?何%くらい
496:login:Penguin
05/07/17 01:26:26 ksRYqrdf
>>495
>>489
497:login:Penguin
05/07/17 09:10:57 3e1zqbRW
>>495-496
早漏は損だよ
498:login:Penguin
05/07/17 17:36:40 hmmV4Rhb
>>494
>1次Upノード保護
経路のループを利用して自己偽装Down要求ってことですな。
>Freenetでは、経路上に多くのループが発生します。
>つまり、必ず探索クエリは、自分自身に戻ってきます。
このループはある程度大きくないと効果が期待できないと思うんですが、
あまり大きいと、中継転送による速度の低下が心配されると思いますが
バランスとかはどうなるでしょうか。
確実にクエリが戻ってくることは期待して大丈夫ですかね。
繋ぎ変えがおこるネットワークならば、ループが切れたりしないかな。
>ネットワーク偽装
期待してます。よろ。
499:425
05/07/18 18:56:18 juv970X8
「HannyNet(Hashing anonymous winny Network)」案
ちょっとは、まとまった思うので書いてみる。
「HoneyNet」(行動の一部始終を監視できるように設計されたネットワーク)の
真逆を逝っているので、何となくつけてみたくなった。
匿名性の重要度
ファイル提供者 >> ファイル要求者
ファイル提供者の匿名性は最優先される。
なぜなら、「提供する者」がいなくなれば、
「共有」は存在しえないからである。
つまり、ファイルを提供すればするほど、匿名性の保障に優位に立つことができて、逆に、
吸いとるだけの輩は、匿名性を保障しないようにシステム全体が推移するような仕組みが
望ましい。
500:425
05/07/18 18:57:13 juv970X8
ファイル構成
1.キーファイル(テキスト形式)
1-0)キーワード情報
クラスタ化に必要な自然言語パターン
1-1)暗号化ファイル共通鍵
読んで字の如く、暗号化ファイルの共通鍵。
1-2)暗号化ハッシュコード
2-1)のハッシュコードを、1-3)の秘密鍵で、暗号化したもの。
(べつに、1-1)で暗号化しても問題ない。)
意味がないように思えるが、非常に意味がある。
暗号を解かなければ、暗号化ファイルのハッシュコードは分からない。
つまり、「暗号化ファイル」から「キーファイル」は分からない。
1-3)IP/ポート交換ワンタイム公開鍵(RSA 128bit)
IPとポート番号を申請するときに使う。
詳しくは、後述。
501:425
05/07/18 18:58:06 juv970X8
1-4)公開鍵(RSA 2048bit)
1-5)の公開鍵。
1-5)電子署名
1)~4)の電子署名。こうした方が、たぶん都合がいい。
1-6)1-4)のハッシュコード
ノードにキャッシュされる度、随時上書きされる。
キーファイルの検索では、同時に公開鍵の参照も許しているが、
256バイトのデータを毎回参照していたのでは、ノードに対する
負担が大きい。
そこで、ハッシュを用いて大まかに検索して送信する。そして、
最終的な判断は、検索クエリを出したノード自体に委譲する。
ここで、使うハッシュ関数は、MD5やMD4のように厳密なものではなく
計算量が、非常に軽いものが望ましい。固定ビット長なので、上手い
方法があるはずです。
502:425
05/07/18 18:59:12 juv970X8
2.暗号化ファイル(バイナリ形式)
2-1)ハッシュコード
2-2),2-3)のファイルの内容をハッシュにかけた値(MD5)
要は、ファイル名。
ノードにキャッシュされる度、随時上書きされる。
2-2)データフィールド
暗号化された、データが入っています。
2-3)IP/ポート交換ワンタイム秘密鍵(RSA 128bit)
ファイル最後尾から、128bitが1-3)に対する秘密鍵になっている。
詳しくは、後述。
503:425
05/07/18 19:00:32 juv970X8
3.通信ポート
3-1)管理ポート(TCP)
ポート番号: インストール時に決定
主に、キーファイルの検索/受け渡しをする。
暗号化ファイルのプロキシ要求(後述)や、NAT要求(後述)もこのポートで行う。
この通信は、暗号化される。
要は、コマンドもファイルも一緒に送り、暗号化の手間を軽減する。
処理の優先度は、
NAT要求 > 検索クエリ > キーファイルの送受信 > プロキシ要求
3-2)暗号化ファイル検索ポート(UDP)
ポート番号: インストール時に決定
3-1)の通信でコネクションが張られていないIPからの要求は、
全て遮断することとする(応答は受け入れる)。
この通信は暗号化されない。
504:425
05/07/18 19:01:18 juv970X8
3-3)暗号化ファイル転送ポート(TCP)
ポート番号:随時決定
特に説明ナシ。この通信も暗号化されない。
3-4)ICMPエコー要求(ICMP)
イワユル、「ping」コマンドで、セキュリティ上は切っておいた方が望ましいが、
相手のマシンが、起動しているかどうかを調べるのに最も楽な方法。
TCPコネクションを確立させる前にpingを送れば、余計なSYNパケットを出さなくてすむ。
505:425
05/07/18 19:02:07 juv970X8
コマンド・パケットフォーマットなど
今の段階では適当。とりあえず、決まっている物から
(所詮、暇人の考える程度の事ですから)
4.暗号化ファイル検索パケット(UDP通信)
4-1)余命(8bit)
そのパケットのが後、どれ位生きれるのかを示す。1つノードを通過すると、
年をとって余命が減るかもしれない。また、減らないかもしれないし、
一気に老けてしまうかもしれない(要は適当に決まる)。
勿論、0になった地点で死にます。
4-2)乱数(24bit)
通信を区別するために、適当な乱数を設ける。
4-3)ハッシュコード(128bit)
暗号化ファイルのハッシュ値
506:425
05/07/18 19:03:03 juv970X8
4-4)暗号化IP/返信ポート(128bit)
要求ノードのIPと返信ポートを1-3)で暗号化したもの。
暗号化ファイル、つまり、1-3)の秘密鍵である2-3)を所持している者だけが分かる。
暗号化ファイルを所持していたとしても、キーファイルを所持していなかった場合、
ファイルの内容は分かりません。
128bitRSA暗号なので、公開鍵が分かれば、本気になれば解ける程度の強度。
つまり、キーファイルから暗号が解けるかもしれない。
ですが、キーファイルがあればの話しですし、公開鍵も不明な状態で解けるほど
軟な暗号じゃありません。
キーファイルあっても、ハッシュコードから、直接キーファイルは分からないので
ないも同然。
勿論、所持しているキーファイルの1-2)暗号化ハッシュコードを復号していた場合なら、
公開鍵は、分かってしまいます。
しかし、匿名性の本質は、暗号化の強度では決まりません。
つまり、要求ノードが「ファイル要求者」だとは、限らないということです。
507:425
05/07/18 19:06:51 sTNmNfe5
5.プロキシ要求コマンド 必要引数
5-1)ハッシュコード
暗号化ファイルのハッシュ値
5-2)IP/ポート交換ワンタイム公開鍵(RSA 128bit)
キーファイルの1-3)と同じ
NAT要求コマンド
ポート貸与要求、延長要求、開放要求の3つがあるが、詳しくは後述する。
6.通信体系
6-1)留意点
仕様的に、NAPTユーザーは、使用不可能になる。
まぁ、人(会社、学校)の回線を使って、P2Pするな。
自己責任でせんかい!
って、意味もあります。(どっちにしろコイツ等、吸い取り専門ですし)
6-2)キーファイル通信
キーファイルの通信は、Freenet的で、ノード間の通信は暗号化されます。
Freenetとの違いは、検索が「自然言語」である事。
「自然言語+公開鍵(のハッシュ)」の検索も可。
Freenetは、小さいファイルを扱うには、非常に優れています。
508:425
05/07/18 19:08:34 sTNmNfe5
6-3)暗号化ファイル通信(基本検索、基本通信)
暗号化ファイル通信の通信は、「基本通信」、「プロキシ通信」、「NAT通信」に分かれます。
まずは、基本となる「基本通信」について説明します。
基本通信は、完全な「直接通信」です。この段階では、通信が行われる2つのノード間では
匿名性もへったくれもありません。ですが、「2つのノード」以外には、通信している事は
悟られません。勿論、「2つのノード」のどちらかに悪意がある場合は別になります。
この段階では、匿名性はないに等しいことになります。
検索は、UDPポートを使った、一斉広報による検索方式です。
トラフィックが無駄に膨れ上がる恐れがありますが、上手くいけば高速な回答が予測できます。
検索方法は、まずファイル要求ノードが、現在接続されている全てのノードに検索パケットを送信する。
検索パケットを、受け取ったノードは、自分の公開領域の中から、暗号化ファイルを探します。
暗号化ファイルが存在すれば、暗号化ファイルに埋め込まれている2-3)IP/ポート交換ワンタイム秘密鍵で復号します。
復号すれば、IPと返信ポートとが分かるので、自分のIPと接続を許すポートを付加した応答パケットを『直接』送ります。
「自分のIPと接続を許すポート」は、中間ノードを通らないので暗号化する必要性はないのですが、応答パケットと、
検索パケットの区別を外部から難しくするために、あえて2-3)IP/ポート交換ワンタイム秘密鍵で暗号化して送ります。
509:425
05/07/18 19:09:17 sTNmNfe5
これで、要求ノードは、ファイルの存在場所を知る事ができます。匿名性はないに等しいのですが、これが基本となります。
暗号化ファイルを探しなければ、余命を更新して、現在接続されている全てのノードに検索パケットを
送信する(ただし、送信元ノードには送らない)
余命をいくつ減らすかを乱数でランダムに決めますが、余命によって重み付けが変わってきます。
(この例は、適当で極端な例です)
余命 1: 7割の確率で1減らす。3割の確率で減らさない。
余命 2: 5割の確率で1減らす。2割の確率で2減らす。3割の確率で減らさない。
余命 3: 5:2:1:2 = 1減らす:2減らす:3減らす:減らさない
余命 4: 4:2:2:1:1 = 1減らす:2減らす:3減らす:4減らす:減らさない
余命 5: 4:2:2:1:1:0 = 1減らす:2減らす:3減らす:4減らす:5減らす:減らさない
検索パケットは、余命が0になった地点で消滅します。
検索パケットの余命は、第1回一斉広報は、「1」。第2回一斉広報は、「2」と段々深くなっていきます。
どの程度の深さまで、探せば良いのかは数学的モデルを立ててやる必要があるかもしれない。
510:425
05/07/18 19:10:02 sTNmNfe5
6-4)暗号化ファイル通信(プロキシ通信)
普通のプロキシ通信ですが、プロキシの選び方はまったくの「デタラメ」です。
まず、接続されているノードの中から適当に、「プロキシ要求コマンド」を送信します。
プロキシ要求コマンドには、5-1)『ハッシュコード』と、5-2)『IP/ポート交換ワンタイム公開鍵』が
含まれます。
プロキシ要求コマンドを受け取ったノードは、9割の確率で、6-3)「基本検索、基本通信」に移行し、
ファイルを中継します。
のこり、1割の確率で、そのノードは、さらに接続されているノードの中から適当に、
「プロキシ要求コマンド」を送信します。
90%以下の確率で、
要求ノード === 中継ノード === 提供ノード
99%以下の確率で、上のパターンか、
要求ノード === 中継ノード === 中継ノード === 提供ノード
つまり、誰が始めに「プロキシ要求コマンド」を出したかを、分かりにくくするのが目的。
中継ノードは、中継ファイルをキャッシュするが、中間ノードの役割は要求者に対するフィルタです。
ですから、キャッシュの消去は個人の自由です。
キャッシュを消去しなっかった場合、6-3)「基本検索、基本通信」で引っかかって、提供ノードに
なってくれます。
511:425
05/07/18 19:10:51 sTNmNfe5
6-4)暗号化ファイル通信(プロキシ通信)
普通のプロキシ通信ですが、プロキシの選び方はまったくの「デタラメ」です。
まず、接続されているノードの中から適当に、「プロキシ要求コマンド」を送信します。
プロキシ要求コマンドには、5-1)『ハッシュコード』と、5-2)『IP/ポート交換ワンタイム公開鍵』が
含まれます。
プロキシ要求コマンドを受け取ったノードは、9割の確率で、6-3)「基本検索、基本通信」に移行し、
ファイルを中継します。
のこり、1割の確率で、そのノードは、さらに接続されているノードの中から適当に、
「プロキシ要求コマンド」を送信します。
90%以下の確率で、
要求ノード === 中継ノード === 提供ノード
99%以下の確率で、上のパターンか、
要求ノード === 中継ノード === 中継ノード === 提供ノード
つまり、誰が始めに「プロキシ要求コマンド」を出したかを、分かりにくくするのが目的。
中継ノードは、中継ファイルをキャッシュするが、中間ノードの役割は要求者に対するフィルタです。
ですから、キャッシュの消去は個人の自由です。
キャッシュを消去しなっかった場合、6-3)「基本検索、基本通信」で引っかかって、提供ノードに
なってくれます。
512:425
05/07/18 19:13:05 NWEvQOcw
6-5)暗号化ファイル通信(NAT通信)
(説明は、大雑把です)
今回の目玉である「提供ノード」の匿名性を上げる目的で考えたもので、提供ノードに必須な機能です。
これは、StaticNATをネットワーク偽装です。StaticNATとは、NATテーブルを元に、自分のあるポートに
アクセスしたパケットを、別のIPに書き換えて、転送する技術です。
LAN内のプライベートIPが割り振られたWWWサーバーなどに、外部からアクセスするために使われます。
それらを駆使して、要求ノードAは、Bと通信していると思い込んでいるが、実はCと「直接通信」している。
と言う、なんとも「あやふや」な事ができます。
原理は、こう言うことです。
まず事前に、ノードC(192.168.1.32/24)は周りのノードに適当に「ポート貸与要求」を出します。
ノードB(172.168.5.123/24)に「ポート貸与要求」が来ると、空いているポートをランダムに選びます。
ここでは、「4747」とします。これをノードCに通知します。
513:425
05/07/18 19:13:45 NWEvQOcw
貸与要求したノードCも、「4747」が開いていれば、「OK」を返し、開いていなければ、
同じ動作を繰り返します(普通、開いています。)
ノードBは、「4747 ⇒ ノードC(192.168.1.32/24)」と言う情報をNATテーブルに書き込みます。
さらに、「192.168.1.32 ⇒ 172.168.5.254」とルーティング情報を書き加える。
(なお、172.168.5.254は、ノードB(172.168.5.123/24)のデフォルトゲートウェイ)
これで、「4747」にアクセスされたパケットは、無条件で、ノードBに送られます。
(出来なかったら、仮想ネットワークカードを作ってやる必要があります。)
しかし、このままでは不正利用を招くので、ノードBには、TCPのPSHパケットと、UDPパケットは
転送しないよう設定します。
これで、ノードBの設定はおわりです。
514:425
05/07/18 19:14:32 NWEvQOcw
ノードCは、ノードBと「同じIP」を持つ、仮想ネットワークカード「X(172.168.5.123/24)」を作成します。
物理ネットワークカードから、「4747」にアクセスされたパケットを、仮想ネットワークカード「X」に
送るために、「4747 ⇒ X(172.168.5.123/24)」と言う情報をNATテーブルに書き込んみます。
これで、物理ネットワークカードから、「4747」にアクセスしたパケットは、無条件で全て、
仮想ネットワークカード「X」に送られます。
これで全ての下準備は、完了しました。
ノードCに検索パケットが届いて、調べてみるとその暗号化ファイルを発見。
復号してみると、ノードA(10.1.1.2/24)から届いた物である事が分かった。
ここで、「10.1.1.2 ⇒ 192.168.1.254」とルーティング情報を書き加える。
仮想ネットワークカード「X(172.168.5.123/24)」から、応答パケットを送信。
ノードAは、172.168.5.123(ノードBと見せかけた「X」)が、「4747」の接続を許可したしてくれたと知る。
ノードAは、172.168.5.123(ノードB)の「4747」に、SYNパケットを送る。
ノードBは、192.168.1.32(ノードC)の「4747」に、SYNパケットを転送。
ノードCは、172.168.5.123( 「X」)の「4747」に、SYNパケットを転送。
「X」 は、10.1.1.2(ノードA)の送信元ポートに、ACK,SYNパケットを転送。
(以下省略)
どうなっているかを図で説明すると、
ノードB ------------------------------┐
↑ l
l |
l ↓
ノードA <---------- 仮想カード ← ノードC
515:425
05/07/18 19:16:58 NWEvQOcw
つまり、ノードA からの通信は、A→B→Cとなるが、ノードCからの通信は、C→Bとなる。
こうすると、何がいいのかと言うと
(1) 高速転送
ノードA からの通信量より、ノードCからの通信量はの方が遥かに多い。
そのため、直接通信と変わらない速度が期待できる。
(2) ファイル提供者の匿名性が高い(最重要)
ファイル提供者の匿名性について考えてみると、
*ノードAは、『あるファイル』を、ノードBから落としているようにしか見えない。
*ノードBは、「ノードC」と「ノードA」が通信している事は分かるが、「ノードC」が、
「ノードA」に、『どういうファイル』を送っているかは、ノードBを中継しないので、
『物理的』に、わからない。
しかし、ノードAが「ファイル要求者」の場合、ノードCからは、モロで見えているので、
完全な通信モデル図はこうなる。
NATノード ----------------------------------┐
↑ l
l |
l ↓
要求ノード === 中継ノード <---------- 仮想カード ← 提供ノード
つまり、最終的には、Winnyと同程度のスピードで、クラスタ化はされないので
少々、使い勝手は悪い物になると思われます(前ほどではないが)。
516:425
05/07/18 19:18:16 NWEvQOcw
新手のアラシさんみたいな量になってしまった(笑
517:525
05/07/18 20:26:26 UC0vJmtQ
なんだかよう分からんが期待しとるよ
518:login:Penguin
05/07/18 22:52:22 g7t80EI+
>>517
>>490
519:login:Penguin
05/07/19 03:08:32 K55Dj3jz
ざっとしか読んでないんで間違ってたら訂正よろ。
重要な点をまとめると
1)キーファイルにワンタイムRSA公開鍵、暗号化本体ファイルにワンタイムRSA秘密鍵を仕込んでおく。
ある暗号化本体ファイルを要求するノードは、返答先をキーファイルの公開鍵で暗号化する。
暗号化本体ファイルを持っているノードのみが、これを復号して通信できる。返答の中の保持ノードの
アクセス先は秘密鍵で暗号化され、キーファイルを持っているノードのみ復号できる。
2)キーファイルから、暗号化本体ファイルを落としたいノードは、自分のIPアドレスとポートを
ワンタイム公開鍵で暗号化し、ブロードキャストする。この本体検索要求は、TTLを仕込んでおき
転送されているうちにある程度で破棄されるようにする。
応答があれば、復号した所持ノード情報を元に直接ダウンロードする。
3)もしくは、暗号化本体ファイルのハッシュと、ワンタイム公開鍵を、隣接ノードにプロクシ転送要求をかける。
要求されたノードは、適切な確率で再転送か、2)で示したダウンロードを実行する。
4)自分のIPアドレスとあるポートを、他のノードに貸し出すこともできる。
この場合、貸し出したポートへの通信はすべて転送される。
520:login:Penguin
05/07/19 03:15:47 K55Dj3jz
ごめん。正直NATの説明がよくわからなかった。
これって実装の手間を考えたら、効果ってそんなにあるの?
NATに応じなくてもネットワーク的にペナルティないんだったら俺なら応じてやんない。
プロクシ転送要求に応じれば、自分のHDDと帯域は使われるかもしれない。
けれども、自分の出した要求が、他の人の要求の結果だという言い訳ができるし、
ひょっとしたらお宝ファイルかもという期待がある。
転送の中身見れないなら、踏み台になる意味ないじゃん。
>>500
暗号化ファイルのハッシュがわかんないと落とせないんだったら
キーファイルに書いてないと、人間言語からの検索が不可能になるのでは。
521:425
05/07/19 21:40:31 mMosH/WX
>>519
スマソ。大体、そんな感じです。
>>520
>ごめん。正直NATの説明がよくわからなかった。
くわしくは、「StaticNAT」か「ポートフォワーディング」でぐぐってください。
>これって実装の手間を考えたら、効果ってそんなにあるの?
私もプログラマじゃないので詳しい事は言えないが、Linuxで実装するなら、
そこまで難しくないと考えられる。
ここに書いていることは、Linuxカーネルが提供するサービスを
サーバOSならば当然持っている機能を組み合わせただけです。
つまり、適当にOS呼び出して使うだけでOK(のはず)
逆に、Windowsでは、面倒かも。
522:425
05/07/19 21:45:21 mMosH/WX
続き・・・
>NATに応じなくてもネットワーク的にペナルティないんだったら俺なら応じてやんない。
べつに、大して重い処理じゃないし、単に転送するだけし、主にACKパケットを
中継するだけなので、帯域を犯される心配もない。ISDNでもOK(笑
ペナルティではなく、応じてくれた相手に対して報酬になるようした方が
よいのでしょうけど、今は詳しくは考えていません。
>プロクシ転送要求に応じれば、自分のHDDと帯域は使われるかもしれない。
>けれども、自分の出した要求が、他の人の要求の結果だという言い訳ができるし、
>ひょっとしたらお宝ファイルかもという期待がある。
>転送の中身見れないなら、踏み台になる意味ないじゃん。
はっきり言って、中継ノードにされることは『踏み台』にされるだけで、
何のメリットもない
(積極的にファイル供給者になると少し変わってくるが、そのことは、また今度)
お宝ファイルがあったとしても、それに対応するキーファイルが見つかる
可能性は、この仕様では薄い。
別に、『踏み台』になるかならないかは、そのノードの自由だと考えています。
ですが、『踏み台』に成らないノードに対して、誰が『踏み台』になろうと思います?
結果、そういうノードは、孤立していきます。
別にプロキシ無しでも通信可能ですし、『言論の自由』を求めない方には丁度いいのかも(w
523:425
05/07/19 21:47:03 mMosH/WX
続き・・・
>>500
>暗号化ファイルのハッシュがわかんないと落とせないんだったら
>キーファイルに書いてないと、人間言語からの検索が不可能になるのでは。
1-0)キーワード情報
クラスタ化に必要な自然言語パターン
↑これのことですか?
これには、色々なキーワードを、URLエンコードされた形で入れておきます。
キーワードは、アップ時に「ジャンル」と「ファイル名」のような物を要求し、
適当にアプリ側で文法解析させて、キーワード情報として入れておきます。
これで、キーファイルを「自然言語」で検索して、キーファイルに付いている
ハッシュの暗号化を、これもまたキーファイルに付いている鍵で復号して、
そのハッシュ値で、暗号化ファイルを検索します。
524:425
05/07/19 21:50:39 mMosH/WX
訂正: クラスタ化 → 検索
結構、書き貯めしていたので、なぜこんな間違いを書いたのかは
まったく記憶にない。
525:login:Penguin
05/07/20 00:28:12 IaDxISng
>>523
読み間違えてました。
キーファイルから暗号化本体ファイルへのリンクとなるハッシュは、ワンタイムRSA秘密鍵で
暗号化されてるのね。キーファイルに公開鍵が含まれるから解けると。
>暗号を解かなければ、暗号化ファイルのハッシュコードは分からない。
>つまり、「暗号化ファイル」から「キーファイル」は分からない。
ってどういう意味?暗号化ファイルを持っていれば、公開者RSA 1-4) 1-5)を除いて
キーファイルは生成できるんじゃ。
>>521
StaticNATについては、PCユーザは火壁の内側なユーザがかなりの数いると思うんだけど、
プログラムから、火壁に対して設定しなければならなくなるんだけど(で理解あってるよね)
めんどくさそうと。
プロトコル独自の踏み台、つまり中継転送についてはプログラムの自由だと思うけど、
インターネットとしてのポートフォワーディングを行うとなると、セキュリティ面が心配。
そこまでの実装上の配慮を考えても、導入しなければならない機能なのか、
他で代替可能でないのかについて、ちょっとよくわからなかった。
526:login:Penguin
05/07/20 00:30:31 IaDxISng
ちなみに。
RSA公開鍵ペアを誰かがこっそり書き換えて中間者攻撃されたらどうします(・∀・)ニヤニヤ
信用を集めてから悪さしたり、結構攻撃に弱そうな気がしたんだけど大丈夫かな。
527:login:Penguin
05/07/20 00:38:55 zmMtfR5C
NAT は Skype とかが使ってる UDP なんちゃらで解決しないのか?
528:425
05/07/20 21:48:47 d8u1kb3S
>>525
>>暗号を解かなければ、暗号化ファイルのハッシュコードは分からない。
>>つまり、「暗号化ファイル」から「キーファイル」は分からない。
>ってどういう意味?暗号化ファイルを持っていれば、公開者RSA 1-4) 1-5)を除いて
>キーファイルは生成できるんじゃ。
暗号化ファイル自体は、500>>の
1-1)暗号化ファイル共通鍵
読んで字の如く、暗号化ファイルの共通鍵。
によって暗号化されており、キーファイルがなければ解読不可能です。
>>つまり、「暗号化ファイル」から「キーファイル」は分からない。
これについては、分かりやすいモデルで説明しますと、こう言うことです。
(実際は、ちょっと違います)
529:425
05/07/20 21:51:17 d8u1kb3S
キーファイルA 523*769
キーファイルB 617*857
キーファイルC 677*787
キーファイルD 727*643
キーファイルE 809*661
キーファイルF 563*619
キーファイルG 467*647
キーファイルH 503*991
暗号化ファイルA 534749
暗号化ファイルB 498473
暗号化ファイルC 402187
キーファイルの右に書いているのが、「暗号化ハッシュコード」で
暗号化ファイルの右に書いているのが、「ハッシュコード」です。
キーファイルから、暗号化ファイルを見つけるには、
キーファイルAの「暗号化ハッシュコード」は、「523*769」
523*769 = 402187
なので、「キーファイルA」の暗号化ファイルは「暗号化ファイルC」だと
簡単に分かります。
暗号化ファイルAに対する、キーファイルはどれでしょうか?(制限時間30秒)
普通、ムリですよね?
つまり、「キーファイル」から「暗号化ファイル」は分かっても、
「暗号化ファイル」から「キーファイル」は分からない。
530:425
05/07/20 22:38:29 X6ELMDVA
>StaticNATについては、PCユーザは火壁の内側なユーザがかなりの数いると思うんだけど、
>プログラムから、火壁に対して設定しなければならなくなるんだけど(で理解あってるよね)
>めんどくさそうと。
まず、P2Pやるなら市販のパーソナルFWは消しときましょう。
(つうか、linux用のパーソナルFWってあるのか?)
つまり、使ってないポートは、全部斬って置いて、使うポートは、アプリ(デーモン)自体が、
アクセス制限かけないといけません。(httpdとかsendmailとかも、全部そうなってます。)
パーソナルFWは、全自動で使ってないポートは、全部斬ってくれるだけで、
他は大した事はやってくれません(FWとウイルス対策ソフトは基本的に違うモノです)。
つまり、P2Pといっても『サーバ』なので外からの、アクセスを許すことになるので、
必ず、それ相応のリスクは必ず伴います(Winnyのウイルスとか)。
まぁ、デーモンの起動ユーザをプロセスごとに複数の一般ユーザ分ければ、
実質的な被害は、あまり出ないでしょうけど。
531:425
05/07/20 22:39:39 X6ELMDVA
>プロトコル独自の踏み台、つまり中継転送についてはプログラムの自由だと思うけど、
>インターネットとしてのポートフォワーディングを行うとなると、セキュリティ面が心配。
>そこまでの実装上の配慮を考えても、導入しなければならない機能なのか、
>他で代替可能でないのかについて、ちょっとよくわからなかった。
結論から言うと、プロキシの方が、セキュリティ面をしっかり考えなければならない。
「ポートフォワード」で、セキュリティが懸念されるのは、ネットワークの内側(LAN内)に
ネットワークの外側(インターネット)からアクセスがあるからです。
これでは、FWを付けても、その穴から突破されれば、無防備なLAN内のPCに簡単に
アクセスされてしまいます。
一方、P2Pは、「自分」と「その他」の概念しかなく、BがCに「ポートフォワード」して、
AがCにアクセスした所で、セキュリティー的には、AがCに直接アクセスするのと変わりません。
Bは、単なるルータにすぎません。
しかし、プロキシの場合、デーモンつまり、アプリ自身が提供するサービスなので、
アプリ自体に、バグがある場合、速攻で攻撃対象になります。
532:425
05/07/20 23:16:59 fW484GcX
>ちなみに。
>RSA公開鍵ペアを誰かがこっそり書き換えて中間者攻撃されたらどうします(・∀・)ニヤニヤ
「RSA公開鍵ペア」はIPを交換する鍵ですよね?
「書き換える」ためには、「キーファイル」と「暗号化ファイル」の双方を所持していかないと、
書き換えられません、さらに、書き換えた「キーファイル」と「暗号化ファイル」を流通させないと
いけません。
とても、面倒で時間がかかります。そんな事しなくても「キーファイル」と「暗号化ファイル」を
もっていれば、どこの「中間ノード」と思われるノードが、「どんな」ファイルを
欲しているかは分かります。
じゃあ、何故「中間ノード」を攻撃するのか? 単にクラックが目的であれば、中間ノードなど
関係無しに、当たりかまわず攻撃しまくればいい。
つまり、結論としては、単なる「クラッカー対策」
クラッカー対策は、全てに通じるもので、P2Pに限った問題ではありません。
(それが難しいのですけどね。)
533:425
05/07/20 23:18:49 fW484GcX
>信用を集めてから悪さしたり、結構攻撃に弱そうな気がしたんだけど大丈夫かな。
信用を集めてから、粗悪なファイルを流すということですか?
攻撃にしては、時間がかかりすぎると考えられるし、さらに信用を集めるための
ファイルは、何処から持ってくるのかという問題がある。
さらに、匿名性自体を犯す攻撃じゃありません。
結局、得するのは信用を集めている間に、ファイルを得た人々だけです。
534:425
05/07/20 23:39:06 BeHtAV13
>>527
>NAT は Skype とかが使ってる UDP なんちゃらで解決しないのか?
UDP hole punching のことですね。
私も、あまり知らないんで詳しい事はいえませんが、
これは、あるサーバーが、IPとポートを貸し出し、通信を
ネットワークレベルで仲介してくれる技術です。
まぁ、これをP2Pと呼べるのか?という疑問もありますし、
匿名性の概念はありません(と思う)
さらにいえば、現在の仕様では、NATの中は通してもらえません。
535:login:Penguin
05/07/21 02:58:11 z2CP8IVj
>>532
中間者は、自分用のRSA鍵ペア(ポート用とファイル用)を作っておき、キーファイルの伝播の際に
1-3) 1-4)を自分用のものにすりかえて、1-2) 1-5)をあわせておく。
暗号化ファイル検索要求が来れば、おもむろに自分の秘密鍵で検索をかけたノードを復号できる。
この書き換えは、もともとのキーファイルを持っているだけでよく、
(中身を知る必要がなければ)暗号化ファイルは必要ない。
システム的に排除できる可能性は、1-4)の公開鍵が実績があるかどうかでキーの信頼度を
決めることだろうけど、簡単に信頼度を集められるようにすると、少し正常動作をしてあとは釣り人に
なればいいだけだし、あまり難しくすると長い間同じ鍵を使わなくてはならなくなるのでノードの特定に
繋がったりしそう。
完全に書き換える必要はない。単に、キーファイルが「それっぽい」だけでいいんだから。
せっかくRSAで検索送信者保護をしても間に入られたら意味ないなとふと思っただけだけ。
要求の転送で隠せるからある程度はいいけど、Winnyと同程度になっちゃうな。
536:login:Penguin
05/07/21 03:05:45 iQmD7UoW
データ本体のキャッシュの寿命の方はどうなってんの?
完全なるクラスタになっていないかぎり、キャッシュ中のデータのほとんどが要、不要がわからないデータなわけだろ?
要不要が即わかるほどキーファイルが流通するネットワークなら、
わざわざデータファイルのメタデータを隠蔽する意味が不明だし。
転送機能なんてほぼ意味ないよ。
となりがキャッシュをはじめから持ってるのと、いまからキャッシュにし始めるということと、どう違うわけ?クラスタ化されていない状態なら、無駄なキャッシュが増えるだけ。
いかれたパケットを送出するのに、root権限が必要なのだが、それはどうでもいいの?
っつーか、ノード数、ファイルサイズ、ファイル数、各ノードのキャッシュ容量とかどの程度のものを考えてるのかね。
537:login:Penguin
05/07/21 03:20:49 z2CP8IVj
>>531
A->B->Cのポートフォワードがおこっているということは、CがBに依頼したということでOK?
この状況で、B->Cのポートフォワードが悪用されたらBはインターネット的に責任をまぬかれるのか、
ということを心配したんだけど。
Cに依頼されたので、Cが落とされるようなパケットが転送されたとしても、依頼したCが悪いんです。
で問題ないか。
もしBが悪意のノードで暇人で、来たパケットを転送する前にごにょごにょ書き換えて送ったとしても
Cは依頼する前にBの悪意を見抜けなかったから泣いて下さい、でシステム的にはOKか。
パケット転送はファイルの転送のみに使用して、コネクションを管理するポートには使わなければ
致命的にはならないね。
538:login:Penguin
05/07/21 13:39:18 +geUQqPb
(´-`).。oO(今度こそモノになるかな)
539:login:Penguin
05/07/21 14:28:00 RTcoM3Vh
linux普及のためにOOoに匹敵するプロジェクト
完成を期待します。
540:login:Penguin
05/07/22 21:09:49 ySzGffYS
ネタ切れか
541:login:Penguin
05/07/22 21:11:58 tBkDAb44
誰か僕にネットワークプログラミングのやり方を教えてください。
542:login:Penguin
05/07/22 23:31:16 eHH1w66m
しばらく見ない間に随分賑やかになっとるなぁ
少し読んでみたのが実際に動き出した時、これがどの程度動くのか、わしにゃ分からん。
>>502
2-3)IP/ポート交換ワンタイム秘密鍵(RSA 128bit)
ファイル最後尾から、128bitが1-3)に対する秘密鍵になっている。
詳しくは、後述。
「ファイル最後尾」に意味はまったくない。
キーファイルの公開鍵でIPを暗号化して、暗号化ファイルの所有者だけに分かるように渡すんでしょ?
ファイルの先頭につけると秘密鍵だけを抜き取られてしまうと考えたんだと思うけど、
レジューム機能を実装させると、まったく意味がないような気するがどうなの?
まぁ、批判は簡単なので暗号化ファイルを全部落とさないと、秘密鍵が分からない仕様を考えてみた。
要は、ハッシュコード生成を少し変え、秘密鍵に非常に軽量な暗号をかける。
543:login:Penguin
05/07/22 23:34:12 eHH1w66m
2.暗号化ファイル(バイナリ形式)
2-1)ハッシュコード (変更)
2-4)をハッシュにかけた値(MD5) を、さらに2-3)を連結させて
再度、ハッシュにかけた値(MD5)
ノードにキャッシュされる度、随時上書きされる。
2-2)IP/ポート交換ワンタイム秘密鍵
ノードで毎回、計算される。
計算方法は、2-4)をハッシュにかけた値(MD5)と2-3)の
XORをとった値が、IP/ポート交換ワンタイム秘密鍵となる。
2-4)をハッシュにかけた値(MD5)は、2-1)を生成する際に計算したものを
利用できるので、計算量としては大した事はない。
これは、ファイルとは直接関係ないトランザクションデータとして扱われる。
2-3)XOR_IP/ポート交換ワンタイム秘密鍵(RSA 128bit) (変更)
「ファイル先頭」から128bit。
単に、2-4)をハッシュにかけた値(MD5)とIP/ポート交換ワンタイム秘密鍵のXORをとった値。もう一度、2-4)をハッシュにかけた値(MD5)でXORをとると元に戻る。つまり、完全な2-4)がない限り2-3)から2-2)は分からないってコト。
非常に単純な方法だが、手強いはずだ(w
2-4)データフィールド
暗号化された、データが入っています。
ま、わしにゃ、こんな事ぐらいしか思い浮かばんが、ガンバっとくれい。
544:login:Penguin
05/07/23 00:07:29 vcii9dn+
乗りかかった船なので、私的に、明かに的外れだと思われる質問に勝手に答えてみる。
>>537
>>513
しかし、このままでは不正利用を招くので、ノードBには、TCPのPSHパケットと、UDPパケットは
転送しないよう設定します。
要は、ノードBからは、TCPのコントロールパケットしか飛んで来ないわけだ。
つまり、ACKパケットを、RSTパケットに変えて送った所で、通信が切断されるだけ。
そんな事を、するだけであれば単に中継しなければいい(中継すると契約しといて実はしない)。
しかも、書き換えて攻撃するなど、ややこしい。セキュリティ的には直接攻撃されているのと
変わらん。やる意味がない。攻撃といっても、単に一方的にファイルを送りつけるだけのポートに
できる事って何がある?
さらにいえば、どちらかと言えば、悪意あるノードがノードBを踏み台に攻撃する方が
多いと考えられる。だから、上記の>>513のような一文が加えられているのだと思う。
あってるよね? > 425
つうか、今この質問に答えていて思ったのだが、レジュームの実装って難しいんじゃねぇのか?
545:login:Penguin
05/07/23 11:32:29 jtlytnMJ
た
し
ま
り
い
ま
て
っ
が
上
り
盛
546:425
05/07/24 23:41:51 hPPfaUHc
私用PCが・・・クラッシュしちまった_| ̄|○
さらに、夏風邪をこじらして寝込んでしまった。
気を取り直していきましょう。
なんか、活気付いてきましたね。どんどん、意見交換して行きましょう(w
ここで提示しているのは、単なる案ですから、ここをこういう風にした方がいい
って意見は、特に大歓迎です。
>>534
自己レスです。UDP hole punching について、私の中で勘違いがあったので、書き直しておきます。
「UDP hole punching」は、IPマスカレード(NAPT)によって書き換えられた、送り元ポート番号,IPアドレスを
親サーバ上で交換し合い、UDPで通信する仕組みです。上手いこと、システムを騙した通信で面白い。
ですが、必ず、交換し合う親サーバが必要なのと、親サーバが十分信用できないとセキュリィティが守れません。
あと、匿名性の概念もまったくありません。
しかも、そのUDPパケットがFWで弾かれることが多いので、実質的に使える機会は非常に少なかったりします。
547:425
05/07/24 23:45:22 hPPfaUHc
>>535
>中間者は、自分用のRSA鍵ペア(ポート用とファイル用)を作っておき、
『鍵ペア』って、そう言う意味だったんですね。
私自身は、1-4)とノードの関係は、現実世界で余ほど目に余る行動を取らない限り、
バレる事はまずあり得ないと、考えています。
仮にバレたところで、1-4)は、『情報の保障』をしている一文であって、
ファイル提供者かどうかを、定めている一文ではありません。
548:425
05/07/24 23:46:38 hPPfaUHc
>キーファイルの伝播の際に 1-3) 1-4)を自分用のものにすりかえて、1-2) 1-5)をあわせておく。
「匿名性」や「セキュリティ」を犯す攻撃にはなりえないと考えられます。
理由は以下の通り。
1)暗号化ファイルが見つからない → 公開鍵の評価が下がる。
『1-3)IP/ポート交換ワンタイム公開鍵』を 入れ替えてしまうので、暗号化ファイルにある
『2-3)IP/ポート交換ワンタイム秘密鍵』で、復号不可能になる。
つまり、検索パケットを送ったノードに応答パケットを返せないので、暗号化ファイルが見つからない
よって、公開鍵の評価が下がる。 つまり、相当の信用を得ていない限り、直ぐに「信用できない公開鍵」
として学習され、攻撃ノードは、今後その鍵での攻撃は不可能になる。
2)中間ノードのIP/ポート番号が分かった所で、「匿名性」は犯されない。
中間ノードが、一斉広報で検索をかける際、攻撃者に、そのパケットが届き、
自分が摩り替えた鍵の秘密鍵で復号して、IP/ポート番号が分かった所で、
中間ノードと思われるノードの「IP/ポート番号」が分かったに過ぎない。
さらに、1)の理由で、それが長い間続くわけではない。
中間ノードが分かった所で、長期間に及ぶ大規模な調査がない限り「匿名性」は犯されません。
549:425
05/07/24 23:49:53 hPPfaUHc
>>536
>データ本体のキャッシュの寿命の方はどうなってんの?
静的関係のキャッシュに過ぎないので、寿命の概念はまったくありません。
いつでもいい、好きな時に消していいし、消さなくてもいい。
ハードディスクの資源は有限なので、その辺は、適当に設定する。
>要不要が即わかるほどキーファイルが流通するネットワークなら、
>わざわざデータファイルのメタデータを隠蔽する意味が不明だし。
キーファイルが、いくら流通した所で、要か不要かは、データファイルのメタデータ
つまり、キーファイルの暗号化ハッシュコードを復号してみないと分からないと思ういますが?
>>535のような、もう少し具体的な説明をしてもらえませんか?
>となりがキャッシュをはじめから持ってるのと、いまからキャッシュにし始めるということと、
>どう違うわけ?
一応、当り前のことだと思って書きませんでしたが、プロキシ要求を受けたノードは
とりあえず、自分のキャッシュを探し、あれば、それをそのまま返します。
つまり、違いありません。
550:425
05/07/24 23:55:29 hPPfaUHc
>クラスタ化されていない状態なら、無駄なキャッシュが増えるだけ。
暗号化ファイルのレベルでは、クラスタ化はありませんが、キーファイルのレベルでは存在します。
どう、言うことかといいますと、プロキシ要求は、3-1)で起こります。
さらに、検索パケットは、3-1)のポートが開いている相手にのみ送るので、
結果として、暗号化ファイルはキーファイルの通信によって、形成されたクラスタの周りを
うろちょろするだけです。
カッコよく言えば、暗号化ファイルは、キーファイルのクラスタを継承します。
この辺はまた詳しく話します。
>いかれたパケットを送出するのに、root権限が必要なのだが、それはどうでもいいの?
その辺が、UNIX系の鬱陶しいところですよね。適当にエージェントを挟むなり、すれば
root権限まで取られる事はないのかな。
P2P専用として使うのなら、落ちたって大した事はない思っていたりする。
>っつーか、ノード数、ファイルサイズ、ファイル数、各ノードのキャッシュ容量とかどの程度のものを考えてるのかね。
ネックとなるのは、キーファイルの通信になります。この辺の仕様を、はっきり決めない事には、分かりません。
現在分かっているのは、各ノードの暗号化ファイルのキャッシュ容量は、まったく自由です。
Freenetを「公開鍵暗号方式」と例えるならば、HannyNetは、「ハイブリッド暗号方式」を徹底的に目指してみたい。
551:login:Penguin
05/07/25 02:43:41 HNMfL4hb
キーファイルをみても要不要かわからないってことは、
キーファイルにはファイル名もキーワードもはいってないってことか?
それじゃあ、どうやって検索とかクラスタ化するわけ?
どうにしろ、キャッシュされることを考えていないってのは全く持って意味不明。
流通の効率を全く考えてないって言ってるのと同等じゃないか。
552:login:Penguin
05/07/25 15:52:46 DS/oy6EW
HannyNet(仮)とやらは参加ノード全てがハイレベルクラッカーなわけ?
相手のPCを攻撃しながらファイル共有でもしているのかw
膨大なクエリでネットワークが埋め尽くされ、キーロスト多発
マルチソースDLどころかレジュームすらまともにできずにゴミキャッシュが
増えるだけの予感
553:login:Penguin
05/07/26 07:56:10 LfvsKzx0
横レスですが
>>551
キーファイルを見ても要不要がわからない、というのは、
実体のファイルを落とすまで本当のファイルとしては何かわからないというのと同義でしょう。
WinnyでもWebでも本質的には同じことで、codecがないから再生できないっていう状況も
あるから、ネットワークのシステム自体が判定することは無理でしょう。
で、この仕様だと自然言語からキーファイルをFreenet的に検索するみたいなんで
(自然言語→キーファイルは暗号化されていない)クラスタ化は可能かと。
キーファイルの流通に関しては結構やばそうな感じはするけど。
WinnyでもキーにTTLみたいなのを持たせて、あんまりクラスタ距離的に遠くまでは
キーが流通しにくくしてダウンロード枠を確保してたみたいだけど。
>>548
どんな感じのキー流通になるかはあまり言及がないのであれだけど。
535攻撃は、キーファイルの配布速度と範囲によって有効だとは思う。
「信頼できる配布公開鍵(1-5)」の情報が伝わらない(基本的には自分で試してみるしかない)
わけで、ダウンロード枠待ちor失敗と、攻撃を受けていること、をすぐには見分けられないかも。
中間者がIPアドレスを知ったところで、Winnyと同程度までしか匿名性は落ちないけど
いろいろしてる割にしょぼくなるな…と思ってしまった。
ちょっとしたダウンロード妨害の嫌がらせ攻撃としても有効だと思うし。
554:login:Penguin
05/07/26 19:00:18 8pmsTF99
テスターやりますよ。期待age
555:425
05/07/27 00:54:52 if8zYisn
レスが追いつかないので、横レス大歓迎です。
>>542-543
レジュームのことを、すっかり忘れていました。この暗号(?)は使えそうですね。
非常に単純ですけど、強度は十分だと思います。
最も手っ取り早いのは、検索パケットに「先頭からバイト数」(*)の情報を加えて応答パケットに、
「ファイル長(バイト)」から(*)の差を載せて送るようにする方法でしょうね。
検索パケット自体は、IP/ポート番号などを含め、128bitまでの情報を載せることができますから、
IPアドレス + ポート番号 = 48bitなので、十分余裕はあります。
>>544
言葉に若干トゲがありますが、大体そう言うことです(笑
Aの通信が、Bによって書き換えられ、Cを攻撃したのであれば、
Cは、Bに直接攻撃されたのと変わりません。
つまり、Bの攻撃によってCがクラックされた場合、Cのセキュリティが甘かっただけ。
Bが攻撃者である事も分かります(クラック対策は比較的容易)。
むしろ、Aの通信に悪意があり、Bを中継し、Cを攻撃した場合の方が問題。
そのため、Bは、転送するポートに送られたUDPおよびPSHパケットを排除します。
556:425
05/07/27 01:05:00 if8zYisn
>>551
>>553を参照してください。
キャッシュされたファイルがあるノードは、検索パケットに対して応答するので、
無駄にはならない。
ただし、暗号化ファイルは、ある程度キーファイル上のクラスタをウロウロする事は
予測できますが、実際問題としてモデルを組まないと正確な事はわからない。
>>552
単に、どんな攻撃が存在するかを適当に言いまくっているだけ。実際には、
純粋(?)にクラックが目的のクラッカーは、タダのPCに魅力は感じないので、
まず来ないでしょう。
検索パケットの最大余命なども決めなければ、帯域を圧迫する恐れあるので
モデルを組んで考えなければならない。
プロキシを使ったマルチソースDL(ファイルの分割化が必要)は仕様として考えていませんが、使わないのであれば、
クライアント側の仕様を適当に変えるだけで、マルチソースDLは可能です。
プロキシ使わなくても、UP側はいつでも匿名ですし、Down側もある程度の匿名性も維持できると思います。
557:425
05/07/27 01:06:33 if8zYisn
>>553
>535攻撃は、キーファイルの配布速度と範囲によって有効だとは思う。
確かに言える。しかし、攻撃者がキーファイルを書き換えて攻撃しようとすると、そのキーファイルは
『人気のあるキーファイル』であると予測される物でないと効果は期待できない。
しかし、『人気のあるキーファイル』であると予測される物であれば、高い確率でかなりの量が
流通しているはずです。そのような中で、『書き換えられたキーファイル』が広く流通するとは、
考えにくい。よって、被害を受けるのは極僅か。しかも、匿名性を犯すものではない。
逆に、『人気のないキーファイル』であると予測される物であっても、今度は検索クエリが自分の
場所に届く保障はない。
さらに、同一ノードに関しては、公開鍵の評価が下がっていくので、その公開鍵を使った攻撃は
無意味な物になっていきます。
つまり、攻撃として手間がかかる割に小規模な攻撃しか出来ない。
>中間者がIPアドレスを知ったところで、Winnyと同程度までしか匿名性は落ちないけど
>いろいろしてる割にしょぼくなるな…と思ってしまった。
例えが悪いと思いますが、懲役10,000年の囚人が司法取引で懲役100年になったとします。
たしかに、99,000年も刑期が短くなったわけですが、実際問題として大して変わりません。
その程度だと、考えてもらっていいと思います。
558:login:Penguin
05/07/27 01:24:16 AFPD/rL/
URLリンク(homepage3.nifty.com)
ここは読んでみたか?
559:login:Penguin
05/07/27 08:43:34 sGzAtD+q
>>557
Winnyではクローズドだったから特には問題にならなかったけど、
キーファイルの改竄は、結構システムとしてやばめの攻撃だと考えている。
チェックサムとか署名でのシステム的な保護をするのはもちろんだけど、
キーファイルというものはリンクであるわけだから、有効なキーファイルかどうかは
実際落として見ないとわからないわけだ。
(スレ立てするときにテンプレの関連スレが有効かどうかを調べるみたいに)
末端ノードでは、自分のチェックした結果と、(もしするなら)伝播してくる信頼度の噂
によって、キーの有効度をテストしなくてはならない。
攻撃側は、いくらでも評価0の公開鍵を作ることができる。
正規配布ノードの公開鍵の評価を上げるシステムか、攻撃者公開鍵の評価を下げる
システムが必要となるけども、この評価伝播システムは、それ自体が攻撃対象となってしまう。
入れないというのもひとつの手だとは思うけど(自分以外みんな敵)、
PGPみたいに信頼のネットワークを導入するのもありかなとは思う。
キーの伝播にどんなシステムが適当かわからないし、システムによるとは思うけど、
攻撃の手間のわりに、結構被害がでかいと私は思っている。
Winnyのキー伝播を仮定すると、"ファイルの公開者トリップを書き換えて遊ぶ"というのが
一時流行ったけど、あれはかなりな効果範囲だった。
IPアドレス収集までいかなくとも、ゴミキーが混ざるだけでも結構検索に支障が出ると思うし。