SKKRYPTO 1회차 - 비트코인 백서

명성호·2023년 3월 19일
0

백서

목록 보기
1/2

0. 용어

비트코인 백서를 읽으면서 처음 보는 용어들이 많아 이해하는 데 어려움을 겪어 미리 해당 개념들의 정의를 정리한다.
1. 해시 : 하나의 문자열을, 이를 상징하는 더 짧은 길이의 값이나 키로 변환하는 것이다.
2. 해시 함수 : 어떤 데이터를 입력해도 같은 길이의 결과를 도출하는 함수이다. 도출되는 결과가 중복될 가능성이 낮고, 결과 값으로 입력 값을 역으로 추정하기 어렵다. 이 때문에 해시 값을 비교하면 데이터의 변경이 발생했는지 파악할 수 있다.

  1. 블록 : 블록체인에서 식별, 암호화 및 거래 정보를 포함하는 기본 데이터 단위
  2. 노드 : 블록체인은 중앙 집중형 서버에 거래 기록을 보관, 관리하지 않고 거래에 참여하는 개개인의 서버들이 모여 네트워크를 유지 및 관리한다. 이 개개인의 서버, 즉 참여자를 노드라고 한다.
  3. 개인키 : 비밀 pin과 같은 개념, 개인키를 통해 공개키를 생성 (공개키에서 개인키를 알아내는 것은 불가능) , 개인키는 무작위로 추출한 단순 숫자로 구성되며 이 숫자가 정체성을 가지고 비트코인에 대한 소유권과 통제권을 가지게함.
  4. 공개키 : 은행의 계좌번호와 같은 개념, 비트코인을 전송받을 때 사용되며 해당 비트코인 거래 내역의 유효성을 확인하는 것을 가능하게 해줌
  5. 디지털 서명 : 첨단 기술로 보안이 강화된 전자서명 의 한 종류로서, 개인키 와 공개키 암호를 이용한 전자서명이다. 송신자의 개인 키를 사용하여 서명을 보내면 수신 측에서는 송신자의 공용키를 이용해 보내온 메시지를 해독한 다음 이를 보관하게 되고, 송신자는 디지털 서명을 통해 본인임을 인증, 수신인은 해당 메시지가 위, 변조 되지 않았음을 확인한다.
  6. 이중 지불 : 원본 파일에 저장된 가치를 지불한 뒤, 해당 파일을 복사하여 다른 사람에게 또 지불하는 것을 말한다. 예를 들어, A가 B에게 1,000원이라고 기록된 파일을 전송한 후 다시 해당 파일을 복사하여 C에게 또 1,000원을 전송하는 것을 말한다.
  7. sha-256 : SHA(Secure Hash Algorithm) 알고리즘의 한 종류로서 256비트로 구성되며 64자리 문자열을 반환한다. SHA-256 해시 함수는 어떤 길이의 값을 입력하더라도 256비트의 고정된 결과값을 출력한다. 일반적으로 입력값이 조금만 변동하여도 출력값이 완전히 달라지기 때문에 출력값을 토대로 입력값을 유추하는 것은 거의 불가능하다.
  8. 머클트리 : 머클트리는 블록의 거래 내용을 모두 담고 있는 것으로 해시 값들을 두 개씩 짝지어 트리 모양으로 나타내는 것이다. 최초의 데이터를 해시 값으로 변환한 후 노드 2개를 합쳐 해시 값으로 변환하는 과정을 하나가 남을 때까지 반복하는데, 마지막 남은 하나를 머클루트라고 한다. 머클루트는 머클트리의 모든 거래 내역을 요약한 데이터로 블록 헤더에 포함된다. 머클트리의 경우 용량이 매우 큰데, 용량이 적은 머클루트 값만 가지고 있으면 다양한 사람들이 거래의 유효성 검사를 할 수 있게 돼 블록체인 보안이 더 강력해질 수 있다.
  9. 풀 노드 : 블록체인의 모든 내역을 저장하는 노드
  10. 라이트 노드 : 블록체인 거래내역 중 일종의 핵심본만 저장하는 노드이다. 모든 블록 정보를 가지고 있지 않고, 필요한 부분만 저장한다는 특징이 있다

1. 서론

