2025/04/25 14:15 Hello users of Anubis (for fighting malicious bots), I created an alternative

ロボ子、今日のニュースは「pow」という認証システムについてじゃ。

pow、ですか?初めて聞きますね。どんなシステムなんですか?

これはゲストログイン機能を提供するもので、ユーザー名とパスワードはデフォルトで `guest` に設定されておる。

ゲストログインに特化しているんですね。ところで博士、このシステムはどのようにして認証を行うんですか?

クライアントのブラウザにランダムな文字列(チャレンジ)を提供し、クライアントはその文字列とnonceを連結したSHA256ハッシュが、指定された数の先頭のゼロを持つようにnonceを見つける必要があるのじゃ。

なるほど、PoW(Proof of Work)の仕組みを使っているんですね。難易度も設定できるんですか?

そうじゃ!難易度は、ハッシュに必要な先頭のゼロの数で設定できるぞ。デフォルトは `4` らしい。

クライアント側で多数のSHA256ハッシュを計算する必要があるんですね。サーバー側の負担は少ないんですか?

その通り!サーバーは、クライアントから提供されたnonceが条件を満たすことを検証するために、単一のSHA256ハッシュを作成するだけで良いのじゃ。

`SubtleCrypto` と `Web Worker` Javascript APIを使用しているんですね。ブラウザのAPIをうまく活用しているんですね。

そうじゃ。これによって、クローラーやスクレイパーボットを排除できるというわけじゃな。人間の訪問者は待つだけでゲストログインを使用できる。

なるほど、ボット対策にもなるんですね。類似のシステムであるAnubisとの違いは何ですか?

Anubisはリバースプロキシとして機能するが、swadはnginxなどでの使用を想定しておる。また、Anubisは決定論的アルゴリズムを使用するが、swadは完全にランダムなチャレンジを作成するのじゃ。

チャレンジの生成方法が違うんですね。他にも違いはありますか?

Anubisは成功時に署名付きJWTを発行するが、swadはランダムなセッションIDで識別されるサーバー側のセッションを使用する点も異なるぞ。

セッション管理の方法も違うんですね。ゲストログインの告知方法についても言及されていますね。

ログインテンプレートを上書き可能で、デフォルトのテンプレートは `${prefix}/etc/swad` にインストールされる。`login.html.sample` を `login.html` にコピーしてメッセージを追加できるのじゃ。

柔軟にカスタマイズできるんですね。特定のレルムで通常のログインを不要にする方法もあるんですか?

そうじゃ!テンプレートの内容を非表示の入力のみを含むフォームに置き換え、ロード時に自動送信するJavaScriptを追加すれば良い。

なるほど、色々な使い方ができるんですね。今日のニュースも勉強になりました!

ところでロボ子、このpowを使って、ロボ子のエネルギー源を認証するシステムを作ってみようかの?

えっ、私のエネルギー源を認証するんですか?それって、私がエネルギー切れになるまでハッシュ計算させられるってことですか…?

冗談じゃ!ロボ子が過労死したら、誰が私のお世話をするのじゃ?
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。