철수와 영희가 있다고 가정하자.

공개키: 남에게 공개하는 키.
개인키: 남에게 절대 알려서는 안되는 키.

철수 공개키: aaaa
철수 개인키: bbbb
영희 공개키: cccc
영희 개인키: dddd

aaaa로 암호화하면 bbbb로 풀 수 있다.
bbbb로 암호화하면 aaaa로 풀 수 있다.
cccc로 암호화하면 dddd로 풀 수 있다.
dddd로 암호화하면 cccc로 풀 수 있다.

이메일 주고받는 과정은 다음과 같다.

철수 -> 영희
1. 철수는 상대방 공개키(cccc)로 이메일 내용을 암호화한다.
2. 철수는 자신의 개인키(bbbb)로 이메일을 서명한다.
3. 철수는 상대방 공개키(cccc)로 이메일을 전송한다.
4. 영희는 자신의 개인키(dddd)로 암호화를 해제하고 내용을 확인한다.(ex. "안녕 영희야")
5. 영희는 상대방의 공개키(aaaa)로 이메일의 서명을 검증한다. 이로써 정말 철수가 보낸 메일임을 확인한다.

영희 -> 철수
1. 영희는 상대방 공개키(aaaa)로 이메일 내용을 암호화한다.
2. 영희는 자신의 개인키(dddd)로 이메일을 서명한다.
3. 영희는 상대방 공개키(aaaa)로 이메일을 전송한다.
4. 철수는 자신의 개인키(bbbb)로 암호화를 해제하고 내용을 확인한다.(ex. "안녕 철수야")
5. 철수는 상대방의 공개키(cccc)로 이메일의 서명을 검증한다. 이로써 정말 영희가 보낸 메일임을 확인한다.

여기서 왜 이메일 내용은 상대방 공개키로 암호화하고, 서명은 내 개인키로 하는지 궁금할 수 있다.

내 공개키로 이메일 내용 암호화: 내 개인키를 알아야 암호화를 해제할 수 있는데 상대방이 내 개인키를 모르므로 암호화를 풀 수 없어서 메일보내는 의미가 없어진다.

내 개인키로 이메일 내용 암호화: 내 개인키로 암호화할 경우 내 공개키를 이용해 암호화를 해제할 수 있다. 내 공개키는 공개되어 있으므로 개나소나 암호화를 해제할 수 있다. 그래서 암호화하는 의미가 없어진다.

상대방 개인키로 이메일 내용 암호화:  애초에 상대방 개인키를 모르므로 불가능하다.

내 공개키로 서명: 내 개인키를 알아야 서명을 검증할 수 있는데 상대방이 내 개인키를 모르므로 서명을 검증할 수 없어 서명하는 의미가 없어진다.

상대방 공개키로 서명: 내 개인키로 서명하는 것은 오직 나 자신만이 가능하지만, 상대방 공개키로 서명하는 것은 개나소나 가능하다. 그래서 이 메일보낸 사람이 나라는 것을 전혀 증명하지 못하므로 서명하는 의미가 없어진다.

상대방 개인키로 서명:  애초에 상대방 개인키를 모르므로 불가능하다.

그러므로 이메일 내용은 상대방 공개키로 암호화하고, 서명은 내 개인키로 한다.

PGP를 이해하는 데 도움이 되었길 바란다.