PGR21.com
다시봐도 좋은 양질의 글들을 모아놓는 게시판입니다.
Date 2015/12/31 23:30:17
Name 꽁상
Subject [지식] 공개 키 암호화 : 공개 채널에서의 비밀 전달법

인터넷을 통한 소통은 공개 채널에서의 소통입니다.

A에서 전달한 메시지가(패킷) B에게 전달되기 위해서는 수많은 라우터를 경유해야 합니다.

라우터들은 A-B 간 오가는 메시지를 100% 확인할 수 있습니다.

이러한 공개 채널에서 비밀을 전달하기 위해 어떤 방법을 사용해야 할까요?


영희는 철수에게 본인의 원루 카드 비밀번호 3012를 전달하려 합니다.

영희는 인터넷을 통해 '3012'를 그대로 전달했습니다.

낮 말은 새가 듣고 밤 말은 쥐가 듣는다더니 라우터 제리 쥐돌이는 영희와 철수에게 보낸 '3012' 라는 정보를 알 수 있습니다.

인터넷이라는 공개 채널의 무서움(?)입니다.


영희는 고민합니다.

공개 채널을 통해 쥐돌이가 내용을 100% 확인할 수 있는 상황에서 철수만 알 수 있게 비밀을 전달하는 방법은 무엇일까?

.

.


영희가 떠올린 답은 '공유 비밀'을 이용하는 것입니다.



철수는 영희의 차 번호인 4885를 알고 있습니다.

영희는 4885(차 번호)에서 3012(카드 비밀번호)를 뺀 값인 1873을 공개채널을 통해 전달합니다.

철수는 1873을 받고 차 번호 4885에서 1873을 빼서 카드 비밀번호인 3012를 얻습니다.


쥐돌이는 '영희가 공유 비밀 값에서 카드 비밀번호를 뺀 값을 전달한다'는 규칙(규칙은 공개되어 있습니다.)과 '1873'을 알고 있습니다.

하지만 쥐돌이는 공유 비밀 값을 모르기 때문에 '1873'만 가지고는 '3012'를 유추할 수 없습니다.


이와 같이 송신자와 수신자만 아는 공유 비밀을 이용하여 공개 채널에서 비밀을 전달할 수 있습니다.

여기서 다음과 같은 의문을 가질 수 있습니다.

'영희와 철수는 구면이라 공유 비밀이 있다고 치자. 공유 비밀이 없는, 처음 대면하는 상대에게는 어떻게 비밀을 전달할 것인가?'


영희와 인터넷 결제 회사는 소개팅 전의 남녀 마냥 공유 비밀이 없습니다.

주선자에 대한 내용? 쥐돌이가 주선자입니다..

'토욜 5시 강남역 11번출구'와 같은 공유 비밀을 만들수도 없습니다.

공유 비밀을 전달하려면 공개 채널을 거쳐야 하기 때문입니다.



영희는 에라모르겠다 공유 비밀을 만들기 위해 차번호 4885를 전달합니다.

영희 - 회사간 공유 비밀 4885가 성립하고, 영희는 아까와 마찬가지로 공유 비밀 - 카드 비밀번호 = 4885 - 3012 = 1873을 전달합니다.

회사는 공유 비밀을 통해 '3012'를 알아냅니다.

하지만 쥐돌이 역시 공개채널을 통해 공유비밀을 알기 때문에 카드 비밀번호인 '3012'를 알아냅니다.

공유 비밀은 (둘만 아는) 비공개 공유 비밀이어야 하고 공개 공유 비밀이어서는 안됩니다.


영희는 고민합니다.

공개 채널을 통한 소통만이 가능한 상황에서 영희-회사만의 공유 비밀을 만들것인가?

.

.

영희는 답하지 못합니다.




쥐돌이는 의기양양 합니다.


디피-헬먼 키교환(Diffie–Hellman key exchange) 알고리즘은 이러한 상황에서 해답을 제시합니다.

방법은 다음과 같습니다.



영희는 11과 2를 회사에게 공개 채널로 전달합니다.

11과 2는 쥐돌이도 알고 있는 '공개 숫자'가 됩니다. (공개숫자 P = 11, G =2)

11과 2는 공유 비밀을 만드는데 사용될 것입니다.



영희와 회사는 각자 임의로 숫자를 고릅니다.

영희는 8, 회사는 9를 골랐습니다.

임의로 고른 숫자는 본인만 알고 있습니다.


공개 숫자와 임의로 고른 숫자를 이용해 위와 같이 연산을 합니다.

