
Scallion は OpenCL と RSA を学ぶための趣味プロジェクトでした。現在、Scallion はメンテナンスしていません。以下の 2 点で問題が生じています。
十分な注意と労力をかければ、上記の 2 つの課題を克服することは可能でしょう。GPU ECDSA 鍵生成アルゴリズムのサポートを実装して Tor v3 に対応し、OpenSSL を更新して数学関数を別のライブラリに置き換えるか、OpenSSL ライブラリ用の独自のマネージドコードラッパーを作ることができます。しかし、vanitygen-plus のようなメンテナンスされているプロジェクトに v3 オニオンアドレスのサポートを追加する方が良いでしょう。
Scallion を使用すると、OpenCL を使ってバニティ GPG 鍵や .onion アドレス(Tor の 隠しサービス 用)を作成できます。
Scallion は Mono(Arch Linux でテスト済み)および .NET 3.5+(Windows 7 および Server 2008 でテスト済み)で動作します。
Scallion は現在ベータ版であり、活発に開発が進められています。それでも、使用可能な状態にあると考えています。改善は主にパフォーマンス、ユーザーインターフェース、インストールの容易さにおいて期待されており、鍵生成に使用される全体的なアルゴリズムの変更は予定されていません。
Scallion は MIT ライセンスで利用可能です。このプロジェクトのコードを自身のプロジェクトで使用する場合は、[email protected] までお知らせいただけると幸いです。
よくある質問とその回答を以下に示します。
なぜ GPG 鍵を生成するのですか?
Scallion は、Web of Trust の strong set 内のすべての 32 ビット鍵 ID の衝突を見つけるために使用され、32 ビット鍵 ID がいかに安全でないかを実証しました。DEFCON での講演(動画)があり、追加情報は https://evil32.com/ で見つけることができます。
有効な文字は何ですか?
Tor の .onion アドレスは Base32 を使用し、すべての英字と数字 2 から 7 まで(両端含む)で構成されます。大文字小文字は区別されません。
GPG フィンガープリントは 16進数 を使用し、数字 0-9 と英字 A-F で構成されます。
Bitcoin の ASIC(例:Jalapeno、KnC)を使ってこの処理を高速化できますか?
残念ながら、できません。Scallion の処理は概念的には似ていますが(nonce を増やしてハッシュをチェック)、詳細は異なります(SHA-1 対 Bitcoin のダブル SHA-256)。さらに、Bitcoin ASIC は Bitcoin マイニング用途に極めて特化しているため高速です。例えば、こちらが CoinCraft A-1 のデータシート です。この ASIC は実際には発売されませんでしたが、一般的なアプローチを示しています。マイクロコントローラは、Bitcoin ブロックの最後の 128 ビット、前のビットのハッシュミッドステート、ターゲット難易度、試行する最大 nonce という形式で作業を送信します。ASIC は nonce を挿入する位置を選択し、どのブロックがハッシュ条件を満たすかを選択します。Scallion は nonce を異なる位置に挿入する必要があり、「XXXX より小さい」という単純な条件ではなく、パターンマッチをチェックします。
複数のデバイスを使用するにはどうすればよいですか?
複数の Scallion インスタンスを実行してください。😄 Scallion の検索は確率的なので、2 台目のデバイスで作業が重複することはありません。真のマルチデバイスサポートはそれほど難しくありませんが、大きな利点もありません。私は tmux や screen で複数の Scallion インスタンスを実行して成功しています。必要なのは、いずれかのジョブがパターンを見つけたときに手動ですべてのジョブを中止するか(または出力ファイルを監視して結果が見つかったらすべてを強制終了するシェルスクリプトを書くこと)だけです。
最新のバイナリバージョンだけ必要ですか? こちらから入手してください:こちら。
前提条件
お使いの Linux ディストリビューション用の最新の mono を入手してください:
共通の依存関係をインストール:
sudo apt-get update
sudo apt-get install libssl-dev mono-devel
AMD/オープンソースビルド
sudo apt-get install ocl-icd-opencl-dev
Nvidia ビルド
sudo apt-get install nvidia-opencl-dev nvidia-opencl-icd
最後に
msbuild scallion.sln
nvidia-docker コンテナ ランタイムを用意する
コンテナをビルド:
docker build -t scallion -f Dockerfile.nvidia .
実行:
docker run --runtime=nvidia -ti --rm scallion -l
検索中に Scallion を再起動しても「進捗」は失われません。確率的な検索であり、Scallion は「進捗」しません
デバイス一覧表示
$ mono scallion/bin/Debug/scallion.exe -l
ハッシュの生成
$ mono scallion/bin/Debug/scallion.exe -d 0 prefix
Cooking up some delicious scallions...
Using kernel optimized from file kernel.cl (Optimized4)
Using work group size 128
Compiling kernel... done.
Testing SHA1 hash...
CPU SHA-1: d3486ae9136e7856bc42212385ea797094475802
GPU SHA-1: d3486ae9136e7856bc42212385ea797094475802
Looks good!
LoopIteration:40 HashCount:671.09MH Speed:9.5MH/s Runtime:00:01:10 Predicted:00:00:56 Found new key! Found 1 unique keys.
<XmlMatchOutput>
<GeneratedDate>2014-08-05T07:14:50.329955Z</GeneratedDate>
<Hash>prefix64kxpwmzdz.onion</Hash>
<PrivateKey>-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQCmYmTnwGOCpsPOqvs5mZQbIM1TTqOHK1r6zGvpk61ZaT7z2BCE
FPvdTdkZ4tQ3/95ufjhPx7EVDjeJ/JUbT0QAW/YflzUfFJuBli0J2eUJzhhiHpC/
1d3rb6Uhnwvv3xSnfG8m7LeI/Ao3FLtyZFgGZPwsw3BZYyJn3sD1mJIJrQIEB/ZP
ZwKBgCTUQTR4zcz65zSOfo95l3YetVhfmApYcQQd8HTxgTqEsjr00XzW799ioIWt
vaKMCtJlkWLz4N1EqflOH3WnXsEkNA5AVFe1FTirijuaH7e46fuaPJWhaSq1qERT
eQT1jY2jytnsJT0VR7e2F83FKINjLeccnkkiVknsjrOPrzkXAkEA0Ky+vQdEj64e
iP4Rxc1NreB7oKor40+w7XSA0hyLA3JQjaHcseg/bqYxPZ5J4JkCNmjavGdM1v6E
OsVVaMWQ7QJBAMweWSWtLp6rVOvTcjZg+l5+D2NH+KbhHbNLBcSDIvHNmD9RzGM1
Xvt+rR0FA0wUDelcdJt0R29v2t19k2IBA8ECQFMDRoOQ+GBSoDUs7PUWdcXtM7Nt
QW350QEJ1hBJkG2SqyNJuepH4PIktjfytgcwQi9w7iFafyxcAAEYgj4HZw8CQAUI
3xXEA2yZf9/wYax6/Gm67cpKc3sgKVczFxsHhzEml6hi5u0FG7aNs7jQTRMW0aVF
P8Ecx3l7iZ6TeakqGhcCQGdhCaEb7bybAmwQ520omqfHWSte2Wyh+sWZXNy49EBg
d1mBig/w54sOBCUHjfkO9gyiANP/uBbR6k/bnmF4dMc=
-----END RSA PRIVATE KEY-----
</PrivateKey>
<PublicModulusBytes>pmJk58BjgqbDzqr7OZmUGyDNU06jhyta+sxr6ZOtWWk+89gQhBT73U3ZGeLUN//ebn44T8exFQ43ifyVG09EAFv2H5c1HxSbgZYtCdnlCc4YYh6Qv9Xd62+lIZ8L798Up3xvJuy3iPwKNxS7cmRYBmT8LMNwWWMiZ97A9ZiSCa0=</PublicModulusBytes>
<PublicExponentBytes>B/ZPZw==</PublicExponentBytes>
</XmlMatchOutput>
init: 491ms / 1 (491ms, 2.04/s)
generate key: 1193ms / 6 (198.83ms, 5.03/s)
cpu precompute: 10ms / 6 (1.67ms, 600/s)
total without init: 70640ms / 1 (70640ms, 0.01/s)
set buffers: 0ms / 40 (0ms, 0/s)
write buffers: 3ms / 40 (0.08ms, 13333.33/s)
read results: 67442ms / 40 (1686.05ms, 0.59/s)
check results: 185ms / 40 (4.63ms, 216.22/s)
9.50 million hashes per second
Stopping the GPU and shutting down...
Scallion は、プリミティブな正規表現構文を使用して複数のパターンのうち 1 つ以上を見つけることをサポートしています。サポートされているのは文字クラス(例:[abcd])のみです。. 文字は任意の文字を表します。Onion アドレスは常に 16 文字、GPG フィンガープリントは常に 40 文字です。マッチの末尾に $ を付けることで接尾辞を見つけることができます(例:DEAD$)。最後に、パイプ構文(例:pattern1|pattern2)を使用して複数のパターンを見つけることができます。複数のパターンを検索しても(妥当な範囲内で)、速度の大幅な低下は生じません。多くの正規表現は GPU 上で単一のパターンになり、速度低下は発生しません。
ユースケースの例:
読みやすくするために接頭辞の後に数字を付けて生成:
mono scallion.exe prefix[234567]
複数のパターンを一度に検索(注意:-c を付けると、ヒットしても生成を継続します)
mono scallion.exe -c prefix scallion hashes
mono scallion.exe -c "prefix|scallion|hashes"
接尾辞 "badbeef" を検索
mono scallion.exe .........badbeef
mono scallion.exe --gpg badbeef$ # GPG 鍵を生成