Skip to content

Releases: LuizWT/CryptoMatrix

CryptoMatrix 2.1

Choose a tag to compare

@LuizWT LuizWT released this 03 May 01:29
dd9c82b

CryptoMatrix

Sistema de Criptografia por Matriz com Chave Compartilhada

1. Visão Geral

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.

2. Dependências e Considerações

Note

Todas as dependências são nativas do Python.



  • Módulos Utilizados:
    • secrets, random, string, os, math para 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 = 16 para configurações de PBKDF2 e tamanho de salt/MAC.
    • MIN_CELLS = 97 (número de símbolos únicos) e MAX_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().

3. Explicação Detalhada do Código

3.1 Função derive_matrix_seed



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)

3.2 Função derive_mac_key



Objetivo: derivar a chave de autenticação (MAC) segura via PBKDF2.

  • Entrada: passphrase: str, salt: bytes (16 bytes)
  • Processamento: PBKDF2‑HMAC‑SHA256 com PBKDF2_ITERATIONS e dklen=KEY_LEN, retorna a metade final dos bytes.
  • Saída: mac_key: bytes (32 bytes)

3.3 Função decide_dimensions



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 de matrix_seed).
  • Processamento:
    1. Gera todos os candidatos (d,r,c) dentro dos limites.
    2. Filtra aqueles com produto ≥ MIN_CELLS e ≤ MAX_CELLS.
    3. Escolhe aleatoriamente um candidato usando random.seed(seed_int).
  • Saída: tupla (depth, rows, cols)

3.4 Função generate_matrix



Objetivo: construir a matriz 3D embaralhada de símbolos.

  • Entrada: matrix_seed: bytes, depth, rows, cols: int.
  • Processamento:
    1. Cria lista inicial ml com todos os SYMBOLS. Se necessário, repete até alcançar depth×rows×cols elementos.
    2. Trunca ml ao tamanho exato e embaralha determinísticamente usando random.Random(int.from_bytes(matrix_seed)).
    3. Garante presença de todos os símbolos: substitui duplicatas por símbolos faltantes.
    4. Converte ml em estrutura 3D: listas de camadas, linhas e colunas.
  • Saída: matrix: list[list[list[str]]]

3.5 Função print_matrix



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.

3.6 Função encrypt



Objetivo: cifrar uma mensagem usando a matriz e gerar tag MAC.

  • Entrada: msg: str, matrix, mac_key.
  • Processamento:
    1. Mapeia cada símbolo da matriz às suas coordenadas (d,r,c).
    2. 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.
    3. Guarda default_raw_ct (com zeros) e gera display_ct (com corte de zeros).
    4. Calcula HMAC‑SHA256 sobre raw com mac_key, produzindo tag.
  • Saída: (display_ct: str, tag: str)

3.7 Função decrypt



Objetivo: validar integridade e reconstruir o texto original.

  • Entrada: ct (ignored), tag: str, matrix, mac_key.
  • Processamento:
    1. Recalcula HMAC sobre default_raw_ct e compara com tag; falha se divergente.
    2. Divide raw em blocos de 6 dígitos e converte em (d,r,c) para lookup na matriz.
  • Saída: mensagem original str

3.8 Função validate_message



Objetivo: garantir que a mensagem contenha apenas símbolos permitidos.

  • Entrada: msg: str
  • Processamento: verifica `all(ch in SYMBOLS)`.
  • Saída: bool

3.9 Função clear_terminal



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

3.10 Função main



Objetivo: orquestrar o fluxo de geração da matriz, criptografia e decriptação.

  • Solicita passphrase, deriva matrix_seed e mac_key.
  • Decide dimensões e gera matriz.
  • Loop de input até mensagem válida.
  • Chama encrypt, exibe ciphertext, tag e salt.
  • Chama decrypt para demonstrar decriptação e exibe resultado.

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/seu-usuario/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)

1.1

1.1

Choose a tag to compare

@LuizWT LuizWT released this 23 Apr 02:04
60a61e0

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 constante ascii_uppercase, que fornece as letras maiúsculas de A-Z.
  • Uso da Chave: A chave fornecida pelo usuário é usada para definir a SEED 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) e size (dimensão da matriz quadrada, padrão 7).
  • Processamento:
    1. Cria base_alphabet contendo letras A–Z e a letra "Ç".
    2. Define a semente do gerador aleatório com random.seed(key) para garantir determinismo.
    3. Inicializa matrix_list com uma cópia de base_alphabet, assegurando ao menos uma de cada letra.
    4. Duplica base_alphabet até que matrix_list tenha pelo menos size×size elementos.
    5. Embaralha matrix_list e trunca para o tamanho exato de size×size.
    6. Verifica letras faltantes em matrix_list e substitui posições duplicadas para garantir presença de todas as letras.
    7. Divide matrix_list em sublistas de comprimento size, formando a matriz final.
  • Saída: Retorna a matriz gerada — uma lista de listas (list[list[str]]) com size linhas e size colunas.

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) e matrix.
  • Processamento:
    1. Inicializa a string encrypted.
    2. Constrói positions_full mapeando cada caractere da matriz para suas posições (linha, coluna).
    3. Cria positions_pool como uma cópia de positions_full para gerenciar as posições usadas.
    4. 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.
  • 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 validate_message



Objetivo e Funcionamento:

  • Entrada: msg (Mensagem que será validada pela função antes de ser criptografada).
  • Processamento:
    1. Aplica re.fullmatch(r"[A-ZÇ ]+", msg) para verificar se msg contém apenas:
      • Letras maiúsculas A–Z
      • Cedilha Ç
      • Espaços
    2. Retorna True se corresponder ao padrão, caso contrário False.
  • Saída: bool — True para mensagem válida; False caso haja qualquer outro caractere.

3.6 Função clear_terminal



Objetivo e Funcionamento:

  • Entrada: nenhuma.
  • Processamento:
    1. Verifica o sistema operacional via os.name:
      • Se for 'nt', executa cls (Windows).
      • Senão, executa clear (Linux/macOS).
    2. Chama os.system com o comando apropriado para limpar o terminal.
  • Saída: nenhuma (efeito colateral no terminal).

3.7 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ção main seja 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...

Read more

CryptoMatrix 1.0

Choose a tag to compare

@LuizWT LuizWT released this 16 Apr 01:58
1286e8f

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 constante ascii_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) e size (tamanho da matriz, padrão 7).
  • Processamento:
    1. Cria uma lista contendo as letras de A-Z e a letra "Ç".
    2. Define a semente do gerador aleatório com a chave para garantir um embaralhamento determinístico.
    3. Duplica os elementos da lista se necessário para preencher a matriz.
    4. Embaralha a lista.
    5. Divide a lista embaralhada em sublistas de tamanho size.
  • 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) e matrix.
  • Processamento:
    1. Inicializa a string encrypted.
    2. Constrói positions_full mapeando cada caractere da matriz para suas posições (linha, coluna).
    3. Cria positions_pool como uma cópia de positions_full para gerenciar as posições usadas.
    4. 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.
  • 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ção main seja 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)