Home Laboratórios Cripto-Lab O Algoritmo CripFix
Aldeia Numaboa

Um portal diferente em Português
sem propaganda, sem Google ads e sem banners.

Na Aldeia

Há 101 visitantes online

2796 registros
0 hoje
6 nesta semana
4 neste mês

Boas vindas: delilah

Estatística

Artigos: 847
Artigos lidos: 3918977
Arquivados: 41
Downloads: 416
Baixados: 161778
Glossário: 1198
Bibliografia: 24
JoomlaWatch Stats 1.2.7 by Matej Koval

Visitas de onde?

88,3%Brasil Brasil
9,2%Portugal Portugal
0,8%EUA EUA
0,2%Espanha Espanha
0,1%Alemanha Alemanha

Visitantes

Hoje: 484
Ontem: 1940
Esta semana: 2424
Semana passada: 12942
Este mês: 2424
Mês passado: 52379
Total: 123709

Registro/Login

Para fazer login ou registrar-se

Usuários registrados têm algumas regalias!

Sáb

22

Nov

2003


22:00

O Algoritmo CripFix PDF Imprimir Indique esta página
Avaliação: / 3
PiorMelhor 
Laboratórios da Aldeia - Laboratório de Criptografia
Escrito por Yugi   


Índice do Artigo
O Algoritmo CripFix
Sobre o autor
Todas as páginas

O autor do CripFix, Yugi Tumro, disponibiliza um pacote "zipado" contendo o texto explicativo do seu algoritmo, um programa para cifrar e decifrar textos além de um texto desafio cifrado com o CripFix mas de chave desconhecida.

Image Faça o download do CRIPFIX.

OBSERVAÇÕES

CripFix é um Algoritmo Criptográfico de Fluxo. Não é um algoritmo semelhante ao DES, IDEA, AES ou SERPENT. Todos estes algoritmos são baseados em uma cifra de bloco. A maioria deles codifica a mensagem clara em blocos de 128 bits.

CripFix é simplesmente um pequeno Algoritmo Criptográfico onde a mensagem clara é codificada byte a byte. A chave é de 128 bits e ela deve ser digitada em formato ASCII.

CripFix não cria um arquivo temporário ao codificar ou decodificar os arquivos. Como o Algoritmo CripFix foi implementado apenas para o teste do algoritmo estas questões não foram consideradas em sua codificação. Para sua segurança convém criar um diretório e copiar o [CRIPFIX.EXE] para ele. Depois copie o arquivo que você deseja criptografar ou decodificar para este diretório. É necessário verificar que ao informar o arquivo que será criptografado ao CripFix você deve informar o nome com o formato 8.3. O CripFix utiliza o padrão MS-DOS para os nomes dos arquivos.

Anote cuidadosamente a chave utilizada para codificação. Na decodificação a chave de cifra deve ser a mesma da codificação. Cuidado ao misturar letras maiúsculas e minúsculas para compor uma chave. Elas são diferentes para o CripFix. Na realidade o que importa é o código ASCII de cada caracter e não se este caracter é uma letra maiúscula, minúscula, um número ou caracter especial.

Caso você queira acrescentar caracteres especiais à sua chave basta utilizar as teclas no campo onde a chave está sendo digitada.

O arquivo [CRIPFIX.EXE] não é indicado para uso comercial. O software foi implementado para mostrar o uso do criptossistema CripFix. O CripFix não possui um banco de dados para guardar as chaves utilizadas. O gerenciamento de chaves fica por conta do usuário. Quaisquer prejuízos decorrentes do uso ou da impossibilidade do uso deste software serão de total responsabilidade do usuário. O autor do algoritmo somente informa que as funções de cifragem e decifragem funcionam perfeitamente se não houver erro ao digitar as chaves de cifra.

DESCRIÇÃO DO ALGORITMO

A cifragem dos dados com o Cripfix acontece byte a byte. Cada rodada da cifragem com o Cripfix codifica 8 bytes. Caso o tamanho do arquivo não seja múltiplo de 8 a rodada é interrompida.

Vamos codificar a mensagem "aaaaaaaa" com a chave "0123456789ABCDEF".

Dividindo a chave de 16 bytes nos valores A, B, C, D, E, F, G, H

        A = "01" => 12592
        B = "23" => 13106
        C = "45" => 13620
        D = "67" => 14134
        E = "89" => 14648
        F = "AB" => 16961
        G = "CD" => 17475
        H = "EF" => 17989

Os valores são obtidos da seguinte forma, tomando como exemplo B = "23": o código ASCII do caracter "2" é 50 (ou 32 hexadecimal) e o do caracter "3" é 51 (ou 33 hexadecimal) portanto, em valores hexadecimais, a string "23" corresponde aos valores hexadecimais 32 e 33. O valor 32 é o byte mais significativo e 33 é o byte menos significativo portanto, na memória, estão dispostos em ordem inversa: 33 32. O valor decimal correspondente ao hexadecimal 3332 é 13106

