Quote from: gavinandresen on August 11, 2010, 04:40:07 PM [Deleted] Quote from: davidonpda on August 11, 2010, 04:19:43 PM
Quote from: gavinandresen on August 11, 2010, 04:10:56 PM
- クライアント間の接続プロセスの一部としてある程度のプルーフ・オブ・ワークを要求する(「シビル」攻撃の防止に役立つ)。
これは素晴らしいアイデアではないか?Hashcashのような?
トランザクションの文字列をハッシュし、プルーフ・オブ・ワーク付きでなければならないようにする。例えば、最新のPCで計算に5秒かかるようにする。POWのチェックはBitcoinと同様に簡単で非常に速いが、攻撃者が無限のCPUパワーを持っていない限り、プルーフ・オブ・ワークなしのランダムデータによるフラッド攻撃を阻止できる。
実は初回接続時に1分から3分のプルーフ・オブ・ワークを考えていたのであって、トランザクション送信時ではないが、ネットワークに送信されるすべてのトランザクションに何らかのプルーフ・オブ・ワークを要求するのは非常に興味深いアイデアだ!実装も簡単なはずだ(トランザクションにnonceと完全または部分的なハッシュを追加する)…
残念ながら、実装は簡単だが、効果的であるためには互換性を壊す変更にならざるを得ない。
古いクライアントは知らないのでプルーフ・オブ・ワークを送信しない。だから攻撃者は自分のクライアントバージョンを308と偽れる — この保護機能を知らないほど古いバージョンだと。そうするとノードは、古いクライアントのサポートを打ち切ってこの種の攻撃に対して安全になるか、古いクライアントのサポートを続けてこの攻撃に対して脆弱なままでいるかを選ばなければならない。
やるべきでないとは言わないが、互換性を壊す変更を行う前に、重要な互換性を壊す変更のリストをまとめるべきだと思う。ユーザーは毎日のようにアップグレードを求められるのを嫌う。
また、メッセージリレープロトコルがどう動作するか分からない。各ノードが最初のノードが提供したのと同じnonceとハッシュでそのTxをリレーすればいいだろう。重複トランザクションは本質的に無効なのでハッシュの「再利用」の危険はない(ただしノードに嫌がらせはできる)。
検出とブラックリスト機能のコードも有用だろう。あるIPが一定時間内に一定数の無効なトランザクションを送信してきたら、切断してそのIPからの接続を一定期間拒否する。再接続後にまたやったら、より長期間ブロックする…といった具合に。