CryptoHack [crypto] XOR Properties

2024. 11. 17. 19:13WARGAME/CryptoHack

320x100

암호학 중에서 XOR 문제 입니다.

 

 

XOR의 4가지 주요 속성을 사용하여 아래 FLAG의 값을 찾는 문제다.

문제

 

1. 교환법칙: A ⊕ B = B ⊕ A

교환하여 XOR 연산을 수행해도 값은 같다.

 

2. 결합법칙: A ⊕ (B ⊕ C) = (A ⊕ B) ⊕ C

어떤 XOR 연산을 먼저 하든 값은 같다.


3. 항등법칙: A ⊕ 0 = A

어떠한 값과 0을 XOR 연산하면 어떠한 값 그대로이다.

 

4. 자기 역함수: A ⊕ A = 0

똑같은 값을 XOR 연산하면 0이다.

 

 

문제풀이는 간단하다.

FLAG^KEY1 ^KEY3 ^KEY2 = 04ee... 에서

양 변에 ^KEY1 ^KEY3 ^KEY2를 해주면 KEY1과 KEY2, KEY3 값들이 모두 0이 되고,

FLAG^0 = FLAG 이기 때문에 FLAG 값을 찾을 수 있다.

 

 

계산하는 방법은 2가지다.

1. 사이트

XOR Calculator Online

 

XOR Calculator Online

The form calculates the bitwise exclusive or using the function gmp_xor. At the bit level, there are four possibilities, 0 ⊕ 0 = 0 0 ⊕ 1 = 1 1 ⊕ 0 = 1 1 ⊕ 1 = 0 Non-binary inputs are converted into their binary equivalents using gmp_init. View the

xor.pw

 

2. python

long_to_bytes를 사용하면 문자열로 변환할 수 있다.

(XOR사이트를 이용했더니 문자열로 바꿔야해서 코드에선 추가를 해보았다^!^)

from Crypto.Util.number import *

key1 = 0xa6c8b6733c9b22de7bc0253266a3867df55acde8635e19c73313
key23 = 0xc1545756687e7573db23aa1c3452a098b71a7fbf0fddddde5fc1
FLAG = 0x04ee9855208a2cd59091d04767ae47963170d1660df7f56f5faf

key123 = key1 ^ key23
FLAG = FLAG ^ key123

# 숫자 값을 문자열로 변환
flag_str = long_to_bytes(FLAG).decode('utf-8')

print(flag_str)
320x100
320x100

'WARGAME > CryptoHack' 카테고리의 다른 글

CryptoHack [crypto] Modular Exponentiation / Public Keys  (0) 2024.12.03
CryptoHack [crypto] Favourite byte  (0) 2024.11.18