본문 바로가기
암호화폐

비트코인의 이중지불 방지 알고리즘

by Windy 2021. 5. 15.
반응형

"생각없이 읽다보면 재미있는 금융지식!"

 

 

안녕하세요

이번 포스팅에서는 비트코인에서

이중지불을 방지하고자 하는 기술에 대하여 쓰고자 합니다.

 

블록체인에 대한 아주 핵심적인 알고리즘인데요.!

 

저번 포스팅 2, 3번에 관한 내용입니다.

2021.04.26 - [암호화폐] - 비트코인, 너의 알고리즘을 알려줘!

 

 

우선 이중지불(Double Spent) 이란?

같은 화폐로 두 번 지불하는 것을 말합니다.

 

 

한 번, 사용하고 소진된 것을 두 번 사용 하는 것인데

현실에서는 이중지불을 찾아보기가 어렵습니다.

 

중앙화된 은행 및 은행시스템을 사용하거나

현금을 사용하기 때문이죠

 

은행에서는 은행이 이중지불을 방지할 유인이 있고(신뢰성 문제)

현금은 줘버리면 다시 사용할 수 없습니다.

 

 

하지만 화폐의 형태가 탈중앙화 되어있고

전자형태라면 이야기는 달라집니다.

썼었던 돈을 무수히 다시 쓸수도 있고, 

혹은 무한히 만들어 낼 수도 있다는 점입니다.

 

그래서 필연적으로 탈중앙화가 되기위해서는

최소한 이중지불을 방지하기 위한 기술이 필요합니다.

(이는, 항공장치에 쓰이는 비잔틴 장군문제 해결과도 관련이있어요)

(자세한 내용은 생략합니다.)

 

 

따라서, 여러가지 합의 알고리즘을 거치는데요.!

 

 

1. UTXO(Unspent Transaction Output)

2. 롱노드 선택

3. Proof of Work

 

 

세가지의 알고리즘을 거칩니다. 

 

 

1. UTXO

UTXO는 쉽게말해서 1회용 지갑 이라고 생각 하시면 편합니다.

(물론, 실제론 달라요.!)

예를들어, 10 BTC를 갖고 있다면 이를 송금 해버리는

즉시, UTXO는 사라지고 새로운 UTXO가 생성 됩니다.

 

예를들어, A가 B,C에게 5 BTC씩 송금하게 되면,

A의 10BTC를 갖고 있는 UTXO는 사라지고 

B와 C에게 각각 새로운 UTXO가 생성되게 됩니다.

 

 

 

그럼 여기서 의문이 생기실 거에요. 

가짜 UTXO를 생성하면 어떻게 되나!?

 

 

 

이론적으로는 가능하지만, 실제로 거의 불가능에 가깝습니다.

우선, 자세히 말씀드리긴 어렵지만,

각 원장(블록)이 연결(체인)되어 있어 

비트코인 같은 기술을(Block Chain)이라고 부르는데요,

 

 

가짜 UTXO를 생성할 경우, 

이어진 체인들에 영향을 미치게 되고 마지막 노드에

수학적으로 다른 값이 나오기 때문에 거의 불가능합니다.

 

 

예를들어, 최신상태의 블록이 결과값이 36이고 이는 6 X 6 으로 이루졌다고 합시다. 

만약에 6을 8로 바꾸어 버리면, 48이라는 결과 값이 나오기 때문에 조작이 거의 불가능합니다.

조작이 가능하더라도, 조작한 값을

남들에게 전파를 시켜야 하는데 사용자가 많아지고 분산되어 있을수록

이는 거의 불가능합니다.

남들은 36이라는 값을 갖고 있기 때문이죠

 

 

 

 

그러면, 여기서 또 생각하게 되실거에요.

마지막 상태의 블록은 조작할 수 있겠구나!

혹은 마지막 상태의 블록이 업데이트 되기전

먼저, 가짜 블록을 재빠르게 생성하여 전파하면 되겠구나 !

 

 

 

 

그래서, 나온 것이

2. 작업증명 (PoW, Proof of Work)와

3. 롱노드 선택 입니다!

 

 

 

