
Gerador de hash Onion baseado em GPU
Scallion foi um projeto hobby para aprender OpenCL e RSA. Não estamos mantendo o Scallion atualmente. Ele se degradou de duas maneiras importantes:
Com atenção e esforço suficientes, seria possível superar ambos os desafios acima. Poderíamos implementar suporte para o algoritmo de geração de chaves ECDSA na GPU para obter suporte a Tor v3. Poderíamos atualizar o OpenSSL e substituir as funções matemáticas por uma biblioteca diferente, ou criar nosso próprio wrapper de código gerenciado para a biblioteca OpenSSL. No entanto, provavelmente seria melhor adicionar suporte a endereços onion v3 a um projeto mantido como vanitygen-plus.
Scallion permite criar chaves GPG e endereços .onion personalizados (para serviços ocultos do Tor) usando OpenCL.
O Scallion roda no Mono (testado no Arch Linux) e .NET 3.5+ (testado no Windows 7 e Server 2008).
O Scallion está atualmente em fase beta e em desenvolvimento ativo. No entanto, acreditamos que está pronto para uso. Melhorias são esperadas principalmente em desempenho, interface do usuário e facilidade de instalação, não no algoritmo geral usado para gerar chaves.
O Scallion está disponível sob a licença MIT. Se você usar código deste projeto em seus próprios projetos, agradeceríamos se nos avisasse em [email protected].
Aqui estão algumas perguntas frequentes e suas respostas:
Por que gerar chaves GPG?
O Scallion foi usado para encontrar colisões para cada ID de chave de 32 bits no conjunto forte da Web of Trust, demonstrando o quão inseguros são os IDs de chave de 32 bits. Houve/há uma palestra no DEFCON (vídeo) e informações adicionais podem ser encontradas em https://evil32.com/.
Quais são os caracteres válidos?
Endereços .onion do Tor usam Base32, consistindo de todas as letras e os dígitos de 2 a 7, inclusive. Eles não diferenciam maiúsculas de minúsculas.
Impressões digitais GPG usam hexadecimal, consistindo dos dígitos 0-9 e das letras A-F.
É possível usar ASICs de Bitcoin (ex.: Jalapeno, KnC) para acelerar esse processo?
Infelizmente, não. Embora o processo que o Scallion usa seja conceitualmente semelhante (incrementar um nonce e verificar o hash), os detalhes são diferentes (SHA-1 vs. SHA-256 duplo para Bitcoin). Além disso, os ASICs de Bitcoin são tão rápidos porque são extremamente adaptados para aplicações de mineração de Bitcoin. Por exemplo, aqui está a folha de dados do CoinCraft A-1, um ASIC que nunca foi lançado, mas provavelmente é indicativo da abordagem geral. O microcontrolador envia trabalho na forma dos últimos 128 bits de um bloco Bitcoin, o estado intermediário do hash dos bits anteriores, uma dificuldade alvo e o nonce máximo a tentar. O ASIC escolhe o local para inserir o nonce e decide quais blocos atendem ao hash. O Scallion precisa inserir o nonce em um local diferente e verifica uma correspondência de padrão em vez de apenas "menor que XXXX".
Como usar vários dispositivos?
Execute várias instâncias do Scallion. 😄 As buscas do Scallion são probabilísticas, então você não estará repetindo trabalho com o segundo dispositivo. O suporte a vários dispositivos verdadeiro não seria muito difícil, mas também não acrescentaria muito. Já executei várias instâncias do Scallion no tmux ou screen com grande sucesso. Você só precisará abortar manualmente todos os jobs quando um encontrar um padrão (ou escrever um script de shell para monitorar o arquivo de saída e matar todos quando encontrar resultados).
Quer apenas a versão binária mais recente? Pegue-a aqui.
Pré-requisitos
Obtenha o mono mais recente para sua distribuição Linux:
Instale dependências comuns:
sudo apt-get update
sudo apt-get install libssl-dev mono-devel
Compilação AMD/OpenSource
sudo apt-get install ocl-icd-opencl-dev
Compilação Nvidia
sudo apt-get install nvidia-opencl-dev nvidia-opencl-icd
Finalmente
msbuild scallion.sln
Tenha o runtime do contêiner nvidia-docker
Compile o contêiner:
docker build -t scallion -f Dockerfile.nvidia .
Execute:
docker run --runtime=nvidia -ti --rm scallion -l
Reiniciar o Scallion durante uma busca não fará você perder "progresso". É uma busca probabilística e o Scallion não faz "progresso"
Listar dispositivos
$ mono scallion/bin/Debug/scallion.exe -l
Gerar um hash