블록체인 네트워크에서 트랜잭션은 자산의 이동, 스마트 컨트랙트의 실행 등 네트워크 상에서 발생하는 모든 종류의 데이터 교환을 의미한다. 트랜잭션은 네트워크의 참여자들 사이에서 가치의 이전이나 특정 작업의 수행을 요청하는 데 사용된다. 각 트랜잭션은 네트워크에 의해 검증되고, 블록체인에 영구적으로 기록된다.
비트코인 트랜잭션 구조
- 버전 번호 : 채굴자와 노드가 트랜잭션 처리에 사용할 규칙을 지정하는 데 사용
- 입력 카운터 : 트랜잭션에 포함된 입력의 개수
- 입력 리스트 : 블록의 첫 트랜잭션은 코인베이스 트랜잭션(Coinbase Transaction)으로 입력 리스트에는 하나 이상의 트랜잭션 입력이 포함
- 출력 카운터 : 출력의 개수를 나타내는 양의 정수
- 출력 리스트 : 트랜잭션에 포함된 출력
- 락 시간 : 트랜잭션이 유효해지는 가장 빠른 시간을 정의하는 필드
비트코인 트랜잭션은 비트코인 네트워크에서 가치(비트코인)의 이전을 나타낸다. 각 트랜잭션은 입력(input)과 출력(output)으로 구성된다.
- 입력(Input): 트랜잭션에서 비트코인을 보내는 주소(들). 각 입력은 이전 트랜잭션의 출력을 참조한다. 이는 사용자가 비트코인을 소비하기 위해 이전에 받은 비트코인을 가리키는 것을 의미한다.
- 출력(Output): 비트코인을 받는 주소와 해당 주소로 이동하는 비트코인의 양을 나타낸다. 트랜잭션은 여러 출력을 가질 수 있으며, 이는 비트코인을 여러 주소로 분배할 수 있음을 의미한다.
비트코인 트랜잭션은 디지털 서명을 통해 보안이 유지된다. 발신자는 자신의 개인 키로 트랜잭션을 서명하여, 자신이 비트코인을 소유하고 있음을 증명한다. 네트워크의 노드들은 이 서명을 검증하여 트랜잭션의 유효성을 확인한다.
그렇다면 비트코인 트랜잭션에서 서명은 어디에 있을까?
비트코인 트랜잭션과 서명
비트코인 트랜잭션에도 실제로는 디지털 서명이 포함되어 있다. 비트코인의 트랜잭션 구조에서는, 각 입력에 대해 해당 입력을 잠그는 스크립트(ScriptSig)가 있으며, 이 스크립트 내에 서명이 포함된다. 비트코인은 ECDSA(Elliptic Curve Digital Signature Algorithm)를 사용하여 이 서명을 생성한다.
비트코인 트랜잭션의 서명 과정은 다음과 같다:
1. 트랜잭션 준비: 트랜잭션의 일부 데이터는 서명 과정에서 제외된다. 이는 트랜잭션의 malleability(가변성)을 방지하기 위함이다.
2. 해시 생성: 서명을 제외한 트랜잭션 데이터로부터 해시 값을 생성한다.
3. 서명 생성: 발신자는 개인 키를 사용하여 해시에 서명한다.
4. 서명 첨부: 생성된 서명은 트랜잭션에 첨부된다.
비트코인 네트워크에서 트랜잭션을 검증할 때, 노드는 발신자의 공개 키를 사용하여 서명을 검증한다. 서명이 유효하면, 트랜잭션이 발신자에 의해 생성되었으며, 데이터가 변경되지 않았음을 확인할 수 있다.
비트코인 트랜잭션에 서명이 "없다"고 생각될 수 있는 이유는, 서명이 트랜잭션의 입력 부분에 스크립트 형태로 포함되어 있기 때문에, 직관적으로 서명을 확인하기 어려울 수 있기 때문이다. 그러나 실제로는 비트코인 트랜잭션의 각 입력에는 해당 입력을 사용할 권한이 있는지를 증명하는 디지털 서명이 포함되어 있다.
이더리움 트랜잭션 구조
- 논스(Nonce) : 트랜잭션 발신 EOA(지갑)에 의해 발행되어 트랜잭션 메시지 재사용을 방지하는 데 사용되는 일련번호
- 가스 가격(Gas Price) : 발신자가 지급하는 가스(수수료)의 가격으로 이더리움의 가장 작은 단위인 웨이(wei)단위로 기록
- 가스 한도 : 발신하는 트랜잭션을 위해 사용할 가스의 최대치로, 한도를 넘는 가스비가 사용된다면 트랜잭션 실패
- 수신자 : 이 트랜잭션을 받는, 트랜잭션의 목적지 이더리움 주소
- 값 : 목적지에 보낼 이더(이더리움 코인)의 양
- 데이터 : 가변 길이 바이너리 데이터 페이로드로, 스마트 컨트랙트 호출 시 사용
- v, r, s : EOA의 ECDSA 디지털 서명의 세 가지 구성 요소
비트코인과 이더리움 이 두 네트워크 트랜잭션의 가장 큰 차이는 논스(Nonce)의 유무다. 이더리움 트랜잭션에는 논스가 존재하고, 이 논스는 이중 지불을 방지하는 데 사용한다.
이더리움의 논스는 두 가지 특성을 가진다. 트랜잭션 시 논스가 1씩 증가하며, 한 계정 내 논스는 유일하고 동일한 논스가 존재하지 않는다. 한 계정의 트랜잭션들 또한 각각 고유한 논스를 가지고 있으며, 가장 오래된 순서부터 1씩 증가하는 값을 가진다.
만약 논스가 1인 트랜잭션을 발신한 후 이어서 논스가 2인 트랜잭션을 발신한다면, 두 번째 트랜잭션은 어떤 블록에도 포함되지 않는다.
두 번째 트랜잭션은 멤풀(Mempool)이라는 임시 저장공간에서 논스가 1인 트랜잭션을 기다리며, 논스가 1인 트랜잭션이 발신되면 멤풀에 있던 트랜잭션 역시 처리되고 블록에 포함된다.
같은 논스를 가진 트랜잭션이 다수 발신된 경우에는 가스비(수수료)가 가장 높은 트랜잭션 하나만 처리되며, 이런 방법으로 이더리움은 이중 지불을 방지한다.
디지털 서명의 검증 과정
디지털 서명은 블록체인 트랜잭션의 발신자가 자신의 개인 키(private key)를 사용하여 트랜잭션에 서명함으로써, 해당 트랜잭션이 발신자에 의해 생성되었으며, 데이터가 전송 중에 변경되지 않았음을 보증한다. 이 과정은 다음과 같이 이루어진다:
1. 서명 생성: 사용자는 트랜잭션 데이터에 대해 자신의 개인 키를 사용하여 서명을 생성한다. 이 서명은 트랜잭션 데이터와 개인 키를 입력으로 하는 암호화 함수를 통해 생성된다.
2. 트랜잭션 전송: 서명이 첨부된 트랜잭션은 네트워크로 전송된다.
3. 서명 검증: 트랜잭션을 받은 노드(또는 참여자)는 발신자의 공개 키(public key)를 사용하여 서명을 검증한다. 공개 키는 암호화 알고리즘에 따라 서명과 트랜잭션 데이터를 결합하여, 서명이 해당 트랜잭션과 개인 키에 의해 생성되었는지 확인한다.
4. 검증 결과: 서명이 유효하면 트랜잭션이 발신자에 의해 생성되었으며, 데이터가 변경되지 않았음이 확인된다. 서명이 유효하지 않은 경우, 트랜잭션은 거부된다.
서명 검증 자세히
- 해시 생성: 먼저, 트랜잭션 데이터로부터 해시 값을 생성한다. 이 해시는 데이터의 고유한 요약이며, 데이터의 어떤 작은 변경이라도 해시 값에 큰 변화를 일으킨다.
- 서명 생성: 발신자는 자신의 개인 키를 사용하여 이 해시 값을 암호화한다. 이 과정에서 생성된 암호화된 해시 값이 바로 "디지털 서명"이다.
- 서명 검증: 수신자는 발신자의 공개 키를 사용하여 서명(암호화된 해시 값)을 해독한다. 이 과정에서 원래의 해시 값이 재생성된다.
- 공개 키로 서명을 해독하는 방법
- 공개 키와 개인 키는 수학적으로 연결되어 있다. 개인 키로 암호화된 데이터는 해당 공개 키로만 해독할 수 있다. 이 원리를 디지털 서명에 적용하면, 개인 키로 암호화된 해시 값(서명)을 공개 키로 해독할 수 있다.
- 결과값으로 해시 값이 나오는 이유
- 디지털 서명의 검증 과정에서 공개 키로 서명을 해독하면, 원래의 해시 값이 나온다. 이는 서명 생성 시, 발신자가 개인 키로 해시 값을 암호화했기 때문이다. 따라서, 해독 과정은 이 암호화된 해시 값을 원래의 해시 값으로 복원하는 것이다.
- 공개 키로 서명을 해독하는 방법
이 과정을 통해, 디지털 서명은 트랜잭션의 진위와 무결성을 보장한다.
논스가 존재하지 않는 비트코인은 이중 지불을 어떻게 방지할까?
바로 UTXO(Unspent Transaction Output), 미사용 트랜잭션 출력값을 사용.
비트코인의 송금은 실제 금액을 발신하고, 수신하는 것이 아닌 송금하는 금액이 적힌 UTXO를 주고받는다. 트랜잭션을 발생시키면 이 UTXO는 TX Pool에 들어가게 되는데 채굴하는 과정에서 이 UTXO에 사용 기록이 있다면 해당 거래를 무효화하는 방식으로 이중 지불을 방지한다.
이런 논스의 존재 여부 외에도 비트코인의 트랜잭션은 화폐 송금 기능만 가지고 있다면, 이더리움 트랜잭션은 송금을 넘어 스마트 컨트랙트를 호출하는 용도로도 사용할 수 있다는 차이가 있다.
- UTXO(Unspent Transaction Outputs) 모델
- UTXO 모델은 비트코인을 포함한 여러 블록체인 네트워크에서 사용되는 트랜잭션 출력 모델이다. UTXO는 사용되지 않은 트랜잭션 출력을 의미하며, 기본적으로 사용자가 소비할 수 있는 비트코인의 양을 나타낸다.
- 1. UTXO 생성: 사용자 A가 사용자 B에게 비트코인을 전송하는 트랜잭션이 성공적으로 블록체인에 기록될 때, 이 트랜잭션의 출력은 B의 UTXO로 생성된다.
- 2. UTXO 소비: 사용자 B가 이 UTXO를 사용하여 다른 사용자 C에게 비트코인을 전송하려면, B는 이 UTXO를 새 트랜잭션의 입력으로 사용해야 한다. 이 트랜잭션이 성공적으로 처리되면, 원래의 UTXO는 소비된 것으로 간주되고, 새로운 UTXO가 C에게 생성된다.
- 3. UTXO 집합: 네트워크의 모든 UTXO는 UTXO 집합을 형성한다. 이 집합은 네트워크의 현재 상태를 나타내며, 각 사용자의 실제 잔액은 개인이 소유한 UTXO의 합으로 계산된다.
- UTXO 모델의 장점은 트랜잭션의 병렬 처리가 가능하다는 것이다. 각 UTXO는 독립적으로 처리될 수 있으므로, 여러 트랜잭션을 동시에 검증할 수 있다. 이는 네트워크의 처리량을 증가시키고, 더 빠른 트랜잭션 확인 시간을 가능하게 한다. 또한, UTXO 모델은 트랜잭션의 무결성을 자연스럽게 보장한다. 각 UTXO는 한 번만 사용될 수 있으며, 이는 이중 지출(double spending)을 방지하는 데 도움이 된다.
- UTXO 모델은 비트코인을 포함한 여러 블록체인 네트워크에서 사용되는 트랜잭션 출력 모델이다. UTXO는 사용되지 않은 트랜잭션 출력을 의미하며, 기본적으로 사용자가 소비할 수 있는 비트코인의 양을 나타낸다.
- UTXO 모델의 단점
- - 상태 관리: UTXO 집합은 시간이 지남에 따라 계속 성장할 수 있으며, 이는 전체 네트워크의 상태를 유지 관리하는 데 더 많은 저장 공간과 처리 능력을 요구한다.
- - 사용자 친화성: UTXO 모델은 계정 기반 모델에 비해 직관적이지 않을 수 있다. 사용자는 여러 UTXO를 관리해야 하며, 트랜잭션을 생성할 때 적절한 UTXO를 선택해야 한다.
- - 프라이버시: UTXO 모델은 트랜잭션의 입력과 출력 사이의 관계를 공개한다. 이는 특정 UTXO를 추적하고, 사용자의 지출 패턴을 분석하는 것을 가능하게 한다.
- UTXO와 계정 기반 모델의 비교
- 이더리움과 같은 계정 기반 모델에서는, 사용자의 잔액이 계정에 직접 연결되어 있으며, 트랜잭션은 계정의 잔액을 직접 업데이트한다. 이 모델은 사용자에게 더 친숙하고, 상태 관리가 상대적으로 간단할 수 있다. 그러나, 계정 기반 모델은 트랜잭션의 순서가 중요하며, 이는 네트워크의 병렬 처리 능력에 영향을 줄 수 있다.
- 결론적으로, UTXO 모델과 계정 기반 모델은 각각의 장단점을 가지고 있으며, 선택된 모델은 블록체인 네트워크의 목적과 요구 사항에 따라 달라진다. UTXO 모델은 높은 수준의 보안과 병렬 처리 능력을 제공하는 반면, 계정 기반 모델은 사용자 친화성과 간단한 상태 관리를 제공한다.
'블록체인 이론' 카테고리의 다른 글
해시 함수와 비대칭 암호화 기법 (0) | 2024.02.21 |
---|---|
블록의 구조 (0) | 2024.02.21 |
Nonce (0) | 2024.02.21 |
이더리움 Nonce 검증 (0) | 2024.02.21 |
머클트리 (0) | 2024.02.21 |
댓글