최종 업데이트 07:21
소개 검색
SEOUL AI PRESS

AI와 기술을, 사실부터

강좌 강좌

공개키 암호 입문: 두 개의 키가 나눠 맡는 역할

MDN Web Docs

공개키 암호에는 암호화·복호화와 전자 서명·검증이라는 두 가지 쓰임이 있다. 두 쓰임에서 공개키와 개인키는 서로 다른 역할을 맡는데, 이 강좌에서 그 역할 분담을 하나의 예시로 따라가며 배운다.

한 문장으로 이해하기

공개키 암호(영어: public-key cryptography, 비대칭 암호라고도 한다)의 핵심은 하나다. 키가 항상 쌍으로 존재하며, 한 키가 수행한 변환은 대응하는 다른 키로만 되돌릴 수 있다. 이 강좌에서 키란 암호 변환에 사용하는 값을 가리키는 말로 쓴다.

이 강좌를 마치면 두 가지를 할 수 있게 된다. 첫째, 공개키와 개인키가 암호화와 전자 서명에서 각각 어떤 역할을 하는지 설명한다. 둘째, 공개키 암호가 긴 메시지에 잘 확장되지 않는 이유와, 이때 함께 쓰이는 대칭 암호 알고리즘(메시지를 암호화하는 데 사용되며 일반적으로 공개키 암호보다 빠른 알고리즘)과의 결합 구성을 이해한다. 사전 지식은 거의 필요 없다. 위에서 말한 키의 뜻만 기억해 두면 충분하다.

왜 필요한가

공개키 암호에서는 두 키의 역할이 뚜렷하게 나뉜다. 공개키(public key)는 누구나 볼 수 있게 공개하고, 개인키(private key)는 소유자만 비밀로 보관한다.

이 구조 덕분에 두 가지 쓰임이 생긴다. 누구나 공개키로 개인키 소유자에게 보낼 메시지를 암호화할 수 있지만, 복호화(decrypt, 암호문을 원래 내용으로 되돌리는 것)는 대응하는 개인키의 소유자만 할 수 있다. 반대로 전자 서명은 대응하는 개인키를 가진 사람만 생성할 수 있지만, 검증은 누구나 공개키로 할 수 있다.

어떻게 이루어지는가

먼저 암호화에 쓰일 때의 순서는 다음과 같다.

  1. 받는 사람에게 공개키와 비밀로 보관하는 개인키의 쌍이 있다.
  2. 공개키는 누구나 볼 수 있게 공개되어 있다.
  3. 보내는 사람이 그 공개키로 메시지를 암호화한다.
  4. 대응하는 개인키를 가진 받는 사람만 메시지를 복호화한다.

전자 서명(digital signature)에 쓰일 때는 키의 순서가 반대가 된다.

  1. 보내는 사람이 자신의 개인키로 메시지에 서명을 생성한다.
  2. 받는 사람을 포함해 누구나 보내는 사람의 공개키로 그 서명을 검증한다.
  3. 검증에 성공하면 그 서명이 대응하는 개인키로 생성되었음을 확인할 수 있다.

정리하면 암호화는 공개키로 잠그고 개인키로 열며, 서명은 개인키로 만들고 공개키로 검증한다.

하나의 예시로 따라가기

다음은 가상 예시다. 지수가 민준에게 서명이 붙은 암호 편지를 보내는 과정을 처음부터 끝까지 따라가 보자.

  1. 키 준비: 민준에게는 게시판에 붙여 둔 공개키와 자신만 비밀로 보관하는 개인키의 쌍이 있다. 지수에게도 같은 방식의 키 쌍이 있다.
  2. 서명 생성: 지수가 보내기 전에 자신의 개인키로 편지에 서명을 생성해 붙인다.
  3. 암호화: 지수가 게시판에서 민준의 공개키를 가져와 서명이 붙은 편지를 암호화한다.
  4. 전송: 지수가 암호화된 편지를 민준에게 보낸다.
  5. 복호화: 민준이 자신의 개인키로 편지를 복호화한다. 이 복호화는 대응하는 개인키를 가진 민준만 할 수 있다.
  6. 서명 검증: 민준이 지수의 공개키로 서명을 검증한다. 검증에 성공하면 이 서명이 지수의 공개키에 대응하는 개인키로 생성되었음을 확인할 수 있다.

이 한 가지 절차 안에 공개키 암호의 두 쓰임이 모두 들어 있다. 암호화에는 받는 사람(민준)의 키 쌍이, 서명에는 보내는 사람(지수)의 키 쌍이 쓰인다.

언제 쓰고 언제 쓰지 않는가

공개키 암호가 어울리는 상황은 두 키의 역할 분담이 필요한 경우다. 누구나 암호화할 수 있지만 개인키 소유자만 복호화해야 할 때, 그리고 개인키 소유자만 서명을 만들고 누구나 검증해야 할 때다.

다만 한계가 뚜렷하다. 공개키 암호화는 일반적으로 대칭 암호 알고리즘보다 훨씬 느리다. 또한 처리할 수 있는 메시지 크기가 키 크기에 비례해 제한되므로 긴 메시지에는 잘 확장되지 않는다. 그래서 실제로는 메시지 본문을 대칭 알고리즘으로 암호화하고, 그 대칭 키만 공개키 방식으로 암호화하는 구성이 흔히 사용된다. 위 가상 예시의 편지가 아주 길다면, 편지 자체는 대칭 키로 암호화하고 그 대칭 키를 민준의 공개키로 암호화해 함께 보내는 식이다.

핵심 정리와 확인문제

공개키 암호는 쌍을 이루는 두 키를 쓰고, 한 키의 변환은 다른 키로만 되돌릴 수 있다. 암호화에는 공개키를, 복호화에는 개인키를 쓴다. 서명 생성에는 개인키를, 서명 검증에는 공개키를 쓴다. 속도가 느리고 메시지 크기가 제한되어 긴 메시지에는 대칭 암호와 결합하는 구성이 흔하다. 아래 확인문제로 이해를 점검해 보자.

  1. 민준이 지수에게 암호화된 메시지를 보내려 한다. 민준은 누구의 어떤 키로 메시지를 암호화해야 하는가?

정답·해설: 지수의 공개키로 암호화해야 한다. 지수의 공개키로 암호화한 메시지는 대응하는 개인키를 가진 지수만 복호화할 수 있기 때문이다.

  1. 공개키 암호만으로 긴 메시지 전체를 암호화하는 방식이 잘 확장되지 않는 이유는 무엇인가?

정답·해설: 공개키 암호화는 대칭 알고리즘보다 훨씬 느리고, 처리할 수 있는 메시지 크기가 키 크기에 비례해 제한되기 때문이다. 그래서 메시지 본문은 대칭 알고리즘으로 암호화하고 그 대칭 키만 공개키 방식으로 암호화하는 구성이 흔히 사용된다.

  1. 전자 서명에서 서명 생성과 서명 검증에는 각각 어떤 키가 쓰이는가?

정답·해설: 서명 생성에는 보내는 사람의 개인키를, 서명 검증에는 보내는 사람의 공개키를 쓴다. 대응하는 개인키를 가진 사람만 서명을 생성할 수 있고, 검증은 누구나 공개키로 할 수 있다.

참고자료