Sabendo o texto simples, como descobrir o esquema de criptografia usado? [fechadas]

StackOverflow https://stackoverflow.com/questions/231592

  •  04-07-2019
  •  | 
  •  

Pergunta

Eu tenho alguns char () campos em uma tabela DBF que foram deixados criptografados por um desenvolvedor passado no projeto.

No entanto, eu sei o resultado texto simples da descriptografia de vários registros. Como posso determinar a função / algoritmo / esquema para descriptografar os dados originais? Estes são alguns campos de exemplo:

Para Cryptext:

b5 01 02 c1 e3 0d 0a

texto plano deve ser:

3543921 or 3.543.921

E para Cryptext:

41 c3 c5 07 17 0d 0a

texto plano deve ser

1851154 or 1.851.154

Eu acredito 0d 0a é apenas estofamento. Foi a partir de dados recolhidos em vitória-1252 codificação (não sei se importa)

EDIT: É por causa da curiosidade e aprendizagem. Eu quero ser capaz de undestand a criptografia usada (parece um simples, embora seja de dados binários) para recuperar o valor dos campos para as tuplas cujo texto simples Eu não sei.

EDIT 2:. Adicionado um amostras casal

Foi útil?

Solução

Não há nenhuma maneira fácil no caso geral. Esta questão é muito geral. Tente colocar essas seqüências criptografadas plain +.

EDIT:

  • em prol da aprendizagem você pode ler este artigo: Cryptography na Wikipedia
  • Se você realmente acredito que a criptografia é simples - verificação se é um byte (ou palavra) Nível XOR - consulte o seguinte pseudocódigo

    for (i in originalString) {
    newString[i] = originalString[i] ^ CRYPT_BYTE;
    }
    

Outras dicas

Assumindo que não é algo tão simples como uma cifra de substituição (análise de frequência tentativa) ou um mal aplicado XOR (por exemplo, reutilizando a chave, tente XORing dois textos cifrados com plaintexts conhecidos e, em seguida, ver se o resultado é o XOR dos plaintexts; ou tente XORing o texto cifrado com a própria desviado por um determinado número de bytes), você provavelmente deve assumir que é bem conhecido cifra de fluxo / bloco com uma chave desconhecida (que provavelmente consiste em caracteres ASCII). Se você tem uma amostra grande o suficiente de pares de texto cifrado-texto simples, você pode começar por verificar se plaintexts com os mesmos primeiros caracteres / bytes têm mensagens cifradas com os mesmos primeiros caracteres / bytes. Lá você também pode ver se é um bloco ou uma cifra de fluxo e se há qualquer mecanismo de feedback envolvidos. Enchimento, se presente, também poderia sugerir que é uma cifra de bloco em vez de uma cifra de fluxo.

Dependendo de quanto esforço você quer colocar nele, você deve ser capaz de chegar a algum lugar. Comece lendo sobre criptoanálise , em particular a métodos de criptoanálise .

As coisas que irão determinar quão fácil essa tarefa será são:

  • como bom o método de criptografia usado é; se é um método recente, bem-visto como o RSA ou AES, provavelmente você está sem sorte
  • o quanto o texto cifrado e texto simples que você tem - quanto mais, melhor
  • que tipo de dados que é - de texto simples é o mais fácil, enquanto os dados aleatórios seria o mais difícil
  • se os dados estão todos criptografados com a mesma chave, ou se várias chaves têm sido utilizados.

A chave para o sucesso é não desanime; a história da criptoanálise está repleta de histórias de códigos supostamente inquebráveis ??sendo rachados; talvez o mais famoso é a máquina Enigma da Segunda Guerra Mundial, o de quebrar o que contribuiu para o desenvolvimento de computadores modernos.

Podemos dizer algumas coisas de que você forneceu:

  • Com um comprimento texto cifrado de 7 bytes em cada caso, é pouco provável que seja uma cifra de bloco (desde cifras de bloco criptografar um bloco de cada vez, o seu comprimento será um múltiplo do tamanho de bloco, e um tamanho de bloco de 56 bits é bastante * improvável).
  • O comprimento do texto cifrado e o número de caracteres no texto simples é o mesmo em cada caso, pelo que pode ser de codificação simples de números como ASCII com uma cifra de fluxo aplicado.
  • XORing o texto simples (como ascii) e o texto cifrado em conjunto dá nem um único octeto repetido nem a mesma CryptoStream para cada um, por isso não é uma cifra trivial. Também não é uma cifra de fluxo simples, utilizando a mesma chave para ambos, a menos que alguns dos bytes da mensagem cifrada são uma IV.
  • Os dois últimos bytes são idênticos em texto cifrado, mas não em texto simples. Esta poderia ser uma coincidência, mas também pode ser um indicativo de preenchimento como você sugere. Se eles são de preenchimento, deve ser utilizado algum outro mecanismo de codificação.

Você sabe se todos os valores criptografados são inteiros, ou outros valores também possível?

Determinação do algoritmo utilizado sem a chave correspondente pode não ser totalmente útil.

Se o texto é pequeno o suficiente, e você tem o texto simples, por que você formiga para descobrir isso? Para além de, é claro, por causa curiosidade?

Não há nenhuma maneira determinista para dizer, mas muitas vezes há dicas no texto cifrado. É realmente criptografadas (com algum tipo de chave)? Ou é apenas hash e (possivelmente) salgada.

Se é hash, você pode ter sorte e apenas google para um par correspondente (supondo que você tem quaisquer que sejam as palavras do dicionário) porque não são dicionários pré-hash já online.

Se você tem um exemplo do texto cifrado, você pode publicá-la, alguém pode reconhecer o formato de codificação ...

Eu acho que é um equívoco que XOR é um esquema facilmente decryptable. A forma teoricamente mais forte de criptografia é um one-time pad: simplesmente uma seqüência de bits predeterminados que você XOR seu texto simples com ...

finitos XORs, por outro lado ...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top