# 배타적 논리합 (Exclusive OR, XOR)

배타적 논리합(Exclusive OR, XOR)은 두 입력 중 정확히 하나만 참일 때 출력이 참이 되는 논리 연산입니다. 두 입력이 모두 참이거나 모두 거짓이면 결과는 거짓입니다. 수학에서는 “⊕” 기호로 쓰고 모듈로 2 덧셈과 같으며, 많은 프로그래밍 언어에서는 ^ 연산자로, 어셈블리어에서는 XOR 명령어(니모닉)로 표기합니다.

## 진리표

| A | B | A ⊕ B |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |

## OR과 XOR의 차이

OR(논리합)은 두 입력 중 하나라도 참이면 참을 반환하므로 두 입력이 모두 참일 때도 참입니다. 반면 XOR은 두 입력이 모두 참이면 거짓을 반환합니다. 즉 XOR은 “둘 중 하나만”이라는 배타적 의미의 “또는”입니다.

## 일상의 예: 두 스위치로 켜는 전등

계단 위아래에 있는 두 스위치로 전구 하나를 켜고 끈다고 해 봅시다. 두 스위치의 위치가 서로 다르면 불이 켜지고, 같으면 꺼집니다. 어느 쪽 스위치를 눌러도 상태가 바뀌는 이 회로가 바로 XOR입니다.

## 비트 연산으로서의 XOR

프로그래밍에서 XOR은 두 이진수를 비트 단위로 비교합니다. 같은 자리의 비트가 다르면 1, 같으면 0이 됩니다. 예를 들어 1100 ⊕ 1010 = 0110입니다. 어셈블러의 XOR 명령은 두 피연산자에 이 연산을 적용하고 결과를 둘 중 하나에 저장합니다.

## 가역성

XOR은 같은 값으로 두 번 적용하면 원래 값으로 돌아오는 가역 연산입니다(A ⊕ B ⊕ B = A). 또한 A ⊕ A = 0, A ⊕ 0 = A가 성립하고, 어떤 비트를 1과 XOR하면 값이 뒤집힙니다. 교환 법칙과 결합 법칙도 성립해 순서와 묶는 방식에 관계없이 결과가 같습니다. 이 성질 덕분에 같은 키로 암호화와 복호화를 모두 할 수 있습니다.

## 암호학에서의 XOR

- **일회용 패드(OTP):** 평문을 같은 길이의 완전히 무작위인 키와 XOR하면 암호문이 되고, 암호문을 같은 키와 다시 XOR하면 평문이 복원됩니다. 키를 한 번만 쓰고 비밀로 유지하면 이론적으로 해독할 수 없지만, 같은 키를 두 번 쓰면 두 암호문을 XOR해 키가 사라지므로 안전성이 무너집니다.
- **스트림 암호:** ChaCha20 같은 스트림 암호와 AES의 CTR 모드는 키와 논스로 의사난수 키스트림을 만들고, 이를 평문과 XOR해 암호화합니다.
- **블록 암호의 라운드:** AES는 각 라운드에서 상태(state)를 라운드 키와 XOR하는 단계(AddRoundKey)를 거칩니다. 많은 블록 암호 운용 방식(CBC, CTR 등)도 XOR로 블록을 결합합니다.
- **해시 함수:** SHA-256 같은 해시 함수의 압축 함수는 XOR, 비트 회전, 덧셈을 섞어 입력을 뒤섞습니다.

## 그 밖의 활용

- **패리티와 오류 검출:** 여러 비트를 모두 XOR하면 1의 개수가 홀수인지 짝수인지 알 수 있습니다. 이 성질은 패리티 비트, 일부 체크섬, RAID 같은 저장 장치의 복구 정보 계산에 쓰입니다.
- **P2P 네트워크의 거리 계산:** Kademlia 방식의 분산 해시 테이블은 두 노드 ID를 XOR한 값을 “거리”로 보고 가까운 노드를 찾습니다. 이더리움의 노드 탐색 프로토콜도 이 방식을 사용합니다.
- **레지스터 초기화:** 어셈블리어에서는 레지스터를 자기 자신과 XOR해(예: xor eax, eax) 값을 0으로 만드는 관용구가 널리 쓰입니다.

XOR 자체는 단순한 선형 연산입니다. XOR만으로는 모든 논리 연산을 만들 수 없어 AND 같은 다른 연산과 함께 쓰며, XOR만 쓰는 암호는 쉽게 풀리므로 실제 암호는 S-box 같은 비선형 요소를 함께 사용합니다. 그래서 안전성은 XOR이 아니라 키나 키스트림이 얼마나 예측 불가능한지, 그리고 비선형 요소가 얼마나 잘 설계되었는지에 달려 있습니다.

---
출처: https://achivx.kr/glossary/xor-xor-%EC%97%91%EC%8A%A4%EC%98%A4%EC%95%8C/ · ACHIVX 용어 사전 · 수정일 2026-10-20
