가상화폐에 대한 이해 01

in #kr8 years ago (edited)

가상화폐 암호에 대한 이해



Image Source
가상화폐는 암호화 화폐니까 암호에 대한 이해는 필수다.
고로 간략하게 설명하겠는데 암호란게 만만한게 아니라서
설명이 꼬이다보면 이 글 자체가 암호가 될 수 있으니 그건 양해바란다

공개키, 개인키

암호는 대게 암호표가 있어야 해독이 가능한데
서로 긴밀한 관계에 있다면 그냥 암호표를 갖다주면 된다.
여기서 영화라면 007과 암호표를 가진 악당과의 팽팽한 사투가 시작된다
근데 인터넷상은 사투고 뭐고없다. 그냥 007이 무조건 이긴다
우리 악당입장에선... -_- 엉? 벌써부터 글이 꼬이는데.. 여하튼
인터넷상에선 암호표를 직거래하거나 택배로 부치지 않기 때문에
인터넷회선상에 모조리 노출된다
여기서 보통사람은 암호표를 암호화하는 머리 나쁜 짓이 떠오르겠지만
어느 천재들이 신박한 아이디어를 떠올렸는데 바로 암호표를 한개 더 만든 것이다

좀더 정확히 얘기하면
암호화만 하는 표
암호를 풀기만 하는 표
를 따로 만든 것이다

예를들면 압축만 하는 프로그램압축해제만 하는 프로그램을 따로 만들어서
압축해제 프로그램은 내가 갖고 있고 (이거 노출되면 끝이니 꽁꽁 숨긴다)
상대방한테는 압축 프로그램을 건네는 것이다
이때 해커가 압축 프로그램을 훔쳐봤자 이걸 어따 쓰겠는가? 아무 쓸모가 없다
이제 상대방은 그 압축 프로그램을 이용해서 개떡같은 확장자로 압축을 한 후
내쪽으로 보낸다. 마찬가지로 해커가 훔쳐봤자 풀수가 없다
최종적으로 그걸 받은 나는 나만의 해제 프로그램으로 풀면 완료다

보는 바와 같이 훤히 공개되지만 도리어 보안은 더 철통같은 이 비법을
공개키 기법이라 부른다

위의 예시는 이해를 돕기위해 실제와는 좀 다르게 설명한 것인데
두개의 표.. 즉 두 개의 키는 각각 잠그는 기능과 푸는 기능만 있는 것이아니라
둘다 같이 가지고 있다.
단 A키로 잠그면 B로만 풀수 있고 B키로 잠그면 A로만 풀 수 있는 것이다

이렇게 두개의 키를 가지고 있지만 인터넷에 뿌리는 키는 하나인 것은 예시와 동일하다
그리고 공개적으로 뿌리는 키를 공개키, 자신만이 가진 키를 개인키라고 한다

자 그럼 이 두개의 키를 이용해서 가상화폐를 어떻게 거래할까

가상화폐의 주소가
1FLXayFgQcMWDuAc7AFeher3U16Xk6rCwX
이런식으로 되어 있는 것을 봤을 것이다
이것은 고유한 주소만 나타내는 것이 아니다
바로 이 자체가 공개키인 것이다

그러므로 거래 과정의 구체적 동작은 다음예과 같다
먼저 아이유의 주소, 즉 공개키를 가져와서 그 주소로 10코인을 보낸다
이때 Send 버튼을 누르는 순간 지갑 프로그램은 내 주소를 개인키로 열어서 10코인을
꺼낸다 그리고 그 10코인을 아이유의 공개키로 잠그고 아이유에게 보낸다
다른 이들은 이것을 열어서 돈을 꺼내는게 불가능하지만
아이유는 자신의 공개키로 잠긴 돈이기에 자신의 개인키를 사용하여
그 코인을 획득할 수 있다

거래 승인

위에서 거래는 완료된 것일까?
그렇지 않다. 현재 이 거래는 미승인 상태이다. 계좌에 0 코인인데
10이라고 날조할 수도 있고 본인이 아니라 다른 사람이 사칭한 걸 수도 있다
그래서 인터넷에 날려서 각 채굴자들이 저장하고 있는 과거 기록을 통해
인정을 받아야한다. 그것을 Confirmation 승인이라고 한다.

