본문 바로가기
  • GDG on campus Ewha Tech Blog
3-2기 스터디/블록체인

[블록체인 2주차] CH.02 암호기술 ~ CH.04 거래

by 4sc 2022. 5. 9.

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
    1. 송신할 데이터의 해시값 생성
    2. 출력된 해시값을 송신자의 비밀키로 암호화하여 서명 생성
    3. 데이터와 서명을 함께 수신자에게 송신
  • Verification
    1. 전달받은 데이터를 송신자와 같은 해시 함수로 해시값 구한다
    2. 전달받은 서명(Signature)을 송신자의 공개키로 복호화
    3. 둘이 비교해서 일치하면 검증 완료
  • ECDSA : 타원곡선 암호를 사용하는 디지털 서명 방식
    • 비트코인 네트워크에서는 거래 서명시 사용

CH.03 화폐로 사용이 가능한 이유

소유자를 특정하는 열쇠와 자물쇠

  • 비트코인을 다른 사람에게 이전하는 과정(소유자 변경 과정) : A씨가 자신의 열쇠자물쇠를 열어서 새로운 소유자의 열쇠로만 열 수 있는 자물쇠를 거는 과정
    • 해당 과정 시 분산장부에도 소유권 이동 기재
    • 열쇠: 비밀키
      • 참여자마다 랜덤 숫자로 생성됨
      • 대개 전용 소프트웨어를 사용하여 자동 생성
      • 분실 시 비트코인 영구 사용 불가
    • 자물쇠: 공개키

송금 대상은 ‘어드레스’

  • 송금 대상: 어드레스
    • 일반적으로 공개키의 해시값으로 생성
  • 어드레스 생성 과정
    1. SHA-256을 사용하여 공개키의 해시값 생성 (A)
    2. A에 대해 다시 RIPEMD-160으로 해시값 생성 (B)
      1. B: 공개키 해시
      2. SHA-256 + RIPEMD-160 : HASH160
    3. B를 Base58Check로 인코딩

Base58Check 인코딩

  • Base58Check 인코딩: 어드레스에 대한 입력 실수를 감지하기 위해 Base58에 체크섬을 내장한 것
    • 어드레스 외에도 비밀키 등에 사용

키를 관리하는 ‘전자 지갑’

  • 좁은 의미: 비밀키 관리 및 보관
  • 넓은 의미: 송금, 잔액 확인, 키와 어드레스 관리 등의 기능을 제공하는 애플리케이션

전자 지갑의 종류

  • 전자 지갑에는 핫 월렛, 페이퍼 월렛, 하드웨어 월렛이 존재한다.

CH.04 거래

거래의 생애주기

생성 → 서명 → 전파 → 블록 내 저장

  • 생성되어 서명된 거래는 비트코인 네트워크 상 각 노드에 전파된다.

전파

  • P2P 노드: 네트워크 상의 전체 노드와 연결된 것이 아니다. ⇒ 어떤 노드에서 모든 노드로 한 번에 전파가 이루어지지는 않는다.
    • 각각의 노드는 인접 노드에만 전파하지만, 다른 노드에 전달되기만 하면 그 노드가 다시 그 인접 노드로 전파하므로 적어도 하나의 노드에는 전파해야 함.
  • 거래를 전달받은 노드는 체크리스트를 기반으로 거래가 특정한 조건을 만족하는지 검증한 다음,
    • 조건을 만족한다면 거래를 전달한 노드에 성공 메시지 전송 & 이를 다른 노드에도 전파
    • 조건 만족 X, 거래를 전달한 노드에 파기 메시지 전송 & 다른 노드에는 전파 X
    ⇒ 조건을 만족하지 못하는 거래는 다른 노드로 전파되지 못하므로, 유효하지 않은 거래를 대량으로 전송하여 네트워크 전체를 마비시키는 DoS (서비스 거부) 공격은 불가능

블록 내 저장

  • 거래는 채굴자에 의해 검증받은 후 블록에 저장
  • 블록도 다른 노드로 전파되어 각 노드의 분산장부에 기재
  • 이 시점에서 소유권 변경 & 새로운 소유자가 이 거래를 통해 이동한 비트코인 사용 가능

거래의 개요

  • 비트코인의 단위: 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 → 채굴자 몫

댓글