Implementa um sistema de criptografia e decriptação baseado em uma matriz 3D determinística de símbolos ASCII imprimíveis. A matriz é gerada a partir de uma passphrase compartilhada, usando SHA‑256 para derivar a SEED e PBKDF2‑HMAC‑SHA256 para proteger a chave de autenticação (MAC). Cada caractere do texto é convertido em coordenadas (camada (dd), linha (rr), coluna (cc)) na matriz.
Note
Todas as dependências são nativas do Python.
-
Módulos Utilizados:
secrets,random,string,os,mathpara geração de números aleatórios, manipulação de terminal e cálculo de dimensões.hashlib,hmac,hashlib.pbkdf2_hmac— SHA‑256 e PBKDF2 para derivação de chaves e HMAC‑SHA256 para integridade.
-
Parâmetros Principais:
PBKDF2_ITERATIONS = 100 000,KEY_LEN = 64,SALT_LEN = 16para configurações de PBKDF2 e tamanho de salt/MAC.MIN_CELLS = 97(número de símbolos únicos) eMAX_CELLS = 1000— limites para dimensão da matriz.
-
Conjunto de Símbolos: 95 símbolos ASCII imprimíveis (incluindo o espaço), com a adição dos caracteres
Çeç. -
Validação de Mensagem: somente caracteres do conjunto acima são permitidos. Considere ver
validate_message().
Objetivo: derivar um SEED fixo para geração da matriz a partir da passphrase.
- Entrada:
passphrase: str - Processamento: SHA‑256 da passphrase (UTF‑8).
- Saída:
matrix_seed: bytes(32 bytes)
Objetivo: derivar a chave de autenticação (MAC) segura via PBKDF2.
- Entrada:
passphrase: str,salt: bytes(16 bytes) - Processamento: PBKDF2‑HMAC‑SHA256 com
PBKDF2_ITERATIONSedklen=KEY_LEN, retorna a metade final dos bytes. - Saída:
mac_key: bytes(32 bytes)
Objetivo: escolher dimensões (depth, rows, cols) para a matriz 3D de modo que MIN_CELLS ≤ depth×rows×cols ≤ MAX_CELLS.
- Entrada:
seed_int: int(inteiro derivado dematrix_seed). - Processamento:
- Gera todos os candidatos (d,r,c) dentro dos limites.
- Filtra aqueles com produto ≥
MIN_CELLSe ≤MAX_CELLS. - Escolhe aleatoriamente um candidato usando
random.seed(seed_int).
- Saída: tupla
(depth, rows, cols)
Objetivo: construir a matriz 3D embaralhada de símbolos.
- Entrada:
matrix_seed: bytes,depth, rows, cols: int. - Processamento:
- Cria lista inicial
mlcom todos osSYMBOLS. Se necessário, repete até alcançardepth×rows×colselementos. - Trunca
mlao tamanho exato e embaralha determinísticamente usandorandom.Random(int.from_bytes(matrix_seed)). - Garante presença de todos os símbolos: substitui duplicatas por símbolos faltantes.
- Converte
mlem estrutura 3D: listas de camadas, linhas e colunas.
- Cria lista inicial
- Saída:
matrix: list[list[list[str]]]
Objetivo: exibir cada camada da matriz no terminal.
- Entrada:
matrix. - Processamento: para cada camada, imprime cabeçalho de colunas e linhas com ANSI colors.
- Saída: visualização formatada no console.
Objetivo: cifrar uma mensagem usando a matriz e gerar tag MAC.
- Entrada:
msg: str,matrix,mac_key. - Processamento:
- Mapeia cada símbolo da matriz às suas coordenadas (d,r,c).
- Para cada caractere da mensagem:
- Escolhe coordenada aleatória não usada (pool) e concatena como 6 dígitos (“ddrrcc”).
- Se pool esgotar, reinicializa para manter diversidade.
- Guarda
default_raw_ct(com zeros) e geradisplay_ct(com corte de zeros). - Calcula HMAC‑SHA256 sobre
rawcommac_key, produzindotag.
- Saída:
(display_ct: str, tag: str)
Objetivo: validar integridade e reconstruir o texto original.
- Entrada:
ct(ignored),tag: str,matrix,mac_key. - Processamento:
- Recalcula HMAC sobre
default_raw_cte compara comtag; falha se divergente. - Divide
rawem blocos de 6 dígitos e converte em (d,r,c) para lookup na matriz.
- Recalcula HMAC sobre
- Saída: mensagem original
str
Objetivo: garantir que a mensagem contenha apenas símbolos permitidos.
- Entrada:
msg: str - Processamento: verifica `all(ch in SYMBOLS)`.
- Saída:
bool
Objetivo: limpar a tela do terminal.
- Entrada: nenhuma
- Processamento: Identifica o sistema operacional e executa o comando apropriado para limpar a tela.
- Saída: nenhuma
Objetivo: orquestrar o fluxo de geração da matriz, criptografia e decriptação.
- Solicita passphrase, deriva
matrix_seedemac_key. - Decide dimensões e gera matriz.
- Loop de input até mensagem válida.
- Chama
encrypt, exibe ciphertext, tag e salt. - Chama
decryptpara demonstrar decriptação e exibe resultado.
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/seu-usuario/CryptoMatrix.git
Acesse o diretório:
cd CryptoMatrix/
Execute a ferramenta:
python3 cryptoMatrix.py
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)