전체 10개 중 제 8 모듈

비트코인은 어떻게 작동하나요

8.0 소개

비트코인은 "규제되지 않은" 것이 아니라, 정부 관료가 아닌 알고리즘에 의해 규제됩니다. 부패하지 않습니다.
Andreas M. Antonopoulos

이 모듈에서는 비트코인의 기술적인 측면을 좀 더 자세히 살펴봅니다. 프로토콜을 안전하게 지키는 암호화 기술과 거래가 어떻게 이루어지는지 쉽게 설명합니다. 일부 개념은 기술적으로 느껴질 수 있지만 걱정하지 마세요. 많은 사람들이 인터넷이 어떻게 작동하는지 완전히 이해하지 못해도 매일 사용하듯이 말이죠.

비트코인의 기술적인 측면을 배우는 것은 모두가 반드시 해야 하는 긴 여정은 아닙니다. 계속해서 배우는 것을 권장하지만, 이 모듈에서는 핵심적인 기본 사항에 집중합니다.

비트코인 네트워크는 노드라고 불리는 여러 컴퓨터에 저장된 거래의 공유 기록입니다. 이 기록은 비트코인 원장이라고 하며, 가명으로 이루어져 있습니다. 이름이나 나이와 같은 개인 정보는 포함하지 않고, 오직 거래 데이터와 비트코인 주소만 포함합니다. 이 원장은 블록체인이 시작된 이후의 모든 거래를 추적합니다.

비트코인 프로토콜의 메커니즘
  • 작업 증명(Proof-of-Work)
  • 암호화 타임스탬프
  • 난이도 조정
  • 피어 투 피어 네트워크 구조
  • 해시 함수와 머클 트리
  • 공개키 암호화
  • 블록 보상 반감기

8.1 암호화를 통한 보안

비트코인이 우리에게 주는 것은 확실한 약속입니다: 프로그램은 명확하게 지정된 대로 정확히 실행됩니다.
안드레아스 M. 안토노풀로스

공개/개인 키 암호화

암호화는 정보를 오직 올바른 사람만 읽을 수 있도록 비밀로 만드는 행위입니다.

  • 암호화는 정보를 암호화된 형태로 바꿔서, 올바른 키를 가진 사람만 읽을 수 있도록 하는 과정입니다.
  • 복호화는 암호화된 정보를 다시 읽을 수 있는 형태로 되돌리는 과정입니다.

전통적인 암호화 방식에서는, 두 사람이 비밀스럽게 소통하려면 먼저 같은 비밀 키를 공유해야 합니다. 이는 공유된 비밀번호와 비슷합니다. 한 사람이 이 키로 메시지를 암호화해서 보내고, 다른 사람이 같은 키로 복호화하여 읽습니다.

이 시스템의 문제점은 두 사람이 이미 비밀 키를 공유하고 있어야 한다는 것입니다. 만약 누군가가 그 키에 접근하게 되면, 가로챈 모든 메시지를 읽을 수 있습니다.

비트코인은 공개 키 암호화라는 다른 방식을 사용하여 이 문제를 해결합니다. 이 방식에서는 사용자가 미리 비밀 키를 공유할 필요가 없습니다.

공개/개인 키 암호화는 비밀 공유의 문제를 해결합니다. 비밀번호를 공유하는 대신, 각자는 두 개의 키를 가집니다: 공개 키와 개인 키.

  • 공개 키는 누구와도 공유할 수 있습니다.
  • 개인 키는 항상 비밀로 유지해야 합니다.

민수(John)가 아람(Arel)에게 무언가를 보내고 싶다면, 아람의 공개 키를 사용할 수 있습니다. 오직 아람만이 자신의 개인 키로 이를 열 수 있습니다. 누군가가 메시지를 가로채더라도, 개인 키 없이는 읽거나 사용할 수 없습니다.

비트코인에서는 이 시스템이 디지털 서명을 만드는 데 사용됩니다. 디지털 서명은 개인 키 소유자가 거래를 승인했다는 증거로, 문서에 서명하는 것과 비슷합니다. 이것이 비트코인 거래가 제3자를 신뢰하지 않고도 안전하고 검증 가능하게 만드는 원리입니다.

