포스트

[Week 1] 블록체인

블록체인의 정의/배경, 핵심 특성, 해시 함수, 공개키/개인키 암호화, 비트코인의 구조

[Week 1] 블록체인

블록체인

정의

  • 블록체인(BlockChain)은 관리 대상 데이터를 ‘블록(Block)’이라고 하는 소규모 데이터들이 P2P 방식을 기반으로 생성된 체인 형태의 연결고리 기반 분산 데이터 저장 환경에 저장하는 분산 컴퓨팅 기술 기반의 원장 관리 기술(DLT)이다.
  • 비즈니스 네트워크에서 거래를 기록하고 자산을 추적하는 과정을 용이하게 하는 변경 불가능한 공유 원장
  • 정보를 투명하게 공유할 수 있도록 하는 고급 데이터베이스 매커니즘
  • 누구라도 임의로 수정할 수 없고, 누구나 변경의 결과를 열람할 수 있다.
  • 지속적으로 변경되는 데이터를 모든 참여 노드에 기록한 변경 리스트로서 분산 노드의 운영자에 의한 임의 조작이 불가능하도록 고안되었다.



배경

  • 기존 데이터베이스 기술에서는 중앙 데이터베이스가 손상되면 양쪽 모두 피해를 입을 가능성이 있기에 탈중앙화 변조 방지 시스템을 만들어 이러한 문제를 완화한다.
  • 1991년 초, 스튜어트 하버(Stuart Haber)와 스캇 스토네타(W.Scott Stornetta)에 의해 제시되었다.
  • 2008년 사토시 나카모토라는 가명을 사용하는 개발자에 의해 대중들에게 알려지기 시작했다.
    • 비트코인 거래를 기록하기 위한 분산형 장부로서 개발되었다.



핵심 특성

탈중앙성

  • 데이터가 중앙 집중식 서버가 아닌 네트워크 참여자들에 의해 관리되는 것
  • 중앙 정부 또는 특정 발행 기관이 정해져있지 않다

투명성

  • 모든 거래 기록이 네트워크 참여자들에게 공개되어 있어 거래의 투명성이 보장된다
    • 데이터 조작이나 해킹의 위험을 줄여준다

불변성

  • 한 번 기록된 데이터는 변경이 불가능하다
  • 해시 함수를 사용해 각 블록이 이전 블록과 연결되어 있기 때문이다
  • 불변성을 가지기에 데이터의 신뢰성이 높다
  • 블록이 순차적으로 연결되면 일단 연결된 블록은 수정하거나 삭제할 수 없고 중간의 한 블록을 수정하거나 삭제하려면 모든 블록들의 정보를 바꿔야 한다



해시 함수

  • 임의 길이의 입력을 고정 길이의 출력으로 매핑하는 함수
    • 항상 동일한 길이의 해시값을 반환하여 데이터의 일관성과 효율적인 처리를 보장하는데 유용하다.
  • 데이터 검색, 저장, 암호화 등에 활용되며 블록체인에서 데이터 무결성 검사에 사용된다.
  • 큰 파일에서 중복되는 레코드를 찾을 수 있어 데이터베이스 검색이나 테이블 검색의 속도를 가속시킬 수 있다.
  • 암호학적 해시 함수와 비암호학적 해시 함수로 구분되기도 한다.
  • 역상 저항성(Preimage Resistance): 단방향성을 평가하는 척도 중 하나로, 특정한 값을 출력하는 입력값을 찾기 어려울수록 역상 저항성이 우수하다.
  • 블록체인에서 사용되는 해시 함수로는 SHA-256, Keccak-256, RIPEMD-160, Grøstl Algorithm 등이 있다.
  • 블록체인 해시 함수 예시
    • Keccak-256
      • Keccak 해시 함수의 변종
      • 256비트 해시값 생성
      • SHA-3으로 선택된 공개 해시 함수로, 이더리움(Ethereum)에서 주로 사용된다.
        • 스마트 계약 실행 및 트랜잭션 처리에 활용
    • RIPEMD-160
      • Race Integrity Primitves Evaluation Message Digest
      • RIPEMD 알고리즘을 기반으로 하여 개발되었으며 비트코인에서 주소를 생성할 때 공개키를 이 알고리즘으로 해시한다.

해시 충돌

  • 서로 다른 입력에 대해 동일한 해시값을 출력하기도 한다.
  • 좋은 해시함수는 충돌을 최소하해야 하며, 보안 측면에서 안전한 해시 함수는 매우 낮은 충돌 확률을 보장해야 한다.
  • 충돌 저항성(Collision Resistance): 충돌 가능성을 평가하는 척도로, 충돌 저항성이 우수할수록 어떤 해시 함수가 충돌하는 서로 다른 두 입력값을 찾기 어려움을 의미한다.
  • 제2 역상 저항성(Second Preimage Resistance): 해시 충돌이 일어나는 두 입력을 찾기 어려울수록 제2 역상 저항성이 우수하다.

