13

私は、ウェブサイトでMP3と引き換えることができるバウチャーを生成することにより、ギグでバンドの音楽を販売できる小さなシステムを作成しています。

バウチャーには、ユーザーが入力するコードが必要です。コードには、次の品質が必要です。

  1. ユーザーのフラストレーションやデータ入力エラーを防ぐために、長さと内容に関してある程度の人間の可読性。
  2. 1つのバウチャーコードが与えられた場合、別のバウチャーコードを推測するのは簡単ではありません。

GUIDを使用する場合は、ポイント1が気になります。増分整数を使用する場合は、ポイント2が気になります。その間に幸せな媒体が必要です。おそらくこの作業はすでに完了していて、私を待っている理想的な解決策があると思いました。それがない場合は、ランダムな英数字の文字列、または場合によっては文字のみ(わかりやすくするためにIとOを除く)を使用し、アプリケーションブロックのIPアドレスがX回失敗することを考えています。ブルートフォース攻撃の可能性があります。それを使用した場合、文字列の長さとXの値はどのくらい機能しますか、またその理由は何ですか?

ご協力いただきありがとうございます!


更新:私は方法について完全に明確ではありませんでした:印刷用のバウチャーコードのリストを生成し、ギグの後に「販売済み」コードを入力します。したがって、検証サーバーを使用しないソフトウェアキーのように、チェックサムなどの要素は必要ないと思います。

4

13 に答える 13

9

英語の音節で訓練されたマルコフ連鎖を使用して、発音可能なジブリッシュな単語で構成される文を作成できます。生成された文は、印刷時に有効なバウチャーのデータベースに追加するだけです(もちろん、引き換えられたときに無効にします)。

于 2009-12-18T04:06:18.487 に答える
5

私はあなた自身のエンコーディングスキームを使用します。IとOを省略することに加えて、読みやすさを最適化するために、同音異義語セット(C / E、M / N)およびWなどの多音節文字から1文字を除くすべてを省略し、もちろん1つのケース。

長さに関しては、60ビットと4ビットのチェックサムを使用できます。64ビットは、ミリ秒の粒度までの時間を数千年間保存するのに十分であるため、すべての実用的な目的で推測できません。たとえば、1文字あたり4ビット、つまり16文字の長さです。その半分の長さでもおそらく十分です。

これを考える別の方法は、自動車のナンバープレートの形式です。3つの文字と3つの数字は、かなり大きな状態をカバーするのに十分であり、非常に読みやすい傾向があります。誰かがコードを高速でハッキングする方法を提供しない限り、人間の時間スケールでコードを推測することはできません。

于 2009-12-18T04:14:53.850 に答える
4

可能な組み合わせは、8文字の英数字(IとOを除く)のみです。50億のバウチャーを持っていない限り、それはすべての意図と目的のために推測できません。

于 2009-12-18T04:06:36.943 に答える
4

AOLは、送信したCDに2つの単語をランダムに組み合わせて使用​​していました。同じアプローチをとることができ、必要なオッズを得るために単語の数を増やすだけです。

于 2009-12-18T04:08:19.200 に答える
4

人間が読める形式が本当に必要な場合は、 BubbleBabbleを使用できます。次のようなPerlスクリプトを作成します。

#!/usr/bin/perl
use Digest::BubbleBabble qw(bubblebabble);
use Digest::SHA1 qw(sha1);
print bubblebabble(Digest => sha1(join(' ', @ARGV))), "\n";

次に、次のように出力するコマンドライン引数を入力します。

xogan-nydut-zogiv-kotyn-ledah-taseb-gyhib-tucel-vudul-mykom-mexax

