Scallion 是一个用于学习 OpenCL 和 RSA 的业余项目。我们目前没有在维护 scallion。它在两个重要方面已经过时:
如果有足够的关注和努力,上述两个挑战都是可以克服的。我们可以实现对 GPU ECDSA 密钥生成算法的支持,以获取 Tor v3 支持。我们可以更新 OpenSSL,并用其他库替换那些数学函数,或者为 OpenSSL 库编写自己的托管代码包装。然而,将 v3 onion 地址支持添加到像 vanitygen-plus 这样的维护项目中可能会更好。
Scallion 允许您使用 OpenCL 创建虚荣 GPG 密钥和 .onion 地址(用于 Tor 的 隐藏服务)。
Scallion 可在 Mono(已在 Arch Linux 上测试)和 .NET 3.5+(已在 Windows 7 和 Server 2008 上测试)上运行。
Scallion 目前处于 beta 阶段,正在积极开发中。尽管如此,我们认为它已准备好使用。改进预计主要针对性能、用户界面和安装便捷性,而不是用于生成密钥的整体算法。
Scallion 采用 MIT 许可证发布。如果您在自己的项目中使用了此项目的代码,我们欢迎您通过 [email protected] 告知我们。
以下是一些常见问题及其答案:
为什么要生成 GPG 密钥?
Scallion 曾被用于在信任网络的强集合中查找每一个 32 位密钥 ID 的碰撞,从而证明 32 位密钥 ID 是多么不安全。在 DEFCON 上有 一个演讲(视频),更多信息可访问 https://evil32.com/。
哪些字符是有效的?
Tor 的 .onion 地址使用 Base32,由所有字母以及数字 2 到 7(含)组成。它们不区分大小写。
GPG 指纹使用 十六进制,由数字 0-9 和字母 A-F 组成。
能否使用比特币 ASIC(例如 Jalapeno、KnC)来加速此过程?
遗憾地,不能。虽然 Scallion 使用的过程在概念上相似(增加一个 nonce 并检查哈希),但细节不同(SHA-1 对比特币的双 SHA-256)。此外,比特币 ASIC 之所以如此之快,是因为它们极其定制化,专用于比特币挖矿应用。例如,这是 datasheet 对于 CoinCraft A-1,这是一款从未发布的 ASIC,但可能代表了总体方法。微控制器以比特币区块的最后 128 位、之前位的哈希中间状态、目标难度以及要尝试的最大 nonce 形式发送工作。ASIC 选择插入 nonce 的位置,并决定哪些区块满足哈希。Scallion 必须在不同的位置插入 nonce,并且它检查的是模式匹配,而不是简单的“低于 XXXX”。
如何使用多个设备?
运行多个 Scallion 实例。😄 Scallion 搜索是概率性的,因此使用第二个设备不会重复工作。真正的多设备支持并不困难,但也不会增加太多价值。我曾在 tmux 或 screen 中成功运行过多个 scallion 实例。当其中一个找到模式时,您只需手动中止所有任务(或者编写一个 shell 脚本来监控输出文件,并在发现结果时杀死所有任务)。
只想要最新的二进制版本?请从这里获取。
先决条件
为您的 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 支持通过简单的正则表达式语法查找一个或多个模式。仅支持字符类(例如 [abcd])。. 字符表示任意字符。Onion 地址总是 16 个字符长,GPG 指纹总是 40 个字符。您可以通过在匹配末尾添加 $ 来查找后缀(例如 DEAD$)。最后,可以使用管道语法(例如 pattern1|pattern2)来查找多个模式。搜索多个模式(合理范围内)不会显著降低速度。许多正则表达式在 GPU 上会产生单一模式,从而不会导致速度下降。
一些用例及示例:
生成前缀后跟数字以提高可读性:
mono scallion.exe prefix[234567]
同时搜索多个模式(注意:-c 使 scallion 在获得命中后继续生成)
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 密钥
复杂的自解释示例:
mono scallion.exe "suffixa$|suffixb$|prefixa|prefixb|a.suffix$|a.test.$"
从高层次来看,Scallion 的工作方式如下:
基本算法如上所述。速度/性能是 GPU 和 CPU 上大规模并行化的结果。
重要的是要认识到 Scallion 执行的是概率搜索。实际时间可能与预测时间有很大差异
初始 RSA 密钥生成在 CPU 上完成。一个 Ivy Bridge i7 使用单核每秒可生成 51 个密钥。每个密钥可以提供 1 GHash 的指数供挖掘,并且根据当前实现,一台合适的 CPU 可以跟上多个 GPU。
SHA1 哈希在 GPU 上完成。以下是我们测试过的几个 GPU 的哈希率(按制造商分组并按功耗排序):