AES 암호화 / 복호화
암호PBKDF2 키 파생, 무작위 솔트와 IV를 사용하는 AES-GCM 대칭 암호화. 비밀번호 기반.
이 페이지에서
대칭 암호화란?#
대칭 암호화는 잠그고 푸는 데 하나의 공유 비밀 을 씁니다. 평문과 비밀번호를 넣으면, 같은 비밀번호 없이는 아무도 읽을 수 없는 섞인 덩어리를 돌려줍니다. 기밀성(무언가가 말하는 내용을 숨기는 것)을 원할 때 올바른 도구입니다. 반면 해시는 무결성만 증명하고, HMAC은 진짜성만 증명합니다.
이 페이지는 새 코드에 권장되는 인증 암호화 모드인 AES-GCM 을 씁니다. “인증된”이 핵심 단어입니다. GCM은 텍스트를 섞기만 할 뿐 아니라 변조 불가능한 태그를 함께 엮어 넣습니다. 누군가 암호문에서 비트 하나를 뒤집으면, 복호화는 조용히 쓰레기를 내뱉는 대신 실패를 크게 알립니다. 키는 SHA-256 위에서 PBKDF2 로 비밀번호에서 파생되며, 매번 새로운 무작위 솔트와 기본 100,000회의 반복을 거칩니다. 그래서 약간 약한 비밀번호도 오프라인 무차별 대입에 비용이 많이 듭니다.
모든 것은 Web Crypto를 통해 브라우저에서 실행됩니다. 서버도, 키 에스크로도, 네트워크 호출도 없습니다. 비밀번호를 잃으면 암호문은 설계상 되돌릴 수 없습니다.
사용 방법#
- 모드 를 고르세요. 암호화 (평문 입력 → 암호문 출력) 또는 복호화 (암호문 입력 → 평문 출력).
- 비밀번호 를 타이핑하세요. 단일 공유 비밀입니다. 나중에 복호화하는 사람은 정확히 같은 것을 타이핑해야 합니다.
- 옵션을 고르세요.
- 키 길이 — 128 / 192 / 256 (기본 256). 256이 현대적 기준이며, 나머지는 레거시 시스템에 맞추기 위해 존재합니다.
- 반복 횟수 — PBKDF2 라운드, 기본 100,000. 높이면 오프라인 크래킹이 느려지지만 여러분도 느려집니다. 오늘날 100,000은 합리적인 하한선입니다.
- 출력 형식 — Base64 (간결, 기본값) 또는 16진수.
- 왼쪽 패널에 입력 을 붙여넣으세요. 암호화에는 아무 텍스트, 복호화에는 이전에 복사해 둔 덩어리.
- 오른쪽의 출력 을 읽으세요. 상태 줄은 연산이 성공했는지 알려줍니다. 복호화에서 비밀번호가 틀리면 깨진 텍스트가 아니라 명확한 실패를 보여줍니다.
주요 기능#
- AES-GCM 인증 암호화. 암호문을 변조하면 탐지됩니다. 수정된 덩어리는 그럴듯한 쓰레기를 만들어내는 대신 복호화를 거부합니다.
- 자기 서술적 출력. 솔트, IV, 키 크기, 반복 횟수가 출력 덩어리 안에 포장되어, 복호화에는 비밀번호 외에 아무것도 필요 없습니다. 그 매개변수들을 따로 기억하거나 다시 보낼 필요가 없습니다.
- 메시지별 무작위성. 매 암호화마다 새로운 무작위 솔트와 새로운 12바이트 IV가 뽑히므로, 같은 텍스트를 두 번 암호화하면 완전히 다른 두 덩어리가 나옵니다. 둘 다 같은 평문으로 복호화됩니다.
- 조정 가능한 PBKDF2. 반복 횟수를 올려 약한 비밀번호를 오프라인 공격에 더 강하게 만들 수 있습니다.
- 업로드 없음. 암호화와 복호화 모두 로컬에서 일어납니다. 비밀번호와 평문은 결코 페이지를 떠나지 않습니다.
실전 예시#
메시지 launch at dawn 을 비밀번호 correct-horse-battery-staple, 키 길이 256, 반복 횟수 100000, 출력 형식 Base64 로 암호화하세요. 아래 출력은 실제 검증 가능한 덩어리입니다. 같은 비밀번호로 복호화 에 그대로 붙여넣으면 launch at dawn 이 돌아옵니다.
AQEAAAGGoPVkwA9k0rjoWLw8GXnalIvQoBTP+awUg4DczQwTK5nxMwUaEaQ35WTQbWK8gLMkvuDf+/ndr04f8fw=
(같은 텍스트를 다시 암호화하면 매번 솔트와 IV가 새로 무작위화되므로 다른 덩어리가 나옵니다.) 이 덩어리는 단순한 암호문이 아닙니다. 다음과 같이 펼쳐지는 작은 봉투입니다.
version(1) | keyBits(2) | iterations(4) | salt(16) | IV(12) | ciphertext+tag
복호화 로 전환하고, 위 덩어리를 입력에 다시 붙여넣고, 같은 비밀번호를 타이핑하면 오른쪽 패널이 launch at dawn 을 돌려줍니다. 이제 아주 살짝 다른 비밀번호로 복호화를 다시 시도해 보세요. GCM의 인증 태그가 유효하지 않아, 상태 줄은 반쯤 깨진 텍스트를 내주는 대신 실패를 보고합니다. 이 깨끗한 실패가 인증되지 않은 예전 CBC 모드에 대해 인증 암호화가 주는 이점 그 자체입니다.
FAQ#
비밀번호를 잊으면 어떻게 되나요?#
데이터는 사라집니다. PBKDF2와 AES는 비밀번호를 덩어리에서 복구할 수 없도록 설계되었습니다. “비밀번호 찾기” 경로도, 백도어도, 재설정해 줄 서버도 없습니다. 비밀번호를 단일 실패 지점으로 취급하고, 중요 비밀번호는 비밀번호 관리자에 보관하세요.
같은 텍스트를 두 번 암호화하면 왜 다른 출력이 나오나요?#
매 암호화마다 새로운 무작위 솔트와 새로운 12바이트 IV가 생성되기 때문입니다. 의도된 동작입니다. 동일한 평문이 항상 동일한 암호문을 만들었다면, 공격자가 반복된 메시지를 알아챌 수 있었을 것입니다. 솔트와 IV는 덩어리 안에 실려 자동으로 읽히므로 이 무작위성은 복호화에 영향을 주지 않습니다.
반복 횟수는 얼마로 설정해야 하나요?#
대화형 사용에는 100,000이 합리적인 하한선입니다. 고가치 무언가를 보호하고 잠깐의 대기를 감당할 수 있다면, 600,000은 여러분에게는 부담스럽지 않으면서 공격자에게 의미 있는 추가 비용을 줍니다. 비용은 데이터 바이트당이 아니라 암호화나 복호화 한 번마다 한 번씩 지불됩니다.
큰 파일에도 안전한가요?#
붙여넣을 수 있는 어떤 텍스트든 처리하지만, 이것은 스트리밍 파일 암호기가 아니라 페이지 크기의 도구입니다. 아주 큰 페이로드에는 하이브리드 방식(AES로 데이터를, RSA나 키 래핑으로 AES 키를)이 표준 패턴이며, AES-GCM이야말로 그 패턴의 대칭 절반입니다.