または、Perlがお好みでない場合は、PWGenを使用できます(オンラインでも入手可能で、次のような出力を取得できます。

aiCee5om Ohxai2is tae3Gael Gaeth7ei ooCh0ish

正直なところ、このレベルの人間の可読性はやり過ぎです。RickNZの答えは問題なく機能するはずです(そして、いくつかのソフトウェアキーに対して行ったことにかなり近いです)。しかし、BubbleBabbleはちょっと楽しいです。

于 2009-12-18T04:50:18.540 に答える
2

それぞれ5文字の5ブロックで十分です。「キー」には4ブロック、5番目は有効性を確認するためのチェックサムです。そしてもちろん、キースペース全体を使用しないでください。

とにかく、それはソフトウェアのシリアル番号がどのように配置されているように見えるかということです。

于 2009-12-18T04:05:17.597 に答える
2

おそらく、すべての母音[*]を避けて、すべての冒とく的な言葉を避けるのが最善です。

[*]ウェールズの場合はWを含みます!

于 2009-12-18T04:18:56.227 に答える
2

うーん、ほとんどのシステムがどのように機能するかはわかりませんが、静的な数値を定義し、その数値に他のランダムな数値を掛けるのは、きちんとしていて簡単だと思います。次に、大きなGUIDが静的の倍数である場合は、問題ありません。

作成が簡単で、新しいものを推測するのは簡単ではありません(短期間の使用のみ)

int i = 61234;
int j = rand()%99999
long GUID = i * j;

電話番号の長さのGUIDが表示されます

ただし、99999のみを使用します。ドー

于 2009-12-18T04:06:41.290 に答える
2

コンテクスト

  • 人間が読めるUUID
  • 言語に依存しないアルゴリズム

問題

  • 「人間が読める」UUID(HR-UUID)を生成するためのアルゴリズムを考案する
  • HR-UUIDは、ブルートフォースの推測に対して堅牢である必要があります
  • 人間による入力とリコールは簡単で、エラーが発生しにくいものでなければなりません
  • 1つ以上の既知の有効なHR-UUIDがあることは、他の有効なHR-UUIDを推測するために統計的に関連するべきではありません

解決

  • DiceWareパスワードアルゴリズムを使用します。
  • このスレッドで提供されている他のソリューションとは対照的に、このアプローチは、問題をパスワード生成の問題に再キャストすることにより、人間が読めるUUIDの問題を解決します。
  • このスレッドの他の場所で提供されているBubbleBabbleソリューションとは対照的に、Dicewareでは、「ダイをロール」する回数に応じて、各UUIDに含まれる要素の数を選択できます...これは、エントロピーを選択できることを意味しますUUIDごと。
  • DiceWareパスワードアルゴリズムは、人間が入力して覚えるのが簡単であるにもかかわらず、高エントロピーのパスフレーズを生成するという問題を解決します。
  • 以下は、それぞれ6つの要素で構成されるDiceware「UUID」のサンプルです。

    crabmeat-coach-properly-driving-yoga-ferret
    edition-mousy-fabric-budding-book-mortuary
    rickety-uncrown-earful-majority-sublet-evade
    

も参照してください

于 2019-12-16T17:42:26.543 に答える
1

簡単な解決策の1つは、ほとんどの言語が文字列型に持つgetHashCodeメソッドを呼び出すことです。承認された単語のリストから文字列をいくつかの単語に設定します。次に、gethashcodeを呼び出すと、それがキーになります。確認するには、既存の単語ハッシュのリストと比較し、リストから削除して、再度使用できないようにします。

于 2009-12-18T04:14:09.653 に答える
1

彼らがバウチャーを購入したときにあなたがメールアドレスを受け取っていると思います(あなたはそうすべきです)。もしそうなら、なぜ彼らに使い捨てのGUIDを電子メールで送ってみませんか?そうすれば、あなたと彼らの両方がそれを記録し、償還を追跡することができ、推測するリスクを冒すことはありません(または少なくとも1つは気にする価値がありません)、ユーザーはそこにあるので何も覚えておく必要はありませんメールで、何もコーディングする必要はありません。

彼らはあなたにメールアドレスを与えます。GUIDを電子メールで送信します(リンク付き)。リンクをクリックして曲を取得します。GUIDの使用はシステムに登録されており、機能しなくなります。

于 2009-12-18T04:25:39.037 に答える
1

GUIDを使用して、疑わしい文字を別の文字に置き換えてみませんか(したがって、0は「h」になり、1は「q」になります)。

于 2009-12-18T04:30:40.343 に答える
0

あなたはランダムな文字シーケンスジェネレータのようなものを試すことができますか?。文字/数字を組み合わせて使用​​することもできます

于 2009-12-18T04:09:38.163 に答える