현재 거래 방식은 신뢰받는 제 3자 역할을 하는 금융기관에 의존되어 진행되고 있다. 이런 방식은 대부분의 거래에서 잘 작동하고 있지만 중재 비용, 신뢰 결핍, 비가역 거래 불가능, 제 3자의 필요 등과 같은 문제점이 발생한다.
암호학적 증명에 기반한 전자 지불 시스템의 구현을 통해 앞선 문제를 해결한다. 이 시스템은 거래 의사가 있는 두 당사자가 서로 직접 거래하게 해주는 전자 화폐 시스템이다. 또한 이 시스템은 P2P(peer to peer 개인 대 개인) 분산 타임스탬프 서버를 통해 이중 지불 문제에 대한 해결책을 제시한다.

2. 거래(트랜잭션)


해당 그림은 비트코인 백서에서 개인키를 사용하여 거래를 인증하는 방법과 이 코인을 디지털 서명 체인으로 정의하는 방법을 설명한 것이다.

  1. 소유자 1은 소유자 0으로부터 이전 거래 내역을 전달 받는다.
    (전달받은 내용은 소유자 0이 소유자 1의 공개키로 해시값을 암호화했다.)
  2. 소유자 1의 송금이 발생하고, 해당 내역을 소유자 2에게 전달한다.
  3. 해당 거래 내역은 소유자 1이 자신의 개인키로 전자서명하여 자신의 정보가 전송되었음을 인증한다.
  4. 이 과정을 반복한다.

그러나 이 거래 방식을 통해선 받는 사람이 체인에 포함된 소유자 중 한 명의 이중지불 여부를 검증할 수 없다.

일반적으로는 이중 지불 문제 해결을 위해 신뢰할 수 있는 중앙기관을 도입했다.

그러나 블록체인에선 중앙기관이 없기 때문에 가장 먼저 일어난 트랜잭션만을 인정하고, 그 이후의 시도에 대해서는 고려하지 않는 방법을 이용한다. 예를 들어 A가 B와 C 두 명과 거래를 하고, X라는 코인으로 거래한다고 했을 때 둘 중 먼저 받은 거래에 대해서만 인정된다는 것이다.

이 방법을 실현하기 위해 모든 트랜잭션을 인식해야한다. 즉 모든 트랜잭션이 공개적으로 알려져야 하고, 모든 트랜잭션들이 도착한 단일한 시간 순서에 참여자들이 모두 동의할 수 있는 시스템이 필요하다는 것이다.

3. 타임스탬프 서버

타임스탬프 서버는 거래가 발생한 시점에 도장을 찍어 거래의 발생 순서를 비교한다. 거래가 발생한 시간을 따진다기 보다는, 어떤 거래가 먼저 발생했는지 상대적인 전후관계를 비교한다.

4. 작업증명

작업증명은 P2P기반의 분산 타임스탬프 서버를 구현하기 위해 필요한 단계다.
작업증명은 sha-256과 같은 알고리즘을 통해 발생한 해시값을 여러개의 0비트로 시작한다. 블록의 해시에 필요한 0비트의 개수만큼 발견될 때 까지 임시값(nonce)를 증가시키는 방법으로 구현된다.

위의 이미지를 통해 굉장히 작은 변화로 발생하는 해시값이 천차만별임을 확인할 수 있다. 그러므로 필요한 0의 개수만큼 찾는 행위는 많은 시간이 들어가는데, 이 시간은 CPU 파워에 의해 결정된다.

작업증명은 다수결의 대표성 문제도 해결하기 위해 CPU당 1개의 투표권을 부여한다. 다수의 CPU 파워가 정직한 노드들에 의해 제어된다면, 정직한 체인이 가장 빠르게 길어지므로 다른 체인들을 압도할 수 있다.

이전의 블록을 수정하려면, 공격자는 그 블록과 그 뒤를 이은 모든 블록들의 작업증명을 다시 해서 정직한 노드들의 작업증명을 능가해야하기 때문에 체인이 길면 길수록 공격자가 성공할 확률이 지수적으로 감소한다.

5. 네트워크

네트워크 실행 단계
1) 신규 트랜잭션은 모든 노트에 브로드캐스트된다(알려진다).
2) 각 노드는 새로운 트랜잭션을 모아 블록에 넣음
3) 각 노드는 새로운 블록을 생성하기 위해 어려운 작업증명을 함
4) 작업증명에 성공한 노드는 모든 노드에 블록을 뿌림
5) 노드는 새로 받은 블록의 모든 트랜잭션이 유효하고 이미 소비되지 않은 경우에만 수락함
6) 노드들은 수락한 블록의 해시값을 이전 해시값으로 사용해서 다음 블록을 생성함으로써 승인 의사를 표시함.

즉 개별거래가 알려지고, 블록에 새로운 거래를 수집해서 작업증명을 하고, 조건에 맞을 때 블록을 승인해서 다음 블록을 생성한다는 뜻이다.