(observação da vovó Vicki com a devida autorização do autor)
.

Início da cifragem propriamente dita

Nesta fase começamos a codificar o arquivo claro. Antes temos que fazer alguns cálculos. Será necessário uma variável X do tipo caracter com tamanho 20. Esta variável é auxiliar e não é utilizada diretamente para cifrar ou decifrar. Primeiro vamos calcular A * A e B * B, lembrem que A = 12592 e B = 13106:

    A * A = 0158558464
    B * B = 0171767236

    OBS: As Variáveis A e B permanecem inalteradas!!!

Para padronizar o tamanho de A * A e B * B completamos os números com zeros à esquerda para que eles tenham 10 dígitos. Para obter X basta concatenar estes dois números considerando-os como se eles fossem caracteres.

    X = 01585584640171767236

Vamos utilizar duas variáveis auxiliares: XA e XB. Estas variáveis são numéricas. XA é igual a um número de 5 dígitos assim com XB também é. Para obter os valores de XA e XB basta ler 5 dígitos de X a partir das posições 6 e 11, respectivamente.

    X = 01585584640171767236
    XA = 58464

    X = 01585584640171767236
    XB = 01717

Agora é hora de modificar os valores das variáveis A, B, C, D. Elas permaneceram inalteradas até agora. Os novos valores serão calculados da seguinte forma:

    A = (A + XA + C) MOD 65536
    B = (B + XB + D) MOD 65536
    C = (C + B) MOD 65536
    D = (D + A) MOD 65536

    A = (12592 + 58464 + 13620) MOD 65536 => 19140
    B = (13106 + 01717 + 14134) MOD 65536 => 28957
    C = (13620 + 28957) MOD 65536 => 42577
    D = (14134 + 19140) MOD 65536 => 33274

Neste ponto as variáveis A e B serão utilizadas para codificar 4 bytes do arquivo claro. A e B representam um número de 16 bits. Precisamos dividir A e B em 2 partes de 8 bits para criptografar cada byte que possui 8 bits.

    A = 19140
    A[1] = 196
    A[2] = 74

    B = 28957
    B[1] = 29
    B[2] = 113

A operação de divisão das variáveis A e B é simples de se fazer utilizando um computador. Basta transformar A em uma string de 2 bytes e achar o código ASCII de cada byte. O primeiro será A[1] e o segundo será A[2]. O mesmo vale para a variável B. Na falta de um computador basta utilizar os operadores DIV e MOD. MOD é o resto da divisão e DIV é a parte inteira do resultado da divisão. Vejam abaixo:

    A = 19140
    A[1] = (A MOD 256) = 19140 MOD 256 => 196
    A[2] = (A DIV 256) = 19140 DIV 256 => 74

    B = 28957
    B[1] = (B MOD 256) = 28957 MOD 256 => 29
    B[2] = (B DIV 256) = 28957 DIV 256 => 113

As variáveis A[1], A[2], B[1] e B[2] contém valores de 0 até 255. A cifragem dos primeiros 4 bytes da mensagem clara fica assim:

    Mensagem = "aaaa"
    "a" => 97  (O código ASCII de "a" ‚ 97)

    A[1] = (A[1] + "a") MOD 256 => (196 + 97) MOD 256 => 37
    A[2] = (A[2] + "a") MOD 256 =>  (74 + 97) MOD 256 => 171
    B[1] = (B[1] + "a") MOD 256 =>  (29 + 97) MOD 256 => 126
    B[2] = (B[2] + "a") MOD 256 => (113 + 97) MOD 256 => 210

Então "aaaa" corresponde a "%«~Ò". Na decifragem o processo é o mesmo, só que ao invés de utilizarmos adição usamos a subtração. Veja:

     criptograma = "%«~Ò"
    "%" => 37
    "«" => 171
    "~" => 126
    "Ò" => 210

    A[1] = (- A[1] + "%") MOD 256 =>  (-196 + 37) MOD 256 => 97
    A[2] = (- A[2] + "«") MOD 256 =>  (-74 + 171) MOD 256 => 97
    B[1] = (- B[1] + "~") MOD 256 =>  (-29 + 126) MOD 256 => 97
    B[2] = (- B[2] + "Ò") MOD 256 => (-113 + 210) MOD 256 => 97

Notem que a operação é a mesma. Apenas utilizamos os valores de A[1], A[2], B[1], B[2] negativos.

