블록체인 공부 - 해시함수와 비대칭 키, 디지털 서명

     램포트의 ‘비잔티움 장군 문제 허용‘ 논문은 신뢰할 수 없는 구성원이 일정 비율 이하라면 모두를 신뢰하지 않아도 합의가 정상적으로 이뤄질 수 있음을 보인다. 그렇다면 ’신뢰‘란 무엇일까? 신뢰는 ’명시된 발신자가 직접 작성한 것인지 여부‘와 ’발신자의 본심에 대한 신뢰‘로 나누어진다. 램포트의 논문은 후자를 허용하는 것이다. 그럼 전자의 신뢰는 어떻게 확립할 것인가? 아직 비트코인을 제대로 이해하지는 않았지만, 비트코인은 코인의 거래 장부를 분산 관리 하는 것이며, 장부에 거래내용을 입력할 때도 공개키와 비밀키, 디지털 서명의 개념이 이용된다. 그래서 디지털 서명과 대칭키, 비대칭키 암호에 대해 공부 해 보았다.

     먼저, 키는 암호화키와 복호화키가 있다. 그리고 모두에게 공개적으로 전달 할 공개키와 키를 생성한 본인만 가지고 있을 비밀 키(개인 키)로도 구분할 수 있다. 공개키와 비밀키는 그 기능이 다르므로 공개키로는 비밀키를 예측할 수 없어야 한다. 대칭 키는 암호화, 복호화 키를 모두 공개키 또는 모두 대칭 키로 이용하는 방식이며 전자의 경우 암호화의 의미가 없어지고 후자의 경우 비밀 키를 안전하게 전달하는 것이 어렵다. 그래서 비대칭 키가 많이 이용되는데, 비대칭 키 사용의 예로는 디지털 서명이 있다.

     해시 함수는 두 집합 사이의 ‘키’를 이용한 ‘대응’이다. 만약 대응되는 집합이 대응 시키는 집합보다 작을 경우 두 개 이상의 값이 하나의 값으로 대응될 수 있다. 하지만, 같은 값으로 대응되는 두 값은 연관성이 없어서 예측이 어려워야 한다. 또한 해시 함수는 함숫값으로부터 원래 값으로의 예측이 어려워야 한다. 쉬운 예로는 m=p*q이고 m이 주어졌을 때 p라는 키가 없다면 원래의 값인 q를 예측하기 어려운 경우를 들 수 있다. 디지털 서명을 할 때 텍스트를 해시 함수에 넣어 정해진 길이의 코드로 만드는 것을 ‘Message digest’라고 한다. 마찬가지로 다양한 길이의 텍스트가 정해진 길이로 대응되므로 몇 개의 텍스트가 하나의 digest 결과에 대응될 수 있다. 하지만 보안을 위해 이 텍스트들은 서로 연관성이 없고, 하나의 텍스트로부터 같이 대응되는 다른 텍스트를 추측할 수도 없어야 한다. 또한, 텍스트가 조금 달라도, digest결과는 크게 달라야 한다. 다시 말해, 텍스트의 유사도와 digest결과의 유사도가 관련이 없어야 한다. 


     디지털 서명은 수신자에게 받은 메시지가 명시된 발신자에게서 변조되지 않고 온전하게 전달받았다는 것을 입증하는 것이 목표이다. 디지털 서명은 비밀 키를 암호화 키, 공개 키를 복호화 키로 이용한다. 즉 암호화는 명시된 발신자만 할 수 있고, 암호화가 잘 되어있다면 그에게서 받은 것이 맞다. 먼저 보낼 메시지를 해시 함수를 이용해 message digest한다. (여기서 쓰이는 해시함수는 흔히 공개된 알고리즘을 이용한다) 이렇게 만들어진 결과물은 인증에 사용되므로 MAC(message authentication code)라고 한다. MAC를 비밀 키로 암호화해서 메시지 원문과 함께 보낸다. 수신자는 암호화된 MAC를 공개키로 복호화한 값과 메시지 원문을 digest한 값을 비교해서 일치하면 발신자의 암호화가 보존된 것이므로 발신자의 메시지임을 신뢰한다. 만약 해커가 원문을 바꿨다면 해커는 비밀키가 없으므로 온전하게 암호화된 MAC를 만들지 못할 것이고 그렇다면 수신자가 비교했을 때 두 값이 다르게 나올 것이기 때문이다. 

댓글

가장 많이 본 글