SlideShare a Scribd company logo
1 of 27
Bitcoin Basics
part2
Email: thdnthdn24@gmail.com
Editor: SooBok.Jin
Final edit: 2018.04.11
Email: thdnthdn24@gmail.com
Mining?
Block? Transacti
on?
비트코인의 동작원리
비트코인의 동작원리
철수가 영희에게 3비트를 전달한다고 가정했을 때 내부적으로 어떻게 동작하
는지 기존 은행 시스템과 비교하여 알아보자.
비트코인의 동작원리
철수가 영희에게 3비트를 전달한다고 가정했을 때 내부적으로 어떻게 동작하
는지 기존 은행 시스템과 비교하여 알아보자.
기존 중앙 은행의 동작 흐름
철수가 영희에게 30,000원을 이체한다고 가정했을 때 은행의 동작원리
거래 데이터
Input. 철수 Output. 영희
Amount.
Sig. chul
su
비트코인 동작 흐름
철수가 영희에게 3비트를 전달한다고 가정했을 때의 동작원리
비트코인 동작 흐름
비트코인 동작 흐름
비교분석
거래 데이터
구분 프로세스 중앙 은행 Bitcoin
이용자
잔액조회 특정 계좌의 잔액 조회 UTXO 조회
이체정보 보내는이, 받는이, 금액 입력 Input, output, 보낼 BTC 량 입력
소유주 입증 비밀번호, pin, 공인인증 전자서명
관리자
거래 검증 중앙은행 자체 검증 네트워크 참여자가 개별적으로 검증, 전파
거래 기록 중앙은행 자체 기록
채굴과정을 통해 블록 생성 및 전파, 블록이
각 노드에 기록, 블록 체인에 연결
Control based
Single identified point
Consensus based
Multiple unidentified point
사용자 계좌(address)
은행의 사용자 계정 - 계좌
비트코인의 사용자 계정 - address
키의 특성
개인키(Private Key) 공개키(Public Key) 주소(Bitcoin Address)
Hash
fuction
타원 곡선 함수 해시 함수
5J3mBbAH58CpQ3Y5RNJpUKPE62SQ5tfcvU2Jpbnkeyh
fsYB1Jcn
04F028892BAD7ED57D2FB57BF33081D5CFCF6F9ED3D
3D7F159C2E2FFF579DC341A07CF33DA18BD734C600B
96A72BBC4749D5141C90EC8AC328AE52DDFE2E505B
DB
1J7mdg5rbQyUHENYdx39WVWK7fsLpEoXZy
RIPEMD160(SHA256(K))elliptic curve cryptography
해시 알고리즘
임의의 길이의 데이터를 일정한 길이의 데이터(해시 값)로 변환하는 일방 함수이다.
해시 함수의 특징
• 출력값을 통해 입력값을 알아낼 수 없다
• 입력값이 조금이라도 변경되면 완전 다른 형태의 출력값을 반환한다
• 어떠한 데이터든 일정한 길이의 데이터로 변경한다
• 동일한 입력값은 항상 동일한 출력값을 반환한다
해시 알고리즘
해시 알고리즘
Hash
fuction
My name is soobok
I am 29
hello
ac294ae4945cbbed97
Hash
fuction
02a7bbd25aa42417e0My name is soobok
Hash
fuction
325acccd12325752c8My name is sobok
비교분석
거래 데이터
구분 프로세스 중앙 은행 Bitcoin
이용자
잔액조회 특정 계좌의 잔액 조회 UTXO 조회
이체정보 보내는이, 받는이, 금액 입력 Input, output, 보낼 BTC 량 입력
소유주 입증 비밀번호, pin, 공인인증 전자서명
관리자
거래 검증 중앙은행 자체 검증 네트워크 참여자가 개별적으로 검증, 전파
거래 기록 중앙은행 자체 기록
채굴과정을 통해 블록 생성 및 전파, 블록이
각 노드에 기록, 블록 체인에 연결
Control based
Single identified point
Consensus based
Multiple unidentified point
거래 생성하기(transaction)
Transaction이란 대변, 차변으로 구성된 일종의 거래 정보 데이터이다. 은행에서
A에서 B로 일정 금액을 송금했다는 기록이 Transaction 데이터이다.
보낸이 받는이 금액 날짜
철수 영희 30,000원 18-02-05
민수 수진 25,000원 18-02-06
Transaction
• 잔액 조회
• Transaction 생성(input, output, 금액)
• 전자서명 넣기(소유주임을 증명)
Transaction 흐름 – 비트코인
이용자
Input. Bob Output. 철수
Amount.
Sig.
Input. Alice Output. Bob
Amount.
Sig.
…
Alice -> Bob
Bob -> 철수
Alice Bob 철수
Bob의 UTXO 철수의 UTXO
잔액조회 - UTXO(Unspent Transaction Output)
참조
잔액조회 - UTXO(Unspent Transaction Output)
Input
광회
Output
민수
Input
연주
Output
현우
Input
병우
Output
우석
Input
민수
Output
회윤
Input
현우
Output
철수
Input
병우
Output
민준
Input
회윤
Output
철수
Input
철수
Output
Alice
Input
민준
Output
철수
UTXO(Unspent Transaction Output)
2.5bit
2bit
Input
회윤
Output
철수
입력값 리스트
입력 카운터
이전 거래의 해시값(txid)
이전 거래의 인덱스
전자서명(해제 스크립트) 길이
전자서명
(해제 스크립트)
Sequence number
출력값 리스트
출력 카운터
보내는 비트코인 액수
받는이 주소 길이
(잠금 스크립트 길이)
받는이 주소
(잠금 스크립트)
LockTime
Version Number
Transaction
이전 거래의 해시값
소비될 UTXO를 담고 있는 거래에 대한 지시자
이전 거래의 인덱스
소비될 UTXO의 색인번호
전자서명 길이
전자서명(해제 스크립트)의 길이(바이트 단위)
전자서명
UTXO의 잠금 스크립트 조건을 만족하는 스크립트
보내는 비트코인 액수(총액)
사토시 단위로 표현되는 비트코인 가치
받는이 주소 길이(잠금 스크립트 길이)
잠금 스크립트의 길이
받는이 주소(잠금 스크립트)
출력값을 소비하는 데 필요한 조건을 규정하는
스크립트
Version Number
해당 거래가 따르는 규칙을 명시
LockTime
유닉스 타임스탬프나 블록 개수
회윤
To
철수
전자서명 생성 함수
전자서명
• dA: 서명에 사용되는 개인키(private key)
• m: 거래 데이터(보낸이, 받는이, 금액 등) 혹은 그 일부분
• F_hash: 해시함수
• F_sig: 서명함수
• Sig: 전자서명
F (m)hash dASig = F ( , )sig
전자서명
전자서명(Digital Signature)
전자서명은 계좌(공개키)의 소유주임을 증명하는 일종의 비밀번호 역할을 한다.
전자서명은 개인키와 거래 데이터 이용하여 생성한다. 여기서 개인키는 계좌의 소유권을 증명하기
위한 것이며, 거래데이터는 제 3자(노드)에 의해 거래 데이터가 변경되는 것을 보호하기 위함이다.
From
회윤
To
철수
입력 카운터: 2 출력 카운터: 2
From
회윤
To
철수
From
철수
To
Alice
From
민준
To
철수
이전 거래의 해시값(txid)
이전 거래의 인덱스
전자서명 길이
전자서명
Sequence number
이전 거래의 해시값(txid)
이전 거래의 인덱스
전자서명 길이
전자서명
Sequence number
1.25bit
철수의 주소 길이
철수의 주소(잠금 스크립트)
3bit
영희의 주소 길이
영희의 주소(잠금 스크립트)
: 1Bit
Transaction
2.5bit
2bit
Transaction 생성
4.5bit – 4.25bit = 0.25bit(채굴자에게 전달되는 수수료)
회윤
철수
민준
영희
: 1Bit
Transaction 생성
거래의 입력값 – 거래의 출력값 = 수수료
실제 Transaction Data 확인
Input Output
https://blockchain.info/ko/block/000000000000000000272e816c577270c6fba7057e2bc10fe4af08351ab46a64

