ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 비트코인(블록체인)은 왜 개인키로 암호화하고 공개키로 복호화하는것인가?
    블록체인 2024. 9. 19. 14:03
    728x90
    반응형

    왜 개인키로 암호화하고 공개키로 복호화할까?

    1. 개인키와 공개키의 역할:
      • 개인키(Private Key): 거래를 생성하거나 서명할 때 사용됩니다. 개인키는 절대 타인에게 공개되지 않고, 거래 소유자가 본인임을 증명하는 데 사용됩니다.
      • 공개키(Public Key): 개인키로 암호화된 데이터를 복호화하거나, 거래 검증 시 사용됩니다. 누구나 접근 가능한 공개된 정보로, 이를 통해 거래의 유효성을 확인할 수 있습니다.
    2. 암호화 과정:
      • 사용자가 거래를 생성할 때 개인키로 서명하여 암호화합니다.
      • 이 암호화된 정보는 공개키를 통해 복호화되어, 다른 노드들이 해당 거래가 올바른지 확인할 수 있습니다.
      • 이렇게 하면 거래 소유자의 신원이 보호되며, 거래의 무결성 또한 보장됩니다.

    비대칭 암호화 방식을 사용했을 때의 이점

    1. 보안성 강화:
      • 개인키는 절대적으로 비밀이기 때문에, 오직 개인키를 소유한 사람만이 거래를 생성하거나 서명할 수 있습니다. 이로 인해 타인이 거래를 위조하거나 조작하는 것을 방지합니다.
    2. 무결성 보장:
      • 공개키로 검증할 수 있기 때문에, 네트워크 상의 다른 노드들은 해당 거래가 진짜인지, 즉 원래의 개인키 소유자에 의해 서명된 것인지 확인할 수 있습니다. 이렇게 하면 거래 내역이 조작되지 않았음을 확신할 수 있습니다.
    3. 투명성과 익명성의 균형:
      • 공개키는 누구나 접근 가능하지만, 개인키 소유자는 익명성을 유지할 수 있습니다. 이는 거래의 투명성을 보장하면서도 개인의 프라이버시를 보호하는 효과를 줍니다.
    4. 탈중앙화된 신뢰:
      • 중앙 기관 없이도 공개키와 개인키만으로 거래의 진위를 확인할 수 있어, 탈중앙화된 신뢰 모델을 구축하는 데 큰 기여를 합니다.

    따라서 블록체인 거래는 개인키와 공개키를 사용하여 안전하고 신뢰성 높은 거래 환경을 제공할 수 있습니다.

     

    블록체인의 개인키와 공개키 사용 방식

    1. 개인키로 서명:
      • 사용자는 트랜잭션(거래)을 생성한 후, 이 트랜잭션 데이터에 대해 개인키로 서명을 합니다.
      • 이 서명은 해당 거래가 사용자의 소유임을 증명하는 역할을 합니다. 즉, 개인키를 알고 있는 사람만이 그 거래를 생성할 수 있다는 것을 보장합니다.
      • 하지만 개인키로 데이터를 직접 암호화하지는 않습니다.
    2. 공개키로 검증:
      • 블록체인 네트워크에서 다른 노드들은 서명된 트랜잭션을 검증하기 위해 사용자의 공개키를 사용합니다.
      • 공개키를 통해 서명이 올바른지, 즉 개인키로 서명된 것이 맞는지 검증할 수 있습니다.
      • 공개키는 거래 상대방이나 네트워크 상에서 자유롭게 공유됩니다, 그러나 개인키는 절대 공개되지 않습니다.

    블록체인에서의 실제 흐름

    • 사용자는 자신의 개인키로 트랜잭션에 서명하여 네트워크에 제출합니다.
    • 트랜잭션에는 해당 사용자의 공개키도 포함되어 네트워크에 전파됩니다.
    • 노드들은 공개키를 사용해 트랜잭션이 올바르게 서명되었는지, 즉 개인키 소유자가 서명했는지 검증합니다.
    • 개인키는 절대로 네트워크에 공유되지 않으며, 공개키는 거래 검증 과정에서 누구나 볼 수 있습니다.

    정리하자면:

    • 개인키로 데이터를 암호화한 뒤 공개키를 따로 보내는 것이 아닙니다.
    • 사용자는 개인키로 서명하고, 공개키로 서명 검증이 이루어집니다.
    • 공개키는 트랜잭션 검증을 위해 네트워크에 전파되며, 개인키는 절대로 공유되지 않습니다.

     

    비트코인 거래 과정 상세 설명:

    1. 첫 번째 거래 (Transaction 1):
      • 소유자 0이 비트코인을 소유자 1에게 전송합니다.
      • 소유자 0의 거래가 생성되며, 소유자 1의 공개키가 포함됩니다.
      • 거래 내용은 해시(Hash) 처리가 되며, 그 결과가 거래의 요약본으로 사용됩니다.
      • 소유자 0은 자신의 개인키를 사용하여 거래에 서명합니다.
      • 이 서명된 거래는 소유자 1에게 전달됩니다.
    2. 두 번째 거래 (Transaction 2):
      • 소유자 1이 이 비트코인을 다시 소유자 2에게 전송하려고 합니다.
      • 소유자 1의 공개키와 서명된 거래 정보가 새로운 거래에 포함됩니다.
      • 소유자 1이 개인키를 사용하여 서명하고, 이 거래 역시 해시가 되어 요약본이 생성됩니다.
      • 서명된 거래는 소유자 2에게 전달됩니다.
      • 소유자 2는 이 거래를 검증하기 위해 소유자 1의 공개키를 사용하여 서명을 확인하고, 거래의 유효성을 보장합니다.
    3. 세 번째 거래 (Transaction 3):
      • 소유자 2가 소유자 3에게 비트코인을 전송하려고 합니다.
      • 소유자 2는 소유자 3의 공개키를 이용해 거래를 생성하고, 자신의 개인키로 서명합니다.
      • 소유자 3은 소유자 2의 서명을 검증하기 위해 소유자 2의 공개키를 사용합니다.
      • 검증이 완료되면 거래가 완료됩니다.

    실제 거래 예시:

    1. 예시 시나리오:
      • A1 BTCB에게 보내고, 이후 BC에게 같은 비트코인을 보냅니다.
    2. A에서 B로의 거래:
      • A가 1 BTC를 전송하려는 경우, A는 B의 공개키를 사용하여 거래를 생성합니다.
      • A는 자신의 개인키로 이 거래에 서명하고, 네트워크에 이 서명된 거래를 전송합니다.
      • 네트워크 상의 노드들은 A의 서명을 검증한 후, 거래를 블록체인에 기록합니다.
    3. B에서 C로의 거래:
      • B가 받은 1 BTC를 C에게 전송하려면, B는 C의 공개키를 사용하여 거래를 생성합니다.
      • B는 자신의 개인키로 서명하고, 이 서명된 거래는 네트워크를 통해 검증된 후 블록체인에 기록됩니다.
      • C는 B의 서명을 검증하여 이 거래가 진짜임을 확인합니다.

    이 과정에서 모든 거래는 각 소유자의 개인키와 공개키를 이용하여 서명되고 검증되며, 이러한 방식으로 비트코인의 소유권이 이전됩니다.

     

     

    비트코인 거래 실제 예시를 토대로 시나리오 작성

    시나리오:

    • BA에게서 0.5 BTC, D에게서 0.5 BTC를 각각 받았습니다.
    • 그래서 B의 총 잔액은 1 BTC입니다. 하지만 이 잔액은 두 개의 UTXO로 나누어져 있습니다:
      • 0.5 BTC (A에게 받은 것)
      • 0.5 BTC (D에게 받은 것)

    이제 BC에게 1 BTC를 보내고 싶어 한다고 가정해보겠습니다.

    1. 입력과 UTXO 검증:

    • B는 C에게 1 BTC를 보내기 위해 두 개의 입력이 필요합니다.
      • 첫 번째 입력: A에게서 받은 0.5 BTC (해당 UTXO는 A로부터 발생함)
      • 두 번째 입력: D에게서 받은 0.5 BTC (해당 UTXO는 D로부터 발생함)
    • 이 두 개의 UTXO를 사용해 B는 C에게 1 BTC를 보내려고 합니다.

    2. 거래 생성 및 서명:

    • B는 거래를 생성하며, 이 거래는 두 개의 입력을 포함하게 됩니다:
      • 첫 번째 입력: A로부터 받은 0.5 BTC의 UTXO.
      • 두 번째 입력: D로부터 받은 0.5 BTC의 UTXO.
    • 각각의 입력은 B의 서명으로 확인되어야 합니다. 이때 중요한 점은 B가 자신의 개인키를 사용해 이 두 개의 입력에 대해 서명한다는 점입니다.
    • A나 D의 공개키로 직접적으로 검증하는 것은 아닙니다. 대신, A와 D가 각각 B에게 전달한 UTXO가 유효한지 검증하려면, 네트워크 노드가 B의 서명을 확인하고, 블록체인에서 A와 D의 거래 기록을 확인합니다.

    3. 출력:

    • B는 C에게 1 BTC를 보낼 수 있습니다. 출력(output)은 1 BTC가 될 것입니다. 하지만 보통 비트코인 거래에서는 전체 입력을 다 써야 하기 때문에, 1 BTC를 보내고 나면 거스름돈이 발생할 수 있습니다.
    • 예를 들어, B가 1 BTC 중 일부를 C에게 보내고 나머지를 다시 자신에게 "거스름돈"으로 돌려받는 방식으로 거래가 구성될 수 있습니다.

    4. 검증:

    • 거래가 생성된 후, 네트워크 상의 노드들이 B가 서명한 거래의 유효성을 검증합니다.
    • 각 입력(즉, A와 D에게서 받은 0.5 BTC UTXO)이 실제로 B의 것인지 확인하기 위해, 네트워크는 B가 해당 입력들에 대한 서명을 올바르게 했는지 검증합니다.
    • 이때, A와 D의 공개키는 B가 받은 UTXO가 실제로 유효한지 확인할 때 블록체인에서 사용됩니다. 그러나 B는 자신의 개인키로 서명하여 이 거래를 완료하게 됩니다.

    결론:

    • B가 C에게 1 BTC를 보내는 과정에서 A와 D의 공개키는 직접적으로 사용되지 않고, B 자신의 개인키로 서명한 후 네트워크에서 검증됩니다.
    • 네트워크는 블록체인에 기록된 이전 거래(즉, A와 D로부터 받은 UTXO)를 확인해 해당 UTXO가 유효한지 검증하고, B의 서명을 확인합니다.

     

    1. B가 A와 D에게서 받은 UTXO의 유효성 검증:

    • B가 트랜잭션을 만들 때, A와 D로부터 받은 UTXO(사용되지 않은 비트코인 출력)을 입력으로 사용합니다.
    • 각 노드는 A와 D의 공개키를 이용해 B가 받은 해당 UTXO가 실제로 유효한 것인지 검증합니다.
      • 예를 들어, A가 0.5 BTC를 B에게 전송했다는 트랜잭션은 이미 블록체인에 기록되어 있습니다.
      • 이 트랜잭션은 A의 개인키로 서명되었고, A의 공개키를 사용해 서명이 유효한지 이미 검증된 상태입니다.
      • 따라서 네트워크 노드들은 A와 D가 B에게 보낸 비트코인이 블록체인에서 유효하게 기록된 출처임을 확인하기 위해, A와 D의 공개키를 사용해 그들의 트랜잭션이 유효한지를 다시 확인합니다.

    2. B가 서명한 트랜잭션의 유효성 검증:

    • B는 자신의 개인키로 이번 트랜잭션(즉, C에게 1 BTC를 보내는 트랜잭션)에 대해 서명을 합니다.
    • 서명된 트랜잭션은 노드들에게 전송되고, 각 노드는 이 서명을 검증하여 B가 이 트랜잭션을 실제로 만든 주체인지 확인합니다.
    • 이때 노드들은 B의 공개키를 사용하여 B가 해당 트랜잭션에 대해 올바르게 서명했는지 확인합니다.
      • B가 C에게 보내는 트랜잭션은 B의 개인키로 암호화되었고, 노드들은 B의 공개키를 사용하여 B의 서명이 맞는지 검증합니다.
      • 이 검증 과정은 B가 실제로 해당 비트코인의 소유자인지, 그리고 트랜잭션이 조작되지 않았는지 확인하는 과정입니다.

    결론적으로:

    • 첫 번째 검증: B가 사용하는 UTXO가 유효한지를 확인하는 과정입니다. 여기서 A와 D의 공개키를 사용해 B가 받은 UTXO가 블록체인 상에서 유효하게 기록된 것임을 확인합니다.
    • 두 번째 검증: B가 자신의 개인키로 서명한 트랜잭션을 검증하는 과정입니다. 여기서 B의 공개키를 사용하여 B가 서명한 트랜잭션이 올바른지 확인합니다.

    이러한 검증 절차는 분산된 네트워크에서 이루어지며, 이를 통해 비트코인 거래의 무결성과 신뢰성을 보장하게 됩니다.

    728x90
    반응형
Designed by Tistory.