비트코인 거래는 한 주소에서 다른 주소로 비트코인의 소유권을 이전하는 것을 포함합니다.

암호화는 오직 실제 비트코인 소유자만이 자신의 돈을 다른 사람에게 보낼 수 있도록 권한을 보장하는 데 사용됩니다. 이는 그들의 자산이 악의적인 행위자로부터 보호받도록 합니다.

추가적인 보호 조치로, 각 비트코인 거래에는 자동으로 고유한 디지털 서명이 부여됩니다. 이 고유한 디지털 서명은 변조가 불가능한 기술에 의해 생성되어, 네트워크가 실제 비트코인 소유자가 보냈음을 검증할 수 있도록 돕습니다.

각 사용자는 두 개의 키를 가집니다: 개인 키, 이는 비밀로 유지되고, 공개 키다른 사람과 공유할 수 있습니다. 개인 키는 신원 확인과 소유권 증명의 역할을 하며, “이 주소는 내 것이고 내가 통제하고 있다”는 것을 입증합니다.

비트코인 거래가 작동하는 방식
  1. 거래 생성: 사용자는 수신자의 주소와 보낼 비트코인 양 등 거래 세부 정보를 지정하여 비트코인 거래를 시작합니다.
  2. 디지털 서명 생성: 송신자는 고유한 디지털 서명을 자신의 개인 키로 생성합니다. 이 서명은 거래의 진위성을 검증하는 고유한 코드입니다.
  3. 거래 전파: 서명된 거래는 비트코인 네트워크에 전파되어, 송신자가 수신자에게 비트코인 소유권을 이전하려는 의도를 알립니다.
  4. 네트워크에서의 검증: 비트코인 네트워크의 노드들은 거래를 수신하고, 수신자의 공개 키서명의 진위 여부를 확인하기 위해 거래의 서명을 검증합니다. 동시에, 그들은 송신자의 공개키를 사용하여 디지털 서명을(를) 검증합니다.
  5. 비트코인 네트워크에서의 확인: 검증이 성공하면, 거래는 원장에 추가되며, 이는 모든 거래의 안전하고 투명한 기록 역할을 합니다. 한 번 확인되면, 비트코인의 소유권은 공식적으로 송신자에서 수신자로 이전됩니다.

디지털 서명은(는) 송신자의 개인키로 생성되며, 해당 거래가 비트코인 소유자에 의해 승인되었음을 증명합니다. 비트코인 네트워크는 이 증명을 검증하고 거래를 기록할 수 있습니다.

해싱 설명

앞으로 나올 기술 용어와 수학적 개념에 겁먹지 마세요. 모두가 수학을 좋아하는 것은 아니지만, 조금만 노력하면 가장 복잡한 아이디어도 이해할 수 있다는 사실에 스스로 놀랄 수도 있습니다.

함수는 어떤 정보를 받아서 새로운 것으로 바꿔주는 기계와 같습니다. 함수에 주는 정보는 입력값입니다. 함수가 만들어내는 새로운 정보는 출력값입니다. 함수는 컴퓨터가 작업을 수행하고 문제를 해결하는 데 도움을 줍니다.

함수란 무엇인가요?

함수는 입력값을 받아 출력값을 만들어내는 일련의 명령어입니다. 요리 레시피처럼 생각할 수 있습니다. 정해진 재료로 순서대로 따라 하면 항상 예측 가능한 결과가 나옵니다.

비트코인에서는 함수가 거래를 처리하고 검증하는 데 사용됩니다. 누군가 비트코인을 보낼 때, 암호학적 함수가 거래의 유효성을 확인하고, 송신자가 충분한 잔고가 있는지 검증하며, 비트코인 원장의 잔고를 업데이트합니다. 검증되어 블록에 추가되면, 해당 거래는 블록체인에 영구적으로 기록됩니다.

일방향 함수란 무엇인가요?

