CH.02 블록체인을 이해하는 암호 기술
해시함수
- 해시함수: 입력값에 대해 원래의 입력값과 전혀 다른 값(해시값)을 출력하는 함수
- 특징
- 입력값이 같으면 해시값도 반드시 같다
- 해시값으로부터 원래 값을 추정하는 것은 실질적으로 어려워 불가역성을 가진다. (일방향함수)
- 입력값이 조금만 변해도 전혀 다른 해시값이 된다
- 출력값은 입력값의 길이와 상관없이 고정된 길이를 가진다.
- 예: 출력값이 32바이트인 해시 함수: 입력값이 1바이트이든 100바이트이든 32바이트의 해시값 출력
- SHA256: 출력값이 256bit로 일정
- 입력값이 다르면 ‘원칙적’으로 출력값도 다르다.
- Collision Free
- 충돌: 입력값이 다른데 출력값이 동일한 경우
- ‘원칙적’: 가끔 충돌이 일어나는 경우도 발생. 2017년에 SHA-1이라는 해시함수에서 충돌 발견
- 비트코인 네트워크에서 사용되는 해시함수: SHA-256, RIPEMD-160, HASH160
SHA-256 (Secure Hash Algorithm 256-bit)
- SHA-2 규격의 일부
- SHA-224, SHA-384, SHA-512 등
- 이더리움에는 SHA-3도 사용
- 256비트 (32바이트) 길이의 해시값 생성 - 64글자
RIPEMD-160
- RIPEMD의 최초 버전에서 해시값이 128비트 → 160비트(20바이트)로 확장하고 개량한 것
- SHA-256보다는 짧은 해시값 생성
- 비트코인 네트워크에서는 공개키를 SHA-256으로 생성, 이를 다시 RIPEMD-160으로 해시값을 만들어 SHA-256보다 짧은 어드레스 생성
HASH160
- SHA-256으로 생성된 해시값을 한 번 더 RIPEMD-160으로 해싱한 것
공개키 암호
- 비밀키 - 공개키, 공개키는 모두에게 공개, 비밀키는 개인만 소장
- 공개키로 암호화 시 비밀키로만 복원 가능
- 공개키로 비밀키를 만들거나 추정하는 것은 이론상 불가능
- 공개키 ↔ 공통키
- 공통키: 암호화 및 복원을 하나의 키
타원곡선 암호
- 공개키 암호의 한 종류
- 비트코인: NIST 가 정의한 secp256k1이라는 곡선 사용
- 곱셈
- K: 공개키, k: 비밀키
- k, G로 K 계산 가능
- K, G로 k 계산 불가능
- K = k * G
디지털 서명
- 디지털 서명: 공개키 암호를 응용해 전송받은 데이터의 송신자를 검증하거나 전송 과정에서 변조되지 않았는지를 확인하는 과정
- Signing
- 송신할 데이터의 해시값 생성
- 출력된 해시값을 송신자의 비밀키로 암호화하여 서명 생성
- 데이터와 서명을 함께 수신자에게 송신
- Verification
- 전달받은 데이터를 송신자와 같은 해시 함수로 해시값 구한다
- 전달받은 서명(Signature)을 송신자의 공개키로 복호화
- 둘이 비교해서 일치하면 검증 완료
- ECDSA : 타원곡선 암호를 사용하는 디지털 서명 방식
- 비트코인 네트워크에서는 거래 서명시 사용
CH.03 화폐로 사용이 가능한 이유
소유자를 특정하는 열쇠와 자물쇠
- 비트코인을 다른 사람에게 이전하는 과정(소유자 변경 과정) : A씨가 자신의 열쇠로 자물쇠를 열어서 새로운 소유자의 열쇠로만 열 수 있는 자물쇠를 거는 과정
- 해당 과정 시 분산장부에도 소유권 이동 기재
- 열쇠: 비밀키
- 참여자마다 랜덤 숫자로 생성됨
- 대개 전용 소프트웨어를 사용하여 자동 생성
- 분실 시 비트코인 영구 사용 불가
- 자물쇠: 공개키
송금 대상은 ‘어드레스’
- 송금 대상: 어드레스
- 일반적으로 공개키의 해시값으로 생성
- 어드레스 생성 과정
- SHA-256을 사용하여 공개키의 해시값 생성 (A)
- A에 대해 다시 RIPEMD-160으로 해시값 생성 (B)
- B: 공개키 해시
- SHA-256 + RIPEMD-160 : HASH160
- B를 Base58Check로 인코딩
Base58Check 인코딩
- Base58Check 인코딩: 어드레스에 대한 입력 실수를 감지하기 위해 Base58에 체크섬을 내장한 것
- 어드레스 외에도 비밀키 등에 사용
키를 관리하는 ‘전자 지갑’
- 좁은 의미: 비밀키 관리 및 보관
- 넓은 의미: 송금, 잔액 확인, 키와 어드레스 관리 등의 기능을 제공하는 애플리케이션
전자 지갑의 종류
- 전자 지갑에는 핫 월렛, 페이퍼 월렛, 하드웨어 월렛이 존재한다.
CH.04 거래
거래의 생애주기
생성 → 서명 → 전파 → 블록 내 저장
- 생성되어 서명된 거래는 비트코인 네트워크 상 각 노드에 전파된다.
전파
- P2P 노드: 네트워크 상의 전체 노드와 연결된 것이 아니다. ⇒ 어떤 노드에서 모든 노드로 한 번에 전파가 이루어지지는 않는다.
- 각각의 노드는 인접 노드에만 전파하지만, 다른 노드에 전달되기만 하면 그 노드가 다시 그 인접 노드로 전파하므로 적어도 하나의 노드에는 전파해야 함.
- 거래를 전달받은 노드는 체크리스트를 기반으로 거래가 특정한 조건을 만족하는지 검증한 다음,
- 조건을 만족한다면 거래를 전달한 노드에 성공 메시지 전송 & 이를 다른 노드에도 전파
- 조건 만족 X, 거래를 전달한 노드에 파기 메시지 전송 & 다른 노드에는 전파 X
블록 내 저장
- 거래는 채굴자에 의해 검증받은 후 블록에 저장
- 블록도 다른 노드로 전파되어 각 노드의 분산장부에 기재
- 이 시점에서 소유권 변경 & 새로운 소유자가 이 거래를 통해 이동한 비트코인 사용 가능
거래의 개요
- 비트코인의 단위: BTC & satoshi
- 최소 단위: satoshi
- 1 satoshi = 0.00000001 BTC
- 거래 : 입력 & 출력
- 입력: 송금하기 전의 소유권
- 과거 거래의 출력. 송금 대사으이 소유권을 나타낸다.
- 출력: 송금 후의 소유권
- 입력: 송금하기 전의 소유권
- 송금액: 송금에 필요한 수수료 포함
- 수수료: 채굴자 소유
- 1개의 출력을 입력으로 삼는 경우
- 앨리스가 1.0 BTC를 소유하고 있고, 밥에게 0.3 BTC를 송금하려한다면
- 입력
- FROM 거래 A: #0
- 앨리스 1.0 BTC
- 출력
- 출력 #0: 밥 0.3 BTC
- 출력 #1: 앨리스 0.6995 BTC → 거스름돈 형태임
- 수수료: 0.0005 BTC → 채굴자 몫
- 입력
- 앨리스가 1.0 BTC를 소유하고 있고, 밥에게 0.3 BTC를 송금하려한다면
'3-2기 스터디 > 블록체인' 카테고리의 다른 글
[블록체인 1주차] CH.01 블록체인의 큰 그림 (0) | 2022.05.08 |
---|
댓글