공개 숫자를 P, G 라 하고 임의로 고른 숫자를 B라 하면 (G^B) % P를 계산합니다. (이때 C % D 는 C를 D로 나눈 나머지를 의미합니다.)

연산을 통해 영희는 3, 회사는 6을 얻었습니다.

얻은 연산 결과를 공개 채널로 전달합니다.


이후 상황은 다음과 같습니다.

초기 공개 숫자 11, 2

1번째 연산을 결과 3, 6이 공개되어 있습니다.

임의로 고른 숫자는 본인만이 알고 있습니다.


상대방의 1번째 연산 결과와 기존 공개숫자(P)를 이용하여 동일한 2번째 연산을 수행합니다.

2번째 연산 결과는 영희,회사가 항상 같은 값이 나오게 됩니다..!

2번째 연산 결과를 공유비밀로 정합니다.


쥐돌이가 모르는 공유 비밀을 공유하게 되었습니다.


공유 비밀 숫자를 이용한 조금 더 복잡한 계산으로 나온 값(192704)을 공개 채널로 전달합니다.

회사는 공유 비밀을 알기 때문에 원래의 카드 비밀번호 값인 3012를 알아낼 수 있습니다.

쥐돌이는 192704가 (카드 비밀번호 x 공유비밀 - 공유비밀) x (공유비밀^2) 로 만들어졌다는 규칙은 알고 있지만

공유 비밀을 모르기 때문에 카드 비밀번호를 알아내지 못합니다. (4면 Brute force로 그냥)


디피-헬먼 키교환 알고리즘은 이와 같이 공개 채널에서 송신자와 수신자간의 공유 비밀을 생성하여 비밀 전달을 할수 있게 합니다.

공개 된 키 값(3, 6)을 사용하기 때문에 공개 키 암호화라고 부릅니다.

공개 키 암호화에는 본 알고리즘 이외에도 많이 쓰이는 RSA와 같이 여러 종류의 알고리즘이 있습니다.




- 사족

* 실제로 사용되는 공유 비밀값은 상당히 큰 값을 가집니다. 값이 작을수록 소위 0000..부터 9999..까지 다 넣어보는 Brute Force(전수조사)에 취약하기 때문입니다. 

** 마찬가지 이유로 실제로는 공개 숫자(예시 : 11, 2)도 큰 값으로 설정이 되어야 합니다.

***  공유 비밀값을 이용해 값을 변환 할때도 위예시처럼 단순 사칙연산이 아닌 훨씬 복잡한 연산으로 수십차례 수행한다고 합니다.

**** 영희, 회사의 두번째 연산결과가 항상 같은 이유는 위키에 증명이 잘되어 있습니다. 공개 숫자 선택도 P는 소수로(11), G(2)는 P보다 작은 숫자로 선정해야 함을 알 수 있습니다.

 https://ko.wikipedia.org/wiki/%EB%94%94%ED%94%BC-%ED%97%AC%EB%A7%8C_%ED%82%A4_%EA%B5%90%ED%99%98

***** 암호 알고리즘은 공개하는 것이 원칙입니다. 쥐돌이가 공유비밀은 몰라도 공유비밀을 이용한 규칙은 알고 있는 이유입니다.

오픈소스 운동가 에릭 레이몬드는 다음과 같이 이야기 했습니다.

'상대방(암호해독자)가 암호화 시스템의 소스코드를 확보하지 못할 것이라고 가정하고 만든 시스템은 그 자체로 믿을 수 없다. 공개되지 않은 소스(closed source)는 절대로 신뢰하지 말아라.'

****** 1976년 디피와 헬먼의 논문에서 고안된 것으로 유명하지만 실제로는 1974년 UC 버클리 학부생인 랠프 머클에 의해 고안된 아이디어에 기반을 두고 있다고 합니다.

https://e.xtendo.org/article/mdh

*******  올해 읽었던 '미래를 바꾼 아홉가지 알고리즘' 책을 참고로 하였습니다. 기회가 된다면 RSA에 대한 글을..

******** 본 알고리즘은 중간자 공격(쥐돌이가 회사에게는 영희인척, 영희에게는 회사인척 하면서 쥐돌이-회사 공유비밀, 쥐돌이-영희 공유비밀 획득. 회사, 영희는 각자 공유비밀이 회사-영희 공유비밀인줄 암)에 취약합니다. 이를 방지하기 위해 서명 개념을 도입한 보완 알고리즘이 있습니다.

********* 비전공자가 풀어쓰려 하다보니 어색하거나 비약이 더러 있을 것으로 생각됩니다. 고수 분들의 첨언 부탁드립니다.



