これが私の状況の(簡略化された)例です。
ユーザーはゲームをプレイし、200 ポイントのハイスコアを獲得します。ハイスコアには賞金、つまり 1 ユーロ / 10 ポイントを与えます。ユーザーは 20 ユーロを獲得したという「領収書」を印刷し、それを私に渡します。私は領収書が本物で、一度も使用されていないことを確認し、賞品を彼に渡します。
私の「問題」は、明らかに太字の部分にあります。手で「領収書」を検証できるはずですが、他のオフライン方法を使用したソリューションも歓迎します (つまり、私の電話用の小さな .jar アプリケーション)。また、偽造レシートも作りにくいはずです。
これが私がこれまでに考えたこと、それらの長所と短所です。
一般的なアルゴリズム、つまり SHA512を使用したハッシュ
- 長所: モバイル デバイスで簡単に検証でき、より高い値 (コンテキスト依存のソルト、つまりユーザー名が使用されている場合) で偽装することに強い耐性があります。
- 短所: 複数回使用できますが、手動で検証することはできません。
自作のハッシュアルゴリズム
- 長所: 手で検証できます。
- 短所:簡単に壊れる可能性があり、複数回使用できます。
証明書コード: サーバーと電話の 2 つのデータベースにコードのリストがあります。領収書が印刷されるたびに、これらのいずれかが印刷され、データベースに「使用済み」として設定されます。私の電話でも同じことを行います。コードがデータベースにあり、まだ使用されていないかどうかを確認し、データベースで「使用済み」として設定します。
- 長所: 同じコードを複数回使用することはできません。
- 短所: 領収書を偽造するのは非常に簡単で、手で確認することはできません。