# 복호화 (Decryption)

복호화는 암호화된 데이터(암호문)를 올바른 키로 원래의 읽을 수 있는 데이터(평문)로 되돌리는 과정으로, 암호화의 역연산입니다. 키를 모르는 제3자가 암호를 푸는 '해독·암호 해독(cryptanalysis)'과는 구분됩니다.

## 자세히 알아보기

**대칭 키 암호**에서는 암호화와 복호화에 같은 비밀 키를 씁니다. 현재 권장되는 방식은 AES-GCM이나 ChaCha20-Poly1305 같은 인증 암호(AEAD)로, 복호화할 때 데이터가 변조되지 않았는지도 함께 검사합니다. 태그가 맞지 않으면 복호화는 결과를 내지 않고 실패해야 하며, 이것이 '복호화가 된다 = 데이터가 진짜다'를 보장하는 장치입니다.

**공개 키(비대칭) 암호**에서는 누구나 공개 키로 암호화할 수 있지만, 복호화는 개인 키를 가진 사람만 할 수 있습니다. RSA-OAEP, 타원곡선 기반 ECIES·HPKE 등이 예입니다. 실무에서는 공개 키 암호로 대칭 키만 전달하고 실제 데이터는 대칭 암호로 처리하는 하이브리드 방식이 일반적입니다.

DES, RC4처럼 오래된 알고리즘이나 무결성 검사가 없는 모드(예: 인증 없는 CBC)는 복호화 과정에서 패딩 오라클 같은 공격이 가능해 더 이상 권장되지 않습니다.

## 블록체인·암호화폐에서는

비트코인·이더리움의 트랜잭션 자체는 암호화되지 않고 누구나 읽을 수 있습니다. 트랜잭션을 보호하는 것은 암호화가 아니라 **전자서명**입니다. 복호화가 실제로 쓰이는 곳은 지갑입니다. 이더리움 키스토어 파일은 비밀번호에서 키를 유도(scrypt 또는 PBKDF2)한 뒤 AES로 개인 키를 암호화해 두며, 지갑을 열 때 이 키를 복호화합니다. 비트코인의 BIP38도 비밀번호로 개인 키를 암호화·복호화하는 방식입니다.

복호화가 실패했다면 키·비밀번호가 틀렸거나 데이터가 손상·변조된 것입니다. 인증 암호에서는 두 경우를 구별하지 않고 같은 오류를 내는 것이 바람직한데, 실패 원인을 자세히 알려 주면 공격자에게 단서(오라클)가 될 수 있기 때문입니다.

## 쉽게 말하면

잠근 일기장을 내 열쇠로 다시 여는 일입니다. 열쇠 없이 자물쇠를 따는 것은 복호화가 아니라 해독(깨기)입니다.

## 예시

AES-256-GCM으로 암호화한 데이터를 복호화하려면 같은 키, 암호화 때 쓴 논스(IV), 암호문, 인증 태그가 모두 필요합니다. 암호문이 한 바이트라도 바뀌면 태그 검증이 실패해 복호화 함수는 오류를 반환하며, 이때 일부라도 평문을 출력하지 않는 것이 올바른 구현입니다.

---
출처: https://achivx.kr/glossary/decryption-%ED%95%B4%EB%8F%85/ · ACHIVX 용어 사전 · 수정일 2026-10-20
