문서 작업 가이드

반복 키 XOR를 보안이 아닌 학습에 사용하기

작은 반복 키 XOR 예제를 UTF-8 바이트, 정확한 Hex·Base64 표현, 엄격한 역변환으로 추적하고 역사적 암호와 현대 인증 암호화의 차이를 확인합니다.

작성 및 검수 게시일: 검토일:

이 작업 흐름을 검증한 방법

암호 학습 워크벤치에서 “정확한 UTF-8 반복 키 XOR 벡터 재현” 픽스처를 임의로 고치거나 단순화하지 않고 실행했습니다. “정확한 바이트 표현 선택”에서 “같은 키와 형식으로 되돌리기”로 이어지는 결과를 대조했습니다. 비성공 경로 검토에는 “UTF-8 바이트 대신 화면의 문자에 XOR 적용”, “디코딩 중 Hex와 Base64 혼합” 조건을 사용했습니다.

demo key는 Hex 0c0001030b451a00160909와 Base64 DAABAwtFGgAWCQk=를 만들고 둘 다 “hello world”로 복원했으며, UI는 반복 key XOR를 안전한 암호화가 아닌 학습용으로 표시했습니다.

문제 상황

XOR는 같은 키를 두 번 적용하면 원래 바이트로 돌아온다는 간단한 성질로 자주 소개됩니다. 그 성질은 맞지만 수업 자료와 작은 웹 도구는 중요한 조건을 자주 숨깁니다. 텍스트는 먼저 UTF-8 같은 인코딩을 거쳐 바이트가 되어야 하고, 여러 바이트인 키는 화면에 보이는 문자 대신 그 바이트 위에서 반복됩니다. Hex와 Base64는 결과를 표현하는 형식일 뿐이며, 다른 키나 형식으로는 원문을 안정적으로 복구할 수 없습니다. 또한 짧은 반복 키는 구조를 노출하고 인증 기능도 없습니다. 그래서 왕복 성공만 보면 실제보다 훨씬 안전해 보일 수 있습니다. 이 가이드는 한도가 명확한 정확한 예제 하나로 되돌릴 수 있는 연산, 바이트 표현, 실제 인증 암호화를 분리합니다. 모든 입력은 폐기 가능한 값으로 유지하세요. 목적은 원리 이해, 퍼즐 디버깅, 알려진 벡터 문서화이며 비밀번호, 토큰, 비공개 메시지, 고객 기록, 파일 보호가 아닙니다.

이럴 때 사용하세요

  • 동일한 바이트 키를 두 번 적용할 때 XOR가 원문으로 돌아오는 이유를 학습할 때 사용합니다.
  • 수업 과제나 CTF 퍼즐에서 알려진 반복 키와 정확한 Hex 또는 Base64 payload를 제공했을 때 사용합니다.
  • 운영 데이터 없이 두 구현 사이의 작은 UTF-8 XOR 테스트 벡터를 검증할 때 적합합니다.
  • 되돌릴 수 있는 암호 연산, 바이트 인코딩, 해시, 현대 인증 암호화의 차이를 설명할 때 도움이 됩니다.

단계

  1. 1단계

    폐기 가능한 알려진 예제 선택

    암호 학습 워크벤치에서 XOR와 인코딩을 선택합니다. 평문 hello world와 학습 키 demo를 사용하세요. 로컬에서 실행된다는 이유로 실제 비밀번호, API 키, 토큰, 고객 값, 비공개 메시지를 붙여넣지 마세요.

  2. 2단계

    정확한 바이트 표현 선택

    먼저 Hex를 고릅니다. 워크벤치는 평문과 키를 UTF-8 바이트로 바꾸고, 입력 위에 키 바이트를 반복한 뒤 바이트별 XOR를 적용하며, 결과 바이트 하나를 두 자리 16진수로 표시합니다.

  3. 3단계

    알려진 Hex 벡터 검증

    변환을 실행하고 전체 결과를 0c0001030b451a00160909와 비교합니다. 한 자리라도 다르면 입력, 키, 문자 인코딩, 반복 규칙, 출력 형식 중 하나가 다르므로 디코딩 전에 차이를 해결하세요.

  4. 4단계

    같은 키와 형식으로 되돌리기

    결과를 입력으로 보내는 기능으로 Hex와 키 demo를 유지한 채 디코딩으로 전환합니다. 엄격한 디코더는 공백이나 접두사 없이 짝수 개의 Hex만 받고, 같은 XOR를 적용한 뒤 유효하고 표시 가능한 UTF-8인지 검사하여 hello world를 정확히 복구합니다.

  5. 5단계

    정규 Base64로 반복

    인코딩으로 돌아가 Base64를 선택하고 같은 평문과 키를 실행합니다. 패딩이 포함된 정확한 표준 Base64 결과는 DAABAwtFGgAWCQk=입니다. Base64를 선택해 디코딩하며, 패딩이 없거나 공백, Base64URL 알파벳, Data URI가 있으면 자동 정리하지 않고 거부합니다.

  6. 6단계

    보안 경계 기록

    평문 인코딩, 키 바이트, 반복 규칙, Hex 또는 Base64 형식, 예상 벡터를 문서화합니다. 반복 키 XOR에는 nonce 관리, 인증 태그, 변조 탐지, 안전한 키 수명주기, 패턴 분석 방어가 없으며 실제 데이터 보호에 쓰면 안 된다는 점도 명시하세요.

