Caputchin
Caputchin を理解する

Proof of work

すべての検証は、Caputchin がトークンを発行する前に、訪問者のブラウザに小さな計算のパズルを解かせます。そのパズルが proof of work です。

どう動くか

Caputchin はブラウザにチャレンジを渡し、チャレンジと一緒にハッシュしたとき、必要な数の先頭ゼロで始まるハッシュを生む数(ナンス)を見つけるよう頼みます。近道はありません。ブラウザは、たまたま 1 つが効くまで、ナンスをまた 1 つ、また 1 つと試さなければなりません。有効なナンスを見つけるのは多くの試行を要し、1 つを確かめるのは 1 回のハッシュです。なので、作業はやるのが難しいが確かめるのは安く、Caputchin はその答えが必要な難易度をクリアすることを確認します。

Content-Security-Policy

ソルバーは Web Worker の中で走り、ウィジェットはそれを blob: URL から作るので、埋め込み先のページの Content-Security-Policy は worker に対して blob: を許可しなければなりません(worker-src blob:、またはフォールバックの連鎖として child-src / default-src)。この部分は必須です。メインスレッドのフォールバックがないので、worker をブロックするポリシーは検証をブロックします。別に、ソルバーは速度のために WebAssembly のルーチンをコンパイルし、それには script-src'wasm-unsafe-eval' が要ります。その部分は任意です。なしでも、同じソルバーが Worker の中で純粋な JavaScript としてより遅く走ります。完全なホストページのポリシーは ゲームのサンドボックス化 を参照してください。

なぜそれが濫用を抑止するか

要点は、どの単一の解も不可能にすることではありません。大規模な濫用を不経済にすることです。

本物の訪問者は 1 つのパズルを 1 秒の何分の一かで解き、決して気づきません。何千ものリクエストを撃ちたいボットは、その計算コストを何千回も払います。チャレンジをクリアするのがスパムの価値より高くつくなら、攻撃は金銭的に割が合わなくなります。proof of work は目標を「破れない」から「割に合わない」へずらします。

つまみ

キーの セキュリティ ページの 2 つの設定が、コストを調整します:

  • 難易度 は、ハッシュがいくつの先頭ゼロを持たねばならないかを設定し、それが各解のコストを上げます。
  • リクエストごとのチャレンジ数 は、一度に複数の解を求めることで、そのコストを倍増させます。

正直な限界

破れないチャレンジはありません。十分なお金があれば、何でも解けます。proof of work はそれを受け入れ、代わりにコストで競います。それはまた、労力 が費やされたことを証明するだけで、本物のブラウザがそれを費やしたことは証明しません。だからこそ Caputchin は、環境もチェックするために、それを 計測 と組み合わせます。

このページの内容