あなたはProof-of-work systemを探しています。
最も一般的なアルゴリズムは、とりわけビットコインに使用されるHashcash(Wikipedia)でもあるようです。基本的な考え方は、クライアントプログラムに先行ゼロの特定の数のハッシュを見つけるように要求することです。これは、ブルートフォースで解決しなければならない問題です。
基本的には、このように動作します。クライアントにはある種のトークンがあります。電子メールの場合、これは通常、受信者の電子メールアドレスと今日の日付です。だから、次のようになります。
[email protected]:04102011
クライアントは今、この目の前に置くために、ランダムな文字列を検索することがあります。このハッシュは、大手0の束を持っている
[email protected]:04202011
ように。
次に、このランダムな入力を受け取り、という単一のハッシュを実行して、それが始まるかどうかを確認するだけで済みます0の束。これは、非常にの高速動作です。
クライアントクライアントが正しいハッシュを見つけるのにかなりのCPU時間を費やさなければならないのは、それがブルートフォース問題であるということです。唯一のことは、ランダムな文字列を選択してテストし、それが機能しない場合は別の文字列を選択することです。
もちろん、メールを送信していないので、メールアドレスと日付ではなく、別のトークンを使用したいと思うでしょう。しかし、あなたの場合は、これは簡単です。サーバ側のランダムな文字列を作成し、それをクライアントに渡すだけです。
この特定のアルゴリズムの利点の1つは、難易度を調整するのが非常に簡単です。必要な先行ゼロの数を変更するだけです。必要なゼロが増えるほど、クライアントの所要時間は長くなります。ただし、検証にはまだ時間がかかります。
単純なハッシュを強要するのはどうでしょうか?ランダムな値のサーバー側を生成し、ハッシュしてクライアントに渡します。 – user1937198
または、因数分解に時間がかかるように十分大きい大きな整数を因数分解します。 –