
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" 검색