Added readme, added exception throw and copied attack program from tp02
This commit is contained in:
parent
9d9261fddd
commit
299708f56c
4 changed files with 45 additions and 1 deletions
8
TPs/TP03/Readme.md
Normal file
8
TPs/TP03/Readme.md
Normal file
|
@ -0,0 +1,8 @@
|
|||
# Questao 1
|
||||
|
||||
Ao utilizar o programa 'chacha20_int_attck.py' sobre um criptograma produzido por 'pbenc_chacha20_poly1305', the decrpyt function will raise the execption :
|
||||
- 'cryptography.exceptions.InvalidTag' – If the authentication tag doesn’t validate this exception will be raised. This will occur when the ciphertext has been changed, but will also occur when the key, nonce, or associated data are wrong.
|
||||
|
||||
We can try this by encrypting a message and then changing the ciphertext with the attack program:
|
||||
|
||||
[Failed Attack](https://github.com/uminho-mei-es/2324-G05/tree/main/TPs/TP03/images/failed_attack.png)
|
BIN
TPs/TP03/attack_fail.png
Normal file
BIN
TPs/TP03/attack_fail.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 21 KiB |
30
TPs/TP03/py/chacha20_int_attck.py
Normal file
30
TPs/TP03/py/chacha20_int_attck.py
Normal file
|
@ -0,0 +1,30 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
import sys
|
||||
|
||||
def attack(fctxt, pos, plainAtPos, newPlainAtPos):
|
||||
f = open(fctxt,"rb")
|
||||
ciphertext = f.read()
|
||||
f.close()
|
||||
|
||||
plainAtPos = plainAtPos.encode()
|
||||
newPlainAtPos = newPlainAtPos.encode()
|
||||
txt_len = len(plainAtPos)
|
||||
diff = bytes([a ^ b for (a,b) in zip(plainAtPos,newPlainAtPos)])
|
||||
cipher_diff = bytes([a ^ b for (a,b) in zip(diff,ciphertext[pos:pos+txt_len])])
|
||||
|
||||
new_ciphertext = ciphertext[:pos] + cipher_diff + ciphertext[pos+txt_len:]
|
||||
|
||||
with open(fctxt+".attck","wb") as f:
|
||||
f.write(new_ciphertext)
|
||||
|
||||
def main():
|
||||
argv = sys.argv[1:]
|
||||
argc = len(argv)
|
||||
if argc < 3 or argc > 5:
|
||||
sys.exit("Needs 4 arguments <fctxt> <pos> <ptxtAtPos> <newPtxtAtPos>")
|
||||
|
||||
attack(argv[0],int(argv[1]),argv[2],argv[3])
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
|
@ -40,7 +40,13 @@ def decrypt(input_file, key_file):
|
|||
|
||||
|
||||
cipher = ChaCha20Poly1305(key)
|
||||
plaintext = cipher.decrypt(nonce, ciphertext, aad)
|
||||
try:
|
||||
plaintext = cipher.decrypt(nonce, ciphertext, aad)
|
||||
except Exception as e:
|
||||
print(f"Could not validate the authentication: {e}")
|
||||
return
|
||||
|
||||
|
||||
|
||||
with open(f"{input_file}.dec", "wb") as f:
|
||||
f.write(plaintext)
|
||||
|
|
Loading…
Reference in a new issue