More Related Content

Similar to Bitcoin Basics Part 2

가상화폐 비트코인, 아직은 성공적, 미래는 불투명 | 2013.08.13
가상화폐 비트코인, 아직은 성공적, 미래는 불투명 | 2013.08.13가상화폐 비트코인, 아직은 성공적, 미래는 불투명 | 2013.08.13
가상화폐 비트코인, 아직은 성공적, 미래는 불투명 | 2013.08.13Kunwoo Kim
 
Bitcoin presentation
Bitcoin presentationBitcoin presentation
Bitcoin presentation헌진 김
 
비트코인으로 이해하는 블록체인 기술
비트코인으로 이해하는 블록체인 기술비트코인으로 이해하는 블록체인 기술
비트코인으로 이해하는 블록체인 기술Seong-Bok Lee
 
How Blockchain Works - 블록체인의 원리
How Blockchain Works - 블록체인의 원리How Blockchain Works - 블록체인의 원리
How Blockchain Works - 블록체인의 원리SeokWon Kim
 
비트코인, 화폐 논쟁을 넘어 플랫폼으로서의 잠재력 부상 중
 비트코인, 화폐 논쟁을 넘어 플랫폼으로서의 잠재력 부상 중 비트코인, 화폐 논쟁을 넘어 플랫폼으로서의 잠재력 부상 중