일방향 함수는 한 방향으로는 쉽게 계산할 수 있지만, 반대로는 극도로 어렵거나 불가능한 특별한 종류의 함수입니다. 예를 들어, 재료를 믹서기에 넣어 스무디로 만드는 것은 쉽지만, 스무디를 다시 원래 재료로 분리하는 것은 불가능합니다.

비트코인 보안은 일방향 함수에 의존합니다. 이 함수들은 공개키와 개인키 암호화에 사용되어, 사람들이 공개키는 공유하면서도 개인키는 비밀로 유지할 수 있게 해줍니다. 공개키가 노출되어도, 그로부터 개인키를 알아내는 것은 불가능합니다. 이것이 비트코인 거래가 안전한 이유입니다.

해시 함수란 무엇인가요?

해시 함수는 비밀 코드 기계와 같습니다. 메시지를 받아서 코드로 변환합니다.

비트코인 거래에서 해싱이 작동하는 방식

비트코인에서는 모든 거래가 블록체인에 추가되기 전에 해시로 변환됩니다. 해시는 거래의 고유한 디지털 지문입니다. 누군가 거래의 아주 작은 부분이라도 바꾸려고 하면, 해시가 완전히 달라집니다. 이로 인해 네트워크는 변조를 쉽게 감지할 수 있습니다.

비트코인 보안에서 해싱의 역할

해싱은 거래를 쉽게 검증하고 조용히 수정하는 것을 불가능하게 만들어 비트코인 네트워크를 보호합니다. 각 거래마다 고유한 해시가 있기 때문에, 네트워크는 무언가 변경되었는지 빠르게 감지할 수 있습니다.

해시 함수는 데이터를 받아 고정된 길이의 숫자와 문자로 이루어진 해시로 변환합니다. 동일한 입력값은 항상 동일한 해시를 만들지만, 입력값이 아주 조금만 달라도 완전히 다른 결과가 나옵니다. 이 특성 덕분에 컴퓨터는 데이터가 변경되지 않았는지 확인할 수 있습니다.

해싱은(는) 디지털 데이터의 지문을 만드는 것과 같습니다. 디지털 메시지를 받아 고정된 길이의 코드로 변환하는 과정으로, 고유 식별자 역할을 합니다. 지문이 사람을 식별할 수 있듯이, 해시는 디지털 메시지를 식별할 수 있습니다.

출력값 또는 해시는 원래 정보의 길이가 얼마든 항상 같은 길이입니다. 비트코인은 SHA-256RIPEMD160이라는 몇 가지 특정 해시 함수를 사용합니다.

아래는 몇 가지 예시입니다:

  • 문자열의 SHA256 해시헬로 월드
    • b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9
  • 문자열의 SHA256 해시값 hello world.
    • 7ddb227315f423250fc67f3be69c544628dffe41752af91c50ae0a9c49faeb87
    • 입력값이 조금만 바뀌어도 출력값이 처음과 완전히 달라지는 것을 확인할 수 있습니다
  • 다운로드 가능한 iso 파일의 SHA256 해시값 Ubuntu 18.10
    • 7b9f670c749f797a0f7481d619ce8807edac052c97e1a0df3b130c95efae4765
    • 입력이 아주 큰 파일이어도 출력값은 항상 동일한 고정 길이입니다

해싱을 음악의 악보에 비유할 수도 있습니다. 악보가 곡의 본질을 담아내듯, 해시값도 데이터의 고유한 표현입니다.

음악가가 악보와 실제 연주를 비교해 연주가 정확한지 확인할 수 있듯이, 받은 데이터의 해시값과 원본 해시값을 비교하면 전송 중 데이터가 변조되었는지 알 수 있습니다.

음악 연주에서 약간만 달라져도 곡이 다르게 들리는 것처럼, 원본 데이터가 아주 조금만 바뀌어도 해시값이 완전히 달라집니다. 이 때문에 해싱은 비트코인 거래의 무결성과 진위성을 보장하는 강력한 도구가 됩니다.

