강좌 강좌
공개키 암호 입문: 두 개의 키가 나눠 맡는 역할
공개키 암호에는 암호화·복호화와 전자 서명·검증이라는 두 가지 쓰임이 있다. 두 쓰임에서 공개키와 개인키는 서로 다른 역할을 맡는데, 이 강좌에서 그 역할 분담을 하나의 예시로 따라가며 배운다.
한 문장으로 이해하기
공개키 암호(영어: public-key cryptography, 비대칭 암호라고도 한다)의 핵심은 하나다. 키가 항상 쌍으로 존재하며, 한 키가 수행한 변환은 대응하는 다른 키로만 되돌릴 수 있다. 이 강좌에서 키란 암호 변환에 사용하는 값을 가리키는 말로 쓴다.
이 강좌를 마치면 두 가지를 할 수 있게 된다. 첫째, 공개키와 개인키가 암호화와 전자 서명에서 각각 어떤 역할을 하는지 설명한다. 둘째, 공개키 암호가 긴 메시지에 잘 확장되지 않는 이유와, 이때 함께 쓰이는 대칭 암호 알고리즘(메시지를 암호화하는 데 사용되며 일반적으로 공개키 암호보다 빠른 알고리즘)과의 결합 구성을 이해한다. 사전 지식은 거의 필요 없다. 위에서 말한 키의 뜻만 기억해 두면 충분하다.
왜 필요한가
공개키 암호에서는 두 키의 역할이 뚜렷하게 나뉜다. 공개키(public key)는 누구나 볼 수 있게 공개하고, 개인키(private key)는 소유자만 비밀로 보관한다.
이 구조 덕분에 두 가지 쓰임이 생긴다. 누구나 공개키로 개인키 소유자에게 보낼 메시지를 암호화할 수 있지만, 복호화(decrypt, 암호문을 원래 내용으로 되돌리는 것)는 대응하는 개인키의 소유자만 할 수 있다. 반대로 전자 서명은 대응하는 개인키를 가진 사람만 생성할 수 있지만, 검증은 누구나 공개키로 할 수 있다.
어떻게 이루어지는가
먼저 암호화에 쓰일 때의 순서는 다음과 같다.
- 받는 사람에게 공개키와 비밀로 보관하는 개인키의 쌍이 있다.
- 공개키는 누구나 볼 수 있게 공개되어 있다.
- 보내는 사람이 그 공개키로 메시지를 암호화한다.
- 대응하는 개인키를 가진 받는 사람만 메시지를 복호화한다.
전자 서명(digital signature)에 쓰일 때는 키의 순서가 반대가 된다.
- 보내는 사람이 자신의 개인키로 메시지에 서명을 생성한다.
- 받는 사람을 포함해 누구나 보내는 사람의 공개키로 그 서명을 검증한다.
- 검증에 성공하면 그 서명이 대응하는 개인키로 생성되었음을 확인할 수 있다.
정리하면 암호화는 공개키로 잠그고 개인키로 열며, 서명은 개인키로 만들고 공개키로 검증한다.
하나의 예시로 따라가기
다음은 가상 예시다. 지수가 민준에게 서명이 붙은 암호 편지를 보내는 과정을 처음부터 끝까지 따라가 보자.
- 키 준비: 민준에게는 게시판에 붙여 둔 공개키와 자신만 비밀로 보관하는 개인키의 쌍이 있다. 지수에게도 같은 방식의 키 쌍이 있다.
- 서명 생성: 지수가 보내기 전에 자신의 개인키로 편지에 서명을 생성해 붙인다.
- 암호화: 지수가 게시판에서 민준의 공개키를 가져와 서명이 붙은 편지를 암호화한다.
- 전송: 지수가 암호화된 편지를 민준에게 보낸다.
- 복호화: 민준이 자신의 개인키로 편지를 복호화한다. 이 복호화는 대응하는 개인키를 가진 민준만 할 수 있다.
- 서명 검증: 민준이 지수의 공개키로 서명을 검증한다. 검증에 성공하면 이 서명이 지수의 공개키에 대응하는 개인키로 생성되었음을 확인할 수 있다.
이 한 가지 절차 안에 공개키 암호의 두 쓰임이 모두 들어 있다. 암호화에는 받는 사람(민준)의 키 쌍이, 서명에는 보내는 사람(지수)의 키 쌍이 쓰인다.
언제 쓰고 언제 쓰지 않는가
공개키 암호가 어울리는 상황은 두 키의 역할 분담이 필요한 경우다. 누구나 암호화할 수 있지만 개인키 소유자만 복호화해야 할 때, 그리고 개인키 소유자만 서명을 만들고 누구나 검증해야 할 때다.
다만 한계가 뚜렷하다. 공개키 암호화는 일반적으로 대칭 암호 알고리즘보다 훨씬 느리다. 또한 처리할 수 있는 메시지 크기가 키 크기에 비례해 제한되므로 긴 메시지에는 잘 확장되지 않는다. 그래서 실제로는 메시지 본문을 대칭 알고리즘으로 암호화하고, 그 대칭 키만 공개키 방식으로 암호화하는 구성이 흔히 사용된다. 위 가상 예시의 편지가 아주 길다면, 편지 자체는 대칭 키로 암호화하고 그 대칭 키를 민준의 공개키로 암호화해 함께 보내는 식이다.
핵심 정리와 확인문제
공개키 암호는 쌍을 이루는 두 키를 쓰고, 한 키의 변환은 다른 키로만 되돌릴 수 있다. 암호화에는 공개키를, 복호화에는 개인키를 쓴다. 서명 생성에는 개인키를, 서명 검증에는 공개키를 쓴다. 속도가 느리고 메시지 크기가 제한되어 긴 메시지에는 대칭 암호와 결합하는 구성이 흔하다. 아래 확인문제로 이해를 점검해 보자.
- 민준이 지수에게 암호화된 메시지를 보내려 한다. 민준은 누구의 어떤 키로 메시지를 암호화해야 하는가?
정답·해설: 지수의 공개키로 암호화해야 한다. 지수의 공개키로 암호화한 메시지는 대응하는 개인키를 가진 지수만 복호화할 수 있기 때문이다.
- 공개키 암호만으로 긴 메시지 전체를 암호화하는 방식이 잘 확장되지 않는 이유는 무엇인가?
정답·해설: 공개키 암호화는 대칭 알고리즘보다 훨씬 느리고, 처리할 수 있는 메시지 크기가 키 크기에 비례해 제한되기 때문이다. 그래서 메시지 본문은 대칭 알고리즘으로 암호화하고 그 대칭 키만 공개키 방식으로 암호화하는 구성이 흔히 사용된다.
- 전자 서명에서 서명 생성과 서명 검증에는 각각 어떤 키가 쓰이는가?
정답·해설: 서명 생성에는 보내는 사람의 개인키를, 서명 검증에는 보내는 사람의 공개키를 쓴다. 대응하는 개인키를 가진 사람만 서명을 생성할 수 있고, 검증은 누구나 공개키로 할 수 있다.