Este projeto implementa a técnica de Hash Visualization proposta no artigo "Hash Visualization: a New Technique to improve Real-World Security", escrito por Adrian Perrig e Dawn Song. A técnica visa melhorar a segurança de sistemas do mundo real ao substituir strings sem significado (como impressões digitais de chaves criptográficas ou senhas) por imagens estruturadas, que são mais fáceis para os humanos compararem e lembrarem.
O código implementa o algoritmo Random Art, que gera imagens a partir de strings usando uma gramática probabilística. Essas imagens podem ser usadas para validação de chaves raiz ou autenticação de usuários.
O código gera uma imagem a partir de uma expressão matemática aleatória, criada usando uma gramática probabilística. A expressão é avaliada para cada pixel da imagem, gerando um valor que é mapeado para uma cor.
-
Geração de Expressões Aleatórias:
- O algoritmo usa uma gramática probabilística para gerar expressões matemáticas.
- As expressões podem incluir operações como
sin,cos,add,mult, etc. - A profundidade da árvore de expressões é limitada para garantir que as imagens geradas sejam regulares e não caóticas.
-
Avaliação das Expressões:
- Para cada pixel
(x, y), a expressão é avaliada para gerar um valor. - O valor é normalizado para o intervalo
[0, 255]e usado para definir a cor do pixel.
- Para cada pixel
-
Geração da Imagem:
- A imagem é gerada no formato PPM (Portable PixMap).
- O arquivo PPM pode ser convertido para PNG usando o ImageMagick.
- Problema: Os usuários precisam comparar strings hexadecimais longas e sem significado para validar chaves raiz.
- Solução: Substituir as strings por imagens geradas por Random Art. Os usuários podem comparar as imagens visualmente, o que é mais fácil e confiável.
- Exemplo: Um usuário pode comparar a imagem gerada a partir da impressão digital de uma chave raiz com uma imagem de referência publicada em um jornal.
- Problema: Os usuários têm dificuldade em lembrar senhas fortes ou PINs.
- Solução: Substituir a memorização de senhas por reconhecimento de imagens. O usuário memoriza um conjunto de imagens (portfólio de imagens) e as reconhece durante a autenticação.
- Exemplo: Durante a autenticação, o usuário é apresentado a um conjunto de imagens, algumas do seu portfólio e outras aleatórias. O usuário deve identificar corretamente as imagens do seu portfólio.
- Compilador C: Instale o GCC ou outro compilador C.
- ImageMagick: Instale o ImageMagick para converter o arquivo PPM para PNG.
- No Linux:
sudo apt-get install imagemagick
- No macOS:
brew install imagemagick
- No Linux:
-
Clone o repositório ou baixe o código.
-
Compile o código:
gcc -o random_art random_art.c -lm
-
Execute o programa:
./random_art
-
O programa gerará dois arquivos:
output.ppm: O arquivo PPM original.
-
Converta o arquivo para PNG:
feh output.png
output.png: O arquivo PNG convertido.
-
Visualize a imagem:
- Use um visualizador de imagens como o GIMP, Feh, ou navegadores web para abrir
output.png.
- Use um visualizador de imagens como o GIMP, Feh, ou navegadores web para abrir
A imagem gerada será uma representação visual da função matemática aleatória criada pelo programa. Dependendo da semente aleatória, a imagem pode variar entre padrões geométricos, gradientes ou formas abstratas.
Exemplo de saída:
Imagem gerada e salva como 'output.png'
O código e as explicações são baseados no artigo:
- Título: Hash Visualization: a New Technique to improve Real-World Security
- Autores: Adrian Perrig e Dawn Song
- Instituição: Carnegie Mellon University
- Link: Artigo Original
O código e a implementação do código:
- Título: RandomArt
- Autor: Alexey Kutepov
- Link: Artigo Original
Este projeto está licenciado sob a licença MIT. Consulte o arquivo LICENSE para mais detalhes.
Contribuições são bem-vindas! Sinta-se à vontade para abrir issues ou enviar pull requests.
Para dúvidas ou sugestões, entre em contato:
- Email: [email protected]
- GitHub: marcelfagundes