해싱을 통해 공개키 를 인코딩하는 과정은 정보를 고정 길이의 읽을 수 없는 형식으로 변환하여 보안을 강화합니다. 비트코인은 SHA-256과 RIPEMD160 알고리즘을 사용해 공개 주소를 만듭니다. 그 결과물은 공개키 의 고유 식별자가 되어, 원장에 저장된 거래의 무결성과 보안을 보장하는 데 도움을 줍니다. 이런 방식으로 정보를 암호화하면, 인가받지 않은 사람이 데이터를 접근하거나 조작하기가 훨씬 더 어려워집니다.

해싱 함수의 특성
  • 결정론적: 같은 재료로 항상 같은 스무디가 만들어집니다. 마찬가지로, 같은 데이터는 항상 같은 해시값을 만듭니다.
  • 역상 저항성: 스무디만 가지고는 어떤 과일이 들어갔는지 알 수 없습니다. 마찬가지로, 해시값만 가지고는 원본 데이터를 알 수 없습니다.
  • 눈사태 효과: 재료를 아주 조금만 바꿔도 완전히 다른 스무디가 만들어집니다. 해싱에서도 데이터가 아주 조금만 바뀌어도 완전히 다른 해시값이 나옵니다.
  • 충돌 저항성: 완전히 같은 스무디를 만드는 서로 다른 재료 조합을 찾는 것은 극도로 어렵습니다. 마찬가지로, 서로 다른 두 데이터가 같은 해시값을 가질 가능성은 매우 낮습니다.
  • 빠른 검증: 스무디를 만드는 것은 빠르고, 결과물이 스무디인지 확인하는 것도 쉽습니다. 해시 함수도 계산이 빠르고 누구나 쉽게 검증할 수 있습니다.

활동: SHA 256 해시 생성하기

해싱이 어떻게 작동하는지 궁금하신가요? QR 코드를 스캔하면 원하는 단어나 문장, 입력값으로 즉시 SHA256 해시를 생성할 수 있습니다. 해시 함수는 디지털 지문과 같아서 한 번 해싱하면 되돌릴 수 없습니다. 직접 해보고 확인해 보세요!

8.2 UTXO 모델

UTXO란 무엇인가요?

낯선 이름에 겁먹지 마세요. UTXO는 비트코인의 조각으로, 지갑 속 지폐와 동전과 비슷하게 생각할 수 있습니다. 예를 들어, 10,000원짜리 지폐로 6,000원짜리 물건을 사면 4,000원을 거슬러 받게 됩니다. 비트코인도 이와 비슷하게 작동합니다.

여러분이 소유한 모든 비트코인은 다양한 UTXO로 구성되어 있습니다. 비트코인을 보낼 때, 지갑은 이 조각들 중 하나 또는 여러 개를 사용해 결제를 진행합니다.

사용한 조각이 보낸 금액보다 크면, 남은 금액은 새로운 UTXO 형태로 거슬러 받아 다시 여러분에게 돌아옵니다. 동시에, 받는 사람도 여러분이 보낸 비트코인을 나타내는 새로운 UTXO를 받게 됩니다.

지갑 잔액은 여러분이 관리하는 모든 UTXO의 총합일 뿐입니다.

다른 사람들이 여러분의 UTXO를 알지 못하게 해야 합니다. 누군가가 이를 알게 되면, 여러분의 거래를 추적할 수 있고 결국 여러분이 가진 돈의 총액까지 알 수 있기 때문입니다.

예시
  1. 지민은 현우에게 5 BTC를 보내고 싶어합니다.
  2. 지민의 지갑은 6 BTC에 해당하는 두 개의 UTXO를 사용합니다.
  3. 이 거래는 5 BTC를 현우에게 보내며, 현우의 지갑에 새로운 UTXO가 생성됩니다.
  4. 남은 0.99 BTC는 거스름돈으로 지민에게 돌아오고, 0.01 BTC는 거래 수수료로 사용됩니다.
  5. 거래가 승인되면, 비트코인의 장부에 추가되고 지민이 사용한 UTXO는 사용된 것으로 표시되어 다시 사용할 수 없습니다.
자료
How Bitcoin Works Under the Hood
“How Bitcoin Works under the Hood” 영상을 시청하세요

↑ 목차로 돌아가기