COVIL HACKER

, ! .


» COVIL HACKER » Criptografia » Artigo XOR para os mais pequenos || htb a última dança


Artigo XOR para os mais pequenos || htb a última dança

1 2 2

1

Decidi escrever este material por vários motivos: em primeiro lugar, esta será minha primeira experiência em escrever artigos, em segundo lugar, o último desafio de dança, embora muito simples, mas espero que este artigo seja para alguém então útil. Principalmente para iniciantes, é improvável que aqueles que são um pouco versados ​​\u200b\u200bem criptografia descubram algo novo para si mesmos, tudo é bastante simples aqui. Ainda há bastante informação sobre este desafio (embora o suficiente para resolver o problema), e está tudo em inglês. Portanto, decidi escrever ... Se você gosta desse formato, continuarei analisando todos os tipos de problemas, mas mais complexos. Agora vamos começar.

Teoria
E vamos começar com a teoria. Acho que não há necessidade de dizer nada sobre a operação xor, se tudo estiver no Google. Prefiro apenas enviar fotos engraçadas.

https://forumupload.ru/uploads/001b/c9/09/2/t971569.png

https://forumupload.ru/uploads/001b/c9/09/2/t106584.png

Uma cifra de fluxo é uma cifra simétrica na qual cada caractere de texto simples é convertido em um caractere de texto cifrado, dependendo não apenas da chave usada, mas também de sua localização no fluxo de texto simples. A cifra de fluxo implementa uma abordagem diferente para a criptografia simétrica do que as cifras de bloco (retiradas da Wikipedia). Ou seja, também depende de onde no texto simples está localizado esse caractere, que precisa ser criptografado.

O algoritmo chacha20 usado neste desafio é o streaming. É também uma variante da família salsa20.
Ataques em cifras de fluxo

As cifras de fluxo, nas quais os bits de texto simples (doravante referidos como A ou B ) são combinados com um fluxo de bits de cifra (doravante referidos como C ) usando a operação xor, podem ser muito seguras quando usadas corretamente. No entanto, eles são vulneráveis ​​a ataques, a menos que certas precauções sejam seguidas, então:
1. NUNCA, LEMBRE-SE, NUNCA, PORRA, USE A CHAVE DUAS VEZES. REPITO, NÃO CRIptografe NADA COM A MESMA CHAVE DUAS OU MAIS VEZES.
2. A descriptografia correta dos dados não deve indicar autenticidade. (não vamos precisar dele aqui)

Ataque ao chela que reutilizou a chave.​

Então, percebemos que as cifras de fluxo são vulneráveis ​​se alguma pessoa negligente usar a mesma chave duas vezes.

E() - é assim que denotamos a função de criptografia, que recebe uma mensagem como argumento e a criptografa.
C() é o nome dado à função de cifra de fluxo que gera uma string de bits. Toma uma chave como um argumento.

Digamos que o otário queira enviar duas mensagens A e B do mesmo tamanho. Nesse caso, a cifra de fluxo produzirá uma cadeia de bits C(K)o mesmo comprimento das mensagens. Devo dizer desde já que, para cortar mensagens de comprimentos diferentes, simplesmente cortamos uma mensagem longa para um tamanho menor. Bem, como a cifra de fluxo criará a mesma string porque o mamute usou a mesma chave, concluímos:

E(A) = A xor C
E(B) = B xor C
Se interceptarmos E(A) e E(B) , então podemos descobrir E(A) xor E(B) .

xor é comutativo e tem a propriedade de que C xor C = 0 (isso é chamado de auto-inversão). Então

E(A) xor E(B) = (A xor C) xor (B xor C) = A xor B xor C xor C = A xor B xor 0 = A xor B

Ou seja, o xor de duas mensagens criptografadas é igual ao xor de duas mensagens não criptografadas. Panyatnenko? Isso é tudo que precisamos saber para resolver o problema.

a última dança
E agora eu recomendo fortemente que você mesmo passe por isso, pense e aproveite a passagem. Quando decidi, para ser sincero, fui burro no começo, porque
não sabia o que estava escrito acima. Então comecei a pesquisar no Google, pensar e tudo deu certo para mim. Bom, se você também decidiu, então continue

Baixamos o arquivo com a tarefa e vemos dois arquivos: source.py e out.txt. Em source.py podemos ver que a chave é reutilizada e a mensagem é aberta. Out.txt tem um iv (não precisamos dele), uma mensagem criptografada em formato hexadecimal e um sinalizador criptografado em formato hexadecimal também. Deximizamos a bandeira cifrada e a mensagem cifrada, e depois o xorim. Bem, porque E(M) xor E(F) = M xor F , então podemos obter o sinalizador por (E(M) xor E(F)) xor M . Tudo é realmente muito simples se você conhece a teoria. Bem, o próprio descriptografador

import codecs

message = b"Our counter agencies have intercepted your messages and a lot days all of them will be captured"
encrypted_message = codecs.decode("7aa34395a258f5893e3db1822139b8c1f04cfab9d757b9b9cca57e1df33d093f07c7f06e06bb6293676f9060a838ea138b6bc9f20b08afeb73120506e2ce7b9b9dcd9e4a421584cfaba2481132dfbdf4216e98e3facec9ba199ca3a97641e9ca9782868d0222a1d7c0d3119b867edaf2e72e2a6f7d344df39a14edc39cb6f960944ddac2aaef324827c36cba67dcb76b22119b43881a3f1262752990", "hex")
encrypted_flag = codecs.decode("7d8273ceb459e4d4386df4e32e1aecc1aa7aaafda50cb982f6c62623cf6b29693d86b15457aa76ac7e2eef6cf814ae3a8d39c7", "hex")

em_xor_ef = []
for i in range(len(encrypted_flag)):
    em_xor_ef.append(encrypted_message[i] ^ encrypted_flag[i])

flag = []
for i in range(len(em_xor_ef)):
    flag.append(em_xor_ef[i] ^ message[i])

print("".join([chr(i) for i in flag]))

Fim

0

2


» COVIL HACKER » Criptografia » Artigo XOR para os mais pequenos || htb a última dança


|