← 모두의 툴

카이사르 암호부터 AES-256-GCM까지, 이 도구 하나로 보는 암호화 발전사

가이드 · 2026.08.24 최종 확인

텍스트 암호화 도구는 같은 화면에서 카이사르 암호, ROT13, 비즈네르 암호, AES-256-GCM 네 가지 방식을 모두 시험해 볼 수 있습니다. 우연히 넷을 모아 놓은 게 아니라, 이 순서 자체가 암호학이 2000년 동안 걸어온 길입니다. 로마 시대의 단순 자리이동부터 현대 웹 암호화 표준까지, 왜 매 단계가 이전 단계의 약점을 메우는 방향으로 발전했는지 도구의 실제 코드를 근거로 짚어봅니다.

1. 카이사르 암호: 자리이동 하나의 한계

카이사르 암호는 알파벳을 고정된 수만큼 밀어서 치환하는 방식입니다. 로마 시대 율리우스 카이사르가 군사 통신에 3칸 이동을 썼다는 데서 이름이 왔습니다. 도구 코드를 보면 caesar(s,n) 함수가 각 알파벳 문자 코드에 이동 수를 더하고 26으로 나눈 나머지를 취하는 mod26 연산으로 구현되어 있습니다. 문제는 이동 수가 1~25 중 하나뿐이라는 점입니다. 경우의 수가 25개밖에 없으니 공격자가 25번만 전부 시도하면(무차별 대입, brute force) 반드시 원문이 나옵니다. 컴퓨터 없이 손으로도 몇 분이면 뚫립니다.

2. ROT13: 카이사르의 특수 케이스, 그래서 더 약하다

ROT13은 이동 수를 정확히 13으로 고정한 카이사르 암호입니다. 알파벳이 26자이므로 13은 정확히 절반이라, 같은 변환을 두 번 적용하면 원문으로 돌아오는 대칭적 성질이 있습니다. 이 성질 때문에 실제로는 암호화 목적이 아니라 스포일러 가리기, 인터넷 포럼의 정답 숨기기 등 "일부러 쉽게 풀리는" 용도로만 쓰입니다. 도구의 안내 문구도 "ROT13은 암호화가 아닌 간단한 텍스트 변환"이라고 명시합니다.

3. 비즈네르 암호: 키를 도입해 빈도 분석을 무력화

카이사르·ROT13의 근본 약점은 이동 수가 하나로 고정되어 있어 문자별 빈도 분석(예: 영어에서 가장 흔한 글자는 E)만으로 이동 수를 역산할 수 있다는 점입니다. 16세기에 등장한 비즈네르 암호는 키 단어를 반복시켜 문자마다 다른 이동 수를 적용해 이 약점을 메웁니다. 도구의 vigenere(s,key) 함수는 키 문자열을 알파벳만 남기고 소문자로 정리한 뒤, 입력 문자마다 키의 다음 글자에서 이동값을 뽑아 순환시킵니다. 키가 길고 무작위에 가까울수록 안전하지만, 키가 반복되는 주기를 찾아내는 카시스키 시험(Kasiski examination) 같은 고전적 공격법이 19세기에 이미 나와 있어 "실제 보안에는 적합하지 않다"는 게 도구 자체의 경고이기도 합니다.

4. AES-256-GCM: 대칭키 암호의 현재 표준

여기서부터는 손으로 풀 수 있는 치환 암호가 아니라, 수학적으로 무차별 대입이 사실상 불가능한 현대 블록 암호로 넘어갑니다. 이 도구는 브라우저 내장 Web Crypto API를 사용해 AES-256-GCM을 구현하며, 코드를 직접 확인한 실제 파라미터는 다음과 같습니다.

구성 요소실측값(코드 기준)역할
키 유도 함수PBKDF2 (해시: SHA-256)비밀번호 → 256비트 암호화 키로 변환
PBKDF2 반복 횟수100,000회무차별 대입 공격 속도를 늦춤
salt 길이16바이트암호화마다 새로 생성, 레인보우 테이블 무력화
IV(초기화 벡터) 길이12바이트암호화마다 새로 생성, 같은 키라도 매번 다른 암호문 보장
암호화 방식AES-GCM, 256비트 키기밀성 + 변조 탐지(인증 태그) 동시 제공

