0 / 8
ENCRYPTED: 서명을 붙이고 본문도 암호화
PEM(Privacy-Enhanced Mail)은 메일을 보내는 쪽과 받는 쪽 두 끝에서만 서명과 암호화를 처리한다. ENCRYPTED는 서명을 붙이고 본문까지 암호화하는 유형이다.
가운데 메일 서버는 PEM을 몰라도 메일을 그대로 전달한다.
예: Alice가 Bob에게 “회의는 내일 3시”라는 메일을 보낸다.
메일 서버에 보이는 본문은 암호문이다.
1 / 8
Alice: 본문의 MIC 만들기
Alice가 본문을 메일 표준 형식(줄바꿈 등)으로 맞춘 뒤 해시 함수에 넣어 MIC(Message Integrity Check) a41f를 만든다. MIC는 본문이 한 글자만 바뀌어도 달라지는 짧은 값이다.
2 / 8
Alice: MIC에 서명하기
Alice가 MIC를 자기 개인키로 암호화해 서명 7be2를 만든다. 개인키는 Alice에게만 있어서 이 서명은 Alice만 만들 수 있다. Alice는 본문 전체가 아니라 짧은 MIC에 서명한다.
3 / 8
Alice: DEK로 본문 암호화
Alice가 이 메일 한 통에만 쓸 새 키 DEK(Data Encrypting Key) k58를 만든다. DEK로 본문을 암호화하면 암호문 x9Fq…가 나온다. DEK는 메일마다 새로 만들고, 본문은 이 DEK 하나로만 암호화한다.
4 / 8
Alice: DEK를 Bob의 공개키로 암호화
DEK는 Bob만 알아야 한다. 그래서 Alice가 DEK를 Bob의 공개키로 암호화해 c3d9를 만든다. 공개키로 암호화한 값은 짝이 되는 Bob의 개인키로만 풀린다.
5 / 8
Alice → Bob: 메일로 보내기
서명도 같은 DEK로 한 번 더 암호화한다. 서명과 암호화한 DEK는 메일 머리 부분에, 암호문은 빈 줄 뒤 본문 부분에 넣는다. 이 값들은 메일에 실어도 깨지지 않는 글자로 바꿔(인코딩) 적고, 전체를 BEGIN과 END 경계 줄 사이에 넣어 보낸다. 메일 서버는 평범한 메일 글로 보고 전달한다. 메일 서버에 보이는 본문은 암호문이라 읽을 수 없다.
6 / 8
Bob: DEK 꺼내기
Bob이 머리 부분의 암호화한 DEK를 인코딩된 글자에서 원래 값으로 되돌린 뒤 자기 개인키로 풀어 k58를 얻는다. Bob의 개인키는 Bob에게만 있어서 메일 서버나 다른 사람은 DEK를 얻지 못한다.
7 / 8
Bob: 본문 풀기
Bob이 본문 부분의 글자를 되돌려 암호문을 얻고, DEK k58로 암호문을 풀어 본문 “회의는 내일 3시”를 읽는다. 머리 부분의 서명도 인코딩된 글자에서 되돌려 같은 DEK로 풀면 7be2가 나온다.
8 / 8
Bob: 서명 확인
Bob이 Alice의 공개키로 서명 7be2를 풀어 MIC a41f를 얻는다. 받은 본문에서 다시 계산한 MIC도 a41f라서 두 값이 같다. 그러니 본문은 바뀌지 않았다(무결성). 서명은 Alice만 만들 수 있으므로 보낸 사람이 Alice라는 것도 확인된다(발신자 인증). 공개키 방식이라 Alice는 보낸 일을 부인하기 어렵다(송신 부인 방지).
1 / 6
Alice: 본문의 MIC 만들기
Alice가 본문을 메일 표준 형식(줄바꿈 등)으로 맞춘 뒤 해시 함수에 넣어 MIC(Message Integrity Check) a41f를 만든다. MIC는 본문이 한 글자만 바뀌어도 달라지는 짧은 값이다.
2 / 6
Alice: MIC에 서명하기
Alice가 MIC를 자기 개인키로 암호화해 서명 7be2를 만든다. 개인키는 Alice에게만 있어서 이 서명은 Alice만 만들 수 있다. Alice는 본문 전체가 아니라 짧은 MIC에 서명한다.
3 / 6
Alice: 본문을 글자로 변환
이 유형은 본문을 암호화하지 않는다. Alice가 본문을 메일에 실어도 깨지지 않는 글자로만 바꿔(인코딩) 6Ky1b…를 얻는다. 메일이 전달되는 동안 글이 망가지는 것을 막으려는 변환이어서 DEK는 필요 없다.
4 / 6
Alice → Bob: 메일로 보내기
서명은 글자로 바꿔 머리 부분에, 변환된 본문은 빈 줄 뒤 본문 부분에 넣어 BEGIN과 END 경계 줄 사이에 담아 보낸다. 메일 서버에 보이는 본문은 변환된 글자라 그대로는 읽기 어렵다. 암호화가 아니라서 변환 방법을 아는 사람은 누구나 원문으로 되돌릴 수 있다.
5 / 6
Bob: 본문 되돌리기
Bob이 변환된 글자를 원래대로 되돌려 본문 “회의는 내일 3시”를 읽는다. 키가 필요 없는 변환이라 Bob의 개인키는 쓰지 않는다.
6 / 6
Bob: 서명 확인
Bob이 Alice의 공개키로 서명 7be2를 풀어 MIC a41f를 얻는다. 받은 본문에서 다시 계산한 MIC도 a41f라서 두 값이 같다. 그러니 본문은 바뀌지 않았다(무결성). 서명은 Alice만 만들 수 있으므로 보낸 사람이 Alice라는 것도 확인된다(발신자 인증). 공개키 방식이라 Alice는 보낸 일을 부인하기 어렵다(송신 부인 방지).
1 / 6
Alice: 본문의 MIC 만들기
Alice가 본문을 메일 표준 형식(줄바꿈 등)으로 맞춘 뒤 해시 함수에 넣어 MIC(Message Integrity Check) a41f를 만든다. MIC는 본문이 한 글자만 바뀌어도 달라지는 짧은 값이다.
2 / 6
Alice: MIC에 서명하기
Alice가 MIC를 자기 개인키로 암호화해 서명 7be2를 만든다. 개인키는 Alice에게만 있어서 이 서명은 Alice만 만들 수 있다. Alice는 본문 전체가 아니라 짧은 MIC에 서명한다.
3 / 6
Alice: 본문은 읽을 수 있는 글 그대로
이 유형은 본문을 암호화하지 않고 글자로 바꾸는 변환(인코딩)도 하지 않는다. 앞에서 표준 형식(줄바꿈 등)으로 맞춘 본문이 읽을 수 있는 글 “회의는 내일 3시” 그대로 남는다.
4 / 6
Alice → Bob: 메일로 보내기
서명은 글자로 바꿔 머리 부분에 적고, 읽을 수 있는 원문 그대로의 본문은 빈 줄 뒤 본문 부분에 넣어 BEGIN과 END 경계 줄 사이에 담아 보낸다. PEM을 지원하지 않는 메일 프로그램에서도 본문이 읽힌다. 다만 서명 확인은 PEM을 지원하는 프로그램만 할 수 있다. 메일 서버가 본문을 조금이라도 고치면 확인에 실패할 수도 있다.
5 / 6
Bob: 본문 읽기
Bob은 풀거나 되돌릴 것 없이 본문 “회의는 내일 3시”를 바로 읽는다.
6 / 6
Bob: 서명 확인
Bob이 Alice의 공개키로 서명 7be2를 풀어 MIC a41f를 얻는다. 받은 본문에서 다시 계산한 MIC도 a41f라서 두 값이 같다. 그러니 본문은 바뀌지 않았다(무결성). 서명은 Alice만 만들 수 있으므로 보낸 사람이 Alice라는 것도 확인된다(발신자 인증). 공개키 방식이라 Alice는 보낸 일을 부인하기 어렵다(송신 부인 방지).