전자문서를 주고받을 때 가장 중요한 두 가지 질문이 있다.
“이 문서가 정말 내가 보낸 건가?” “내가 보낸 것을 나중에 부정할 수 있는가?”
전자봉투와 전자서명은 이 질문에 각각 다른 방식으로 답한다. 둘 다 암호학을 쓰지만, 목적과 쓰임이 다르다.
전자봉투 (Digital Envelope)
목적: 기밀성 (Confidentiality)
내가 상대방만 볼 수 있도록 내용을 보호하고 싶을 때 쓴다.
원리
-
대칭키로 본문을 암호화
- AES-256 같은 대칭 암호화 알고리즘으로 문서 내용을 암호화한다.
- 속도가 빠르다.
-
대칭키를 수신자 공개키로 암호화
- 암호화된 대칭키를 수신자의 공개키로 다시 암호화한다.
- 암호화된 대칭키 = 전자봉투
-
봉투와 암호문 전송
- 암호화된 본문 + 암호화된 대칭키를 함께 보낸다.
- 수신자만 자신의 개인키로 봉투를 뜯어 대칭키를 복호화할 수 있다.
- 대칭키로 본문을 복호화하면 원문을 알 수 있다.
[암호화된 본문] + [수신자 공개키로 암호화된 대칭키] = 전자봉투
특징
| 항목 | 설명 |
|---|---|
| 누가 보는가 | 수신자만 |
| 어떤 키를 쓰나 | 본문: 대칭키 / 키 교환: 공개키 |
| 대표 알고리즘 | AES(본문) + RSA 또는 ECIES(키 교환) |
전자서명 (Digital Signature)
목적: 인증 (Authentication) + 부인방지 (Non-repudiation) + 무결성 (Integrity)
내가 보낸 것을 내가 보낸 것을 증명하고, 내가 보낸 것을later否定할 수 없게 하고 싶을 때 쓴다.
원리
-
해시로 문서의 지문(fingerprint)을 만듲
- SHA-256 같은 해시 함수로 문서 내용을 고정 길이 문자열로 변환한다.
- 원본이 조금만 바뀌어도 해시값이 완전히 달라진다.
-
해시값을 서명자 개인키로 암호화
- 해시값을 서명자의 개인키로 암호화한 것이 전자서명이다.
- 공개키로 복호화하면 원래 해시값이 나오고, 원본과 비교하여 검증한다.
-
문서와 서명을 함께 전송
- 원본 문서 + 전자서명(해시를 개인키로 암호화한 것)을 보낸다.
- 수신자는 서명자의 공개키로 서명을 복호화하여 해시값을 꺼낸다.
- 원본 문서를 해시한 값과 비교하여 일치하면 서명이 유효하다.
[원본 문서] + [발신자 개인키로 암호화된 해시값] = 전자서명
특징
| 항목 | 설명 |
|---|---|
| 누가 보는가 | 누구나 (검증 가능한 공개키가 있어야) |
| 어떤 키를 쓰나 | 서명: 개인키 / 검증: 공개키 |
| 대표 알고리즘 | RSA-SHA256, ECDSA |
| 시간 검증 | 서명 시 타임스탬프를 함께 첨부하는 경우가 많음 |
비교: 전자봉투 vs 전자서명
| 구분 | 전자봉투 | 전자서명 |
|---|---|---|
| 핵심 목적 | 기밀성 | 인증 + 부인방지 + 무결성 |
| 누구의 키를 쓰나 | 수신자의 공개키 | 발신자의 개인키 |
| 누가 복호화하나 | 수신자만 | 누구나 (공개키로) |
| 원본 문서 | 항상 암호화됨 | 평문으로 전송 (서명과 함께) |
| 흔한 오해 | ”서명한 문서 = 서명된 사람만 볼 수 있다” ❌ |
흔한 오해 바로잡기
오해 1: “전자서명하면 문서가 암호화된다”
❌ 틀림. 전자서명은 문서를 숨기는 게 아니라 서명者的인증을 추가하는 것이다. 문서 내용은 보통 평문으로 간다. 기밀성이 필요하면 전자봉투를 동시에 사용한다.
오해 2: “전자봉투에는 서명이 없다”
△ 반만 맞음. 전자봉투는 키 교환에만 공개키 암호화를 쓰지, 서명 목적이 아니다. 키 교환 시 authenticated encryption (AEAD)을 쓰면 부가적으로 무결성·인증이 붙기도 한다.
실전 조합: 두 가지를 동시에 쓸 때
보안이 중요한 실제 시스템에서는 두 가지를 함께 쓴다.
발신자:
1. 본문을 AES-256으로 암호화 (전자봉투)
2. AES 키를 수신자 공개키로 암호화
3. 본문 해시를 발신자 개인키로 서명 (전자서명)
4. [암호문 + 암호화된 키 + 서명]을 전송
수신자:
1. 서명을 발신자 공개키로 검증
2. 암호화된 키를 수신자 개인키로 복호화
3. AES 키로 암호문 복호화하여 본문 확인
이 구조는 S/MIME, PGP/OpenPGP, TLS 등의 프로토콜에서 실제로 쓰인다.
마무리
- 전자봉투: “너만 봐” (수신자 기밀성)
- 전자서명: “내가 보낸 거 맞아” (발신자 인증 + 부인방지)
둘 다 공개키 암호화의 응용이지만, 각각 다른 문제를 풀기 위해 다른 키를 쓴다. 차이를 이해하면 평문에 서名を 하면 문제가 없도록 생각하는安易한 설정을 피할 수 있다.