실제 코드에서 crypto.subtle.deriveKey({name:'PBKDF2',salt,iterations:100000,hash:'SHA-256'}, ...)로 키를 유도하고, salt(16바이트)와 IV(12바이트)를 매번 crypto.getRandomValues()로 새로 뽑은 뒤, 최종 결과는 base64(salt + iv + ciphertext) 형태로 이어붙여 출력됩니다. 복호화 시엔 이 값을 다시 잘라 salt·IV를 꺼내 동일한 방식으로 키를 재유도합니다.

5. 왜 PBKDF2는 10만 번이나 반복하는가

비밀번호를 곧바로 암호화 키로 쓰면 안 되는 이유는, 사람이 만드는 비밀번호가 무작위 256비트 키보다 훨씬 예측 가능하기 때문입니다. 공격자는 흔한 비밀번호 목록을 총동원해 직접 대입해볼 수 있습니다. PBKDF2(Password-Based Key Derivation Function 2)는 해시 연산을 의도적으로 수만~수십만 번 반복시켜, 비밀번호 하나를 키로 바꾸는 데 드는 계산 비용을 인위적으로 높입니다. 정상 사용자는 한 번만 이 비용을 치르면 되지만, 공격자는 후보 비밀번호 수백만 개마다 이 비용을 매번 치러야 하므로 무차별 대입 전체 소요 시간이 반복 횟수만큼 그대로 늘어납니다. 이 도구가 쓰는 10만 회는 웹 암호화에서 흔히 쓰이는 기준값으로, 브라우저에서 체감 지연 없이 처리되면서도 오프라인 무차별 대입 비용을 유의미하게 늘리는 절충점입니다.

6. 왜 salt와 IV를 매번 새로 만드는가

salt가 없으면 같은 비밀번호를 쓰는 모든 사용자, 혹은 같은 비밀번호로 암호화한 모든 메시지가 똑같은 키로 이어집니다. 이러면 공격자가 자주 쓰이는 비밀번호들에 대해 미리 계산해 둔 결과표(레인보우 테이블)로 한 번에 여러 대상을 공격할 수 있습니다. salt를 암호화할 때마다 무작위로 새로 뽑으면, 같은 비밀번호라도 매번 다른 키가 유도되어 이런 사전 계산 공격이 무력화됩니다. IV(초기화 벡터)도 같은 이유로 매번 새로 뽑습니다 — 같은 키·같은 IV로 두 번 암호화하면 GCM 모드의 보안성이 깨지기 때문에, 이 도구는 암호화할 때마다 12바이트 IV를 새로 생성해 같은 평문·같은 비밀번호를 넣어도 매번 다른 암호문이 나오게 만듭니다.

비교 예시: 평문 "hello"를 비밀번호 "1234"로 두 번 암호화하면, 카이사르·ROT13은 항상 정확히 같은 결과가 나오지만(이동 수·규칙이 고정이므로), AES-256-GCM은 매번 salt·IV가 달라 결과 문자열이 완전히 달라집니다. 그런데도 같은 비밀번호로 복호화하면 두 결과 모두 동일하게 "hello"로 돌아옵니다.

자주 묻는 질문

Q. 카이사르 암호와 ROT13 중 뭐가 더 약한가요?

ROT13은 이동 수가 13으로 고정된 카이사르 암호의 한 종류라 사실상 같은 수준입니다. 다만 ROT13은 애초에 암호화가 아닌 텍스트 변환 용도로 알려져 있어 보안 목적으로는 둘 다 실전에 쓰면 안 됩니다.

Q. PBKDF2 반복 횟수가 클수록 무조건 좋은가요?

보안성은 높아지지만 매번 키를 유도하는 데 걸리는 시간도 늘어납니다. 이 도구의 10만 회는 브라우저 환경에서 지연을 체감하지 않으면서 무차별 대입 비용을 충분히 늘리는 절충값입니다.

Q. 이 도구로 암호화한 텍스트를 다른 AES 도구로 복호화할 수 있나요?

일반적으로는 불가능합니다. PBKDF2 반복 횟수, salt·IV 길이, 데이터를 이어붙이는 순서 같은 세부 규약이 도구마다 다르고 암호문 자체에 저장되지 않으므로, 암호화에 쓴 것과 동일한 도구로 복호화해야 합니다.

Q. 이동 수(shift)로 음수나 26 이상을 넣어도 되나요?

네. 도구는 ((x%26)+26)%26 방식으로 나머지를 항상 0 이상으로 정규화하므로 0, 음수, 26 이상의 값을 넣어도 암호화·복호화가 정확히 원문으로 돌아옵니다.