
GPU 기반 어니언 해시 생성기
Scallion은 OpenCL과 RSA를 배우기 위한 취미 프로젝트였습니다. 현재 Scallion을 유지 관리하고 있지 않습니다. 두 가지 중요한 부분에서 비트로트(bitrot)가 발생했습니다:
충분한 관심과 노력이 있다면 위의 두 가지 과제를 모두 해결할 수 있습니다. 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은 현재 베타 단계이며 활발히 개발 중입니다. 그럼에도 불구하고 사용할 준비가 되었다고 생각합니다. 개선 사항은 주로 성능, 사용자 인터페이스 및 설치 용이성 측면에서 예상되며, 키 생성에 사용되는 전체 알고리즘은 변경되지 않습니다.
Scallion은 MIT 라이선스로 제공됩니다. 이 프로젝트의 코드를 자신의 프로젝트에서 사용하는 경우 [email protected]으로 알려주시면 감사하겠습니다.
자주 묻는 질문과 답변입니다:
GPG 키를 생성하는 이유는 무엇인가요?
Scallion은 신뢰 망(Web of Trust)의 강력한 집합에 있는 모든 32비트 키 ID에 대한 충돌을 찾는 데 사용되었으며, 32비트 키 ID가 얼마나 안전하지 않은지 보여주었습니다. DEFCON 강연(동영상)이 있었으며, 추가 정보는 https://evil32.com/에서 확인할 수 있습니다.
유효한 문자는 무엇인가요?
Tor .onion 주소는 Base32를 사용하며, 모든 문자와 숫자 2~7(포함)로 구성됩니다. 대소문자를 구분하지 않습니다.
GPG 지문은 16진수를 사용하며, 숫자 0-9와 문자 A-F로 구성됩니다.
비트코인 ASIC(예: Jalapeno, KnC)을 사용하여 이 프로세스를 가속화할 수 있나요?
안타깝게도 그렇지 않습니다. Scallion이 사용하는 프로세스는 개념적으로 유사하지만(nonce를 증가시키고 해시 확인), 세부 사항이 다릅니다(SHA-1 대 비트코인의 double SHA-256). 게다가 비트코인 ASIC은 비트코인 채굴 애플리케이션에 매우 특화되어 있기 때문에 빠른 것입니다. 예를 들어, 출시되지 않았지만 일반적인 접근 방식을 나타낼 가능성이 있는 ASIC인 CoinCraft A-1의 데이터시트를 참조하세요. 마이크로컨트롤러는 비트코인 블록의 마지막 128비트, 이전 비트의 해시 미드스테이트(midstate), 목표 난이도, 시도할 최대 nonce를 작업으로 보냅니다. ASIC은 nonce를 삽입할 위치를 선택하고 어떤 블록이 해시를 충족하는지 결정합니다. Scallion은 nonce를 다른 위치에 삽입해야 하며, 단순히 "XXXX보다 낮음"이 아닌 패턴 일치를 확인합니다.
여러 장치를 어떻게 사용할 수 있나요?
여러 Scallion 인스턴스를 실행하세요. 😄 Scallion 검색은 확률적이므로 두 번째 장치에서 작업을 반복하지 않습니다. 실제 다중 장치 지원은 어렵지 않지만 많은 것을 추가하지도 않습니다. 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은 기본 정규식 구문을 통해 여러 패턴 중 하나 이상을 찾을 수 있습니다. 문자 클래스(예: [abcd])만 지원됩니다. . 문자는 모든 문자를 나타냅니다. Onion 주소는 항상 16자이며 GPG 지문은 항상 40자입니다. 일치 항목의 끝에 $를 넣어 접미사를 찾을 수 있습니다(예: DEAD$). 마지막으로 파이프 구문(예: pattern1|pattern2)을 사용하여 여러 패턴을 찾을 수 있습니다. 여러 패턴을 검색하는 것은(합리적인 수준에서) 속도를 크게 저하시키지 않습니다. 많은 정규식은 GPU에서 단일 패턴을 생성하여 속도 저하를 초래하지 않습니다.
예제가 포함된 몇 가지 사용 사례:
가독성을 위해 접두사 뒤에 숫자 생성:
mono scallion.exe prefix[234567]
여러 패턴을 한 번에 검색(n.b. -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에서 수행됩니다. 아이비브릿지 i7은 단일 코어를 사용하여 초당 51개의 키를 생성할 수 있습니다. 각 키는 채굴할 1기가해시의 지수를 제공할 수 있으며, 현재 구현된 대로 적절한 CPU는 여러 GPU를 따라잡을 수 있습니다.
SHA1 해싱은 GPU에서 수행됩니다. 테스트한 여러 GPU의 해시레이트는 아래와 같습니다(제조업체별로 그룹화되고 전력별로 정렬됨):
MH/s = 초당 백만 해시
Intel이 프로세서용 OpenCL 드라이버를 출시했으며 CPU에서 짧은 충돌을 찾을 수 있다는 점도 주목할 가치가 있습니다.
주어진 부분 충돌에 필요한 시간(평균)을 계산하려면 다음 공식을 사용하십시오:
| 유형 | 예상 시간 |
|---|---|
| GPG 키 | 2^(4*길이-1) / 해시속도 |
| .onion 주소 | 2^(5*길이-1) / 해시속도 |
예를 들어 nVidia Quadro K2000M에서 약 90 MH/s의 속도를 봅니다. 이 속도로 8자 .onion 접두사를 생성하는 데 약 1시간 41분이 소요됩니다: 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 |