[코인기본#10] 거래 (transaction) - 대략적인 흐름 (디지털서명)

4년 전

이전글에서 시중은행에서의 거래에 대해서
이야기 드렸으니, 슬슬 코인에 대해서 알아보죠.

오늘은 일단 코인에서의 거래에서의 흐름
그리고 디지털 서명에 대해 알아보도록 하겠습니다.


거래의 흐름

거래의 순서를 간단히 하면 아래와 같습니다.

  1. 거래내용 작성
  2. 개인키를 이용한 서명 (암호화)
  3. 암호화된 거래내용 전송
  4. 공개키를 이용한 검증 (복호화)
  5. 거래 끝

위처럼 거래에는 개인키와 공개키가 있습니다.
이 둘은 전달되는 메세지의 진위를 파악하기 위한
장치이며, 혹시모를 위변조에 대항하기 위한
보안 장치입니다.

디지털서명

이렇게 개인키와 공개키를 이용하여
작성된 내용을 검증하는 장치를 디지털 서명이라고 합니다.

예를 들어

곰은 토끼에게 1 BTC를 줍니다. - 곰 -

이라고 거래를 신청 했을 때, 이러한 메세지가 진짜인지
알아보기 위해서는 무언가 장치가 필요합니다.
(혹시 토끼가 나쁜맘을 먹고 1을 10으로 고쳐서 받을지도
모르잖아요. 그럼 큰일입니다. 잡아먹히겠죠.)

전달할 거래가 서류로 존재한다면,
중요한 서류라면 봉하여 전달하기도 했었어요.
영화같은데 보면 나오는 왁스를 녹여 도장 쾅해서 하는그거요.
실링왁스 라고 합니다.
서양에서 주로 사용했으며, 11~12세기 부터 사용되었다고 합니다.
기밀서류를 열어서 보지 못하게 할 뿐만 아니라,
내용물의 위변조를 방지하는 방법으로 사용되었습니다.

하지만 코인의 거래와 같이 온라인상에서
파일로 존재하는 경우, 진위나 변조판단이 어렵죠.

그래서 온라인상에서도 파일을 봉해버립니다.
디지털 서명이라는 방법으로 말이죠.

개인키

개인키는 거래를 신청하는 주체가 서명을 하는데
사용하는 키를 말합니다.

이 개인키는 외부에 공개되면 안되며,
해당 주인만이 가지고 있어야 합니다.

개인키를 이용한 디지털 서명

디지털 서명을 하는 방법은 여러가지가 있겠지만,
비트코인의 경우는 메세지를 간단한 형태로 변환하여
변환된 값에 대해 서명을 하게 됩니다.

여기서 서명을 하는 행위는 개인키를 이용하여
간단한 형태로 변환된 값을 암호화 하는 것을 뜻합니다.

메세지의 변환이란

메세지의 변환에 대해 조금만 더 짚고 넘어갈게요.
메세지를 간단한 형태로 변환할 때 사용되는 것을
해쉬함수라고 합니다.

함수 어디서 많이 들어보시지 않으셨나요?

f(X) -> a
어떠한 함수에 x라는 값을 넣으면 a가 나오고,
정의역이 어떻고 공역이 어떤....

요런 느낌의 그거 있잔아요.
수학시간에 배우셨을꺼에요.
여기는 수학공부하는곳은 아니니 자세한 이야기는 내려두고,
한가지만 아시면 됩니다.

함수에 어떠한 값을 넣으면, 변환을 통하여
다른 값이 튀어 나온다는 것만 아시면 되요.
코인에서는 이러한 함수로 해쉬함수라는 것을 사용합니다.

해쉬함수의 특징

해쉬함수에는 세가지 큰 특징이 있습니다.

  1. 단방향 함수
  2. 튀어나오는 값의 데이터 크기는 같다
  3. 넣은 값이 조금만 달라져도 나오는 값은 많이 달라진다

해쉬함수는 단방향 함수입니다.
이는 나오는 값을 이용하여 넣은 값을 알 수 없다는 이야기 입니다.
(물론 엄청 좋은 컴퓨터를 이용하여 역산하면 어떻게든 될 수는 있지만,
시간이 엄청 많이 소모되기에 안된다고들 합니다.)
물론 순방향으로의 변환은 빠르게 됩니다.

또한, 나오는 값의 데이터 크기는 일정합니다.
넣는 메세지의 길이가 어떠하든 나오는 값은 일정한
크기로 나옵니다.

마지막으로 조금만 수정하더라도 함수에 넣게되면
나오는 값은 완전히 다른값이 나오게 됩니다.
조금의 수정도 완전 다른값을 불러내기 때문에 위조가 불가능합니다.

해쉬함수는 이 정도만 아시면 됩니다.

메세지의 서명

(거래) 메세지를 보내는 사람은 메세지를 해쉬함수를 통하여
변환된 값을 얻어냅니다.
이 값을 해쉬값 이라고 표현합니다.
보내는 사람은 얻어낸 해쉬값을 개인키를 이용하여 암호화하게 됩니다.
이로써 암호화된 거래 내용이 생성되죠.
이를 위에서 말했듯, 개인키를 이용하여 서명했다고 합니다.

거래내용 전송

거래에서는 거래내용을 전송할 때, 원래 보내고자 하는 메세지와
이 메세지의 내용과 개인키를 이용한 서명을 함께 보내게 됩니다.

콜드월렛에서는

콜드월렛의 경우, 이러한 단계까지 오프라인에서 진행되게 됩니다.
네트워크로 가져가는 데이터는 서명된 (개인키를 이용하여 암호화 된)
데이터 뿐이죠.
개인키 자체는 네트워크에 접속되지 않습니다.
그렇기에 거래를 하기위해 지갑을 네트워크에 접속한다 하더라도,
콜드월렛은 여전히 콜드월렛입니다.

받는 사람은?

받는사람은 두가지 정보를 받는거죠.

  1. 메세지
  2. 서명

자 그럼 받은 사람은 뭘 하면 될까요?
메세지가 진짜인지 확인하면 되죠?

다양한 방법이 있을 수 있겠습니다만,
해쉬함수의 특성상 역방향으로의 변환이 어렵기 때문에
해쉬값을 기준으로 진위를 판별하게 됩니다.

일단 받은 메세지를 해쉬함수를 통하여 해쉬값을 구합니다.
그리고 받은 서명을 보낸사람의 공개키를 이용하여 복호화 합니다.
(서명을 해독하는거죠. 함수와 다르게 암호화한것은
정해진 도구로 해독이 가능합니다.)
서명은 해쉬값을 암호화한 정보이기 때문에,
해독할 경우 원래의 해쉬값이 나오게 됩니다.

받은 메세지를 변환한 해쉬값과,
서명을 해독해서 얻은 해쉬값이 일치한다면
해당 메세지는 진짜임을 알 수 있는거죠.

이 경우에만 거래가 성립하게 되는겁니다.


오늘은 디지털서명을 중심으로 거래의 흐름을 알아보았습니다.

이전글에서 Feelsogood님이 여쭤보셨던,
UTXO의 이야기는 다음 글에서 다루도록 하겠습니다.

기본적 거래의 진위판별 메커니즘은 이러하지만,
그 과정에 있어서는 또 다른 이야기니까요.

이후에는 비트코인과, 이더리움의 거래메커니즘을 예를들어
이야기해볼까 합니다.

다음글에서 뵐께요~

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
STEEMKR.COM IS SPONSORED BY
ADVERTISEMENT
Sort Order:  trending

아이쿠.. 질문이 아니라 쉽게 잘 써주시길 기대했던건데요 ㅎ
세그윗 공부하기 전에 UTXO는 이미 이해했던거라서요;;
괜히 이야기해서 번거롭게 했나봐요 ㅠ

하하 아니에요 ㅎㅎ 어차피 적으려고 하긴 했었습니다.
흐름상 슬슬 나올때가 되었죠.ㅋㅋ

짱짱맨 호출로 왔습니다!
한주 수고하세요
코인거래소인 고팍스에서 멋진 이벤트중이네요!
https://steemit.com/kr/@gopaxkr/100-1-1