암호화의 취약점 찾기
시간 제한1초메모리 제한128 MB
9개의 XOR 암호화된 32비트 값에서 마지막이 나머지의 체크섬일 때, 캐리 전파를 이용해 비트 단위로 XOR 키를 복원하는 문제입니다.
문제
암호화하여 전송하고 싶은 데이터가 32비트 부호 없는 정수 8개로 주어진다.
먼저 이 데이터가 올바른지 확인하기 위한 체크섬(checksum)을 구해 9번째 데이터로 추가한다. (체크섬은 데이터의 무결성을 확인하는 데 자주 쓰이는 방식이다.)
그다음 32비트 키 를 사용해 이 9개의 수를 암호화한다. 암호화는 XOR 연산으로 이루어진다고 하자. (XOR은 데이터 암호화에 자주 쓰이는 연산이다.)
이렇게 만든 9개의 데이터 부터 까지를 전송하면, 를 아는 사람은 원래 데이터 부터 까지를 복원할 수 있다. 그런데 를 모르는 사람도 원래 데이터 부터 까지를 알아낼 수… 있다!
놀랍게도 이 방식에는 취약점이 있다. 그 취약점을 이용하여, 9개의 정수 부터 까지가 16진수로 주어질 때 키 를 구하는 프로그램을 작성하라.
입력
입력의 첫째 줄에 테스트 케이스의 개수 가 주어진다. 는 을 넘지 않는다.
그다음 각 테스트 케이스마다 9개의 정수 부터 까지가 16진수로 주어진다. 각 16진수는 숫자 0–9와 소문자 a–f로만 표기되며, 앞에 불필요한 0이 붙지 않는다. 한 테스트 케이스의 9개 수가 모두 한 줄에 주어지지 않을 수도 있다.
출력
각 테스트 케이스마다 키 를 소문자 16진수로 한 줄에 하나씩 출력한다. 앞에 불필요한 0은 출력하지 않는다.
힌트
스포일러 주의. 핵심은 라는 관계다. 여덟 개의 를 더할 때, 각 비트 자리에서 합의 홀짝은 그 자리의 키 비트 와 무관하다. 따라서 최하위 비트부터 덧셈의 자리올림을 따라가며 의 각 비트를 하나씩 유일하게 결정할 수 있다.