비트코인, 화폐 논쟁을 넘어 플랫폼으로서의 잠재력 부상 중Kunwoo Kim
 
Bitcoin transaction
Bitcoin transactionBitcoin transaction
Bitcoin transactionSoobok Jin
 

Similar to Bitcoin Basics Part 2 (6)

가상화폐 비트코인, 아직은 성공적, 미래는 불투명 | 2013.08.13
가상화폐 비트코인, 아직은 성공적, 미래는 불투명 | 2013.08.13가상화폐 비트코인, 아직은 성공적, 미래는 불투명 | 2013.08.13
가상화폐 비트코인, 아직은 성공적, 미래는 불투명 | 2013.08.13
 
Bitcoin presentation
Bitcoin presentationBitcoin presentation
Bitcoin presentation
 
비트코인으로 이해하는 블록체인 기술
비트코인으로 이해하는 블록체인 기술비트코인으로 이해하는 블록체인 기술
비트코인으로 이해하는 블록체인 기술
 
How Blockchain Works - 블록체인의 원리
How Blockchain Works - 블록체인의 원리How Blockchain Works - 블록체인의 원리
How Blockchain Works - 블록체인의 원리
 
비트코인, 화폐 논쟁을 넘어 플랫폼으로서의 잠재력 부상 중
 비트코인, 화폐 논쟁을 넘어 플랫폼으로서의 잠재력 부상 중 비트코인, 화폐 논쟁을 넘어 플랫폼으로서의 잠재력 부상 중
비트코인, 화폐 논쟁을 넘어 플랫폼으로서의 잠재력 부상 중
 
Bitcoin transaction
Bitcoin transactionBitcoin transaction
Bitcoin transaction
 

More from Soobok Jin

Erc721 token & crypto kitties analysis
Erc721 token & crypto kitties analysisErc721 token & crypto kitties analysis
Erc721 token & crypto kitties analysisSoobok Jin
 
Sidechain Overview
Sidechain OverviewSidechain Overview
Sidechain OverviewSoobok Jin
 
Ethereum Basics Part 2
Ethereum Basics Part 2Ethereum Basics Part 2
Ethereum Basics Part 2Soobok Jin
 
Ethereum Basics Part1
Ethereum Basics Part1Ethereum Basics Part1
Ethereum Basics Part1Soobok Jin
 
Bitcoin Basics Part4
Bitcoin Basics Part4Bitcoin Basics Part4
Bitcoin Basics Part4Soobok Jin
 
Bitcoin Basics Part1
Bitcoin Basics Part1Bitcoin Basics Part1
Bitcoin Basics Part1Soobok Jin
 

More from Soobok Jin (6)

Erc721 token & crypto kitties analysis
Erc721 token & crypto kitties analysisErc721 token & crypto kitties analysis
Erc721 token & crypto kitties analysis
 
Sidechain Overview
Sidechain OverviewSidechain Overview
Sidechain Overview
 
Ethereum Basics Part 2
Ethereum Basics Part 2Ethereum Basics Part 2
Ethereum Basics Part 2
 
Ethereum Basics Part1
Ethereum Basics Part1Ethereum Basics Part1
Ethereum Basics Part1
 
Bitcoin Basics Part4
Bitcoin Basics Part4Bitcoin Basics Part4
Bitcoin Basics Part4
 
Bitcoin Basics Part1
Bitcoin Basics Part1Bitcoin Basics Part1
Bitcoin Basics Part1
 