* 라벤더님에 의해서 자유 게시판으로부터 게시물 복사되었습니다 (2016-04-18 18:56)
* 관리사유 : 좋은 글 감사합니다.

통합규정 1.3 이용안내 인용

"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
트루키
15/12/31 23:42
수정 아이콘
궁금했던 건데 잘 읽었습니다. 텔레그램 등에서도 이런 식으로 암호화를 하는 건가요?!
16/01/01 00:57
수정 아이콘
텔레그램에서는 어떤 방식을 사용하는지 몰라서 검색을 해보았습니다.
http://news1.kr/articles/?1895057
본 기사에 따르면 256bit AES, RSA-2048bits, 그리고 본 글에 나와있는 디피-헬먼방식을 함께 사용하고 있습니다.
항즐이
15/12/31 23:47
수정 아이콘
암호학 책을 두권이나 재미있게 읽었는데, 중간에 나온 저 공식의 저러한 성질을 어떻게 정의하고 그런 함수를 어떻게 유도하는지 ... 잘 이해가 안되더라구요.

이해했다 싶으면 바로 놓쳐버리는.. ㅠ_ㅠ


재미있는 내용 감사합니다!!
16/01/01 01:15
수정 아이콘
저도 본 내용에 대해 수식으로는 단순히 ((g^b) % p)^a = ((g^a) % p)^b 라 끄덕 거렸는데..
좀더 깊이 파보니 (ex: 왜 역 계산 값을 구하기 어려운가)은 대수적구조-체-유한체에서의 이산대수개념을 끌어 들이더라구요..(제 내공으로는 포기..)
괜히 암호학이 수학의 한 분야가 아니었구나 생각이 듭니다. 재밌게 읽어주셔서 감사합니다.
삼성그룹
16/01/01 01:26
수정 아이콘
디피 헬만 프로토콜은 말씀하신대로 g^ab값을 알아도 a,b를 알기도 힘들뿐더러 단순하게 생각하자면 g를 밑으로 하는 log를 취하면 나오지 않을까 싶지만 나머지(mod)연산을 취해서 쉽지 않죠. 그리고 위 식을 만족하는 a,b는 삽질을 열심히 해서 구했다하더라도 경우의 수가 매우 많겠죠. 2^3도 7로 나누면 1이고, 2^6도 7로 나누면 1인데 저 a,b가 매우 큰 수를 고르니까요. 크크
RSA같은 경우는 P-NP문제인 소수 p,q을 모를때 pq를 알아도 p,q를 알 수 없다라는, 간단하게 말하자면 소인수분해가 어렵다는 걸 전제로 하죠. 흐흐
16/01/01 01:35
수정 아이콘
컴퓨팅 파워가 늘어나면서 암호화를 뚫기위한 쥐돌이 진영(?)의 반격도 기대(??)가 됩니다.
큰수 소인수분해를 빠르게 처리하는 양자컴퓨터 알고리즘이 나오게 된다면..
삼성그룹
15/12/31 23:47
수정 아이콘
정보보호학과 학부생으로써 이해가 너무 잘되는 군요! 제리는 중간자 공격을 하는군요!
16/01/01 01:19
수정 아이콘
전공자분께서 잘 봐주셔서 감사합니다! 중간자로 돌아온 쥐돌이의 역습인가요?
삼성그룹
16/01/01 01:20
수정 아이콘
크크크크 그렇다고 볼 수 있겠네요. 크크킄
삼성그룹
16/01/01 01:28
수정 아이콘
크크 그리고 라우터를 쥐돌이라고 하셔서 보는 순간 뿜어버렸습니다. 크크 철수 영희도 웃겼구요. 갑자기 떠올랐는데 제 3의 인증기관은 바둑이(?)라고 하면 어떨까라는 생각을 해봤습니다...크크크
삼성그룹
15/12/31 23:54
수정 아이콘
아 그런데 디피 헬만은 문제점으로는 영희가 회사를, 회사가 영희를 인증할 수는 없지 않나요?크크(아, 나왔군요. 크크크)
삼성그룹
16/01/01 00:07
수정 아이콘
M.A.C(Message Authentification Code)가 나타나면 어떨까요?크크크
16/01/01 00:29
수정 아이콘
rsa 참 재미있죠
그나저나
야 4885! 너지!
삼성그룹
16/01/01 00:30
수정 아이콘
R!
S!
A!

D!
E!
S!