작업증명(PoW)는 블럭생성시

어려운 계산을 풀도록 적용 했는데요

여러분이 흔히들 말하시는 채굴이라고도 합니다.!

 

 

 

정확한 알고리즘은 SHA-256 이라는 알고리즘입니다.

(자세한 설명은 복잡하므로 생략)

저번 포스팅에 올린 공개키 암호처럼

2021.04.28 - [암호화폐] - 암호의 역사 및 공개키 암호[2편]

1:1 함수가 아닌점을 활용합니다.

(해시 함수라고 합니다.)

 

 

 

예를 들어, 32라는 값이 있다고 하면

여기에 사용된 곱셈을 알아내라! 가 문제인거죠

2 X 16 인지, 2 X 2 X 2 X 2 X 2 인지, 8 X 4 인지

직접 대입을 해서 풀어야 합니다.

 

 

이런 문제는 간단히 몇번 대입해서 풀면 되지만,

실제로는 엄청난 난이도의 문제가 나오는 거죠.

 

 

그래서 얻고자 하는 효과는 두 가지 입니다.

1. 블록생성 속도를 늦춤.

2. 성실한 블록체인 참여자임을 검증

 

 

블록생성 속도를 늦춤으로써,

가짜 블록을 생성하기 어렵게 만듭니다.

이는 앞서말한 마지막 노드에서 UTXO 변조를 힘들게 합니다.

참여자가 여러명일 수록 여러명의 노드에 가짜블록을 생성하기 쉽지 않습니다.

 

 

성실한 블록체인 참여자 임을 검증하는것은

DDoS공격 방지랑 비슷합니다.

네트워크 과부하를 막는 것이죠

 

 

 

 

3. 롱노드 선택

 

블록체인은 마지막 상태의 체인의 전파 과정에 대한 합의 인데요!

각자의 블록 전파속도가 다르고 방식도 달라질 수 있기에

어느게 옳은 노드인가라는 것에서 합의를 거칠 필요가 있습니다.

 

이에 대해서는 가장 긴 체인에 대해서 채택하는 것으로 합의를 하는데요,

5개가 연결된 블록체인 과

4개가 연결된 블록체인이 있을경우

 

가장 긴 체인이 가장큰 컴퓨팅 파워를 소모하였고 정당성이 있기 때문입니다.

그만큼 진짜 노드일 확률도 높기 때문입니다.

또, 그만큼 위변조도 어렵습니다.

 

 

따라서, 가장 긴체인을 선택하는 것으로 합의를 합니다.

 

 

 

 

정리하자면, 비트코인은 이중지불을 방지하기 위해서

1. UTXO, 2. PoW, 3. 롱노드 선택

의 합의 알고리즘을 사용합니다.

 

 

 

 

마지막으로 말씀드리고 싶은 것은

 

 

비트코인은 사실 화폐라기 보다는 암호학의 집합체 그 자체입니다.

다만, 그 한계도 명확한데요!

(사실 다른 현대 공개키 암호도 동일)

(이론적으로는 완벽한 암호인 OTP(One Time Pad)도 있는데요.! 궁금하시면 찾아보시길 권해 드립니다.)

 

우선, 위에 글에서 위변조 불가능이라고 쓰지 않고 거의 불가능이라고 썼습니다.

이는 사실상 언제든 해킹공격을 당할 위험이 있다는 이야기 입니다.

실제로 힘들긴 하지만 51%이상의 컴퓨팅 파워를 갖게 되면 비트코인 블록체인의 해킹이 가능합니다.

 

 

그리고 현재 컴퓨팅의 연산능력이 말도안되게 증가하거나 혹은 해시함수를 푸는

알고리즘을 갖게 된다면 언제든 해킹당할 위험에 놓이게 됩니다.

 

이 점은 블록체인을 하면서 꼭 알아야할 점이라고 생각됩니다.

 

 

 

긴 글 읽어주셔서 감사하구요.!

다음 이더리움 포스팅에서 만나요

2021.06.30 - [암호화폐] - 이더리움(Ethereum, ETH)의 알고리즘

안녕!

 

 

 

 

 

 

 

 

 

 

반응형

댓글