이 과정에서 가장 긴 체인을 가장 올바른 것으로 간주하고 확장해 나간다. 또한 노드가 서로 다른 블록을 동시에 브로드캐스트하게 된다면 노드들은 서로 다른 블록을 먼저 받을 수도 있다.

6. 인센티브

코인은 네트워크를 지지하는 노드들에 대한 인센티브를 지급하며, 중앙기관이 없기 때문에 코인을 발행해서 유통시키는 방법을 제공한다.

인센티브는 코인과 거래 수수료로 지급될 수 있다. 채굴되는 코인의 양이 고정된 값으로 나오는 것이 아니라 계속 줄어들기 때문에 채굴 보상이 0이 되면 채굴을 해도 보상이 안 나오기 때문에 그때는 완전히 거래 수수료로 보상을 제공한다.

만일 욕심 많은 공격자가 모든 다른 정직한 노드보다 더 많은 CPU 파워를 모을 수 있다면(51%) 그 공격자는 지불한 것을 되돌리거나, 새로운 가짜 코인을 발행해서 사람들을 속일 수 있다. 그러나 애초에 51%에 해당하는 CPU 파워를 모을 수 없고, 모은다하더라도 자신이 소유권을 가진 코인에 대해서만 조작이 가능하므로 공격을 당했다는 사실은 자신의 코인의 가치를 떨어뜨리므로 공격자가 51%의 CPU 파워를 얻기 위해 지출보다 이익이 크기 힘들다.

7. 디스크 공간 회수

디스크 공간 절약을 하면서 블록의 해시가 깨지는 것을 방지하기 위해 머클트리 구조를 사용한다.

머클트리 구조를 통해 블록 헤더엔 모든 거래 기록 대신 루트해시만 들어간다. 그리고 루트 해시만 헤더 안에 있으면 루트해시를 구하기 위해 필요했던 이전 데이터들은 필요 없다.

8. 간소화한 결제 검증


1. 새롭게 생성된 거래가 사용하고자 하는 이전 거래(그림의 Tx3)의 정보를 받아온다.
2. 풀 노드로부터 이전 거래가 포함된 블록의 머클루트 해시를 구하는데 필요한 머클트리의 해시들(Hash2, Hash23, Hash01)을 받아온다.
3. 이전 거래의 해시를 받아 온 해시들과 해싱을 반복하여 머클루트 해시까지 도달한다.
4. (풀 노드의 도움으로) 계산한 머클루트의 해시와, (라이트 노드가 보유하고 있는) 블록 헤더에 있는 머클루트 해시를 비교해서 일치하면 검증을 끝낸다.

즉 가장 긴 자격증명 체인을 가지고 있다면 해당 거래에 대한 타임스탬프가 찍힌 블록에 연결한 머클 분기를 얻기만 한다면 이를 통해 거래가 이루어졌음을 확인할 수 있다.

9. 가치 합치기와 나누기


input

  • 이전의 더 큰 트랜잭션으로부터의 단일한 input
  • 작은 금액들을 합친 복수의 input

output

  • 지급을 위한 output
  • 송금인에게 돌려줄 output

거래에 사용된 금액의 출처나 정보가 중요한 것이 아니다. 거래의 결과와 기록만 중요한 것이다.

10. 프라이버시


정보의 차단이 어디서 일어나는지가 큰 차이점이다. 전통적 모델에서는 거래상대와 공중의 정보를 차단해 대중들에게 공개하지 않음으로서 프라이버시를 지킨다.
그러나 비트코인 모델에서는 거래 기록이 공중에게 공개되지만 신원과 거래 정보와의 차단 즉, 공개키를 이용해서 거래를 수행해 프라이버시를 보장한다.
다시 말해 어떤 거래가 일어났는지는 알 수 있지만 그 거래를 누가 했는지는 알 수 없다는 것이다.

11. 계산

이 부분에선 여러 수학적 개념과 프로그래밍 과정이 나타나지만 너무 복잡해서 모두 이해하지는 못했다. 그래서 결과만 이해를 했는데 결과는 정상적인 체인보다 공격자가 더 긴 체인을 만든다면 공격은 가능하지만, 이게 가능하게 되더라도 쓰인 노력과 돈이 더 많이 들어간다는 것이다. 그리고 블록이 늘어나면 늘어날수록 공격자가 이득을 볼 가능성이 지수적으로 감소한다. 그러므로 공격자의 공격 시도에 대한 동기 자체를 줄일 수 있다.

profile
SKKRYPTO

0개의 댓글