Bitcoin Basics Part 2

  • 1. Bitcoin Basics part2 Email: thdnthdn24@gmail.com Editor: SooBok.Jin Final edit: 2018.04.11 Email: thdnthdn24@gmail.com
  • 3. 비트코인의 동작원리 철수가 영희에게 3비트를 전달한다고 가정했을 때 내부적으로 어떻게 동작하 는지 기존 은행 시스템과 비교하여 알아보자.
  • 4. 비트코인의 동작원리 철수가 영희에게 3비트를 전달한다고 가정했을 때 내부적으로 어떻게 동작하 는지 기존 은행 시스템과 비교하여 알아보자.
  • 5. 기존 중앙 은행의 동작 흐름 철수가 영희에게 30,000원을 이체한다고 가정했을 때 은행의 동작원리 거래 데이터
  • 6. Input. 철수 Output. 영희 Amount. Sig. chul su 비트코인 동작 흐름 철수가 영희에게 3비트를 전달한다고 가정했을 때의 동작원리
  • 9. 비교분석 거래 데이터 구분 프로세스 중앙 은행 Bitcoin 이용자 잔액조회 특정 계좌의 잔액 조회 UTXO 조회 이체정보 보내는이, 받는이, 금액 입력 Input, output, 보낼 BTC 량 입력 소유주 입증 비밀번호, pin, 공인인증 전자서명 관리자 거래 검증 중앙은행 자체 검증 네트워크 참여자가 개별적으로 검증, 전파 거래 기록 중앙은행 자체 기록 채굴과정을 통해 블록 생성 및 전파, 블록이 각 노드에 기록, 블록 체인에 연결 Control based Single identified point Consensus based Multiple unidentified point
  • 13. 키의 특성 개인키(Private Key) 공개키(Public Key) 주소(Bitcoin Address) Hash fuction 타원 곡선 함수 해시 함수 5J3mBbAH58CpQ3Y5RNJpUKPE62SQ5tfcvU2Jpbnkeyh fsYB1Jcn 04F028892BAD7ED57D2FB57BF33081D5CFCF6F9ED3D 3D7F159C2E2FFF579DC341A07CF33DA18BD734C600B 96A72BBC4749D5141C90EC8AC328AE52DDFE2E505B DB 1J7mdg5rbQyUHENYdx39WVWK7fsLpEoXZy RIPEMD160(SHA256(K))elliptic curve cryptography
  • 14. 해시 알고리즘 임의의 길이의 데이터를 일정한 길이의 데이터(해시 값)로 변환하는 일방 함수이다. 해시 함수의 특징 • 출력값을 통해 입력값을 알아낼 수 없다 • 입력값이 조금이라도 변경되면 완전 다른 형태의 출력값을 반환한다 • 어떠한 데이터든 일정한 길이의 데이터로 변경한다 • 동일한 입력값은 항상 동일한 출력값을 반환한다 해시 알고리즘
  • 15. 해시 알고리즘 Hash fuction My name is soobok I am 29 hello ac294ae4945cbbed97 Hash fuction 02a7bbd25aa42417e0My name is soobok Hash fuction 325acccd12325752c8My name is sobok
  • 16. 비교분석 거래 데이터 구분 프로세스 중앙 은행 Bitcoin 이용자 잔액조회 특정 계좌의 잔액 조회 UTXO 조회 이체정보 보내는이, 받는이, 금액 입력 Input, output, 보낼 BTC 량 입력 소유주 입증 비밀번호, pin, 공인인증 전자서명 관리자 거래 검증 중앙은행 자체 검증 네트워크 참여자가 개별적으로 검증, 전파 거래 기록 중앙은행 자체 기록 채굴과정을 통해 블록 생성 및 전파, 블록이 각 노드에 기록, 블록 체인에 연결 Control based Single identified point Consensus based Multiple unidentified point
  • 18. Transaction이란 대변, 차변으로 구성된 일종의 거래 정보 데이터이다. 은행에서 A에서 B로 일정 금액을 송금했다는 기록이 Transaction 데이터이다. 보낸이 받는이 금액 날짜 철수 영희 30,000원 18-02-05 민수 수진 25,000원 18-02-06 Transaction
  • 19. • 잔액 조회 • Transaction 생성(input, output, 금액) • 전자서명 넣기(소유주임을 증명) Transaction 흐름 – 비트코인 이용자
  • 20. Input. Bob Output. 철수 Amount. Sig. Input. Alice Output. Bob Amount. Sig. … Alice -> Bob Bob -> 철수 Alice Bob 철수 Bob의 UTXO 철수의 UTXO 잔액조회 - UTXO(Unspent Transaction Output) 참조
  • 21. 잔액조회 - UTXO(Unspent Transaction Output)
  • 23. Input 회윤 Output 철수 입력값 리스트 입력 카운터 이전 거래의 해시값(txid) 이전 거래의 인덱스 전자서명(해제 스크립트) 길이 전자서명 (해제 스크립트) Sequence number 출력값 리스트 출력 카운터 보내는 비트코인 액수 받는이 주소 길이 (잠금 스크립트 길이) 받는이 주소 (잠금 스크립트) LockTime Version Number Transaction 이전 거래의 해시값 소비될 UTXO를 담고 있는 거래에 대한 지시자 이전 거래의 인덱스 소비될 UTXO의 색인번호 전자서명 길이 전자서명(해제 스크립트)의 길이(바이트 단위) 전자서명 UTXO의 잠금 스크립트 조건을 만족하는 스크립트 보내는 비트코인 액수(총액) 사토시 단위로 표현되는 비트코인 가치 받는이 주소 길이(잠금 스크립트 길이) 잠금 스크립트의 길이 받는이 주소(잠금 스크립트) 출력값을 소비하는 데 필요한 조건을 규정하는 스크립트 Version Number 해당 거래가 따르는 규칙을 명시 LockTime 유닉스 타임스탬프나 블록 개수
  • 24. 회윤 To 철수 전자서명 생성 함수 전자서명 • dA: 서명에 사용되는 개인키(private key) • m: 거래 데이터(보낸이, 받는이, 금액 등) 혹은 그 일부분 • F_hash: 해시함수 • F_sig: 서명함수 • Sig: 전자서명 F (m)hash dASig = F ( , )sig 전자서명 전자서명(Digital Signature) 전자서명은 계좌(공개키)의 소유주임을 증명하는 일종의 비밀번호 역할을 한다. 전자서명은 개인키와 거래 데이터 이용하여 생성한다. 여기서 개인키는 계좌의 소유권을 증명하기 위한 것이며, 거래데이터는 제 3자(노드)에 의해 거래 데이터가 변경되는 것을 보호하기 위함이다.
  • 25. From 회윤 To 철수 입력 카운터: 2 출력 카운터: 2 From 회윤 To 철수 From 철수 To Alice From 민준 To 철수 이전 거래의 해시값(txid) 이전 거래의 인덱스 전자서명 길이 전자서명 Sequence number 이전 거래의 해시값(txid) 이전 거래의 인덱스 전자서명 길이 전자서명 Sequence number 1.25bit 철수의 주소 길이 철수의 주소(잠금 스크립트) 3bit 영희의 주소 길이 영희의 주소(잠금 스크립트) : 1Bit Transaction 2.5bit 2bit Transaction 생성 4.5bit – 4.25bit = 0.25bit(채굴자에게 전달되는 수수료)
  • 26. 회윤 철수 민준 영희 : 1Bit Transaction 생성 거래의 입력값 – 거래의 출력값 = 수수료
  • 27. 실제 Transaction Data 확인 Input Output https://blockchain.info/ko/block/000000000000000000272e816c577270c6fba7057e2bc10fe4af08351ab46a64