예시

정확한 UTF-8 반복 키 XOR 벡터 재현

입력

방향: 인코딩
키: demo
평문: hello world
형식: Hex

출력

Hex: 0c0001030b451a00160909
같은 바이트의 Base64 표현: DAABAwtFGgAWCQk=
어느 표현이든 키 demo로 디코딩하면 복구되는 값: hello world

흔한 실수

반복 키 XOR를 안전한 암호화라고 부름

짧게 반복되는 키는 관계와 패턴을 노출하며 출력에 인증 기능도 없습니다. 실제 기밀성과 무결성에는 검토된 인증 암호화 API를 사용하세요.

UTF-8 바이트 대신 화면의 문자에 XOR 적용

유니코드 문자는 여러 바이트일 수 있습니다. 한 구현은 UTF-16 code unit이나 code point를 순회하고 다른 구현은 UTF-8 바이트를 XOR하면 결과가 달라집니다.

디코딩 중 Hex와 Base64 혼합

Hex와 Base64는 같은 결과 바이트를 서로 다른 문자와 길이로 표현합니다. 제공된 payload와 정확히 일치하는 표현을 선택하세요.

키 변경 또는 정규화

대소문자, 공백, 유니코드 정규화, 모든 UTF-8 바이트가 XOR 흐름에 영향을 줍니다. 벡터를 재현하거나 되돌리려면 정확히 같은 키가 필요합니다.

왕복 결과를 보안 감사로 취급

되돌림은 구현 일관성만 검사합니다. 키 강도, 비밀 유지, nonce 재사용, 인증, 변조 방지, 공격 가능성에 대해서는 아무것도 증명하지 않습니다.

자주 묻는 질문

같은 XOR 키가 왜 결과를 되돌리나요?

각 바이트에서 x XOR k XOR k는 x입니다. 같은 값끼리 XOR하면 0이고 x XOR 0은 x이기 때문입니다. 같은 키 바이트가 같은 위치에 적용되어야 합니다.

Hex와 Base64도 XOR 연산의 일부인가요?

아니요. XOR는 바이트를 만듭니다. Hex와 Base64는 그 바이트를 읽을 수 있는 UTF-8로 오해하지 않고 표시, 복사, 저장하기 위한 되돌릴 수 있는 텍스트 인코딩입니다.

왜 디코더가 패딩 포함 정규 Base64만 받나요?

표현 하나를 엄격히 요구하면 형식 오류를 일찍 발견하고 예제를 재현할 수 있습니다. Base64URL, Data URI, 공백 정리, 비텍스트 바이트가 필요하면 전용 Base64 도구를 사용하세요.

아주 긴 XOR 키를 쓰면 이 절차가 안전해지나요?

일반 애플리케이션 설계로는 아닙니다. 진정한 one-time pad에는 무작위이며 평문과 같은 길이인 일회용 키와 안전한 배포라는 까다로운 조건이 필요하고, 이 반복 키 학습 도구는 이를 만들거나 관리하지 않습니다.

로컬 처리면 민감한 입력도 괜찮나요?

아니요. 로컬 실행은 네트워크 노출을 줄이지만 브라우저 상태, 클립보드 기록, 다운로드, 스크린샷, 기기 정책, 사람의 공유는 여전히 중요합니다. 승인된 폐기 가능 예제만 사용하세요.