대합 (Involution)
대합(involution)은 모든 x에 대해 f(f(x)) = x가 성립하는 함수, 즉 자기 자신이 곧 역함수인 사상입니다. 그래서 '자기 역함수'라고도 부릅니다. 암호학에서는 평문을 암호문으로 바꾸는 연산과 암호문을 평문으로 되돌리는 연산이 정확히 같은 암호를 대합 암호라고 합니다.
자세히 알아보기
대합은 항상 전단사입니다. 되돌릴 수 있기 때문입니다. 유한 집합 위의 대합은 원소들을 '서로 맞바꾸는 쌍'과 '제자리에 있는 원소'로만 나눕니다. 예를 들어 {1, 2, 3, 4}에서 1↔3, 2↔4로 바꾸는 순열은 대합입니다.
대표적인 예로 부호 반전 x ↦ −x, 역수 x ↦ 1/x(0 제외), 비트 반전 NOT, 복소수 켤레, 행렬 전치, 그리고 고정된 값 k에 대한 x ↦ x ⊕ k가 있습니다.
흔한 오해는 '대합 암호 = 같은 키로 잠그고 여는 암호'라는 생각입니다. 같은 키를 쓰는 것은 대칭 키 암호의 정의이고, 대합은 같은 연산을 쓴다는 더 강한 조건입니다. AES는 대칭 키 암호이지만 복호화 연산이 암호화와 달라 대합이 아닙니다.
블록체인·암호화폐에서는
- 스트림 암호: ChaCha20 같은 스트림 암호는 키와 난스로 키스트림 K를 만든 뒤 C = P ⊕ K로 암호화하고 P = C ⊕ K로 복호화합니다. 같은 키스트림에 대해 XOR은 대합이므로 암호화와 복호화가 같은 코드입니다. 대신 같은 키·난스 조합을 두 번 쓰면 두 암호문을 XOR해 평문의 XOR이 드러나므로 난스 재사용은 치명적입니다.
- 타원곡선 점 부호 반전: 점 P = (x, y)를 −P = (x, −y)로 보내는 사상은 대합입니다. 비트코인 BIP-340 슈노어 서명에서 공개 키를 'y가 짝수인 점'으로 정규화할 때, 필요하면 개인 키를 n − d로 바꾸는 처리가 이 대칭을 이용합니다.
- 역사적 사례: 에니그마는 반사판 구조 때문에 설정이 같으면 암호화와 복호화가 같은 대합이었고, 이로 인해 '어떤 글자도 자기 자신으로 암호화되지 않는' 약점이 생겨 해독에 이용되었습니다.
쉽게 말하면
대합은 전등 스위치를 '누르기'처럼 두 번 하면 처음 상태로 돌아오는 동작입니다.
예시
ROT13은 알파벳을 13칸 미는 대합 암호입니다. 'HELLO'를 ROT13하면 'URYYB', 다시 ROT13하면 'HELLO'로 돌아옵니다.
XOR 대합의 예로, 키스트림 바이트 0x5A로 평문 바이트 0x41을 암호화하면 0x41 ⊕ 0x5A = 0x1B이고, 같은 연산을 다시 하면 0x1B ⊕ 0x5A = 0x41로 돌아옵니다.
이 글은 학습을 위한 일반 정보이며 투자 권유나 법률 자문이 아닙니다. 가상자산은 가격 변동이 크고 원금 손실 위험이 있습니다.