이를 위해선..
먼저 방금 내가 행한 거래내역을 개인키로 잠궈서 인터넷에 날린다
그러면 각 채굴자들이 내 공개키로 풀어서 거래당사자가 나임을 확인하고
거래에 조작이 없는지를 과거블록과 대조해서 내가 10코인이상 있는걸 확인한다
확인이되면 이제 블록안에 내껄 기록해서 발행한다
이렇게 자신의 거래를 포함한 블록이 한번 발행될때마다 승인(Confirmation)이
1회 이루어진다. 그리고 보통 6번 이상의 확인이 이뤄질때 비로써 거래가 완료된다
그런데 각 블록은 10분마다 발행되는데다 대기중인 미승인 거래중에 자신의 거래가
블록에 반드시 포함된다는 보증이 없기에 최하 60분이 걸리고 재수없으면 수십시간이
걸릴 수가 있다.
그래서 각 사업자들은 돈 안들어온다고 고객이 다 때려부수는 것을 방지키 위해
블록 승인 수를 6회까지가 아니라 그 이하도 인정해주고 있고
신용에 따라서는 심지어 0컴펌도 인정해주고 있다
예를들어 애플이 돈 보냈음 이라고 눈빛만 보내도 당장 승인해준다
물론 그게 구라였다면 피해는 감수해야한다

해시

채굴을 설명하기 앞서 해시에 대한 이해가 또 필요하다

일단 해시함수의 약자인 SHA의 위키정의는 다음과 같다

SHA(Secure Hash Algorithm, 안전한 해시 알고리즘) 함수들은
서로 관련된 암호학적 해시 함수들의 모음이다

해시함수란 어떤 문자나 숫자를 넣었을때
256비트 길이의 짬뽕문자로 바꿔준다
아래의 사이트에서 직접 체험할 수 있다
http://www.convertstring.com/ko/Hash/SHA256

단 지멋대로 하는 것은 아니고
특정알고리즘에 의해서 행해지므로 똑같은 입력을 넣으면 반드시 똑같은 값이
나온다. 하지만 '새'가 '비행기'를 의미한다 라는 식의 암호따위랑 차원이 달라서
'새가 난다' 와 '새 난다' 는 눈꼽만큼도 비슷하지 않은 결과가 튀어나온다

결국 입력을 토대로 결과를 예측하는 것도 불가능하며
결과를 토대로 입력을 알아내는 것도 불가능하다
오직 '똑같은 입력'엔 '똑같은 결과'가 나온다는 것만이 알수 있는 전부다

이것을 이용해서 똑같은 해시값이라면 입력의 내용은 몰라도
똑같은 입력이라는 것을 검증할 수 있다

또한 해시값은 일정한 길이로만 나타나므로
2000자 짜리 글이나 1자짜리 글이나 길이가 똑같다
그걸 이용해서 내용의 압축증명에도 사용할 수 있다

예를들어
서유기를 통채로 해시값으로 떠도 한줄밖에 안되며
그 한줄의 해시값은 서유기에서 토씨하나라도 틀리면 바로 틀려진다
고로 해시값이 같다는 것은 원본이 완벽하게 일치함을 증명한다

채굴에서 180Mh/s 이런 단위를 흔하게 보는데
이것은 초당 해시함수를 몇회 돌리는가를 나타내주며
다음 항목을 보면 그게 어떤 것을 뜻하는지 알수 있을 것이다

채굴

본인이 가상화폐에서 가장 궁금했던 것을 꼽으라면 바로 이 채굴이다
어떤 고급암호를 풀기에 그렇게 컴퓨터파워를 먹으며
이 채굴을 하는데 왜 돈이 생기는가 라는 것이다
그리고 의문은 풀렸다 허망한 형태로..-ㅅ-

각 채굴자들은 자신에게 모인 미승인 거래들을 포장하여 각자 블록(Block)을 만든다
이렇게 만든 블록은 이전 블록의 해시와 현재 내용의 해시 그리고
논스(Nonce)라 불리는 3개의 입력값을 토대로
나온 새로운 해시값을 이마에다 딱 붙여서 구라블록이 아니라는 증명을 해야한다

이때 논스값을 채굴자가 조절해서 해시값을 변화 시킬 수 있는데
이것이 채굴의 핵심이다

