Skip to content

암호학 101: 색깔 혼합으로 알아보는 디피-헬먼 키 교환 프로토콜

Share on facebook
Facebook
Share on twitter
Twitter
Share on linkedin
LinkedIn

친구에게 중요한 이메일을 보낼 때, 혹은 아마존에서 결제를 하기 위해 신용카드 정보를 적어야 할 때 우리는 어떻게 하면 정보의 보안을 지킬 수 있을까?

간단한 상황을 보자.

영희는 철수에게 비밀 쪽지를 보내고 싶어 한다. 하지만 문제가 있다. 철수를 짝사랑하는 순대는 이 둘의 쪽지 대화가 오가는 도중에 몰래 훔쳐본다.

이런 경우에 영희는 원본을 encrypt(암호화) 해 철수에게 전달할 수 있다. 예를 들어 영희는 철수에게 내일 “832번지”에서 만나자는 내용을 보내고 싶어 한다. 동시에, 영희와 철수가 처음 만났던 장소의 번지수인 11번가는 둘만이 아는 사실이라고 가정하자.

영희는 쪽지에 이렇게 적는다: “우리가 처음 만난 장소의 번지수에서 721을 더한 값을 구해봐. 그 값은 우리가 내일 만날 장소의 번지수야!”

이렇게 쪽지를 주고받는다면 순대는 영희와 철수가 만나는 장소에 대해서 알 수 있는 방법이 없다.

하지만 이 방법은 언제나 유용하진 않다. 이유는 영희와 철수가 쪽지를 보내기 전 서로 사전동의가 된 공유 키(shared key)가 있다는 가정하에만 쓸 수 있는 방법이기 때문이다. 위에 상황에서의 공유키는 “11번지”이다.

만약 영희와 철수가 한 번도 본 적도 없고, 메시지를 주고받은 적도 없다면 어떻게 해야 insecure channel을 통해 대화함과 동시에 이 둘만 메시지를 해독할 수 있게 원본을 변조해야 할까? (앞서 이메일과 신용카드 정보에 대해 언급을 했었다. 인터넷에서는 라우터(router)라 불리는 수많은 컴퓨터를 거쳐 메시지가 전달되기에 라우터에 액세스만 가능하다면 누구나 메시지를 볼 수가 있다. 이런 경우같이 안전하지 않은 전달 경로를 insecure channel이라고 지칭한다.)

디피-헬먼 키 교환(Diffie–Hellman key exchange) 프로토콜은 이와 같은 상황에 유용한 해결책으로, 모든 사람들이 볼 수 있는 공개키(public key)와 자신만이 볼 수 있는 개인키(private key)를 만들어 이로부터 영희와 철수만 서로 아는 공유키(shared key)를 생성하는 일종의 알고리즘이다.

복잡한 수학적 접근을 피해서 다양한 색깔 혼합을 통해 영희와 철수만 알 수 있는 공유키를 만들어보자.

Step 1 : 영희와 철수는 각각 개인키로 쓸 색깔을 하나씩 고른다.
영희의 개인키- 빨강
철수의 개인키- 노랑

여기서 한 가지 조건이 있는데, 영희와 철수는 자신이 무슨 색을 골랐는지 자신 말고는 아무에게도 알려선 안 된다.

Step 2 : 영희와 철수가 같이 색깔 하나를 고른 뒤 모든 사람들 (순대 포함) 앞에서 공개를 한다. 이 색깔은 공개키가 된다.
공개키- 보라
Step3 : 영희와 철수는 각자 자신의 개인키 색에 공개키인 보라색을 혼합한다.
영희 : 빨강 + 보라 = 자홍
철수 : 노랑 + 보라 = 브라운
Step 4 : 영희와 철수는 이제 자기가 가지고 있는 혼합된 색을 insecure channel을 통해 서로 바꾼다.

이때 모든 사람들은 영희와 철수가 색을 뒤바꾸는 장면을 목격한다.

영희 : 브라운
철수 : 자홍
Step 5 : 영희는 이제 철수에게 받은 혼합된 색에서 자신의 개인키 색을 한 번 더 혼합한다.

똑같이, 철수도 영희에게 전달받은 색에서 자신의 개인키 색을 한 번 더 혼합한다. 결과를 보자:

영희: 브라운 + 빨강 = (노랑 + 보라) + 빨강 = 벽돌색
철수: 자홍 + 노랑 = (빨강 + 보라) + 노랑 = 벽돌색

블록체인에 데이터 기록, 얼마나 쉽게 할 수 있을까요?

블록체인 기반 이벤트 추적 서비스 Trace의 데모를 확인해보세요.

이렇게 과정을 거치면 영희와 철수는 결국에 같은 컬러인 벽돌색을 얻게 되고, 이것은 둘만이 아는 공유키가 되는 것이다. 그렇다면 어떻게 옆에서 엿듣고 있는 순대는 공유키 색을 알 수 없는 걸까?

이유는 순대가 영희와 철수의 개인 색을 모르기 때문이다.

순대가 아는 정보를 간단한 방정식으로 표현하자면 다음과 같다:

1. 공유키 = 보라
2. 보라 + x = 브라운
3. 보라 + y = 자홍
4. 공유키 = 브라운 + y = 자홍 + x

순대가 공유 키를 알기 위해선 x와 y를 알아야 하는데, 이는 무척 어려운 일이다.

그 이유는 수학적 일방향 행위(one-way action) 때문이다.

두 색을 섞으면 어떤 색이 나오는지는 쉽게 알 수 있지만 특정한 색을 두고 이 색을 혼합한 두 색을 찾는 것은 상당히 어렵고 많은 시간이 소모되기 때문이다. (물론 위에 예시는 색깔에 대해서 잘 안다면 쉽게 풀 수 있는 문제일 만큼 간단하다.)

이같이 영희와 철수는 한 번도 대화를 해본 적이 없어도 디피-헬먼 키 교환 알고리즘을 이용해 쉽게 공유키를 만들어낼 수 있고, 이 공유키는 순대가 쉽게 알아낼 수 있는 방법이 없다.

하지만 앞서 언급했듯이 색깔 혼합 트릭은 대중에게 콘셉트 이해를 위해 만들어낸 예시일 뿐이다. 디피-헬먼의 실체는 다소 큰 소수(prime number)를 이용한 나머지 연산(modular arithematic)을 통해 키 교환을 하는데, 이는 생각보다 어렵지 않다. 수학적 연산이 궁금한 독자는 아래 링크를 참고하길 바란다.

Share your blockchain-related digital insights with your friends

Share on facebook
Facebook
Share on twitter
Twitter
Share on linkedin
LinkedIn

Get more insights

‘EIP-1559’란 무엇인가?

새로 적용된 EIP-1559. 이더리움 네트워크에 어떤 변화를 가져오고 있는지에 대해 알아보자.

2021 Luniverse Annual Report 최초 공개

루니버스의 2021년 최신 비공개 데이터 및 TOP5 블록체인 디앱을 지금 바로 확인해보세요.

가상자산(암호화폐, 비트코인)의 내재가치 및 금융 혁신의 가능성

들어가며 가상자산은 Dapp내 서비스 이용, 개인 및 기관투자자의 투자 포트폴리오 다각화, NFT 마켓플레이스에서의 제품 구입 그리고 e-커머스시장에서의 결제 등 사용처가 다양하다. 본 글에서는 하기와 같은 세 가지 분야와 각 분야의

[유니스왑] 교환비율 조정 매커니즘은 어떻게 작동되는가?

유니스왑 서비스 소개 및 기본적인 작동원리에 대해 소개하고자 한다.