A!
E!
S!(?)
16/01/01 01:21
수정 아이콘
야 4885!
영화에 016-????-4885 로 나왔었던 기억이 나네요..
아리아
16/01/01 00:42
수정 아이콘
중간에 계산하는 공식은 서로 어떻게 통일하나요?
서로 정보공유가 아무것도 안되있고
아는 것이라고는 11과2뿐인데
8과 9를 가지고 각각 동일한 공식으로 계산을 하는데
공식을 서로 알고있다는 전제인가요?
삼성그룹
16/01/01 00:52
수정 아이콘
디피 헬만 프로토콜은 나머지 정리를 이용했다고 볼 수 있는데요.
이 프로토콜을 쓰겠다고 상호간 약속했다면 저 공식을 사용하는 겁니다.
2가 원시근 g인거 같군요. 그리고 나머지연산에 쓰이는 수는 11이구요.
여기서 원시근이란 g^(오일러 11=10)를 11로 나눈 나머지가 1과 합동인 수입니다.(여기서 아마 조건이 더 붙는 걸로 알고있는데 간단하게 말하자면 이렇죠.)
처음에 영희와 회사는 원시근인 2에 자신이 랜덤하게 뽑은 수인 8과 9만큼 연속적으로 곱해서, 즉 2^8과 2^9를 11로 나눈 나머지를 구합니다.
이걸 서로 공유한다음에 상대방에게 받은 값에다가 다시 자신이 랜덤하게 뽑은 수인 8과 9만큼 연속적으로 곱하여 나머지연산을 하게 되면 똑같은 값을 얻게 되는 겁니다.
x가 영희, y가 회사의 비밀이라고 했을때 영희가 회사에게 (g^x)를 보내주면 그걸 회사는 (g^x)^y를 만들고요.
영희는 회사가 (g^y)를 보내주면 그걸 x승해서 (g^y)^x를 계산합니다.
그러면 같은 값이 되죠. g^xy로요. 물론 저 g^x나 g^y를 보낼때는 나머지 연산을 한 값을 보내줌으로써 같은 값을 가지게 됩니다.
음.. 아리아님의 닉네임을 보니 ARIA 암호가 생각나네요..크크
아리아
16/01/01 00:55
수정 아이콘
답변 감사합니다
삼성그룹
16/01/01 00:56
수정 아이콘
넵 ^^; 아, 아리아님도 새해 복 많이 받으세요~~(..)
16/01/01 01:27
수정 아이콘
삼성그룹 님께서 설명을 자세히 잘 해주셨는데요.
말씀하신바와 같이 공식을 서로 알고 있다는 전제입니다.
11과 2를 공유하기전에 "우리 디피-헬먼 프로토콜로 공개키 암호화 하자~"라고 약속했다고 보시면 됩니다.(물론 쥐돌이도 알겠지요)

1.어떤 프로토콜로 주고 받을 것인지를 정하고
2.해당 프로토콜에 따른 공개숫자, 공식을 사용 한다고 보시면 됩니다.
삼성그룹
16/01/01 21:22
수정 아이콘
정확히는 공개키 암호화는 아닙니다. 디피 헬만 프로토콜에서 공개키 기반 구조를 쓰는 것은 맞습니다만, 주로 x,y가 개인키 역할을 하고 g^x,g^y를 공개키라고 부르죠. 흐흐
지니랜드
16/01/01 01:06
수정 아이콘
좋은 글 감사합니다
미래를 바꾼 9가지 알고리즘 책 강추합니다. 복잡한 수식없이도 차근차근 풀어서 설명해주는게 좋았어요
16/01/01 01:41
수정 아이콘
읽어주셔서 감사합니다. 제가 올해 재밌게 읽었던 책 중 하나였는데요.
존 맥코믹 교수님(영상처리쪽 교수님이라 더 친근감이..)의 친절하고 쉬운 설명이 좋았습니다.
16/01/01 01:17
수정 아이콘
좋은 글 감사합니다
16/01/01 01:44
수정 아이콘
감사합니다. 새해 복 많이 받으세요 -!
삼성그룹
16/01/01 01:32
수정 아이콘
크크 brute force 공격 익숙한데요.. 막무가내로 숫자 4자리라면 0000부터 9999까지 해보는 근성을 필요로하는 공격이죠..크크크크크
16/01/01 02:30
수정 아이콘
재미있게 읽었습니다! 이 분야야 말로 머리 하나로 인생을 사는 분들의 투기장이겠네요
광개토태왕
16/01/01 09:14
수정 아이콘
정보처리기사 자격증 공부할때 공개키 암호화 기법 그냥 말로만 나왔었는데... 이런거였군요..
프로토스 너마저
16/01/01 10:03
수정 아이콘
이건 재미있네요. 추천.
히히멘붕이오
16/01/01 10:09
수정 아이콘
중간까지 고개 끄덕끄덕하면서 읽다가 임의로 숫자 정하는 부분부터 네? 뭐라구요??ㅠㅠㅠㅠㅠㅠㅠ 그래도 재밌게 읽었습니다.
윤가람
16/01/01 15:24
수정 아이콘
하얀건 화면이요 검은건 글자로다.... 수포자는 웁니다 엉엉
꼭두서니색
16/01/01 15:31
수정 아이콘
학부와 대학원에서 들었던 암호학/컴퓨터 보안 수업 내용이 리마인드 되면서 역시 수학은 어려워! 하고 갑니다. 엉엉..ㅜㅜ
16/01/01 15:36
수정 아이콘
?
그냥 브라우저에 내장된 인증기관 공개키 암호화로 공유 비밀(대칭키)을 주고 받는거 아니었나요...?
뭔가 생각했던 것 보다 훨씬 복잡하네요 ;;;