Editor's Notes

  1. 비트 코인의 특성, 동작원리를 설명하기에 가장 좋은 방법은 한가지 예시를 설정하고, 기존의 은행서비스와 비교를 통해 얻는 것이라 생각한다. 철수가 영희에게 각각 3,0000원, 3btc를 보낸다고 가정할 때 기존의 은행서비스는 어떻게 동작하는지, 비트코인 네트워크에서는 어떻게 동작하는지 설명하겠다.
  2. 비트 코인의 특성, 동작원리를 설명하기에 가장 좋은 방법은 한가지 예시를 설정하고, 기존의 은행서비스와 비교를 통해 얻는 것이라 생각한다. 철수가 영희에게 각각 3,0000원, 3btc를 보낸다고 가정할 때 기존의 은행서비스는 어떻게 동작하는지, 비트코인 네트워크에서는 어떻게 동작하는지 설명하겠다.
  3. 비트 코인의 특성, 동작원리를 설명하기에 가장 좋은 방법은 한가지 예시를 설정하고, 기존의 은행서비스와 비교를 통해 얻는 것이라 생각한다. 철수가 영희에게 각각 3,0000원, 3btc를 보낸다고 가정할 때 기존의 은행서비스는 어떻게 동작하는지, 비트코인 네트워크에서는 어떻게 동작하는지 설명하겠다.
  4. 기존 은행 동작원리에 대한 설명 https://brunch.co.kr/@jeffpaik/8
  5. 멘트 철수와 영희를 예시로 들어 철수가 영희에게 3bit를 준다라고 가정, 어떤식으로 동작하는지 거시적인 관점에서 간단하게 훝어주기 1. 철수가 wallet 프로그램을 이용하여 잔액을 조회하는 에니메이션 2. 철수가 Transaction을 생성하여 누구한테 보낼 것인지(to), 얼마를 보낼 것인지(value), transaction의 유효성을 검증하기 위한 전자서명을 넣어서 전파시키는 에니메이션 3. 각 노드가 전파된 트랜잭션을 개별적으로 검사한 후 유효한 경우 전파하는 에니메이션 4. 채굴자가 해당 트랜잭션을 받은 후 블록에 등록하고 해시연산을 진행, 맞춘 후 전 노드에게 블록을 전파하는 에니매이션 5. 전파된 에니메이션을 각 노드가 체크하고 유효한 경우 각 노드의 블록체인에 연결하는 에니메이션
  6. 멘트
  7. 멘트 검증이 되었다고 해서 거래가 완결되는 것이 아니다. 거래가 실질적으로 장부에 기록이 되어야 한다. 비트코인 네트워크에서 블록체인을 장부라고 한다. 비트코인 네트워크에서 장부가 기록되었다는 것은 블록체인에 새로운 블록이 연결되었다는 것을 의미한다. 거래를 기록하는 역할은 채굴자가 한다.
  8. 기존 은행 동작원리에 대한 설명 https://brunch.co.kr/@jeffpaik/8
  9. 멘트 일반 은행의 서비스를 이용하기 위해 계좌를 개설하는 것과 같이 비트코인도 서비스를 이용하기 위해 일종의 서비스 계정을 생성해야 합니다.
  10. 멘트 비트코인에서 사용하는 일종의 사용자 계정을 키라고 한다. 그럼 키의 구성을 보자
  11. 멘트 기존의 은행 서비스는 계좌번호와 비밀번호 사이에 상관관계가 전혀 없기 때문에 비밀번호만 잘 보존하면 되지만, 비트코인 프로토콜에서는 개인키를 이용하여 공개키, 주소를 생성하기 때문에 절대 공개키, 주소를 이용하여 개인키를 알 수 있으면 안된다. 그러한 조건을 만족하는 두가지 암호기법을 이용한다. 이제 개인키로부터 공개키를 생성한다는 것을 알았으니 개인키부터 차근차근 만들어보자. (공개키는 개인키로부터 만들어지며, 공개키는 외부에 노출되는 데이터이므로 공개키로부터 개인키를 알아낼 수 없어야 한다. 개인키가 일종의 비밀번호 역할을 하는데 쉽게 알아낼 수 있으면 이미 그 네트워크는 신뢰성을 잃는다.) P2p 네트워크 상에서 거래에 대한 무결성을 유지하기 위해서는 비트코인 소유권을 주장하기 위한 서명이 필요하다. 그 서명은 절대 공개되어서는 안되며, 모든 데이터는 public하게 공개되므로 컴퓨팅을 이용해서 디코딩할 수 있는 값이어서도 안된다. 즉 불가역성을 지녀야 한다. 예상 질문: 그럼 그냥 상관관계를 아에 없애면 되지 않나요? 기존의 시스템처럼?: 답변: 비트코인 특성상 중앙데이터베이스가 없고, 모든 데이터를 각 노드가 보유하고 있기 때문에 비밀번호를 따로 기록할 수가 없다. 보완문제가 더 취약해지기 때문이다.(좀 더 생각해보자)
  12. Hash는 어떤 데이터를 주입하든 일정한 길이의 값을 반환하는 것을 말한다. 해쉬함수의 특징은 동일한 input값은 항상 동일한 output값을 반환한다는 것과, outpu값을 통해 input값을 알아내기가 힘들다는 점이있다. * 해시 알고리즘: 임의 크기의 입력값으로 지문 혹은 '해시'값을 생성해 내는 일방 함수이다. 주소를 생성하는데 사용되는 알고리즘은 '보안 해시 알고리즘(SHA)'과 'RACE Integrity Primitives Evaluation Message Digest(RIPEMD)' 이다. 예를들면 SHA256이나 RIPEMD160 등이 있다.
  13. Hash는 어떤 데이터를 주입하든 일정한 길이의 값을 반환하는 것을 말한다. 해쉬함수의 특징은 동일한 input값은 항상 동일한 output값을 반환한다는 것과, outpu값을 통해 input값을 알아내기가 힘들다는 점이있다. * 해시 알고리즘: 임의 크기의 입력값으로 지문 혹은 '해시'값을 생성해 내는 일방 함수이다. 주소를 생성하는데 사용되는 알고리즘은 '보안 해시 알고리즘(SHA)'과 'RACE Integrity Primitives Evaluation Message Digest(RIPEMD)' 이다. 예를들면 SHA256이나 RIPEMD160 등이 있다.
  14. 기존 은행 동작원리에 대한 설명 https://brunch.co.kr/@jeffpaik/8
  15. 멘트 사용자 계정을 생성했으니 해당 계정을 이용해서 영희에게 3비트코인을 전달해보자. 3비트를 전달하기 위한 다음 단계는 Transaction을 생성하고 비트코인 프로토콜에 전파를 해야한다. 이게 무슨 말인지 이해가 안될 수 있다. 천천히 살펴보겠다.
  16. 멘트 거래, Transaction이 무엇인지 다시한번 생각해보자 Transaction은 말그대로 대변, 차변으로 구성된 거래 정보 데이터이다. 은행에서 A -> B에게 일정금액을 지불했다는 기록이 거래 데이터라고 보면된다. 그리고 이 거래 데이터가 모여서 하나의 장부를 이루게 된다. 거래 장부는 돈과 관련이 되어있기 때문에 매우 민감한 부분이며 그렇기 때문에 거래 거래를 기록하기전 많은 확인 절차를 거친다. 그러면 이 거래가 진행되는 흐름을 잘개 쪼개서 생각해보자
  17. 멘트 시중 은행의 거래가 이루어지는 과정을 한번 잘개 나누어 보겠다. 1) 우선 잔액을 확인하고, 2) 송금할 대상, 금액을 입력하고, 3) 비밀번호를 입력하면 은행이 최종적으로 장부에 거래를 입력함으로써 거래가 종료된다. 비트코인도 이와 비슷하지만 다른부분이 있다. 비트코인의 경우에도 1) 잔액을 조회하고, 2) 트랜잭션 데이터를 생성해서 송금 주소와, 금액을 입력한다 3) 비밀번호에 해당하는 전자서명을 트랜잭션에 담아서 프로토콜에 전파(전송)한다. 전파를 하고나면 비트코인 네트워크에서 이상여부를 확인하고 최종적으로 블록에 포함시킴으로써 거래가 종료된다.
  18. 멘트 비트코인 시스템에서 계좌에 해당하는 잔액 값을 따로 기록하고 있지 않다. 비트코인은 UTXO를 통해 계좌의 잔액을 확인한다. UTXO는 ~을 말한다. 이해가 어렵기 때문에 예시를 들겠다. 엘리스가 밥에게 3비트를 주고 밥이 엘리스로부터 받은 3비트를 철수에게 전달한다고 가정을 해보자. 엘리스는 밥에게 3비트를 전달하는 트랜잭션 데이터를 생성한다. 이때 Bob이 해당 거래로부터 받은 비트를 소비하지 않으면 이 거래는 Bob의 UTXO가 된다. 여기서 Bob이 철수에게 3비트를 전달하는 거래를 생성하면 이제 엘리스로부터 받은 해당 거래는 소모되었으므로 Bob의 UTXO가 아닌 철수의 UTXO가 된다. 어떻게 잔액을 UTXO를 이용해서 확인할 수 있는 지 비트코인의 트랜잭션에 대해 자세히 설명드리겠다 UTXO(Unspent Transaction Output) 소비되지 않은 거래 출력값이라고도 한다. UTXO는 특정 소유주에 대해 암호로 잠겨있고, 블록체인상에 기록되어 있으며, 전체 네트워크에 의해 통화 단위로 인정받은 불가분의 비트코인 통화 덩어리이다. 비트코인 네트워크는 현재 수백만 개에 달하는 UTXO 중에서 이용 가능한(소비되지 않은) UTXO 전부를 추적한다. 주소에 해당하는 잔액이 얼마인지를 확인하기 위해서 현재 시점까지 해당 주소로 보내진(output에 기록된 주소값) 거래를 전부 조사한다. 즉 비트코인 프로토콜은 주소에 해당하는 잔액을 따로 기록하는 것이 아니라 각 비트가 전송된 거래를 추적하여 잔액을 확인한다.
  19. 멘트 – 어떻게 utxo만으로 잔액 확인이 가능한가 비트코인 시스템에서 거래는 거래에 이용된 비트코인이 생성된 시기부터 거래내역이 시간순으로 체인으로 연결되어 있다. 거래 내역이 연결되어 있다는 것은 비트코인이 발행된 시점으로부터 현재까지의 거래내역을 확인하여 나에게로 소유권이 이전되었음을 증명할 수 있다는 것이다. 즉 거래 사슬의 마지막에 있는 거래는 이 거래에 사용된 금액이 이전 발행된 비트코인이 전달 전달되어 결론적으로 나에게 왔다라는 것을 증명할 수 있는 것이다. 그리고 연결된 체인의 끝에 존재하는 트랜잭션의 ouput 최종적으로 철수의 주소로 보내어진 비트코인의 전체 총합이 철수가 가진 주소의 잔액이다. 그리고 철수의 주소로 비트코인을 전송한 거래 중 철수가 사용하지 않은 거래를 UTXO라고 하는것이다. 흔히 비트코인이 거래 이력을 모두 추적할 수 있다고 하는 이유가 여기서 나온다.
  20. 멘트 버전 넘버는 해당 거래가 따르는 규칙을 명시한다. 현재는 1이외의 데이터는 존재하지 않는다, LockTime은 거래의 등록 시기를 지연시키는 데이터라고 생각하면 된다. 기본적으로 0으로 설정된다. 그런다음 입력값(input)을 입력한다. 내가 거래를 생성할 때 어떤 거래 데이터를 이용할 것인지와 그 데이터를 이용하기 위한 일종의 전자서명 데이터를 입력하는 부분이다. 은행으로 따지면 나의 계좌 정보와 비밀번호를 입력하는 것과 유사하다. 이전 거래의 해시값은 어떤 UTXO를 참조했는 지 입력하는 부분이다. 이전 거래의 인덱스는 중요한 부분은 아니라 일단 넘어간다. 간단히만 말하자면 UTXO에서도 출력값 데이터가 여러 개가 존재할 수 있는데 이때 어떤 출력값을 참조한 것인지를 입력한 것이라 보면된다. 전자서명은 일종의 비밀번호 역할을 한다. UTXO에는 UTXO의 소유주, 즉 마지막으로 전달받은 사람만 사용할 수 있도록 일종의 잠금 장치가 걸려있다. 이 잠금장치를 풀 수 있는 것이 전자서명이다. 일련번호는 잠금 시간 만료전에 거래 중단을 위해 사용된다. 다음은 출력값을 입력한다. 누구한테 보내는지, 보내는 이에 대한 정보가 입력되는 곳이다. 보내는 액수와 받는이 주소를 입력한다. 여기서 좀 더 자세히 말하자면 받는 이 잠금 스크립트라는 것이 있는데 이는 해당 주소의 개인키를 소지한 사람만이 해당 금액을 사용할 수 있도록 하는 일종의 좌물쇠 역할을 한다. 입력카운터, 출력카운터는 모두 여러 개가 올 수 있다 거래 데이터에 대한 설명을 마쳤으니 전자서명이 무엇인지 알아보자.
  21. 멘트 전자서명은 은행으로 따지면 비밀번호라고 할 수 있다. 자신이 해당 계정의 소유주임을 증명하는 일종의 비밀번호 역할을 한다. 일전에 소개했듯이 개인키가 일종의 비밀번호역할을 한다고 했다. 하지만 이 개인키를 그대로 거래 데이터에 넣게되면 누구나 알 수 있게 되는 문제가 있다. 그래서 전자서명 함수를 이용하여 전사서명을 만든다. 전자서명을 만들 때 들어가는 데이터는 개인키와 거래 데이터가 있다. 개인키는 계좌의 소유권을 인증하기 위한 것이며, 거래데이터는 거래 데이터의 변경을 막기위해 들어간다. 함수를 통해 만들어진 전자서명은 전자 서명을 만들 때 개인키가 필요하며, 개인키는 전자서명화 되어 있기 때문에 다른 노드가 확인할 수 없다. Q. 개인키를 확인할 수 있는 방법이 전혀 없는건지? 즉 개인키를 입력하는 input(dA)에 하나씩 값을 대입하는 것 밖에 방법이 없는건가?
  22. 멘트 모든 준비가 되었으니 실제로 철수가 영희에게 3비트를 보내는 트랜잭션을 만들어보겠다. 철수는 현재 회윤으로부터 2.5비트, 민준으로부터 2비트를 전달받은 UTXO가 존재한다. 해당 UTXO를 이용하겠다. 해당 UTXO를 넣고, 해당 UTXO의 소유주임을 증명하는 전자서명을 각각 넣는다. 각 전자서명은 UTXO에 존재하는 잠금 스크립트를 해제하는 역할을 한다. 이로써 UTXO에 존재하는 총 4.5bit를 사용할 수 있다. 그럼 보내는 데이터를 입력하자 영희에게 보내는 출력값을 생성하고, 여기서 나에게로 보내는 출력값도 생성한다. 그리고 각각 소유주만 사용을 할 수 있도록 주소를 이용하여 잠금 스크립트를 넣는다. 여기서 두가지 궁금한 점이 보일 것이다. 첫째는 나에게로 1.25비트를 보내는 출력값과 두번째는 0.25bit가 모지란다는 점이다. 여기서 utxo의 특징이 나온다. 비트코인의 경우 잔액을 따로 기록하지 않고 utxo를 통해 해당 계좌의 잔액을 확인한다 했다. 그 뜻은 거래 후 남는 잔액을 나의 계좌로 보내는 utxo를 생성해야한다는 말이다. 그렇기 때문에 나에게 1.25비트를 전달하는 outpu도 생성한다. 두번째는 0.25비트에 대한 부분인데 이것은 쉽게 말해 거래 수수료가 된다. 해당 수수료는 채굴자에게 전달된다. Q. 전자서명은 input값과 관계없이 하나만 들어가는건가요?
  23. 멘트 이렇게 비트코인에서는 utxo를 이용하여 거래를 진행하기 때문에 거래를 쪼갤 수 없으며 계속해서 utxo를 생성하는 형태로 거래를 이어간다. 그리고 거래의 출력값과 입력값사이의 차액은 수수료가 되어 채굴자에게 돌아간다. Q. 개인키를 확인할 수 있는 방법이 전혀 없는건지?
  24. 멘트 이렇게 비트코인에서는 utxo를 이용하여 거래를 진행하기 때문에 거래를 쪼갤 수 없으며 계속해서 utxo를 생성하는 형태로 거래를 이어간다. 그리고 거래의 출력값과 입력값사이의 차액은 수수료가 되어 채굴자에게 돌아간다. Q. 개인키를 확인할 수 있는 방법이 전혀 없는건지?