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 的哈希率(按制造商分组并按功耗排序):
MH/s = 百万哈希每秒
值得注意的是,Intel 已经为其处理器发布了 OpenCL 驱动程序,并且可以在 CPU 上找到短碰撞。
要计算给定部分碰撞所需的秒数(平均),请使用公式:
| 类型 | 预估时间 |
|---|---|
| GPG 密钥 | 2^(4*长度-1) / 哈希速度 |
| .onion 地址 | 2^(5*长度-1) / 哈希速度 |
例如,在我的 nVidia Quadro K2000M 上,我看到大约 90 MH/s。以该速度,我可以在大约 1 小时 41 分钟内生成一个 8 字符的 .onion 前缀,即 2^(5*8-1)/90 million = 101 分钟。
默认情况下,Scallion 会使用设备报告的首选工作组大小。这是一个合理的默认值,但尝试不同的工作组大小可能会提高性能。
Scallion 生成的密钥与 shallot 生成的密钥非常相似。它们具有异常大的公钥指数,但通过 openssl 的 RSA_check_key 函数,它们经过了 PKCS #1 v2.1 建议的完整健全性检查。Scallion 支持多种 RSA 密钥大小,并为 1024b、2048b 和 4096b 提供了优化内核。其他密钥大小可能也能工作,但未经过测试。
欢迎向比特币地址捐赠:1FxQcu6vhpwsqcTjPsjK43CZ9vjnuk4Hmo
| GPU | 速度 |
|---|
| Intel i7-2620M | 9.9 MH/s |
| Intel i5-5200U | 118 MH/s |
| NVIDIA GT 520 | 38.7 MH/s |
| NVIDIA Quadro K2000M | 90 MH/s |
| NVIDIA GTS 250 | 128 MH/s |
| NVIDIA GTS 450 | 144 MH/s |
| NVIDIA GTX 670 | 480 MH/s |
| NVIDIA GTX 970 | 2350 MH/s |
| NVIDIA GTX 980 | 3260 MH/s |
| NVIDIA GTX 1050 (M) | 1400 MH/s |
| NVIDIA GTX 1070 | 4140 MH/s |
| NVIDIA GTX 1070 TI | 5100 MH/s |
| NVIDIA GTX TITAN X | 4412 MH/s |
| NVIDIA GTX 1080 | 5760 MH/s |
| NVIDIA Tesla V100 | 11646 MH/s |
| AMD A8-7600 APU | 120 MH/s |
| AMD Radeon HD5770 | 520 MH/s |
| AMD Radeon HD6850 | 600 MH/s |
| AMD Radeon RX 460 | 840 MH/s |
| AMD Radeon RX 470 | 957 MH/s |
| AMD Radeon R9 380X | 2058 MH/s |
| AMD FirePro W9100 | 2566 MH/s |
| AMD Radeon RX 480 | 2700 MH/s |
| AMD Radeon RX 580 | 3180 MH/s |
| AMD Radeon R9 Nano | 3325 MH/s |
| AMD Vega Frontier Edition | 7119 MH/s |