AES-GCM이 무엇인가
AES는 미국 표준 대칭키 암호로, 같은 키로 잠그고 푸는 방식입니다. GCM은 AES를 긴 데이터에 적용하는 운용 모드 중 하나로, 암호화와 동시에 16바이트 인증 태그를 만들어 붙입니다. 복호화할 때 이 태그가 맞지 않으면 한 비트라도 바뀐 것이므로 결과를 내지 않고 거부합니다. 비밀번호가 틀려도 같은 방식으로 거부되기 때문에, 이 도구에서 "복호화 실패"는 비밀번호 오류와 데이터 손상을 구분하지 않습니다. 모든 연산은 브라우저의 WebCrypto API(crypto.subtle)로 수행되며, 입력·비밀번호·결과는 서버로 전송되지 않습니다.
비밀번호가 키가 되는 과정 (PBKDF2)
AES-256은 정확히 32바이트 키가 필요한데 사람이 쓰는 비밀번호는 길이가 제각각이고 엔트로피도 낮습니다. PBKDF2는 비밀번호에 무작위 salt(16바이트)를 섞어 SHA-256을 100,000번 반복해 키를 뽑습니다. 반복 횟수가 많을수록 공격자가 비밀번호를 하나씩 대입하는 속도가 느려집니다. salt는 비밀이 아니므로 암호문 앞에 그대로 붙이고, 복호화 시 같은 salt로 같은 키를 다시 만듭니다. 그래서 같은 문장을 두 번 암호화하면 salt가 달라 결과도 다릅니다.
결과 문자열의 구조
MC1. 접두어 뒤의 Base64를 풀면 salt 16바이트, IV 12바이트, 암호문, 인증 태그 16바이트 순서입니다. IV(초기화 벡터)는 같은 키로 여러 번 암호화할 때 패턴이 드러나지 않게 하는 무작위 값이며, GCM에서는 같은 키로 IV를 재사용하면 안 되기 때문에 매번 새로 뽑습니다. 이 구조를 알면 다른 언어(Python cryptography, Node crypto 등)에서도 같은 파라미터로 복호화할 수 있습니다.
무엇을 막고 무엇을 못 막나
암호문을 가로챈 사람이 내용을 읽거나 몰래 고치는 것은 막습니다. 막지 못하는 것은 약한 비밀번호입니다. "1234" 같은 건 순식간에, 사전 단어는 PBKDF2를 거쳐도 GPU로 몇 시간이면 뚫립니다. 긴 문장형 비밀번호(4단어 이상)를 쓰고, 비밀번호 자체는 암호문과 다른 경로로 전달해야 합니다. 또한 이 페이지를 닫으면 아무것도 남지 않으므로 암호문을 잃어버리면 그것도 끝입니다.
자주 묻는 질문
비밀번호를 잊어버렸어요. 복구할 수 있나요?
없습니다. 비밀번호는 저장되지 않고 키를 만드는 데만 쓰입니다. 복구 기능이 없는 것이 이 방식의 핵심이라, 운영자도 풀 수 없습니다.
다른 프로그램으로 복호화하려면?
PBKDF2-HMAC-SHA256, 100,000회, salt 16B로 32B 키를 만든 뒤 AES-256-GCM(IV 12B, 태그 16B)으로 복호화하면 됩니다. 구조는 위 "결과 문자열의 구조"를 참고하세요.
파일도 암호화할 수 있나요?
이 도구는 텍스트 전용입니다. 파일은 Base64로 바꿔 넣으면 가능하지만 크기가 커서 비효율적입니다. 파일은 7-Zip의 AES 암호 압축 같은 도구가 낫습니다.
HTTP 주소에서는 왜 안 되나요?
crypto.subtle은 보안 컨텍스트(HTTPS 또는 localhost)에서만 동작합니다. 주소가 https로 시작하는지 확인해 주세요.