블록의 해시값은 난이도에 따라 지켜할 규칙이 있는데
000 이런식으로 시작해야 한다.. 라는 규칙이다
다시 말해 일정숫자보다 반드시 작은 값이 나와야된다
예를들면 001,002,003이러면 탈락 000,004,050 이러면 찾은 것이다
근데 저런 값이 나오는 논스입력 값을 찾는 것은
해시함수의 특성상 계산이나 예측이 불가능 하다.
'00' 까지 나와서 흥분해서 다음 입력을 1 올렸더니 '99'가 나온다거나 하는게
해시함수니까 말이다.. 그럼 어떻게 하느냐..

무한 연필 굴리기다


Image Source

그렇다. 전세계의 컴퓨터가 가공할 계산능력으로 하는 채굴이란 것이
사실 죽을때까지 때려맞추기였다. OTL

여튼.. 이러한 개노가다를 노가다의증명
작업증명(Proof Of Work) POW 방식이라고 한다
이렇게 열라 때려넣기 노가다를 하다보면 어느순간 로또가 터진다
즉, 블록의 해시값이 조건을 만족하는 논스를 발견하게 되는데
그러면 그것을 번쩍 들고 증거품(Proof)으로써 사방에 심봤다를 힘차게 외친다
'봤냐 이 산삼Proof을!!'
그럼 심마니들이 와서 그게 진짜 산삼인지 확인한 다음
거래내역들이 조작되었는지 확인한다. 그것마저 정상이면
'쳇' 거리면서
인정해주게 되고 그것이 새로운 블록으로 공인 받게된다

다음편 계속..

잠이 와서..
그리고 가상화폐는 아는게 없어서 바닥부터 많이 참고했습니다
그런데 한국에도 좋은 자료가 엄청 많더군요
역시 붐을 한번타서..-ㅅ-

아래는 참고 사이트들입니다

https://ko.wikipedia.org/wiki/%EB%B9%84%ED%8A%B8%EC%BD%94%EC%9D%B8
http://tadakichi.tistory.com/131
http://hanmomhanda.github.io/2016/01/23/BlockChain-%EA%B8%B0%EC%B4%88-%EA%B0%9C%EB%85%90/
https://organicmedialab.com/2014/02/20/bitcoin-addresses-transactions-and-wallets/
http://www.seunghwanhan.com/2015/05/blog-post.html
http://www.ddaily.co.kr/news/article.html?no=113278
https://technet.microsoft.com/ko-kr/library/aa998077(v=exchg.65).aspx
https://books.google.co.kr/books?id=3v6wAwAAQBAJ&pg=PT95&lpg=PT95&dq=%EC%95%94%ED%98%B8%ED%99%94+%ED%99%94%ED%8F%90+%EA%B3%B5%EA%B0%9C%ED%82%A4+%ED%95%B4%EC%8B%9C&source=bl&ots=4I4AJMtYUU&sig=7a1uX362fTRRBdd9OCiJmoXrRM8&hl=ko&sa=X&ved=0ahUKEwjLxr6-5KXPAhWIQpQKHTh_AhYQ6AEIMTAD#v=onepage&q=%EC%95%94%ED%98%B8%ED%99%94%20%ED%99%94%ED%8F%90%20%EA%B3%B5%EA%B0%9C%ED%82%A4%20%ED%95%B4%EC%8B%9C&f=false
http://d2.naver.com/helloworld/8237898
https://ko.wikipedia.org/wiki/SHA
https://namu.wiki/w/%ED%95%B4%EC%8B%9C
http://minix.tistory.com/397

Sort:  

아 진짜 재밌네요 ㅋㅋ

그동안 궁금했던 것을 속시원하게 풀어주셨네요. 감사합니다^^

매번 답글 감사드립니다 ^^
하나의 글로 완결할려고 했는데 쓰다가 한계가 와서 그만..
블록과 블록체인을 빼먹었네요-_-; 다음에 한번 써보겠습니다.

트윈브레이드님. 비대칭 암호에 대해 이해하기 쉽게 설명해주신 이 글을 제가 쓸 글에 인용해도 될까요?

시간이 많이 흐른 글이지만 지금 보면서 많은 도움 되었습니다.
정말 감사합니다!

블록체인 관련 기술에대해 포스팅하고 있는 뉴비입니다! 좋은 자료 감사합니다~ 해당 자료 참조좀하겠습니다. (줍줍) 오늘 하루도 즐거운 하루 보내세요~

Coin Marketplace

STEEM 0.17
TRX 0.13
JST 0.027
BTC 60612.92
ETH 2607.99
USDT 1.00
SBD 2.65