Scallion允许你使用OpenCL创建虚构的GPG密钥和.onion地址(用于Tor的 隐藏服务)。它可以在Mono(在Arch Linux上测试)和.NET 3.5+(在Windows 7和Server 2008上测试)上运行。
它目前处于测试阶段,并且正在积极开发中。尽管如此,我们认为它已经可以使用了。预期主要在性能,用户界面和安装简便性方面有所改进,而不是在用于生成密钥的整体算法方面有所改进。
常问问题
以下是一些常见问题及其解答:
- 为什么要生成GPG密钥?Scallion用于在Web of Trust的强大集中查找每个32位密钥ID的冲突,这表明32位密钥ID的不安全程度。在DEFCON上有一个演讲(视频),可以在https://evil32.com/上找到更多信息。
- 什么是有效字符?Tor .onion地址使用Base32,由所有字母和2到7(包括2和7)组成。它们不区分大小写。GPG指纹使用十六进制,由数字0-9和字母AF组成。
- 您可以使用比特币ASIC(例如Jalapeno,KnC)来加速此过程吗?可悲的是没有。尽管Scallion使用的过程在概念上是相似的(增加随机数并检查哈希),但细节有所不同(SHA-1与比特币的双SHA-256)。此外,比特币ASIC之所以能如此之快,是因为它们非常适合比特币挖矿应用。例如,这是数据表对于CoinCraft A-1,这是一种从未问世的ASIC,但可能表示通用方法。微控制器以比特币块的最后128位,前几位的哈希中间状态,目标难度以及要尝试的最大随机数的形式发送工作。ASIC选择插入随机数的位置,然后选择满足散列的块。Scallion必须在其他位置插入随机数,并且它检查模式匹配,而不仅仅是“低于XXXX”。
- 如何使用多个设备?运行多个Scallion实例。?葱的搜索是概率性的,因此您不会重复使用第二个设备。真正的多设备支持不是很困难,但也不会增加太多。我已经在tmux或screen中运行了多个葱实例,并取得了巨大的成功。您只要找到一个模式就可以手动中止所有作业(或编写一个shell脚本来监视输出文件,并在看到结果时将其全部杀死)。
依存关系
- OpenCL和相关的驱动程序已安装和配置。请参阅您的发行版文档。
- OpenSSL。对于Windows,包含预构建的x86 DLL
- 仅在Windows上,VC ++ Redistributable 2008
编译Linux
先决条件
- 为您的Linux发行版获取最新的Mono:http : //www.mono-project.com/download/
- 安装通用依赖项:
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
Docker Linux(仅限nvidia GPU)
- 具有nvidia-docker容器运行时
- 构建容器:
docker build -t scallion -f Dockerfile.nvidia .
- 运行:
docker run --runtime=nvidia -ti --rm scallion -l
预期输出的屏幕截图
建立视窗
- 在VS Express中为Desktop 2012打开’scallion.sln’
- 构建解决方案后,我在调试模式下进行了所有操作。
多模式散列
Scallion支持通过原始正则表达式语法查找多个模式中的一个或多个。仅支持字符类(例如[abcd]
)。该.
字符代表任意字符。洋葱地址始终为16个字符,GPG指纹始终为40个字符。您可以通过$
在比赛的末尾放置一个后缀(例如DEAD$
)。最后,管道语法(例如pattern1|pattern2
)可用于查找多个模式。搜索多重模式(在合理的范围内)不会显着降低速度。许多正则表达式将在GPU上产生单个模式,并且不会降低速度。
带有示例的一些用例:
- 生成前缀后跟数字以提高可读性:
mono scallion.exe prefix[234567]
- 一次搜索多个模式(nb -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$ # Generate GPG key
- 复杂的自我说明示例:
mono scallion.exe "suffixa$|suffixb$|prefixa|prefixb|a.suffix$|a.test.$"
它是如何工作的?
在较高的层次上,Scallion的工作原理如下:
- 在CPU上使用OpenSSL生成RSA密钥
- 将密钥发送到GPU
- 增加密钥的公开指数
- 哈希键
- 如果哈希密钥不是部分冲突,请转到步骤3
- 如果密钥没有通过PKCS#1 v2.1建议的完整性检查(在CPU上检查),请转到步骤3
- 带有部分碰撞的全新钥匙!
上面描述了基本算法。速度/性能是GPU和CPU上大规模并行化的结果。
速度/性能
重要的是,要认识到Scallion预先执行的是概率性搜索。实际时间可能与预测的时间有很大的差异。
初始RSA密钥生成由CPU完成。ivybridge i7可以使用单个内核每秒生成51个密钥。每个密钥可以提供价值1千兆ah的指数来挖掘,并且像样的CPU可以跟上目前实现的多个GPU。
SHA1哈希在GPU上完成。下面是我们测试过的多个GPU的哈希率(按制造商分组并按功率排序):
显卡 | 速度 |
---|---|
英特尔i7-2620M | 9.9 MH /秒 |
英特尔i5-5200U | 118 MH /秒 |
NVIDIA GT 520 | 38.7 MH /秒 |
NVIDIA Quadro K2000M | 90 MH /秒 |
NVIDIA GTS 250 | 128 MH /秒 |
NVIDIA GTS 450 | 144 MH /秒 |
NVIDIA GTX 670 | 480 MH /秒 |
NVIDIA GTX 970 | 2350 MH /秒 |
NVIDIA GTX 980 | 3260 MH /秒 |
NVIDIA GTX 1050(M) | 1400 MH /秒 |
NVIDIA GTX 1070 | 4140 MH /秒 |
NVIDIA GTX 1070 TI | 5100 MH /秒 |
NVIDIA GTX TITAN X | 4412 MH /秒 |
NVIDIA GTX 1080 | 5760 MH /秒 |
NVIDIA Tesla V100 | 11646 MH /秒 |
AMD A8-7600 APU | 120 MH /秒 |
AMD Radeon HD5770 | 520 MH /秒 |
AMD Radeon HD6850 | 600 MH /秒 |
AMD Radeon RX 460 | 840 MH /秒 |
AMD Radeon RX 470 | 957 MH /秒 |
AMD Radeon R9 380X | 2058 MH /秒 |
AMD FirePro W9100 | 2566 MH /秒 |
AMD Radeon RX 480 | 2700 MH /秒 |
AMD Radeon RX 580 | 3180 MH /秒 |
AMD Radeon R9纳米 | 3325 MH /秒 |
AMD Vega Frontier版 | 7119 MH /秒 |
MH / s =每秒百万个哈希
值得注意的是,英特尔已经为其处理器发布了OpenCL驱动程序,可以在CPU上找到短暂的冲突。
要计算给定的部分碰撞所需的秒数(平均),请使用以下公式:
类型 | 预计时间 |
---|---|
GPG密钥 | 2 ^(4 * length-1)/哈希速度 |
.onion地址 | 2 ^(5 * length-1)/哈希速度 |
例如,在我的nVidia Quadro K2000M上,我看到的速度约为90 MH / s。以这种速度,我可以在大约1h 41m中生成一个八个字符的.onion前缀2^(5*8-1)/90 million = 101 minutes
。
工作小组人数
Scallion 将默认使用您的设备报告的首选工作群组大小。这是一个合理的默认值,但尝试使用工作群组可能会提高性能。
安全
Scallion生成的密钥与shallot生成的密钥非常相似。它们有异常大的公共指数,但它们通过openssl的RSA_check_key函数通过PKCS #1 v2.1推荐的全套安全检查。Scallion支持多种RSA密钥大小,有1024b、2048b和4096b的优化内核。其他的密钥大小也可以使用,但还没有测试过。