Vamos repetir todo o processo utilizando as variáveis E, F, G, H. Agora codificamos os outros 4 bytes restantes ("aaaa").

    E = 14648
    F = 16961
    E * E = 0214563904
    F * F = 0287675521

    OBS: As Variáveis E e F permanecem inalteradas!!!

Para padronizar o tamanho de E * E e F * F completamos os números com zeros à esquerda para que eles tenham 10 dígitos. Para obter X basta concatenar estes dois números considerando-os como se eles fossem caracteres.

    X = 02145639040287675521

Vamos utilizar duas variáveis auxiliares: XA e XB. Estas variáveis são numéricas. XA é igual a um número de 5 dígitos assim com XB também é. Para obter os valores de XA e XB basta ler 5 dígitos de X a partir das posições 6 e 11, respectivamente.

    X = 02145639040287675521
    XA = 63904

    X = 02145639040287675521
    XB = 02876

Agora é hora de modificar os valores das variáveis E, F, G, H. Elas permaneceram inalteradas até agora. Os novos valores serão calculados da seguinte forma:

    E = (E + XA + G) MOD 65536
    F = (F + XB + H) MOD 65536
    G = (G + F) MOD 65536
    H = (H + E) MOD 65536

    E = (14646 + 63904 + 17475) MOD 65536 => 30491
    F = (16961 + 02876 + 17989) MOD 65536 => 37826
    G = (17475 + 37826) MOD 65536 => 55301
    H = (17989 + 30491) MOD 65536 => 48480

Neste ponto as variáveis E e F serão utilizadas para codificar 4 bytes do arquivo claro. E e F representam um número de 16 bits. Precisamos dividir A e B em 2 partes de 8 bits para criptografar cada byte que possui 8 bits.

    E = 30491
    E[1] = 27
    E[2] = 119

    F = 37826
    F[1] = 194
    F[2] = 147

A operação de divisão das variáveis E e F é simples de se fazer utilizando um computador. Basta transformar E em uma string de 2 bytes e achar o código ASCII de cada byte. O primeiro será E[1] e o segundo será E[2]. O mesmo vale para a variável F. Na falta de um computador basta utilizar os operadores DIV e MOD. MOD é o resto da divisão e DIV é a parte inteira do resultado da divisão. Vejam abaixo:

    E = 30491
    E[1] = (E MOD 256) = 30491 MOD 256 => 27
    E[2] = (E DIV 256) = 30491 DIV 256 => 119

    F = 37826
    F[1] = (F MOD 256) = 37826 MOD 256 => 194
    F[2] = (F DIV 256) = 37826 DIV 256 => 147

As variáveis E[1], E[2], F[1] e F[2] contém valores de 0 até 255. A cifragem dos primeiros 4 bytes da mensagem clara fica assim:

    Mensagem = "aaaa"
    "a" => 97  (O código ASCII de "a" ‚ 97)

    E[1] = (E[1] + "a") MOD 256 =>  (27 + 97) MOD 256 => 124
    E[2] = (E[2] + "a") MOD 256 => (119 + 97) MOD 256 => 216
    F[1] = (F[1] + "a") MOD 256 => (194 + 97) MOD 256 => 35
    F[2] = (F[2] + "a") MOD 256 => (147 + 97) MOD 256 => 244

Então "aaaa" corresponde a "|Ø#ô". Na decifragem o processo é o mesmo, só que ao invés de utilizarmos adição usamos a subtração. Veja:

    Criptograma = "|Ø#ô"
    "|" => 124
    "Ø" => 216
    "#" => 35
    "ô" => 244

    E[1] = (- E[1] + "|") MOD 256 =>  (-27 + 124) MOD 256 => 97
    E[2] = (- E[2] + "Ø") MOD 256 => (-119 + 216) MOD 256 => 97
    F[1] = (- F[1] + "#") MOD 256 =>  (-194 + 35) MOD 256 => 97
    F[2] = (- F[2] + "ô") MOD 256 => (-147 + 244) MOD 256 => 97

Notem que a operação é a mesma. Apenas utilizamos os valores de E[1], E[2], F[1], F[2] negativos.

Agora faremos a junção das variáveis C, D, G, H. Utilizaremos duas variáveis AUX1 e AUX2. Vejam abaixo:

        AUX1 = C
        AUX2 = D
        C = G + 1
        D = H + 3
        G = AUX1 + 5
        H = AUX2 + 7

        AUX1 = 42577
        AUX2 = 33274
        C = 55301 + 1 => 55302
        D = 48480 + 3 => 48483
        G = 42577 + 5 => 42582
        H = 33274 + 7 => 33281

Neste ponto voltamos ao início do passo 2.2. Os primeiros 8 bytes da mensagem "aaaaaaaa" são os bytes cifrados "%«~Ò|Ø#ô".



Última atualização ( Sáb, 22.03.2008 22:49 )
 

Topo