Repository navigation
CryptoMatrix 1.0
CryptoMatrix
Sistema de Criptografia por Matriz com Chave Compartilhada
1. Visão Geral
Esse código implementa um sistema simples de criptografia e decriptação baseado na geração de uma matriz quadrada embaralhada contendo as letras do alfabeto (com acréscimo da letra "Ç"). A matriz é gerada de forma determinística a partir de uma chave compartilhada, permitindo que tanto a parte que criptografa quanto a parte que descriptografa possam reproduzir exatamente a mesma configuração.
Cada caractere da mensagem é representado pela posição (linha e coluna) em que ocorre na matriz. Quando um caractere se repete, uma posição diferente é escolhida para criptografia. Para os espaços, o sistema utiliza tokens especiais: cada token é formado por um prefixo aleatório (qualquer letra de A-Z, exceto Ç) seguido por dois dígitos aleatórios, facilitando sua identificação durante a decriptação.
2. Dependências e Considerações
-
Módulos Utilizados:
random: Para gerar números aleatórios e embaralhar a lista de caracteres.string: Para acessar a constanteascii_uppercase, que fornece as letras maiúsculas de A-Z.
-
Uso da Chave: A chave fornecida pelo usuário é usada para definir a semente do gerador de números aleatórios (
random.seed(key)), garantindo que a matriz gerada seja a mesma para uma mesma chave em processos distintos. -
Aplicações Reais:
- Comunicação segura entre partes que compartilham uma chave secreta.
- Criação de puzzles ou desafios de criptografia.
- Implementações educacionais para introdução aos conceitos de substituição de caracteres e criptografia simétrica com matriz.
3. Explicação Detalhada do Código
3.1 Função generate_matrix
Objetivo e Funcionamento:
-
Entrada:
key(chave para definir o estado do gerador aleatório) esize(tamanho da matriz, padrão 7). -
Processamento:
- Cria uma lista contendo as letras de A-Z e a letra
"Ç". - Define a semente do gerador aleatório com a chave para garantir um embaralhamento determinístico.
- Duplica os elementos da lista se necessário para preencher a matriz.
- Embaralha a lista.
- Divide a lista embaralhada em sublistas de tamanho
size.
- Cria uma lista contendo as letras de A-Z e a letra
- Saída: Retorna a matriz gerada (lista de listas representando as linhas da matriz).
3.2 Função print_matrix
Objetivo e Funcionamento:
-
Entrada:
matrix(a matriz gerada). - Processamento: Percorre cada linha da matriz e imprime o número da linha e os caracteres, separados por espaços.
- Saída: Exibição da matriz no console de forma organizada.
3.3 Função encrypt
Objetivo e Funcionamento:
-
Entrada:
message(mensagem a ser criptografada) ematrix. -
Processamento:
- Inicializa a string
encrypted. - Constrói
positions_fullmapeando cada caractere da matriz para suas posições (linha, coluna). - Cria
positions_poolcomo uma cópia depositions_fullpara gerenciar as posições usadas. - Para cada caractere da mensagem (em maiúsculas):
- Se for espaço, gera um token com um prefixo aleatório (A-Z) e dois dígitos aleatórios (entre 11 e 77).
- Para outros caracteres, seleciona e remove uma posição aleatória da pool; se esgotada, reinicializa a pool.
- Inicializa a string
- Saída: Mensagem criptografada, composta por tokens representando as posições ou espaços.
3.4 Função decrypt
Objetivo e Funcionamento:
- Entrada:
encrypted_text: texto criptografado;matrix: matriz utilizada na criptografia. - Processamento:
- Verifica, token por token, se representa um espaço (token de 3 caracteres) ou um caractere da matriz (token de 2 dígitos).
- Converte os tokens de 2 dígitos em índices para recuperar o caractere correspondente da matriz.
- Saída: Retorna a mensagem original descriptografada.
3.5 Função main
Objetivo e Funcionamento:
- Solicita a chave e gera a matriz determinística.
- Exibe a matriz e solicita a mensagem a ser criptografada.
- Criptografa a mensagem e exibe o resultado.
- Descriptografa a mensagem e exibe a mensagem original.
- O bloco
if __name__ == "__main__":garante que a funçãomainseja executada apenas quando o script for chamado diretamente.
4. Possíveis Aplicações em Cenários Reais
- Comunicação Segura: Permite o envio de mensagens criptografadas entre partes que compartilham uma chave secreta.
- Desafios e Puzzles: Pode ser adaptado para criar enigmas ou desafios onde os jogadores precisam descobrir a chave para interpretar uma mensagem oculta.
- Ensino: Ideal para uso didático, introduzindo conceitos de criptografia por substituição e uso de chaves compartilhadas.
5. Observações Finais
- A utilização de tokens especiais para espaços, com prefixos aleatórios (de A-Z), torna a mensagem criptografada menos previsível.
- A reinicialização da pool de posições garante que mensagens com muitas repetições de um mesmo caractere possam ser criptografadas sem perder a diversidade de posições.
Instalação
Important
Requer Python 3.6 ou superior para garantir compatibilidade total com os recursos utilizados no código
Clone o repositório:
git clone https://github.com/LuizWT/CryptoMatrix.git
Acesse o diretório:
cd CryptoMatrix/
Execute a ferramenta:
python3 cryptoMatrix.py
Apoio ao Projeto
Se você quiser contribuir com o projeto, sinta-se à vontade para abrir Issues ou fazer Pull Requests.
Este projeto está licenciado sob a GNU Affero General Public License v3.0 (Modificada)