SHA-256

  • Secure Hash Algorithm
  • 256비트 길이의 해시를 생성하는 함수
  • 아직까지 충돌 사례가 없다
  • 대한민국 인터넷뱅킹, 비트코인 작업 증명, Windows 업데이트 디지털 서명 등에 사용된다

무작위성

  • 해시 함수가 입력 데이터를 무작위적인 고유한 해시값으로 변환하는 속성
  • 데이터를 해시 테이블에 균등하게 분산시켜 충돌을 최소화하고 검색 속도를 향상시킨다.
  • 해시값을 변조하거나 예측하기 어렵게 만들어 보안을 강화한다.

블록 간 연결성

  • 각 블록은 이전 블록의 해시값을 포함하여 연결되기 때문에 블록체인의 무결성을 유지하고 변조를 방지한다.
    • 이전 블록의 해시값가 변경되면 이후 블록의 해시값도 달라지기 때문에 무결성을 유지할 수 있다.



공개키/개인키 암호화

  • 공개키 암호화
    • 데이터 보안의 중점을 둔다
    • 상대방이 보낸 공개키로 데이터를 암호화하여 전송한다.
    • 상대방은 자신의 개인키로 데이터를 복호화한다.
    • 공개키는 널리 배포될 수 있기 때문에 많은 사람들이 한 명의 개인키 소유자에게 데이터를 보낼 수 있다.
  • 개인키 암호화
    • 인증 과정에 중점을 둔다.
    • 개인키 소유자가 개인키로 데이터를 암호화하고 공개키와 함께 전달한다.
    • 상대방은 함께 전달 받은 공개키를 사용해 데이터를 복호화할 수 있다.
    • 공개키 제공자의 신원을 보장해주기 때문에 공인인증체계의 기본 바탕이 된다.



디지털 서명

  • Digital Signature, 디지털 서명은 암호화 알고리즘을 사용하여 데이터의 무결성과 인증을 확인하는 전자적인 서명 방식이다.
  • 일반적으로 개인키와 공개키를 쌍으로 사용하여 이루어진다.
  • 블록체인 네트워크에 거래를 전송할 때 디지털 서명을 통해 해당 거래가 디지털 자산의 소유자이고 자신에 의해 생성되었음을 보장할 수 있다.
  • 신뢰할 수 없는 환경(중앙화된 기관의 개입 없이)에서도 각 사용자 간 거래를 성사시킬 수 있다.
  • 양자 저항성(Quantum Resistance)을 갖춘 디지털 서명 방식은 미래 블록체인 네트워크에서 중요한 보안 요소로 자리 잡을 것이다.
  • 디지털 서명 알고리즘으로는 ECDSA, RSA, Schonorr 등이 있다.
  • 주요 디지털 서명 알고리즘
    • ECDSA(Elliptic Curve Digital Signature Algorithm)
      • 타원 곡선 암호학을 기반으로 하는 디지털 서명 알고리즘
      • 비트코인 및 다른 블록체인 네트워킁에서 널리 사용된다.
      • 기존 RSA 알고리즘보다 짧은 키 길이로 높은 보안을 제공하고 이를 통해 서명과 검증 과정에서의 연산 속도가 빨라진다.
    • RSA (Rivest-Shamir-Adleman)
      • 가장 오래된 비대칭 키 암호화 알고리즘 중 하나로 공개키 암호화와 디지털 서명에 널리 사용된다.
      • 큰 소수를 기반으로 한 알고리즘으로, 보안성이 높으나 타원 곡선 알고리즘에 비해 키 길이가 길어져 블록체인 네트워크에서는 상대적으로 덜 사용된다.
    • Schnorr
      • 비트코인에 도입된 최신 서명 방식 중 하나로, ECDSA와 유사하지만 더 빠르고 효율적이다.
      • 다중 서명을 더 효율적으로 처리하여 블록체인 네트워크의 트랜잭션 처리 속도를 높이고 보안을 강화할 수 있다.

동작 방식

  • 발신자는 자신의 개인키로 데이터를 서명하고 수신자는 발신자의 공개키로 서명을 검증하여 데이터의 신뢰성을 확보한다.
  • 해시 함수와 비대칭 키 암호화를 조합하여 작동한다.





비트코인의 구조

배경 지식

블록

  • 비트코인의 기본 단위
  • 해시 퍼즐을 풀어야만 만들어 낼 수 있다. (채굴)
  • 블록이 만들어지면 그 안에 트랜잭션이 담긴다.