추가) 아...
공개키 기법의 실질 내용에 대한 설명이었군요 ;;;
-안군-
16/01/01 16:45
수정 아이콘
우리가 숫자를 배울 때 제일 먼저 배우는게 자연수(정수)지만,
암호화쪽에 대한 공부를 하다보면, 수학의 끝도 정수라는 생각이......
16/01/02 07:09
수정 아이콘
신기하네요. 라우터가 모르는 공유비밀을만들 수 있다니. 저걸 어떻게 생각해냈담..
역시 보안의 세계는 굇수들의 영역인걸로 흑흑
16/04/20 11:05
수정 아이콘
좋은 정보 잘 읽었습니다 감사합니다.
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
2700 팔왕의 난 [27] 이치죠 호타루13537 16/01/02 13537
2699 [지식] 공개 키 암호화 : 공개 채널에서의 비밀 전달법 [36] 꽁상11640 15/12/31 11640
2698 [지식] 스테이크 맛있게? 구워 먹는법 [75] 쪼아저씨20865 15/12/31 20865
2697 정도전은 정말로 죽기 전에 '절명시' 를 남겼던 걸까 [11] 신불해12876 15/12/30 12876
2696 [지식] 인터넷, 얼마나 알고 있니? [25] 스타슈터13654 15/12/30 13654
2695 [지식] (사진 압박) 사막의 생물들 [21] OrBef12818 15/12/30 12818
2694 [지식] 위성사진으로 본 백두산 인근 철도의 실상 [68] 이치죠 호타루18511 15/12/30 18511
2693 야구만화 최강의 학교를 꼽아보자 [106] 사장27063 15/12/27 27063
2692 명동에서 프리허그 한 일기 [19] 무진자11911 15/12/25 11911
2691 지인(?)의 딸 이야기를 듣고 난 후의 몇 가지 생각... [14] 로빈14491 15/12/21 14491
2690 비치(Bitch)론 [40] Eternity17560 15/12/13 17560
2689 구자형의 넷텔링 세 번째 이야기 "The Egg by Andy Weir(영화 마션의 원작자)" [36] 북텔러리스트7490 15/12/09 7490
2688 어느 콤퓨타 키드의 몰락 [29] 헥스밤15392 15/12/09 15392
2687 신경외과 인턴 시절 이야기 [118] 녹차김밥28426 15/12/08 28426
2686 이스라엘의 마지막 왕국. 하스모니안 왕조. [40] Love&Hate20174 15/12/08 20174
2685 조선 왕조의 영의정, 조준에 대한 이모저모 [29] 신불해14436 15/12/07 14436
2683 중고서점에서 책을 샀다. [105] 누구겠소18225 15/11/26 18225
2682 경복궁 여행기 [9] ohfree7616 15/11/25 7616
2681 (아재글) 자녀 훈육 어떻게 할까? [48] 파란무테20753 15/11/25 20753
2680 3935 [9] Secundo9572 15/11/25 9572
2679 진지한 취미 사진가를 위한 다섯 가지 팁(스크롤 압박!) [38] *alchemist*12442 15/11/15 12442
2678 첫 인사, 그리고 북텔러 이야기 [197] 북텔러리스트16614 15/11/12 16614
2677 저 새는 해로운 새다. [43] 작은기린13208 15/11/12 13208
목록 이전 다음
댓글

+ : 최근 6시간내에 달린 댓글
+ : 최근 12시간내에 달린 댓글
맨 위로