- 암호
- 고전적인 암호의 대표적인 예로 카이사르 암호(Caesar cipher)가 있다.
이는 알파벳을 key 값만큼 밀어서 치환하는 기법이다.
ex) E(A, key=3) => D
- 암호에는 크게 대칭키암호와 비대칭키(공개키)암호로 분류된다.
블록체인에서는 공개키 암호를 사용한다.
암호화에 사용되는 키는 공개키(PK), 복호화에 사용되는 키는 비밀키(SK) 라고 한다.
- 이러한 비대칭키 암호의 목적은
"누구든지 암호화할 수 있지만 비밀키를 아는 사람만 복호화할 수 있어야한다" 이다.
비밀키로부터 공개키를 도출하는 것은 쉽지만,
공개키로부터 비밀키를 찾는 것은 매우 어렵다.
- 여기에 해쉬를 넣어서 무결성을 확인할 수 도 있다.
- 그렇다면 이러한 공개키 암호가 블록체인에 어떻게 사용될까?
- 비트코인같은 UTXO 기반 블록체인은 블록체인에서 사용하는 토큰에 전자서명을 주고
이더리움같은 Account-based 블록체인은 지갑주소(account)를 사용하기 위해 전자서명을 준다.
- 이더리움
- 이더리움의 Account는 EOA(계정주소)와 스마트 컨트랙트 주소로 나뉜다.
메타마스크 주소가 EOA고 Dapp을 개발할 때 컨트랙트를 deploy하여 생기는 주소가
스마트 컨트랙트 주소라고 생각하면 편하다.
- 트랜잭션
- 트랜잭션의 순서는 매우 중요하다.
예를 들어 A계정의 balance가 5ETH라고 가정하자.
A에서 B로 2ETH만큼 보내는 것을 TX_1
B에서 A로 3ETH만큼 보내는 것을 TX_2
A에서 B로 6ETH만큼 보내는 것을 TX_3 이라고 한다.
TX_1 > TX_2 > TX_3은 가능하지만, TX_1 > TX_3 > TX_2는 가능해서는 안 된다.
위와같은 상황을 막기 위하여 블록체인 참여자들은 트랜잭션들이
올바른 순서대로 정려되었는지 확인 후 합의한다.
또한 각각의 트랜잭션은 Account에 연결된 공개키로 검증가능한 서명을 포함한다.
- Confirmation vs Finality
- 비트코인 노드A와 노드B가 있다고 가정하자.
A와 B가 거의 동시에 문제를 풀었다고 가정하자.
비트코인같이 탈중앙화된 네트워크에서는 A와 B중 누가 더 빠르게 문제를 풀었는지 판단하기 어렵다.
이때 다른 노드들은 상황을 보류하고 A와 B중 다음 문제를 더 빨리 푼 쪽을 기반으로 블록을 생성하고자 할 것이다.
만약 A-2, B-2도 거의 동시에 블록이 생성될 경우 이 또한 pending이 된다.
그런데 3번째 블록을 생성하던 중 A의 해시파워가 늘어 A-3이 B-3보다 빨리 생성되었다고 하자.
이 경우 longest chain만 남기 때문에 B, B-1, B-2는 사라지게 된다.
이는 합의를 통해 생성된 블록이 번복이 되었으므로 Finality(완결성)이 없다고 한다.
비트코인과 같이 PoW 합의 알고리즘을 따르는 블록체인의 경우
위와같은 원칙을 따르기 떄문에 Finality가 없다고 한다.
(정확히는 확률적 Finality를 따른다고 한다)
즉, Finality가 없으면 블록이 사라질 수도 있다는 뜻이다.
- 만약 위 상황에서 비트코인의 블록체인 네트워크 딜레이 때문에 2개의 블록이 차이가 난다고 하자.
그런데 아무리 딜레이를 고려한다고 해도 확률적으로 3개 이상의 블록이 차이가 날 수는 없다.
이 경우를 Confirmation이 3이라고 말한다.
- 비트코인은 6 comfirmation 법칙을 따르지만 네트워크 시차로 인해 생성될 수 있는 블록은 2~3개 뿐이다.
이는 악의적인 참여자의 해시파워를 고려한 값이다.
- 클레이튼 같은 BFT 기반 블록체인은
비트코인같은 PoW 기반 블록체인과 달리 완결성이 보장된다.
(한양대학교 X GroundX)
'Block Chain ETC' 카테고리의 다른 글
블록체인 개념 정리#4 (0) | 2022.07.04 |
---|---|
블록체인 개념 정리#2 (0) | 2022.06.30 |
블록체인 개념 정리#1 (1) | 2022.06.30 |
Solidity 문법 정리 (0) | 2022.06.29 |
BlockChain Trilemma (0) | 2022.05.30 |