트랜잭션

  • 비트코인의 이동 등 영수증과 같은 거래를 나타내는 데이터
  • 하나의 블록은 1MB까지 트랜잭션을 담을 수 있는데 하나의 트랜잭션이 약 0.3kb로, 한 블록에 약 3000개 정도의 거래를 담을 수 있다.
  • https://www.blockchain.com/explorer
    • 최근에 만들어진 블록에 몇 개의 데이터가 담겼는지 확인할 수 있다.

작업증명

  • PoW, Proof-of-work
  • 비트코인은 기본적으로 블록에 데이터를 기록하기 위해서 많은 양의 자원을 사용하도록 하는 작업 증명 방식을 택하고 있다.
  • 굉장히 비효율적이며 해시퍼즐을 사용하고 있다.
  • 모든 노드의 참여자가 화폐 거래내역을 분담하지 않고 각자 적는 비효율적인 방식을 사용하는데 심지어도 그 연산을 가장 빠르게 한 노드만이 그 권리를 수여받는다.

포크

  • 양자 컴퓨터 등으로 인해 기존 암호화 방식이 위협을 받을 때 이에 대응할 수 있도록 준비되어 있다.
  • 시스템의 규칙을 수정하는 것을 의미한다.
  • 하드 포크와 소프트 포크로 나뉜다.


내부 구조

  • 비트코인의 블록은 크게 블록 헤더와 바디로 나뉘어진다

블록 헤더

  • 블록을 만들 때 블록에 대한 정보를 저장하는 부분이다.
  • 블록의 데이터를 요약하고 있기 때문에 매우 중요하다.
  • 총 80바이트
    • 버전 정보 - 4바이트
    • 이전 블록의 헤더 해시 - 32바이트
    • 머클트리 루트 해시 - 32바이트
    • 타임 스탬프 - 4바이트
    • 타깃 난이도 비트 - 4바이트
    • 난스 - 4바이트

이전 블록해시

  • 이전 블록해시가 이전의 블록에 연결된 형태를 띈다.
  • 블록과 블록을 연결해주는 역할이다.

머클트리 루트해시

  • 1979년 랄프 머클에 의해 개발된 데이터 구조
  • 저장된 트랜잭션들을 둘뚤씩 짝지어 하나의 해시값을 도출해내는 과정이다.
  • 이진 트리이기 때문에 트랜잭션이 홀수 개면 마지막 트랜잭션을 한 번 더 반복한다.
  • 트랜잭션이 하나라도 변조되면 무조건 알아차릴 수 밖에 없다.

타임스탬프

  • 블록이 생성된 시간이 기록된다.
  • 해당 지역의 로컬 표준 시간대가 기록되기 때문에 지역에 따라 오차가 발생할 수 있다.

타깃 난이도 비트

  • 블록을 생성하기 위한 난이도 정보를 담고 있다.
  • 최초 개발자가 채굴한 블록이 Genesis Block인데 이 블록을 채굴하는데 필요한 해시함수 계산 요구량은 2^32회였다.
  • 2^32를 ‘1’로 환산하여 제네시스 블록을 채굴하는데 필요한 연산보다 128배 더 많은 계산이 필요하면 난이도는 ‘128’이다.

난스

  • 블록 헤더가 해시값을 도출하고 나면 끝에 숫자를 붙인다.
  • 해시값 뒤에 0이 붙은 형태가 되는데 이 수를 SHA-256 함수에 두 번 적용시킨다.
  • 목표 해시값보다 낮은 수가 나올 때까지 이 연산을 반복한다.
  • 목표 해시값은 방금 다룬 타깃 난이도 비트에 따라 결정되며 0부터 하나씩 증가시키는 방식으로 진행된다.
  • 결국 타깃 해시값보다 낮은 해시값이 나오면 블록헤더 해시값 뒤에 덧붙인 숫자가 난스가 되고 이 난스는 해당 블록의 답이 된다.

블록 바디

  • 비트코인의 거래 정보, 트랜잭션을 담는 부분이다.
  • 블록헤더의 해시값들도 근본적으로는 바디에 있는 트랜잭션을 기반으로 한다.
  • 때문에 실질적으로 블록은 검증된 거래 정보들의 집합이며 하나의 블록에 여러 거래 정보가 들어간다.
  • 거래 정보가 가득 차면 새로운 블록을 추가하여 다시 거래 정보를 넣는 방식으로 DB가 구축된다.
  • 블록체인 참여자(peer)들은 해시값을 통해 해당 데이터를 검증할 수 있다.


Reference
이 게시글은 저작권자의 CC BY 4.0 라이센스를 따릅니다.