블록 체인 주소 | [불백] 블록체인 백과사전 100 키워드 #8회 : 에어드랍 / 주소 / 공개키 / 개인키 15 개의 자세한 답변

당신은 주제를 찾고 있습니까 “블록 체인 주소 – [불백] 블록체인 백과사전 100 키워드 #8회 : 에어드랍 / 주소 / 공개키 / 개인키“? 다음 카테고리의 웹사이트 https://you.maxfit.vn 에서 귀하의 모든 질문에 답변해 드립니다: https://you.maxfit.vn/blog/. 바로 아래에서 답을 찾을 수 있습니다. 작성자 불새! 쫄불! – 블록체인 전문방송 이(가) 작성한 기사에는 조회수 1,571회 및 좋아요 16개 개의 좋아요가 있습니다.

블록 체인 주소 주제에 대한 동영상 보기

여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!

d여기에서 [불백] 블록체인 백과사전 100 키워드 #8회 : 에어드랍 / 주소 / 공개키 / 개인키 – 블록 체인 주소 주제에 대한 세부정보를 참조하세요

‘불백’은 블록체인 비즈니스 이해를 위한 입문편입니다.
키워드로 알아보는 블록체인 백과사전, 블록체인의 모든 것을 읽어드립니다! 블록체인 핵심 키워드 100개를 선정하여 쉽고 간단하게 설명드립니다.
-에어드랍(Airdrop)
공중에서 항공기나 낙한산으로 사람이나 장비등을 투하한다는 사전적인 의미를 가지고 있다.
암호화폐에서는 토큰 에어드랍을 뜻하는 말로 특정 토큰이나 코인을 가지고 있는 소유자에게 토큰이나 코인을 무료로 나눠주는것을 말하며 대부분은 홍보나 마케팅 목적으로 실행을 한다.
-주소(Addresses : Cryptocurrency addresses)
공개키(Public key)와 개인키(Private key)로 구성되어 있으며 블록체인 네트워크에서 암호화폐를 주고 받을 때 필요한 정보입니다. 우편물을 받기 위한 집주소와 비슷한 개념입니다. 암호화폐마다 주소를 생성하는 방법이 다르기 때문에 다른 암호화 화폐와는 주소를 알고 있다고 하더라도 암호화폐를 보낼 수 없습니다. 공개키를 해싱(Hashing)한 정보가 주소이며 일반적으로 비트코인 주소는 공개키를 가르키는 말입니다.
-공개키(Public key)
암호화폐 거래에서는 블락체인에 기록하기 위해 유효한 서명이 필요하며, 서명은 디지털 키가 있어야 한다. 키는 개인키와 공개키 한 쌍으로 구성된다. 공개키는 은행의 계좌번호와 유사하고, 개인키는 비밀번호 PIN 와 유사하다. 공개키를 해싱한 주소를 통해서 암호화폐를 보낼 수 있으며, 잔고까지 확인할 수 도 있다.
-개인키(Private key)
개인키는 암호화된 서명을 통해 당신이 특정한 암호화페 지갑에 암화화폐 소유를 증명하는 비밀정보입니다. 개인키로는 공개키를 계산할 수 있지만 반대로 공개키를 가지고는 개인키를 계산할 수 없습니다. 개인키가 다른 사람에게 노출이 된다면 은행 계좌에 비밀번호를 알려준것과 같습니다. 암호화폐 관리를 위해서 개인키의 보안이 중요한 이유입니다.
상세한 내용이 궁금하시다면 방송을 구독해주세요!
듣고만 있어도 공부가 됩니다.
블록체인 비즈니스 초급편은 자매방송 ‘[쫄불] 쫄지말고 블록체인’을
고급편은 자매방송 ‘[불새] 블록체인세상’을 보시면 됩니다.

블록 체인 주소 주제에 대한 자세한 내용은 여기를 참조하세요.

블록체인의 주소 생성 및 공유 – Wolfram

블록체인의 주소 생성 및 공유. 암호키는 일반적으로 사용자가 자신의 암호화폐에 근접할 때 가장 중요한 숫자입니다. GenerateAsymmetricKeyPair를 사용하여 생성된 …

+ 여기에 표시

Source: www.wolfram.com

Date Published: 12/12/2021

View: 2074

블록체인 트랜잭션 내역 읽는 법 | Ledger

트랜잭션의 주요 구성요소는 트랜잭션 ID, 전송 & 수신 주소, 관련 수수료 및 트랜잭션 상태입니다. — Ledger Live를 통해 각 트랜잭션에 대한 블록체인 탐색기에 쉽게 …

+ 여기에 보기

Source: www.ledger.com

Date Published: 11/2/2022

View: 1135

블록체인에서 개인키, 공개키, 주소를 생성하는 방식 – 브런치

개인키와 공개키 메타마스크나 카이카스 등 블록체인 상 지갑을 만들면, 지갑의 주소와 키가 발급된다. 그 키를 가진 사용자는 해당 지갑에 대한 접근 …

+ 여기에 자세히 보기

Source: brunch.co.kr

Date Published: 7/1/2021

View: 1552

[Go로 구현하는 블록체인] Part 5: 주소

[Go로 구현하는 블록체인] Part 5: 주소 … 서론; 비트코인 주소; 공개키 암호; 디지털 서명; 타원 곡선 암호; Base58; 주소 구현; 서명 구현; 결론.

+ 여기에 더 보기

Source: mingrammer.com

Date Published: 10/5/2022

View: 5711

암호화폐 지갑 – 해시넷 위키

주요 지갑 주소, 0xAb58… • 1A1zP1… • 3D2oet… ; 위키 : 블록체인, 암호화폐, 인공지능, 자동차, 교통, 지역, 개발, 거래, 인물, 기업, 단체, 행사, …

+ 여기에 보기

Source: wiki.hash.kr

Date Published: 2/29/2022

View: 172

블록체어 — 만능 블록체인 탐색기 및 검색엔진 – Blockchair

BTC, ETH, XRP, XLM, BCH, LTC, DASH, BSV, DOGE, GRS, TON 의 트랜젝션과 주소의 검색, 정렬, 그리고 필터 기능을 지원하는 블록 탐색기 및 가장 강력한 API.

+ 여기에 자세히 보기

Source: blockchair.com

Date Published: 11/14/2021

View: 5079

블록 체인 지갑이란 무엇이며 어떻게 작동합니까? – 다른

예를 들어 모든 비트 코인 지갑은 P2PKH 주소를 생성 할 수 … 이상적으로는 블록 체인에서 지갑 주소는 암호화 알고리즘 및 …

+ 여기에 표시

Source: ko.myservername.com

Date Published: 3/4/2021

View: 4657

암호키와 비트코인 주소 개념 및 이해 : 암호화폐 지갑 개념, 종류

공개키(Public Key)는 타원 곡선 암호법을 기반으로 하여 개인 키로부터 생성됩니다. 영어로는Elliptic curve cryptography라고 합니다. 블록체인 : 암호 …

+ 여기를 클릭

Source: jjeongil.tistory.com

Date Published: 5/12/2022

View: 5724

비트코인 블록체인 탐색기 사용 방법 | Binance Academy

블록체인 탐색기는 블록체인을 위한 검색 엔진과 유사하며, 블록, 주소, 트랜잭션 및 기타 온체인 데이터를 확인 및 검증할 수 있습니다.

+ 여기를 클릭

Source: academy.binance.com

Date Published: 1/22/2022

View: 7796

주제와 관련된 이미지 블록 체인 주소

주제와 관련된 더 많은 사진을 참조하십시오 [불백] 블록체인 백과사전 100 키워드 #8회 : 에어드랍 / 주소 / 공개키 / 개인키. 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.

[불백] 블록체인 백과사전 100 키워드 #8회 : 에어드랍 / 주소 / 공개키 / 개인키
[불백] 블록체인 백과사전 100 키워드 #8회 : 에어드랍 / 주소 / 공개키 / 개인키

주제에 대한 기사 평가 블록 체인 주소

  • Author: 불새! 쫄불! – 블록체인 전문방송
  • Views: 조회수 1,571회
  • Likes: 좋아요 16개
  • Date Published: 2018. 4. 23.
  • Video Url link: https://www.youtube.com/watch?v=2_wLMvP5EMQ

블록체인의 주소 생성 및 공유: Wolfram 언어 12의 신기능

블록체인의 주소 생성 및 공유

암호키는 일반적으로 사용자가 자신의 암호화폐에 근접할 때 가장 중요한 숫자입니다. GenerateAsymmetricKeyPair를 사용하여 생성된 키는 모두 BlockchainKeyEncode를 사용하여 블록체인과 호환되는 형식으로 부호화하고 공유할 수 있습니다. 이 예는 QR 코드를 사용하여 주소를 공유하는 일반적인 방법을 보여줍니다.

우선, 타원곡선 방식을 사용하여 비밀 키와 공개 키 쌍을 생성합니다.

BlockchainKeyEncode를 사용하여 PublicKey를 기반으로 하는 이더리움의 주소를 생성합니다.

BarcodeImage를 사용하여 주소의 QR 코드를 생성하고 SendMessage를 사용하여 생성한 코드를 자신의 모바일 기기로 전송합니다.

블록체인 트랜잭션 내역 읽는 법

블록체인 트랜잭션 내역 읽는 법

5월 23, 2022

6 최소 중급자용

공유

주요 시사점: — 블록체인은 공개 원장이므로 지금까지 이루어진 모든 거래를 누구나 볼 수 있습니다.

— 블록 탐색기를 사용해 쉽게 블록체인 트랜잭션 내역을 탐색하고 검색할 수 있습니다.

— 트랜잭션의 주요 구성요소는 트랜잭션 ID, 전송 & 수신 주소, 관련 수수료 및 트랜잭션 상태입니다.

— Ledger Live를 통해 각 트랜잭션에 대한 블록체인 탐색기에 쉽게 액세스할 수 있습니다.

암호화폐는 완벽히 투명하며 모든 트랜잭션은 인증이 가능한 것으로 알려져 있습니다. 그러나 모든 사람이 그 원리를 알고 있는 것은 아닙니다. 블록 탐색기를 통해 블록체인 거래 내역과 잔액 확인을 시작하는 방법을 보여드리고자 합니다.

신뢰하지 말고 검증하세요. 누구나 트랜잭션을 볼 수 있습니다.

비트코인과 같은 암호화폐는 법정화폐와 비교해 매우 고유한 성질을 가지고 있습니다. 또한 블록체인이라고 불리는 기술을 사용합니다. 간단히 말해 모든 트랜잭션의 분산원장입니다. 이는 각 암호화폐에 대해 이루어진 모든 트랜잭션이 전체 이력을 보유하는 단일 블록체인에 기록된다는 것을 의미합니다.

영수증을 어떻게 보관했는지 기억하고 매달 은행 계좌를 확인해 모든 거래가 올바른지 확인하세요? 아니면 그냥 은행을 믿고 맡기세요? 암호화폐의 경우, 누구도 신뢰할 필요가 없습니다. 제3자가 관여하지 않기 때문입니다. 거의 모든 암호화폐는 이제까지 이루어진 각 거래의 모든 세부 사항을 볼 수 있는 공개 블록체인을 사용합니다.

이것이 무슨 의미일까요? 다른 사람들이 얼마나 많은 것을 소유하고 있는지 눈으로 확인할 수 있다는 사실 외에도 매우 귀중한 목적이 있습니다. 이제까지 전송하거나 수신한 모든 트랜잭션을 검증하는 것이죠. 사용 중인 서비스에 올바른 양의 비트코인이 표시되지 않는 것 같으면 직접 살펴보고 일치하는지 확인할 수 있습니다. 만약 지인이 “이미 트랜잭션을 완료했다”고 주장하는데 여러분에게는 전달되지 않고 있다면 블록체인 자체에서 그 주장의 유효성을 직접 확인할 수 있습니다. “믿지 말고, 검증하라”란 유명한 말이 있습니다. 암호화폐의 경우 트랜잭션과 관련한 모든 것을 검증할 수 있습니다. 그렇다면 블록체인의 전체 내역을 어떻게 확인할 수 있을까요?

블록 탐색기: 블록체인 트랜잭션 내역 탐색하기

블록 탐색기는 블록체인에서 이제껏 존재했던 모든 트랜잭션을 볼 수 있는 시작점입니다. 이 지점에서부터 각 주소의 잔고와 각 트랜잭션에 대한 상세 정보 등을 확인할 수 있습니다.

시중에는 다양한 블록 탐색기가 존재하며, 이는 암호화폐의 종류가 다양하게 많으니 당연한 이치입니다. 대부분의 경우 블록 탐색기는 단일 암호화폐에만 적용됩니다. 몇 가지 일반적인 블록 탐색기 다음과 같습니다.

– 비트코인: blockchain.com 및 blockstream

– 이더리움 및 ERC20 토큰: Etherscan 및 Ethplorer

– XRP: Bithomp 및 XRP Charts

이러한 블록 탐색기를 사용하면 입력하는 개별 주소의 잔액이나 트랜잭션 ID의 거래 세부 정보를 조회할 수 있습니다. 입력이 되었으면 모든 상세 정보를 볼 수 있습니다. 주소에는 특정 주소의 모든 수신 및 발신 트랜잭션이 포함됩니다. 트랜잭션에는 트랜잭션을 보낸 사람, 송금한 금액, 대상 및 지불한 수수료가 표시됩니다. 간단히 말해서, 블록 탐색기는 블록체인 트랜잭션 및 주소에 대한 백과사전과 같습니다. 전체 이력을 조회할 수 있기 때문입니다.

블록 탐색기에서 암호화폐 트랜잭션을 읽는 방법

이제 실제적인 부분을 살펴 보겠습니다. 블록 탐색기에서 트랜잭션을 분석해 보도록 하죠. 암호화폐 거래에 익숙하지 않은 분들에게는 이는 상당히 혼란스럽게 느껴질 수 있습니다. 숫자와 문자가 마구 뒤섞여 있는 듯이 보이겠죠. 이를 섹션으로 세분화하여 각 섹션을 개별적으로 살펴보겠습니다. 다음은 비트코인 트랜잭션에 대한 blockchain.com 블록 탐색기의 스크린샷입니다.

1. 트랜잭션 해시 ID

트랜잭션 ID라고도 하는 트랜잭션 해시는 이 특정 트랜잭션의 식별자입니다. 간단히 말해서 이 트랜잭션과 관련된 코드라고 할 수 있죠. 특정 거래의 세부 정보를 조회하려면 이 코드 문자열을 블록 탐색기에 입력해야 합니다.

2. 발신 주소

이 섹션은 관련 암호화폐를 보내는 주소와 보내는 액수를 나타냅니다. 주소를 클릭하면 들어오고 나가는 트랜잭션 내역을 볼 수도 있습니다.

비트코인 트랜잭션 시, 본인의 주소에서 전체 금액을 자동으로 보내고 나머지는 변경 주소로 전송합니다. 이를 자세히 살펴보도록 하죠.

이번 예제에서는 주소에 1 BTC의 잔액이 있습니다. 친구에게 0.1 BTC를 보내려고 합니다. 트랜잭션을 생성하면 주소의 전체 잔액을 전송합니다. 물론 전액이 친구에게 가는 것은 아닙니다. 친구는 원래 의도대로 0.1 BTC만 수령하게 됩니다. 나머지 0.9 BTC는 변경 주소로 전송됩니다. 이 주소는 본인이 완전히 제어하게 됩니다. 이는 비트코인 및 그 파생상품이 가진 고유한 특징입니다. 이더리움 및 XRP는 주소의 전체 잔액을 전송하지 않습니다.

3. 수수료

대부분의 암호화폐 네트워크에는 트랜잭션에 대해 수수료가 붙습니다. 비트코인도 다르지 않습니다. 이 섹션에서는 트랜잭션에 수수료가 얼마나 되는지 확인할 수 있습니다. 이 수수료는 트랜잭션으로 가득 찬 네트워크 블록을 검증하는 사람들에게 지불됩니다.

4. 수령 주소

이번 섹션에서는 어떤 주소가 트랜잭션의 의도한 수신지인지 확인할 수 있습니다. 각 주소마다 얼마의 액수가 수령되는지 확인할 수 있습니다. 발신 주소와 마찬가지로 수신인을 클릭하면 트랜잭션 내역을 볼 수 있습니다. 일반적으로 이러한 주소의 맨 아래는 앞서 설명한 변경 주소가 있습니다.

5. 트랜잭션의 상태

자주 간과되곤 하는데, 트랜잭션에서 아주 중요한 부분이 바로 트랜잭션의 상태입니다. 트랜잭션이 완료되고 유효한 것으로 간주되려면 먼저 유효성을 검증하는 사람들의 확인이 필요합니다. 위에 보이는 것과 같은 확인되지 않은 트랜잭션은 유효하지 않은 것으로 판정되거나 취소될 수 있습니다. 확인되지 않은 거래는 ‘아직 수령되지 않은 것’으로 간주하고 실제로 확인될 때까지 기다리는 것이 최선입니다.

하나 이상의 발신 또는 수신 주소를 볼 수도 있습니다. 이는 트랜잭션 일괄처리라고 하는 고급 기능을 사용합니다. 이는 암호화폐 거래소에서 일반적으로 사용하는 기능으로, 수수료 비용을 줄이기 위해 단일 트랜잭션을 통해 여러 사람에게 암호화폐를 보낼 때 사용합니다.

Ledger Live 및 블록 탐색기

Ledger Live를 시작할 때마다 블록체인과 동기화하여 새로운 트랜잭션이나 잔액 변경 사항 및 현재 암호화폐 가치를 확인할 수 있습니다. 사용 중일 때도 이 정보를 자주 업데이트하여 최신 상태를 유지합니다.

반면 과거 트랜잭션 이력이나 현재 수신되는 트랜잭션의 세부 정보를 확인할 수 있다는 것 또한 중요한 사실입니다. Ledger Live에 표시된 거래를 클릭하면 세부 정보가 표시됩니다. 또한 여기에서도 블록 탐색기를 확인할 수 있기 때문에 검증이 가능합니다. 이는 ‘탐색기에서 보기’를 클릭하여 수행합니다. 여기에서 주소의 잔액을 확인하고 Ledger Live에 정확한 금액이 표시되는지 확인할 수도 있습니다 Ledger Live에서 정전이 발생하는 경우에도 블록 탐색기는 항상 현재 보유하고 있는 특정 암호화폐의 액수를 표시합니다.

Ledger Live를 사용하면 하드웨어 지갑을 사용하지 않을 때도 잔액을 쉽게 조회할 수 있어 편리합니다. 이외에도 더 많은 것이 가능합니다. 그 강력한 기능을 여기에서 자세히 알아 보세요.

계속 학습하세요! 암호화폐와 블록체인에 대한 학습이 즐거우셨다면 School of Block 동영상도 참고해 보세요. 블록체인 실제 사용 사례.

블록체인에서 개인키, 공개키, 주소를 생성하는 방식

개인키와 공개키

메타마스크나 카이카스 등 블록체인 상 지갑을 만들면, 지갑의 주소와 키가 발급된다. 그 키를 가진 사용자는 해당 지갑에 대한 접근 권한을 얻는다.

여기서 주소는 공개키에 해당하며, 이는 은행의 계좌번호나 계정의 아이디와 같다. 키는 개인키에 해당하며, 계좌나 아이디의 비밀번호와 같다. 공개키와 개인키는 한 쌍을 이루며, 블록체인 지갑에는 이러한 쌍이 여러 개 존재할 수 있다.

개인키는 블록체인 지갑을 만들 때 생성된다. 생성된 개인키를 특정 함수에 적용하면 공개키를 얻을 수 있다. 이렇게 얻은 공개키를 해시 함수에 대입하면 지갑 주소를 얻을 수 있다. 이때 사용하는 함수들은 역산할 수 없다. 그래서 특정 지갑의 주소를 알고 있더라도 개인키를 도출해낼 수 없다.

개인키(Private Key)

개인키는 256비트의 난수로 구성된 값이다. 키 생성을 요청하면, 거대한 난수 표에서 무작위로 값이 선정된다.

이때, 난수를 선정하는 알고리즘이 매우 중요하다. 난수 생성기의 품질이 떨어질 경우 개인키 값을 예측할 가능성이 높아지기 때문이다. 따라서 단순한 난수 생성기가 아니라 검증된 난수 생성기를 사용해야 한다. 실제로 해커가 안드로이드의 난수 생성기를 사용하여 난수를 파악한 뒤 개인키를 예측했고, 이를 통해 안드로이드 지갑에 보관된 비트코인을 도난한 사례가 있다.

이더리움은 생성한 개인키의 64개 헥사 값을 그대로 사용한다. 반면 비트코인은 WIF 방식으로 키를 변환하여 사용한다. WIF(Wallet Import Format)이란 256비트의 공개키를 Base58Check 인코딩 체계를 통해 표현하는 방식이다. 이 방식으로 개인키를 변환하는 과정은 다음과 같다.

WIF 방식으로 키 변환하기

1. 개인키 값을 가져온다.

0C28FCA386C7A227600B2FE50B7CAE11EC86D3BF1FBE471BE89827E19D72AA1

2. 키 값 앞에 버전 정보를 추가한다. 메인넷의 경우 0x80, 테스트넷의 경우 0xef를 추가한다.

(따라서 메인넷의 경우 모든 키 값이 5 또는 K로 시작하게 된다.)

800C28FCA386C7A227600B2FE50B7CAE11EC86D3BF1FBE471BE89827E19D72AA1D

3. 키 값이 SEC 형식을 사용할 경우 키 값 마지막에 0x01을 추가한다.

800C28FCA386C7A227600B2FE50B7CAE11EC86D3BF1FBE471BE89827E19D72AA1D01

4. 오타나 변조를 방지하기 위해 키 값을 SHA256 해시 함수에 2번 대입한다. (더블 해싱)

– 8147786C4D15106333BF278D71DADAF1079EF2D2440A4DDE37D747DED5403592

– 507A5B8DFED0FC6FE8801743720CEDEC06AA5C6FCA72B07C49964492FB98A714

5. 더블 해싱 값의 첫 4바이트를 2번 값 뒤에 추가한다.

800C28FCA386C7A227600B2FE50B7CAE11EC86D3BF1FBE471BE89827E19D72AA1D + 507A5B8D

6. 이를 Base58로 인코딩하여 WIF 결과를 얻는다.

5HueCGU8rMjxEXxiPuD5BDku4MkFqeZyd4dZ1jvhTVqvbTLvyTJ

공개키(Public Key)

공개키 값 구하기

비트코인과 이더리움에서는 ECDSA(Elliptic Curve Digital Signature Algorithm)의 타원 곡선 함수에 개인키 값을 대입하여 공개키를 얻는다. 타원 곡선 함수는 다음과 같다.

K = k*G (k:개인키, G:상수)

G는 기준점으로, 계산을 시작하는 위치다. G에서 접선을 그어 그래프 상에서 접점을 찾는다. 해당 접점을 x축에 대칭시킨다. 이 과정을 개인키 값(k)만큼 반복하면 공개키 값을 얻을 수 있다.

공개키 형식 1 – 비압축형

이렇게 얻어진 공개키는 타원 곡선 상 한 쌍의 좌표 (x, y) 이다. 각 좌표의 값은 각각 256비트의 숫자로 표현된다. 이 좌표의 x 값과 y 값을 이어 붙인 형식을 비압축형 공개키라고 한다. 이 경우 다른 형식의 공개키와 구분하기 위해 값 앞에 0x04를 추가한다.

공개키 형식 2 – 압축형

비압축형 공개키의 경우 키를 표현하기 위해 총 520비트의 저장 공간이 필요하다. 이 공간을 줄이기 위해 압축형 공개키 방식을 사용한다. 압축형 공개키는 x 값으로만 공개키를 표현한다. y 값은 생략하는데, y 값은 다음 수식을 통해 도출할 수 있기 때문이다.

y^2 = x^3 + 7

단, 해당 함수에 값을 대입하면 2개의 y 값이 도출된다. 따라서 y가 양수일 경우 K 값 앞에 0x02를, 음수일 경우 0x03을 추가하여 이를 구분한다.

공개키 형식을 정리하자면 다음과 같다.

1. 비압축형 공개키 : K = prefix(0x04) + x + y

2. 압축형 공개키 : K = prefix(0x02 or 0x03) + x

주소(address)

주소는 공개키를 이용하여 얻을 수 있다. 비트코인의 경우 SHA(보안 해시 알고리즘)와 RIPEMD(RACE Integrity Primitives Evaluation Message Digest) 함수에 공개키 값을 대입하여 주소를 얻는다. 반면 이더리움은 Keccak 함수로 주소를 얻는다.

비트코인 주소 만들기

1. 공개키 값을 가져온다.

03564213318d739994e4d9785bf40eac4edbfa21f0546040ce7e6859778dfce5d4

2. 공개키를 SHA256 함수에 대입한다.

482c77b119e47024d00b38a256a3a83cbc716ebb4d684a0d30b8ea1af12d42d9

3. 결과 값을 RIPEMD160 함수에 대입한다.

0c2c910a661178ef63e276dd0e239883b862f58c

4. 결과 값 앞에 0x00을 추가한다.

00 + 0c2c910a661178ef63e276dd0e239883b862f58c

5. 이를 SHA256 함수에 2번 대입한다. (더블 해싱)

c3c0439f33dc4cf4d66d3dd37900fc12597938a64817306b542a75b9223213e0

6. 더블 해싱 값의 첫 4바이트를 4번 값 뒤에 추가한다.

000c2c910a661178ef63e276dd0e239883b862f58c + c3c0439f

7. 이를 Base58로 인코딩하여 공개키를 압축한다. 이것을 주소로 사용한다.

127NVqnjf8gB9BFAW2dnQeM6wqmy1gbGtv

이더리움 주소 만들기

1. 공개키 값을 가져온다.

6e145ccef1033dea239875dd00dfb4fee6e3348b84985c92f103444683bae07b83b5c38e5e2b0c8529d7fa3f64d46daa1ece2d9ac14cab9477d042c84c32ccd0

2. 공개키를 Keccak256 함수에 대입한다.

2a5bc342ed616b5ba5732269001d3f1ef827552ae1114027bd3ecf1f086ba0f9

3. 결과 값의 마지막 20바이트를 가져온 뒤, 값 앞에 0x를 추가한다. 이를 주소로 사용한다.

0x001d3f1ef827552ae1114027bd3ecf1f086ba0f9

단, 이더리움 주소는 checksum이 없어 주소의 오류를 감지하기가 어렵다. 따라서 EIP-55에 따라 checksum을 추가한다.

1. 주소를 가져온 뒤, 주소 앞의 0x를 제외한다.

7f7625faa1ca985e9ad678656a9dcdf79620df6b

2. 이를 Keccak256 함수에 대입한다.

3015b5c87eeb15cce85e3e48eefb50b400dd497c7b0bd41f16937ead349b3784

3. 결과 값의 각 문자가 16진수에 따라 0x8보다 클 경우, 주소의 해당 자릿수를 대문자로 변경한다.

(예를 들어 결과 값의 10번째 문자인 e는 0x8보다 크다. 따라서 주소의 10번째 문자에 해당하는 a를 대문자로 변경한다.)

결과 값 : 3015b5c87eeb15cce85e3e48eefb50b400dd497c…

주소 : 7f7625faa1ca985e9ad678656a9dcdf79620df6b

4. 이러한 규칙에 따라 주소의 소문자를 대문자로 변환한다.

0x7f7625FAa1CA985E9Ad678656A9DcdF79620dF6B

[Go로 구현하는 블록체인] Part 5: 주소

Building Blockchain in Go 시리즈를 번역한 글입니다.

서론

이전 파트에서는 트랜잭션을 구현했었다. 또한 비트코인에는 사용자 계정이 없고 개인 정보 (이름, 여권 번호 및 SSN등)는 필요하지 않으며 어디에도 저장되지 않는다는 트랜잭션의 비개인적인 본질적인 특성에 대해서도 알아보았다. 하지만 트랜잭션 출력의 소유자를 식별하기 위한 무언가가 필요하긴하다 (이 출력들은 코인의 소유자가 잠궜기 때문에). 그리고 이게 비트코인 주소가 필요한 이유이다. 지금까지 우리는 임의의 사용자 정의 문자열을 주소로 사용해왔으며 비트코인에서 구현된 실제 주소를 구현할 때가 왔다.

이 파트에서는 중요한 코드 변경사항을 소개하기 때문에 모든 코드를 설명하는건 의미가 없다. 모든 변경사항은 여기를 참조하라.

비트코인 주소

다음은 비트코인 주소의 예이다: 1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa. 이는 사토시 나카모토의 것으로 알려진 최초의 비트코인 주소이다. 비트코인 주소는 모두 공개되어있다. 다른 사람에게 코인을 전송하기 위해선 받는 사람의 주소를 알아야한다. 그러나 주소는 고유한 값임에도 불구하고 여러분을 “지갑”의 소유자로 식별하는건 아니다. 사실 이 주소는 사람이 읽기 쉬운 형태의 공개키 표현이다. 비트코인에서 식별자는 여러분의 컴퓨터에 저장된 개인키와 공개키의 쌍 (혹은 쌍들)이다. 비트코인은 암호화 알고리즘을 조합하여 이러한 키들을 생성하는데 전세계의 그 어느 누구도 키에 물리적으로 접근해서 탈취하지 않는 이상 여러분의 코인에 접근할 수 없음을 보장한다. 그럼 이제 어떤 알고리즘들이 사용되는지 살펴보자.

공개키 암호

공개키 암호화 알고리즘에서는 공개키와 개인키의 쌍을 사용한다. 공개키는 민감하지 않으며 누구에게나 공개될 수 있다. 반대로 개인키는 소유자의 식별자로 사용되므로 소유자 이외에는 아무도 접근하면 안되기 때문에 공개되어서는 안된다. 여러분이 바로 개인키이다.

본질적으로 비트코인 지갑은 이 키들의 쌍일뿐이다. 지갑 애플리케이션을 설치하거나 비트코인 클라이언트를 사용해 새로운 주소를 생성하면 키 쌍이 생성된다. 비트코인에선 개인키를 제어하는 사람이 이 키로 전송되는 모든 코인을 제어한다.

개인키와 공개키는 임의의 바이트 시퀀스이기 때문에 화면에 출력할 수 없으며 사람이 읽을 수도 없다. 이게 비트코인이 공개키를 사람이 읽을 수 있는 문자열로 변환하는 알고리즘을 사용하는 이유이다.

비트코인 지갑 애플리케이션을 사용해 본 적이 있다면 기억하기 쉬운 문구가 생성되었을 가능성이 높다. 이 문구는 개인키 대신 사용되며 키를 생성하는데 사용할 수 있다. 이 메커니즘은 BIP-039에 구현되어있다.

우리는 이제 비트코인에서 사용자를 어떻게 식별하는지 알게되었다. 그러나 비트코인은 트랜잭션 출력 및 코인에 대한 소유권을 어떻게 확인할까?

디지털 서명

수학과 암호학에는 디지털 서명이라는 개념이 있는데 이 알고리즘은 다음을 보장한다.

송신자로부터 수신자에게 데이터가 전송되는 동안에는 데이터가 변경되지 않는다. 데이터는 특정 송신자에 의해 생성된다. 송신자는 데이터 전송을 거부할 수 없다.

데이터에 서명 알고리즘을 적용하면 (즉, 데이터 서명) 서명이 얻어지며, 이는 나중에 검증될 수 있다. 디지털 서명에서는 개인키를 사용하며 검증시에는 공개키가 필요하다.

데이터 서명을 위해서는 다음의 것들이 필요하다.

서명할 데이터 개인키

서명 작업은 트랜잭션 입력에 저장될 서명을 생성한다. 서명 검증을 위해선 다음의 것들이 필요하다.

서명된 데이터 서명 공개키

간단히 말하면 검증 과정은 다음과 같다: 이 데이터에서 얻은 서명이 공개키 생성에 사용된 개인키로 서명되었는지를 확인한다.

디지털 서명은 암호화가 아니기 때문에 서명에서 데이터를 재구성할 수 없다. 이는 해싱 알고리즘에 데이터를 넣어 데이터의 고유한 표현을 얻어내는 해싱과 유사하다. 서명과 해시의 차이점은 키 쌍으로 이는 서명 검증을 가능하게 만든다. 그러나 키 쌍은 데이터 암호화에도 사용될 수 있는데 개인키는 암호화, 공개키는 복호화에 사용된다. 하지만 비트코인은 암호화 알고리즘을 사용하지 않는다.

비트코인에서 모든 트랜잭션 입력은 트랜잭션을 생성한 사람에 의해 서명된다. 비트코인의 모든 트랜잭션은 블록에 추가되기 전에 반드시 검증되어야한다. 검증이란 다음을 의미한다.

입력이 이전 트랜잭션의 출력을 사용할 권한을 가지고 있는지 확인 트랜잭션 서명이 올바른지 확인

데이터 서명과 서명 검증을 도식으로 나타내면 다음과 같다.

이제 트랜잭션의 전체 생명주기를 살펴보자.

초기에는 코인베이스 트랜잭션을 가진 제네시스 블록이 있다. 코인베이스 트랜잭션에는 입력이 없기 때문에 서명이 필요하지않다. 코인베이스 트랜잭션의 출력은 해싱된 공개키가 포함되어있다. (RIPEMD16(SHA256(PubKey) 알고리즘이 사용됨) 누군가 코인을 전송하면 트랜잭션이 생성된다. 트랜잭션의 입력은 이전 트랜잭션의 출력을 참조한다. 모든 입력은 해싱되지 않은 공개키와 전체 트랜잭션의 서명을 저장한다. 트랜잭션을 받는 비트코인 네트워크상의 다른 노드들이 이를 검증한다. 이 노드들은 다른 것들 외에도 입력의 공개키 해시가 참조된 출력의 해시와 같은지 (송신자가 본인 소유의 코인을 사용했는지를 보장)와 서명이 올바른지 (트랜잭션이 코인의 실소유자에 의해 생성되었는지를 보장)를 확인한다. 채굴 노드가 새로운 블록을 채굴할 준비가 되면, 이 노드는 트랜잭션을 블록에 넣은 뒤 채굴을 시작한다. 블록이 채굴되면 네트워크상의 모든 노드는 블록이 채굴되었다는 메시지를 받으며 블록체인에 블록을 추가한다. 블록이 블록체인에 추가되면 트랜잭션이 완료되고 출력은 새로운 트랜잭션에서 참조될 수 있다.

타원 곡선 암호

위에서 설명한 것처럼 공개키와 개인키는 임의의 바이트 시퀀스이다. 개인키는 코인의 소유자를 식별하기 위해 사용되기 때문에 랜덤 알고리즘은 완전히 랜덤한 바이트를 생성할 수 있어야한다. 다른 사람이 소유하고 있는 개인키를 생성함으로써 충돌이 발생해선 안된다.

비트코인은 타원 곡선을 사용해 개인키를 생성한다. 타원 곡선은 복잡한 수학적 개념으로 여기서는 자세히 다루진 않는다. (궁금하다면 타원 곡선 소개글을 참고하라) 우리가 알아야 할 것은 이 곡선을 사용하면 아주 크고 랜덤한 숫자를 생성할 수 있다는 것이다. 비트코인에서 사용되는 곡선은 0부터 2^(2^56) (이는 10^77에 근사하는 값이며 우주에는 10^78개에서 10^82개 사이의 원자가 존재한다) 사이의 숫자를 무작위로 선택할 수 있다. 이렇게 높은 상한을 사용하면 동일한 개인키를 두 번 생성하기는 거의 불가능하다.

또한, 비트코인은 ECDSA (Elliptic Curve Digital Signature Algorithm, 타원 곡선 디지털 서명 알고리즘) 알고리즘을 사용해 트랜잭션에 서명을 한다. 우리도 이 알고리즘을 사용할 것이다.

Base58

이제 다시 위에서 언급했던 비트코인 주소로 돌아가자: 1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa. 우리는 이제 이 값이 사람이 읽을 수 있는 형태의 공개키임을 알고있다. 이를 디코딩해 나온 공개키를 16진법의 바이트 시퀀스로 나타내면 다음과 같다.

0062E907B15CBF27D5425399EBF6F0FB50EBB88F18C29B7D93

비트코인은 공개키를 사람이 읽을 수 있는 형태로 변환하기 위해 Base58 알고리즘을 사용한다. 이 알고리즘은 잘 알려진 Base64 알고리즘과 아주 유사하지만 문자 유사성을 활용한 공격을 피하기 위해 알파벳에서 일부 문자를 제거한 버전을 사용한다. 그래서 Base58에는 유사한 문자들인 0 (제로), O (대문자 o), I (대문자 i), l (소문자 L)가 없다. 그리고 + 및 / 문자 또한 없다.

공개키로부터 주소를 얻는 과정을 도식화하면 다음과 같다.

즉, 좀 전에 언급한 디코딩된 공개키는 다음과 같이 세 부분으로 구성되어있다.

Version Public key hash Checksum 00 62E907B15CBF27D5425399EBF6F0FB50EBB88F18 C29B7D93

해싱 함수는 단방향이기 때문에 해시로부터 공개키를 추출하는건 불가능하다. 그러나 해시 함수에 키를 넣어 해시를 만든 뒤 두 해시를 비교함으로써 해시에 공개키가 사용되었는지를 확인할 수 있다.

이론은 다 살펴보았으니 이제 코드를 작성할 시간이다. 코드를 작성하다보면 개념들을 좀 더 이해하기 쉬울 것이다.

주소 구현

Wallet 구조체부터 작성해보자.

type Wallet struct { PrivateKey scdsa . PrivateKey PublicKey [] byte } type Wallets struct { Wallets map [ string ] * Wallet } func NewWallet () * Wallet { private , public = newKeyPair () wallet := Wallet { private , public } return & wallet } func newKeyPair () ( ecdsa . PrivateKey , [] byte ) { curve := elliptic . P256 () private , err := ecdsa . GenerateKey ( curve , rand . Reader ) pubKey := append ( private . PublicKey . X . Bytes (), private . PublicKey . Y . Bytes () … ) return * private , pubKey }

지갑은 단순히 키의 쌍이다. 지갑들을 하나의 파일로 저장하고 불러올 수 있도록 Wallets 타입을 만든다. Wallet의 생성자에서 새로운 키 쌍이 생성된다. newKeyPair 함수는 직관적인데 ECDSA는 타원 곡선 기반이기 때문에 타원 곡선이 하나 필요하다. 다음으로, 곡선을 이용해 개인키가 생성되고 개인키로부터 공개키가 생성된다. 여기서 주목해야할 것은 타원 곡선 기반 알고리즘에서 공개키들은 곡선 위의 점들이라는 것이다. 따라서 공개키는 X, Y 좌표의 조합이다. 비트코인에서 이 좌표들은 하나로 연결되어 공개키를 형성한다.

이제 주소를 생성해보자.

func ( w Wallet ) GetAddress () [] byte { pubKeyHash := HashPubKey ( w . PublicKey ) versionedPayload := append ([] byte { version }, pubKeyHash … ) checksum := checksum ( versionedPayload ) fullPayload := append ( versionedPayload , checksum … ) address := Base58Encode ( fullPayload ) return address } func HashPubKey ( pubKey [] byte ) [] byte { publicSHA256 := sha256 . Sum256 ( pubKey ) RIPEMD160Hasher := ripemd160 . New () _ , err := RIPEMD160Hasher . Write ( publicSHA256 [:]) publicRIPEMD160 := RIPEMD160Hasher . Sum ( nil ) return publicRIPEMD160 } func checksum ( payload [] byte ) [] byte { firstSHA := sha256 . Sum256 ( payload ) secondSHA := sha256 . Sum256 ( firstSHA [:]) return secondSHA [: addressChecksumLen ] }

공개키는 다음 단계들을 통해 Base58 주소로 변환된다.

공개키를 RIPEMD(SHA256(PubKey)) 해싱 알고리즘으로 두 번 해싱한다. 해시 접두에 주소 생성 알고리즘의 버전을 추가한다. 위 단계에서 나온 해시를 **SHA256(SHA256(payload))**로 해싱하여 체크섬을 계산한다. 체크섬을 version + PubKeyHash 조합의 접미에 추가한다. version + PubKeyHash + checksum 조합을 Base58로 해싱한다.

이 결과로 여러분은 실제 비트코인 주소를 얻을 수 있으며 blockchain.info에서 잔고도 확인할 수 있다. 하지만 필자는 여러분이 새 주소를 생성하고 잔고를 몇번이고 확인해봐도 잔고가 항상 0임을 확신할 수 있다. 이게 바로 적절한 공개키 암호화 알고리즘의 선택이 중요한 이유이다. 개인키를 임의의 수라고 생각하면 동일한 숫자를 생성할 확률은 가능한한 낮아야하며 이상적으로는 절대 발생해서는 안된다.

또한 주소를 얻기 위해 비트코인 노드에 연결할 필요는 없다는 점에 유의하라. 주소 생성 알고리즘은 많은 프로그래밍 언어와 라이브러리에 구현되어있는 공개된 알고리즘들을 조합하여 사용하고있다.

이제 트랜잭션이 주소를 사용할 수 있도록 입력과 출력을 수정해야한다.

type TXIntput struct { Txid [] byte Vout int Signature [] byte PubKey [] byte } func ( in * TXInput ) UsesKey ( pubKeyHash [] byte ) bool { lockingHash := HashPubKey ( in . PubKey ) return bytes . Compare ( lockingHash , pubKeyHash ) == 0 } type TXOutput struct { Value int PubKeyHash [] byte } func ( out * TXOutput ) Lock ( address [] byte ) { pubKeyHash := Base58Decode ( address ) pubKeyHash := pubKeyHash ( 1 : len ( pubKeyHash ) – 4 ) out . PubKeyHash = pubKeyHash } func ( out * TXOutput ) IsLockedWithKey ( pubKeyHash [] byte ) bool { return bytes . Compare ( out . PubKeyHash , pubKeyHash ) == 0 }

스크립팅 언어를 구현하지는 않으므로 더 이상 ScriptPubKey와 ScriptSig 필드는 사용하지 않을 것이다. 대신 ScriptSig는 Signature와 PubKey 필드로 분할되고 ScriptPubKey는 PubKeyHash로 바뀐다. 우리는 비트코인과 동일한 출력 잠금/해제 및 입력 서명 로직을 구현할 것이다. 다만 우리는 메서드를 사용할 것이다.

UsesKey 메서드는 입력이 출력을 해제할 수 있는 특정한 키를 사용하고 있는지 검사한다. 입력은 해싱되지 않은 공개키를 저장하고 있는데 메서드는 해싱된 값을 받고 있음을 보라. IsLockedWithKey는 제공된 공개키 해시가 출력을 잠그는데 사용되었는지를 검사한다. 이는 UsesKey와는 대조적이며 이 두 함수 모두 FindUnspentTransaction에서 트랜잭션간의 연결을 구성하는데 사용된다.

Lock은 출력을 잠그기만 한다. 코인을 다른 사람에게 전송할 때 우리는 주소밖에 모르기 때문에 함수는 인자로 주소만 받는다. 주소가 디코딩되고 공개키 해시가 추출되면 PubKeyHash 필드에 저장된다.

잘 동작하는지 확인해보자.

$ blockchain_go createwallet Your new address: 13Uu7B1vDP4ViXqHFsWtbraM3EfQ3UkWXt $ blockchain_go createwallet Your new address: 15pUhCbtrGh3JUx5iHnXjfpyHyTgawvG5h $ blockchain_go createwallet Your new address: 1Lhqun1E9zZZhodiTqxfPQBcwr1CVDV2sy $ blockchain_go createblockchain -address 13Uu7B1vDP4ViXqHFsWtbraM3EfQ3UkWXt 0000005420fbfdafa00c093f56e033903ba43599fa7cd9df40458e373eee724d Done! $ blockchain_go getbalance -address 13Uu7B1vDP4ViXqHFsWtbraM3EfQ3UkWXt Balance of ’13Uu7B1vDP4ViXqHFsWtbraM3EfQ3UkWXt’: 10 $ blockchain_go send -from 15pUhCbtrGh3JUx5iHnXjfpyHyTgawvG5h -to 13Uu7B1vDP4ViXqHFsWtbraM3EfQ3UkWXt -amount 5 2017/09/12 13:08:56 ERROR: Not enough funds $ blockchain_go send -from 13Uu7B1vDP4ViXqHFsWtbraM3EfQ3UkWXt -to 15pUhCbtrGh3JUx5iHnXjfpyHyTgawvG5h -amount 6 00000019afa909094193f64ca06e9039849709f5948fbac56cae7b1b8f0ff162 Success! $ blockchain_go getbalance -address 13Uu7B1vDP4ViXqHFsWtbraM3EfQ3UkWXt Balance of ’13Uu7B1vDP4ViXqHFsWtbraM3EfQ3UkWXt’: 4 $ blockchain_go getbalance -address 15pUhCbtrGh3JUx5iHnXjfpyHyTgawvG5h Balance of ’15pUhCbtrGh3JUx5iHnXjfpyHyTgawvG5h’: 6 $ blockchain_go getbalance -address 1Lhqun1E9zZZhodiTqxfPQBcwr1CVDV2sy Balance of ‘1Lhqun1E9zZZhodiTqxfPQBcwr1CVDV2sy’: 0

잘 동작한다! 이제 트랜잭션 서명을 구현해보자.

서명 구현

트랜잭션은 반드시 서명되어야하는데 이는 비트코인에서 특정인이 다른 사람의 코인을 소비할 수 없도록 보장하는 유일한 방법이기 때문이다. 서명이 유효하지 않으면 트랜잭션 또한 유효하지 않다고 판단되므로 따라서 블록체인에 추가될 수 없다.

우리는 하나를 제외하고 트랜잭션 서명을 구현하는데 필요한 것들을 모두 갖췄다. 그 하나는 바로 서명을 위한 데이터이다. 트랜잭션에서 실제로 서명되는건 무엇일까? 혹은 트랜잭션 전체가 서명되는것인가? 서명할 데이터를 선택하는건 아주 중요한 문제이다. 서명해야할 데이터에는 고유한 방식으로 데이터를 식별하는 정보가 포함되어야한다. 예를 들어, 단순히 출력값을 서명하는건 의미가 없는데 이 서명에는 전송 및 수신자에 대한 정보가 없기 때문이다.

트랜잭션이 이전 출력의 잠금을 해제하고 값을 재분배하고 새로운 출력을 잠궈야함을 고려한다면 다음의 데이터들이 서명되어야한다.

잠금 해제된 출력에 저장된 공개키 해시. 이는 트랜잭션의 “전송자”를 식별한다. 새롭게 잠긴 출력에 저장된 공개키 해시. 이는 트랜잭션의 “수신자”를 식별한다. 새로운 출력의 값

비트코인에서 잠금/해제 로직은 스크립트 형태로 저장되며 이는 각각 입력과 출력의 ScriptSig와 ScriptPubKey 필드에 저장된다. 비트코인은 여러가지 유형의 스크립트를 허용하기 때문에 ScriptPubKey 전체를 서명한다.

보시다시피 입력에 저장된 공개키는 서명할 필요가 없다. 이 때문에 비트코인에서 서명되는건 트랜잭션이 아니라 참조하고있는 출력들의 ScriptPubKey를 저장하고 있는 입력의 데이터가 포함된 잘려진 (Trimmed) 복사본이다.

잘려진 트랜잭션 복사본을 얻는 자세한 과정은 여기를 참조하라. 오래된 문서이지만 더 신뢰할 수 있는 정보원을 찾을 수 없었다.

복잡해보이니 코드를 한 번 작성해보자. Sign 메서드부터 구현해보겠다.

func ( tx * Transaction ) Sign ( privKey ecdsa . PrivateKey , prevTXs map [ string ] Transaction ) { if tx . IsCoinbase () { return } txCopy := tx . TrimmedCopy () for inID , vin := range txCopy . Vin { prevTx := prevTxs [ hex . EncodeToString ( vin . Txid )] txCopy . Vin [ inID ]. Signature = nil txCopy . Vin [ inID ]. PubKey = prevTx . Vout [ vin . Vout ]. PubKeyHash txCopy . ID = txCopy . Hash () txCopy . Vin [ inID ]. PubKey = nil r , s , err := ecdsa . Sign ( rand . Reader , & privKey , txCopy . ID ) signature := append ( r . Bytes (), s . Bytes () … ) tx . Vin [ inID ]. Signature = signature } }

이 메서드는 개인키와 이전 트랜잭션들의 집합을 인자로 받는다. 이전에도 언급했듯이 트랜잭션을 서명하기 위해선 트랜잭션 입력이 참조하고 있는 이전 출력의 값들이 필요하기 때문에 이 출력들을 가지고 있는 트랜잭션 집합이 필요하다.

한 줄씩 살펴보자.

if tx . IsCoinbase () { return }

코인베이스 트랜잭션에는 실제 입력값이 없기 때문에 서명하지 않는다.

txCopy := tx . TrimmedCopy ()

전체 트랜잭션이 아닌 잘려진 복사본이 서명된다.

func ( tx * Transaction ) TrimmedCopy () Transaction { var inputs [] TXInput var outputs [] TXOutput for _ , vin := range tx . Vin { inputs = append ( inputs , TXInput { vin . Txid , vin . Vout , nil , nil }) } for _ , vout := range tx . Vout { outputs = append ( outputs , TXOutput { vout . Value , vout . PubKeyHash }) } txCopy := Transaction { tx . ID , inputs , outputs } return txCopy }

복사본에는 모든 입력과 출력이 포함되지만 TXInput.Signature와 TXInput.PubKey는 nil로 설정된다.

다음으로 복사본의 각 입력을 순회한다.

for inID , vin := range txCopy . Vin { prevTx := prevTXs [ hex . EncodeToString ( vin . Txid )] txCopy . Vin [ inID ]. Signature = nil txCopy . Vin [ inID ]. PubKey = prevTx . Vout [ vin . Vout ]. PubKeyHash

각 입력을 순회할때마다 Signature는 nil로 PubKey는 참조하고있는 출력의 PubKeyHash로 설정된다. 이 순간, 현재 트랜잭션을 제외한 모든 트랜잭션은 Signature와 PubKey 필드가 nil로 설정된 “빈” 상태이다. 따라서 입력은 별도로 서명된다. 우리가 만들 애플리케이션에서는 필요없지만 비트코인에서는 트랜잭션이 다른 주소를 참조하는 입력을 포함하는 트랜잭션을 허용한다.

txCopy . ID = txCopy . Hash () txCopy . Vin [ inID ]. PubKey = nil

Hash 메서드는 트랜잭션을 직렬화하여 SHA-256 알고리즘으로 해싱한다. 해싱된 값이 우리가 서명할 데이터이다. 해시를 얻고 나면 이후 순회에 영향이 없도록 PubKey 필드를 초기화 해야한다.

이제 핵심 로직을 살펴보자.

r , s , err := ecdsa . Sign ( rand . Reader , * privKey , txCopy . ID ) signature := append ( r . Bytes (), s . Bytes () … ) tx . Vin [ inID ]. Signature = signature

privKey로 txCopy.ID를 서명하고있다. ECDSA 서명은 한 쌍의 숫자로 입력의 Signature 필드에 조합하여 저장한다.

이제 검증 함수를 작성해보자.

func ( tx * Transaction ) Verify ( prevTXs map [ string ] Transaction ) bool { txCopy := tx . TrimmedCopy () curve := elliptic . P256 () for inID , vin := range tx . Vin { prevTx := prevTXs [ hex . EncodeToString ( vin . Txid )] txCopy . Vin [ inID ]. Signature = nil txCopy . Vin [ inID ]. PubKey = prevTx . Vout [ vin . Vout ]. PubKeyHash txCopy . ID = txCopy . Hash () txCopy . Vin [ inID ]. PubKey = nil r := big . Int {} s := big . Int {} sigLen := len ( vin . Signature ) r . SetBytes ( vin . Signature [:( sigLen / 2 )]) s . SetBytes ( vin . Signature [( sigLen / 2 ):]) x := big . Int {} y := big . Int {} keyLen := len ( vin . PubKey ) x . setBytes ( vin . PubKey [:( keyLen / 2 )]) y . setBytes ( vin . PubKey [( keyLen / 2 ):]) rawPubKey := ecdsa . PublicKey { curve , & x , & y } if ecdsa . Verify ( & rawPubKey , txCopy . ID , & r , & s ) == false { return false } } return false }

메서드는 아주 직관적이다. 우선, 동일한 트랜잭션 복사본이 필요하다.

txCopy := tx . TrimmedCopy ()

다음으로 키 쌍을 생성할 때 사용된 것과 동일한 곡선이 필요하다.

curse := elliptic . P256 ()

그 다음 각 입력의 서명을 검사한다.

for inID , vin := range tx . Vin { prevTx := prevTXs [ hex . EncodeToString ( vin . Txid )] txCopy . Vin [ inID ]. Signature = nil txCopy . Vin [ inID ]. PubKey = prevTx . Vout [ vin . Vout ]. PubKeyHash txCopy . ID = txCopy . Hash () txCopy . Vin [ inID ]. PubKey = nil

이 부분은 Sign 메서드와 동일한데 검증을 위해선 동일하게 서명된 데이터가 필요하기 때문이다.

r := big . Int {} s := big . Int {} sigLen := len ( vin . Signature ) r . SetBytes ( vin . Signature [:( sigLen / 2 )]) s . SetBytes ( vin . Signature [( sigLen / 2 ):]) x := big . Int {} y := big . Int {} keyLen := len ( vin . PubKey ) x . SetBytes ( vin . PubKey [:( keyLen / 2 )]) y . SetBytes ( vin . PubKey [( keyLen / 2 ):])

서명은 한 쌍의 숫자이며 공개키는 한 쌍의 좌표이므로 TXInput.Signature와 TXInput.PubKey에 저장된 값들을 풀어내자. 우리는 값을 저장하기 위해 이전에 이 쌍의 값들을 조합했다. 이제는 crypto/ecdsa 함수에서 사용하기 위해 이 값들을 풀어내야한다.

rawPubKey := ecdsa . PublicKey { curve , & x , & y } if ecdsa . Verify ( & rawPubKey , txCopy . ID , & r , & s ) == false { return false } } return true

입력에서 추출한 공개키를 사용해 ecdsa.PublicKey을 생성하고 추출한 서명을 파라미터로 전달해 ecdsa.Verify를 실행한다. 모든 입력이 검증되면 true를 반환하며 하나라도 실패하면 false를 반환한다.

이제 우리는 이전 트랜잭션들을 가져오는 함수가 필요하다.이 함수는 블록체인과의 인터랙션이 필요하기 때문에 Blockchain의 메서드로 만들 것이다.

func ( bc * Blockchain ) FindTransaction ( ID [] byte ) ( Transaction , error ) { bci := bc . Iteractor () for { block := bci . Next () for _ , tx := block . Transactions { if bytes . Compare ( tx . ID , ID ) == 0 { return * tx , nil } if ( block . PrevBlockHash ) == 0 { break } } } return Transaction {}, errors . New ( “Transaction is not found” ) } func ( bc * Blockchain ) SignTransaction ( tx * Transaction , privKey ecdsa . PrivateKey ) { prevTXs := make ( map [ string ] Transaction ) for _ , vin := range tx . Vin { prevTX , err := bc . FindTransaction ( vin . Txid ) prevTXs [ hex . EncodeToString ( prevTX . ID )] = prevTX } tx . Sign ( privKey , prevTXs ) } func ( bc * Blockchain ) VerifyTransaction ( tx * Transaction ) bool { prevTXs := make ( map [ string ] Transaction ) for _ , vin := range tx . Vin { prevTX , err := bc . FindTransaction ( vin . Txid ) prevTXs [ hex . EncodeToString ( prevTX . ID )] = prevTX } tx . Sign ( privKey , prevTXs ) }

이 함수들은 아주 간단하다. FindTransaction은 ID로 트랜잭션을 검색한다 (블록체인의 모든 블록을 순회해야함). SignTransaction은 트랜잭션을 받아 참조하고 있는 트랜잭션들을 찾아 서명한다. VerifyTransaction은 동일한 일을 하나 서명이 아닌 검증 작업을 수행한다.

이제 실제로 트랜잭션에 서명을 하고 검증을 해봐야한다. 서명은 NewUTXOTransaction에서 이루어진다.

func NewUTXOTransaction ( from , to string , amount int , bc * Blockchain ) * Transaction { … tx := Transaction { nil , inputs , outputs } tx . ID = tx . Hash () bc . SignTransaction ( & tx , wallet . PrivateKey ) return & tx }

검증은 트랜잭션이 블록에 추가되기 전에 수행된다.

func ( bc * Blockchain ) MineBlock ( transactions [] * Transaction ) { var lastHash [] byte for _ , tx := range transactions { if bc . VerifyTransaction ( tx ) != true { log . Panic ( “ERROR: Invalid transaction” ) } } }

끝났다! 잘 동작하는지 한 번 더 확인해보자.

$ blockchain_go createwallet Your new address: 1AmVdDvvQ977oVCpUqz7zAPUEiXKrX5avR $ blockchain_go createwallet Your new address: 1NE86r4Esjf53EL7fR86CsfTZpNN42Sfab $ blockchain_go createblockchain -address 1AmVdDvvQ977oVCpUqz7zAPUEiXKrX5avR 000000122348da06c19e5c513710340f4c307d884385da948a205655c6a9d008 Done! $ blockchain_go send -from 1AmVdDvvQ977oVCpUqz7zAPUEiXKrX5avR -to 1NE86r4Esjf53EL7fR86CsfTZpNN42Sfab -amount 6 0000000f3dbb0ab6d56c4e4b9f7479afe8d5a5dad4d2a8823345a1a16cf3347b Success! $ blockchain_go getbalance -address 1AmVdDvvQ977oVCpUqz7zAPUEiXKrX5avR Balance of ‘1AmVdDvvQ977oVCpUqz7zAPUEiXKrX5avR’: 4 $ blockchain_go getbalance -address 1NE86r4Esjf53EL7fR86CsfTZpNN42Sfab Balance of ‘1NE86r4Esjf53EL7fR86CsfTZpNN42Sfab’: 6

문제없이 잘 동작한다!

서명되지 않은 트랜잭션은 채굴할 수 없음을 확인해보기 위해 NewUTXOTransaction에서 bc.SignTransaction(&tx, wallet.PrivateKey) 호출을 주석 처리 해보자.

func NewUTXOTransaction ( from , to string , amount int , bc * Blockchain ) * Transaction { … tx := Transaction { nil , inputs , outputs } tx . ID = tx . Hash () // bc.SignTransaction(&tx, wallet.PrivateKey) return & tx }

$ go install $ blockchain_go send -from 1AmVdDvvQ977oVCpUqz7zAPUEiXKrX5avR -to 1NE86r4Esjf53EL7fR86CsfTZpNN42Sfab -amount 1 2017/09/12 16:28:15 ERROR: Invalid transaction

결론

우리는 지금까지 비트코인의 많은 핵심 기능들을 구현했다. 이제 네트워킹을 제외한 거의 모든것이 구현되었다. 다음 파트에서는 트랜잭션을 마무리 할 것이다.

블록체어 — 만능 블록체인 탐색기 및 검색엔진

블록체어는 일반 사용자, 개발팀,

연구기관이 블록체인 데이터에

쉽게 접근할 수 있도록 돕는

제품을 개발합니다.

블록체어는 하나의 검색 엔진에 다양한 블록체인을 통합한 최초의 블록체인 탐색기입니다.

현재 목표는 블록체인과 암호화폐에 관심이 있는 다양한 사용자에게 블록체인 정보를 보다 쉽게 접근할 수 있도록 노력하고 있으며, 제품 개발 시 무엇보다 중요한 사용자의 개인 정보 보안을 지키기 위해 최선을 다하고 있습니다.

블록 체인 지갑이란 무엇이며 어떻게 작동합니까?

what is blockchain wallet how does it work

이 튜토리얼은 블록 체인 지갑이란 무엇이며 그 유형과 작동 원리를 설명합니다. 블록 체인 지갑 주소 및 생성 방법에 대해서도 배우게됩니다. :

이전에 블록 체인 애플리케이션 튜토리얼 블록 체인 튜토리얼 시리즈 , 우리는 조직 설정에서 블록 체인을 통합하는 여러 단계를 보았습니다.

블록 체인은 블록 체인 네트워크의 분산 된 사용자가 서로 직접 통신 할뿐만 아니라 서로 가치를 거래 할 수 있도록합니다. 이러한 모든 작업은 중개자 또는 단일 실패 지점 없이도 암호화의 이점으로 안전하게 이루어집니다.

저비용, 고속을 포함한 P2P 거래 및 통신의 이점은 사람의 검증을 통한 신뢰의 필요성이 제거되거나 최소화 될 때 발생합니다.

단일 실패 지점을 피하려면 은행을 통해 다른 사람에게 거래를 보내는 경우 해당 거래가 수동 또는 자동으로 확인 될 때까지 기다려야합니다. 내부 또는 외부 요인으로 인해 뱅킹 서비스를 사용할 수 없다는 것은 거래 할 수없고 기다려야 함을 의미합니다.

블록 체인의 경우 분산 네트워크는 해당 트랜잭션이 분산 플랫폼에서 파일을 저장 또는 처리하거나 다른 피어에게 암호화를 보내는 것을 의미하든 관계없이 많은 피어가 트랜잭션을 수락하고 승인 할 수 있도록합니다. 네트워크에서 일부 검증자를 사용할 수 없더라도 거래 검증을 기다릴 필요가 없습니다.

블록 체인 지갑을 사용하면 사용자가 블록 체인에서 가치를 보내고, 받고, 저장하고, 교환 할 수있을뿐만 아니라 블록 체인에서 자산의 가치를 모니터링하고 관리 할 수 ​​있습니다.

이 튜토리얼에서는 블록 체인 지갑이 무엇인지, 세부적인 작동 방식과 이러한 지갑을 사용하는 방법에 대해 자세히 설명합니다. 기술이 발전하고 더 많은 혁신이 등장함에 따라 지갑도 계속 개선되고 있으며 블록 체인 지갑 유형이라는 섹션에서이를 확인할 것입니다.

마지막으로 블록 체인 지갑 사용의 이점에 대해 논의하고 이러한 이점을 극대화하고 블록 체인 지갑 사용시 문제를 방지하기위한 몇 가지 팁을 나열합니다.

학습 내용 :

블록 체인 지갑이란?

블록 체인 지갑에는 거래 추적, 차트 및 소셜 기능과 같은 많은 기능이 있습니다.

블록 체인 지갑은 블록 체인에서 실행되고 개인 및 공개 키를 저장하고 해당 키와 관련된 모든 트랜잭션을 블록 체인에 모니터링하고 유지하는 디지털 소프트웨어입니다. 이상적으로는 블록 체인 지갑은 암호 화폐를 저장하지 않고 이러한 키와 관련된 모든 기록은 지갑이 호스팅되는 블록 체인에 저장됩니다.

의미하는 바는 지갑이 해당 ID와 관련된 모든 거래를 추적 할 수있는 ID를 제공한다는 것입니다.

블록 체인 ID는 공개 키 및 개인 키와 연결된 블록 체인 지갑 주소입니다.

실제로 블록 체인 지갑을 사용하면 사용자가 블록 체인에서 디지털 자산을 저장, 전송, 수신 및 관리 할 수 ​​있습니다. 비트 코인, 이더 리움, 라이트 코인 등의 단일 또는 여러 유형의 블록 체인 자산을 저장, 전송, 수신 및 관리하는 데 사용할 수 있습니다.

블록 체인 지갑은 현금 지갑과 비교할 수 있습니다.

블록 체인 지갑에 대한 기본 사실은 다음과 같습니다.

지갑은 동일한 또는 다른 블록 체인에서 다른 지갑과 상호 작용하는 데 필요한 모든 기능과 자산을 안전하게 유지하고 관리하는 데 필요한 기능을 제공해야합니다.

지갑의 모든 거래는 보안상의 이유로 암호화 방식으로 할당됩니다.

블록 체인 지갑은 컴퓨터, 휴대폰 및 기타 장치에서 실행되거나 브라우저 플러그인 및 확장 프로그램으로 실행될 수 있습니다.

사용자가 장치에 소프트웨어를 다운로드하고 설치할 수 있지만 지갑은 개인용입니다. 다운로드 후 사용자는 고유 한 식별자, 암호 및 기타 안전 메커니즘이있는 개인 지갑을 만들어야합니다. 사용자는 소유권을 증명하기 위해 액세스 권한을 얻은 경우에만 지갑에서 거래 할 수 있습니다. 그러나 은행 계좌로만 누군가에게 돈을 보낼 수있는 것과 같은 방법으로 지갑 ID가있는 사람에게만 암호화 또는 기타 디지털 자산을 보낼 수 있습니다.

최신 암호화 지갑에는 통합 API가 함께 제공되어 다른 플랫폼에서 데이터를 가져옵니다. 다른 사람들은 데이터를 가져와 차트 및 암호화 시장 분석을 수행하여 사용자가 암호 화폐에 대한 거래 결정을 수익성있게 내릴 수 있습니다. 온라인으로 다른 사용자와 이메일을 보내고 채팅하거나 상태를 게시하고 거래 관행을 따르고 복사 할 수있는 소셜 기능 읽기 이력, 다양한 암호 화폐 가격을 포함한 거래 추적.

블록 체인 지갑 주소

지갑 주소는 다음과 같습니다. 16KRo4Zfp7f5tGwdoKCAnLJXj1PVSbOnDl

소프트웨어가 블록 체인에서 실행되는 동안 개인 블록 체인 지갑은 지갑 주소라고하는 무작위로 생성 된 32 개의 영숫자 문자로 정의되며 은행 계좌 번호로 은행 계좌를 정의하는 것과 같습니다.

블록 체인 지갑을 사용하면 이러한 주소를 생성 할 수 있으며 여러 주소를 생성 할 수 있습니다.

지갑에서 거래의 프라이버시를 유지하기 위해 대부분의 지갑은 새로운 거래마다 새 주소를 자동으로 생성합니다. 그러나 사용자는 이전에 사용한 주소로 자산을 받거나 보낼 수 있으며 자산은 여전히 ​​동일한 지갑에 보관됩니다.

지갑은 각 주소에 대한 모든 거래 기록을 유지하고 이전에 사용한 모든 주소의 모든 거래를 추적 할 수 있으므로 프로세스를 더욱 투명하게 만듭니다.

블록 체인 지갑 주소 생성

지갑을 사용하면 공개 지갑 주소를 생성하는 것은 쉽지만 공개 키와 연결하는 것은 수학적 과정입니다.

지갑 주소는 공개 키에서 생성됩니다. 예를 들어 모든 비트 코인 지갑은 P2PKH 주소를 생성 할 수 있으며, P2PKH는 Pay To Public Key Hash의 약식입니다.

비트 코인을 인터넷 IP 주소로 직접 보내거나 지불하는 것이 가능했지만, 그러한 지불이 중간자 공격의 희생자가 될 것이 분명 해졌고이 옵션은 비활성화되었습니다.

이제 비트 코인 지갑은 가능한 한 많은 P2PKH 주소를 찾을 수 있으며, 이는 예외적이지 않은 여러 암호화 작업의 조합입니다. 비트 코인은 ECDSA 암호화 알고리즘을 사용합니다.

이상적으로는 블록 체인에서 지갑 주소는 암호화 알고리즘 및 기타 변환을 통해 공개 키를 해싱 한 결과입니다.

지갑 주소는 사용자가 입력 오류로 인해 피해를 입지 않도록 체크섬을 추가하는 것 외에도 더 읽기 쉬운 방식으로 공개 키를 나타냅니다.

이상적으로 지갑 주소 생성은 공개 키와 암호화 알고리즘으로 시작됩니다.

해싱은 다른 블록 체인에서 다른 결과를 생성합니다. 예를 들어, RIPEMD-160 알고리즘을 통한 해싱은 P2PKH 주소의 시작 부분에 ‘1’이 있고 끝 부분에 4 개의 체크섬 바이트가있는 이유입니다. 4 개의 체크섬 바이트는 SHA256 알고리즘을 사용하고 처음 4 바이트를 사용하여 결과를 두 번 해싱 한 결과입니다.

체크섬은 사용자가 암호 화폐로 돈을 보낼 때 오타를 방지하는 데 도움이됩니다. 예를 들어 암호를 보내려는 사용자가 주소 항목에 주소를 붙여 넣으면 시스템이 확인을 수행해야합니다. 접두사를 확인하고 체크섬을 계산하여 항목에 붙여 넣은 주소와 일치하는지 확인합니다. 일치하지 않을 경우 시스템은 붙여 넣은 주소를 거부하고 오타 발생시 잘못된 주소로 자금을 송금 할 수 없게됩니다.

암호를 보내려는 사용자가 주소 항목에 주소를 붙여 넣으면 시스템이 확인을 수행해야합니다. 접두사를 확인하고 체크섬을 계산하여 항목에 붙여 넣은 주소와 일치하는지 확인합니다. 일치하지 않을 경우 시스템은 붙여 넣은 주소를 거부하고 오타 발생시 잘못된 주소로 자금을 송금 할 수 없게됩니다. 비트 코인 지갑은 P2PKH 주소를 지원할 수 있지만 다른 블록 체인 지갑은 다른 유형의 주소를 사용하여 다른 유연한 지불 방법으로 이러한 블록 체인 네트워크에서 생성 된 개인 키를 통해 전송 된 거래를 확인할 수 있습니다.

블록 체인 지갑은 지갑의 기능을 확장하기 위해 둘 이상의 유형의 지갑 주소를 지원할 수 있습니다. 안 예 P2PKH 주소 외에도 비트 코인 지갑에서 P2SH 주소를 지원합니다. P2SH는 Pay to Script Hash의 약자입니다. 이 지원을 통해 공개 키의 해시가 아닌 스크립트의 해시로 지불을 보낼 수 있습니다. 물론 P2PKH 주소는 여전히 지원되며 P2SH가 추가 된 경우에만 지원됩니다. P2SH의 경우 트랜잭션 발신자는 스크립트로 트랜잭션에 서명해야하며 수신자는 전송 된 스크립트가 스크립트에 대한 해시와 일치하는지 확인해야합니다.

P2PKH 주소 외에도 비트 코인 지갑에서 P2SH 주소를 지원합니다. P2SH는 Pay to Script Hash의 약자입니다. 이 지원을 통해 공개 키의 해시가 아닌 스크립트의 해시로 지불을 보낼 수 있습니다. 물론 P2PKH 주소는 여전히 지원되며 P2SH가 추가 된 경우에만 지원됩니다. P2SH의 경우 트랜잭션 발신자는 스크립트로 트랜잭션에 서명해야하며 수신자는 전송 된 스크립트가 스크립트에 대한 해시와 일치하는지 확인해야합니다. P2PKH 주소 지원을 통해 다중 서명 주소와 같은 방법을 블록 체인에서 사용할 수 있습니다.

다중 서명 주소를 사용하면 둘 이상의 당사자가 개인 키를 갖고 있으며 유효한 것으로 수락 되려면 트랜잭션에 서명해야합니다. 안 예 자금을 사용하는 데 필요한 두 당사자 또는 두 명의 증인의 서명으로 확보 된 그룹 또는 조직 자금입니다. 다중 서명 주소의 경우 두 당사자가 필요한 스크립트를 요약하는 정보를 제공합니다. 예를 들어 비트 코인에서 이러한 주소는 접두사 05를 사용하는데, 이는 ‘3’으로 시작하는 이유입니다.

자금을 사용하는 데 필요한 두 당사자 또는 두 명의 증인의 서명으로 확보 된 그룹 또는 조직 자금입니다. 다중 서명 주소의 경우 두 당사자가 필요한 스크립트를 요약하는 정보를 제공합니다. 비트 코인에서 이러한 주소는 접두사 05를 사용하는데, 이는 ‘3’으로 시작하는 이유입니다. 블록 체인 네트워크는 다른 RIPEMD-160 알고리즘 접두사를 사용하여 지갑 주소의 시작 부분에 다른 문자로 끝날 수 있습니다. 예를 들어 접두사 ‘1’로 시작하는 대신 Dash, Litecoin 및 Dogecoin과 같은 altcoin은 RIPEMD-160의 다른 접두사를 사용하여 주소 시작 부분에서 다른 문자로 시작합니다. 다시 말하지만, 서로 다른 블록 체인 네트워크는 서로 다른 암호화 알고리즘을 사용하여 개인 및 공개 키와 지갑 주소를 생성 할 수 있습니다.

지갑과 블록 체인의 차이점

블록 체인 지갑 전체 네트워크에 대한 모든 거래 기록을 추적합니다. 특정 주소 또는 개인 및 공개 키와 관련된 트랜잭션을 추적합니다. 네트워크의 통화 시스템처럼 작동 은행 계좌와 같은 역할 어떤 키도 보유하지 않습니다 특정 지갑 주소와 관련된 암호 화폐를 잠금 해제하는 데 필요한 개인 키를 보유합니다. 각각 암호화 방식으로 연결된 정보 블록을 포함합니다. 암호화 방식으로 연결된 개인 및 공개 키 포함

블록 체인 지갑은 어떻게 작동합니까?

블록 체인 지갑은 암호화에 의해 보호되며, 이것의 기본은 한 쌍의 키 (공개 및 개인 키) 생성을 포함합니다. 이들은 암호를 수학적으로 보호하는 데 사용됩니다.

(나는) 누군가에게 지갑 주소를 줄 때, 그들이 당신에게 코인이나 암호 화폐를 보낼 때마다 그들은 당신의 공개 주소에 암호 화폐를 할당하는 것입니다. 공개 주소는 지갑 주소가 아니라 지갑 주소의 해시 형식입니다. 해시 함수는 공개적으로 알려지지 않았지만 공개 주소, 지갑 주소와 관련된 주어진 출력에 대한 입력을 암호화하는 데 사용됩니다.

(ii) 개인 키는 공개 키 및 지갑 주소와 연결되어 있기 때문에 코인 발신자가 암호화 한 정보를 해독하고 콘텐츠를 잠금 해제하는 데 사용할 수있는 유일한 키입니다. 이것이 여러분이 암호 화폐에 액세스하는 방법입니다.

(iii) 암호 화폐를 보내기 위해 지갑 소유자는 거래를 블록 체인 네트워크로 보내기 전에 개인 키를 사용하여 거래에 서명합니다. 트랜잭션이 공개되면 네트워크의 검증 자, 즉 노드는 트랜잭션에 서명하는 데 사용되는 개인 키와 관련된 공개적으로 사용 가능한 공개 키를 사용하여 트랜잭션이 인증되고 유효한지 확인한 다음 허용합니다. 그것을 통해.

아래 이미지는 자금을 보낼 때 블록 체인 지갑에서 거래에 서명하는 것을 보여줍니다.

[영상 출처 ]

개인 키에 의해 생성 된 각 트랜잭션에는 고유 한 디지털 서명이 포함되어 있으므로 동일한 개인 키를 사용하여 여러 서명을 생성하는 경우에도 다른 것과 복사하거나 유사하기 어렵습니다. 물론 개인 정보를 유지하고 거래 보안을 강화하기 위해 사용자는 각 주소를 한 번만 사용하는 것이 좋습니다.

(iv) 거래 수신자는 보낸 암호 화폐가 지갑 주소와 관련된 공개 키에 보낸 사람에 의해 할당된다는 사실에 의해 인증됩니다. 받는 사람의 개인 키는 지갑에 반영된 금액과 금액을 잠금 해제하는 데 사용됩니다. 의미하는 바는 암호화가 할당 된 공개 주소와 관련된 개인 키를 가진 사용자가 암호화를 사용할 권한과 권리를 가지고 있다는 것입니다.

(V) 이 아이디어는 암호 화폐 거래를 촉진하기 위해 암호 화폐 거래소 및 기타 플랫폼에 적용됩니다. 사람이 지갑을 사용하여 메시지를 보낼 때 개인 키로 메시지에 서명합니다.

블록 체인 지갑의 유형

지갑에는 두 가지 주요 클래스가 있습니다. 하드웨어 및 소프트웨어 지갑 . 또 다른 주요 세분은 온라인 및 오프라인 지갑.

온라인 지갑은 핫 지갑이라고도하며 온라인 또는 인터넷에 연결된 상태에서 사용됩니다. 여기에는 웹 지갑이 포함됩니다. 오프라인 지갑은 개인 키를 오프라인으로 저장하고 인터넷에 연결하지 않고도 거래에 서명하는 데 사용됩니다. 여기에는 모든 하드웨어 지갑과 종이 지갑이 포함됩니다.

또 다른 분류는 결정 론적 및 비 결정적 지갑 공개 키와 개인 키의 관계 또는 존재하지 않는 관계에 따라 다릅니다.

그러나 지갑은 보관하고 사용할 수있는 플랫폼에 따라 유형으로 세분화 할 수 있습니다. 우리는 또한 그들이 사용하는 기술을 기반으로 다양한 유형의 블록 체인 지갑을 가지고 있습니다.

# 1) 비 결정적 지갑

이러한 유형은 지갑에서 생성 된 개인 키가 관련이없는 유형입니다. 지갑은 하나 이상의 개인 키를 생성 할 수 있지만, 예를 들어 공통 복구 문구 또는 시드를 공유하기 위해 키가 서로 관련이 없으므로 관리 문제가 발생합니다. 각 키를 백업하는 것이 중요하므로 더 많은 키를 만들면 관리에 문제가 발생합니다.

# 2) 결정 론적 지갑

이들은 지갑에서 생성 된 개인 키가 모두 서로 다시 복구 시드 (24 단어 길이의 복구 문구)와 관련되어있는 것입니다. 사용자는 시드로 지갑을 백업하기 만하면 시드를 사용하여 모든 개인 키를 복구 할 수 있습니다. 대부분의 현대 지갑은 결정적입니다.

결정 론적 지갑은 모든 개인 키를 생성하기 위해 시드에 단일 해시 함수를 적용합니다. 시드는 모든 주소와 개인 키가 포함 된 지갑을 복구하는 데 사용됩니다.

계층 적 결정 론적 지갑에는 자녀와 손자 관계를 통해 관련된 하위 지갑이 있습니다. 이러한 종류의 지갑과 하위 지갑 간의 관계를 활성화하기 위해 이러한 유형의 지갑은 BIP-32 형식을 지원합니다.

이러한 종류의 HD 지갑은 회사가 비용을 추적하는 데 도움이되도록 다른 부서 및 지점에 키를 할당하려는 조직 환경에서 유용 할 수 있습니다.

# 3) 하드웨어 지갑

이들은 개인 키와 공용 주소를 저장하고 관리하고 트랜잭션에 서명하는 데 사용되는 하드웨어 장치입니다.

대부분의 하드웨어 지갑은 OLED 화면이있는 USB와 유사한 장치이며 수행되는 활동을 관찰하는 데 사용됩니다. 사이드 버튼은 트랜잭션에 서명하고 실행하려는 기능을 스크롤하고 선택하는 것과 같은 인터페이스를 탐색하는 데 사용됩니다.

이 장치는 손가락 크기만큼 작고 PC에 연결됩니다. USB를 통한 기타 휴대용 장치. 다양한 암호 화폐를위한 기본 데스크톱 앱이 함께 제공됩니다. 이러한 앱과 동기화됩니다.

하드웨어 지갑의 가격은 약 $ 70- $ 150이지만 그 비용으로 가장 안전한 암호 화폐 지갑으로 간주됩니다. 키를 오프라인으로 유지하기 때문입니다. 예 BTC와 500 개 이상의 ERC-20 토큰을 포함하여 22 개 이상의 암호 화폐를 저장할 수있는 Trezor 및 Ledger가 포함됩니다.

BTC와 500 개 이상의 ERC-20 토큰을 포함하여 22 개 이상의 암호 화폐를 저장할 수있는 Trezor 및 Ledger가 포함됩니다. 하드웨어 지갑은 암호 화폐에서 많은 가치를 보유하거나 취급하는 대규모 조직에 가장 적합합니다.

# 4) 종이 지갑

암호화 소유자는 개인 키를 안전하게 유지해야합니다. 좋은 대안은 종이에 키를 인쇄 한 다음 안전한 장소에 저장하고 나중에 암호 화폐를 사용할 때 참조 할 수있는 것입니다.

종이가 제대로 보호되지 않으면 쉽게 손상되거나 제 3자가 액세스 할 수 있지만 이는 암호 화폐를 보호하는 가장 안전한 방법 중 일부입니다. 모든 암호 화폐가 종이 지갑 옵션을 제공하는 것은 아닙니다.

비트 코인 또는 기타 암호 화폐를 장기간 보관할 때는 종이 지갑을 사용하는 것이 가장 좋습니다.

종이 지갑을 만드는 과정은 해당 암호 화폐에 따라 다릅니다. 오프라인으로 만들 수 있습니다. 예를 들어 비트 코인 종이 지갑을 만들려면 다운로드하고 저장하기 만하면됩니다. bitaddress.org , 인터넷에 연결되지 않은 상태에서 웹 페이지를 연 다음 페이지 위로 마우스를 가져 가면 100 % 임의성이 생성됩니다. 이 페이지에서 종이 지갑 옵션을 클릭하면 하나 이상의 지갑 주소와 개인 키로 구성된 종이 지갑이 생성됩니다. 이 파일을 인쇄하고 주요 부분을 안전하고 안전하게 보관하십시오. 그런 다음 이러한 주소를 사용하여 개인 키가 안전하고 안전하다는 것을 알고 Bitcoin을 저장할 수 있습니다.

비트 코인 종이 지갑을 만들려면 다운로드하고 저장하기 만하면됩니다. bitaddress.org , 인터넷에 연결되지 않은 상태에서 웹 페이지를 연 다음 페이지 위로 마우스를 가져 가면 100 % 임의성이 생성됩니다. 이 페이지에서 종이 지갑 옵션을 클릭하면 하나 이상의 지갑 주소와 개인 키로 구성된 종이 지갑이 생성됩니다. 이 파일을 인쇄하고 주요 부분을 안전하고 안전하게 보관하십시오. 그런 다음 이러한 주소를 사용하여 개인 키가 안전하고 안전하다는 것을 알고 Bitcoin을 저장할 수 있습니다. 종이 지갑은 잠금을 해제하기 위해 암호로 보호되는 추가 보안 계층을 가질 수 있습니다.

# 5) 데스크탑 지갑

Coinomi 데스크탑 지갑 :

[영상 출처 ]

데스크탑 지갑은 주요 PC에 설치되고 사용되는 소프트웨어 유형입니다. Windows, Mac 및 Linux와 같은 기반 운영 체제. 거의 모든 다른 암호 화폐는 데스크톱 기반 지갑을 출시하는 것으로 시작됩니다. 데스크톱 지갑에는 브라우저에 설치된 웹 브라우저 확장 및 플러그인도 포함됩니다.

여기에는 MetaMask Ether 지갑과 Jaxx의 Chrome 확장 프로그램이 포함됩니다.

데스크톱이나 노트북이 인터넷에 연결되고 엄격한 인터넷 보안 조치를 따르지 않고 사용하면 온라인에서 보안이 손상 될 수 있기 때문에 가장 안전한 옵션은 아닙니다. 이러한 조치에는 최신 바이러스 백신 프로그램, 맬웨어 방지 및 강력한 방화벽 절차 사용이 포함됩니다.

대체로 인터넷에 연결되는 소프트웨어에는 추가 보안 및 보호 조치가 필요합니다.

데스크탑 지갑의 유형은 다음과 같습니다. 출애굽기, 비트 코인 코어 및 일렉 트럼.

# 6) 모바일 지갑

모바일 지갑은 Android, iOS 앱 또는 기타 휴대용 장치에 전화 애플리케이션으로 설치됩니다. 어느 정도까지 브라우저에서 작동하는 확장 및 플러그인 지갑은 이러한 장치에서 작동 할 수있는 한 모바일로 분류 될 수 있습니다.

이동 중에도 암호화를 사용할 수 있지만 장치가 항상 인터넷에 연결되어 있기 때문에 가장 안전한 지갑은 아닙니다. 일부는 사용자가 디바이스에서 개인 키를 오프라인으로 저장할 수 있도록합니다.

모바일 지갑 소프트웨어의 예는 다음과 같습니다. 균사체, 코이 노미, 일렉 트럼.

# 7) 웹 지갑

[영상 출처 ]

웹 지갑은 항상 인터넷에 연결되는 일종의 핫 지갑입니다. 사용자가 웹 사이트 지갑 주소를 열고 인터넷에 로그인하는 방식으로 브라우저에서 실행되는 애플리케이션입니다. 따라서 Google Chrome, Firefox 및 Internet Explorer를 통해 액세스 할 수 있습니다.

이 지갑은 이러한 앱이 실행되는 서버의 인터넷에 개인 키를 저장하며, 일부는 사용자가 오프라인으로 키를 저장할 수 있도록 허용하지만 대부분 클라우드에 있습니다. 예를 들어 MyEtherWallet 및 MetaMask와 같은 호스팅되지 않은 지갑은 서버에 키를 저장하지 않으며 사용자가이를 오프라인에서 다운로드하고 저장할 수 있도록합니다. 호스팅 된 지갑에는 Coinbase 및 CEX.io가 포함됩니다.

# 8) 단일 또는 다중 통화 지갑

단일 통화 지갑은 단일 암호 화폐를 저장하는 반면 다중 통화 지갑은 여러 암호 화폐를 저장합니다. 다중 통화 지갑은 여러 암호화 유형을 다루는 모든 사람의 작업을 단순화하므로 각각에 대해 지갑을 설치할 필요가 없습니다. 하드웨어, 웹, 모바일 지갑 또는 확장 / 플러그인이 될 수 있습니다.

블록 체인 지갑을 생성하고 사용하여 암호 화폐로 전송, 저장, 수신 또는 구매하는 방법은 무엇입니까?

블록 체인 지갑 주소는 지갑에서 생성하거나 다중 서명 주소를 위해 bitcoinaddress.org 및 BitHalo와 같은 웹 페이지에서 오프라인으로 생성 할 수 있습니다.

대부분의 암호 화폐의 경우 지갑 생성은 암호 화폐의 기본 지갑 소프트웨어를 다운로드하고 지갑 주소를 생성하는 것으로 시작됩니다. 일부는 사용자가 가입 및 계정을 요구하지만 일부는 그렇지 않습니다. 중앙 집중식 거래소에 호스팅 된 지갑은 이메일과 이름으로 등록한 다음 확인 및 KYC를 수행해야 지갑에 액세스하여 암호화를 보낼 수 있습니다.

대부분의 지갑 사용자의 경우 소프트웨어를 다운로드 한 후 지갑 주소를 생성하는 동안 대부분의 경우 개인 키를 다운로드하여 장치에 키 저장소 파일로 저장하거나 복구 암호를 기록하고 보호 할 수 있습니다. 기기를 분실 한 경우 지갑을 복구하는 데 사용됩니다. 그런 다음 지갑 계정 생성을 진행할 수 있습니다.

대부분의 지갑을 사용하면 비밀번호 및 AUTHY 인증 기술과 같은 추가 보안 기능을 사용할 수 있습니다. 모바일 장치에 AUTHY 또는 Google 또는 기타 인증 앱을 다운로드 한 다음 지갑의 보안 기능에 액세스하고 모바일 앱에 지갑 인증 자 계정을 추가하기 만하면됩니다. 지갑에 로그인 할 때마다 앱에서 액세스 코드를 받게됩니다. 기타 추가 기능으로는 지갑에 로그인을 시도 할 때마다 이메일로 전송되는 일회성 링크와 로그인을 허용하기 위해 클릭해야하는 링크가 있습니다. 기타 추가 보안 기능에는 문자 메시지를 통해 전송되는 모바일 기반 로그인 코드 또는 지갑에 로그인하려고 할 때마다 장치로 전화를 겁니다.

지갑에 로그인하여 지갑 주소를 얻거나 생성 한 다음 해당 지갑 주소로 암호 화폐를 보내기 만하면 암호 화폐를 지갑으로 쉽게 보낼 수 있습니다. 지갑에서 보내는 것은 잔액을 사용하기 위해 보내려는 암호화와 호환되어야하는 외부 지갑 주소로 또는 일부를 보내서 사용하는 것을 포함합니다. 그렇지 않으면 잘못된 주소로 보내지면 암호를 잃을 위험이 있습니다.

블록 체인 지갑 사용의 이점과 과제

혜택:

전환의 어려움과 외환 비용없이 모든 지역에서 국경없는 거래를 촉진합니다.

거래 중개자가 없습니다.

특히 엄청난 양의 돈을 거래하는 사람들에게 매우 낮은 거래 비용.

암호화로 인한 트랜잭션의 보안 및 개인 정보 보호.

레거시 뱅킹 방법에 비해 더 빠른 거래.

암호 화폐 사용의 이점이 발생합니다.

합법적이고 복잡한 절차와 검증이 필요한 모바일 볼트 또는 은행 계좌를 취득하는 것에 비해 간단한 가입.

관리 및 생성이 쉽습니다. 진입 장벽이 낮습니다.

과제 :

전 세계적으로 낮은 수용 및 적용.

레거시 및 네트워크에 대한 제한된 지원이 제한됩니다.

암호 화폐의 변동성.

은행이 부족하거나 은행이없는 사람들 사이에서 장치에 대한 제한된 액세스.

블록 체인 지갑 사용에 대한 팁 :

개인 키를 제어하고 로컬 장치 및 / 또는 오프라인에 저장할 수있는 하나를 선택하십시오.

백업 시드 문구 및 비밀번호와 같은 추가 보안 기능이있는 것을 선택하십시오.

유지 관리 및 개선을 위해 활발한 개발 커뮤니티가있는 것을 선택하십시오.

사용하기 쉬운 것을 선택하십시오.

귀하의 / 및 가능한 경우 귀하에게 적합한 여러 운영 체제와 호환되는 것을 선택하십시오.

HD 지갑은 자체적으로 주소를 생성해야하며 각 개인 키를 자체적으로 백업하기 위해 과도한 수하물을 생성하지 않아야합니다.

KYC가 필요하지 않은 곳에서 작업하십시오.

데이 트레이딩, 호들 링, 장기 및 단기 저축 등과 같은 요구 사항을 충족하는 것을 선택하십시오.

결론

이 튜토리얼에서 블록 체인 지갑의 기본 아이디어를 살펴 보았습니다. 또한 블록 체인 지갑이 개인 키를 저장하는 데 사용되며 이러한 키는 공개적으로 사용할 수있는 호환 가능한 공개 키를 사용하여 다른 사람이 보낸 트랜잭션에 서명하고 데이터를 잠금 해제합니다. 비 결정적 지갑은 관련이없는 키를 생성하고 주소가 많을 때 관리 문제를 제시합니다.

이에 비해 결정 론적 또는 HD 지갑의 개인 키는 암호를 통해 관련되며 관리하기 쉽습니다. 단일 암호를 사용하여 복구 할 수 있습니다.

우리는 또한 블록 체인 내부의 지갑 적용을 살펴 보았습니다. 블록 체인 지갑의 가장 좋은 응용 프로그램은 블록 체인 암호 화폐입니다. 이 경우 암호화를 저장, 전송 및 수신하는 데 사용됩니다. 생성 된 특정 주소 및 공개 키와 관련된 트랜잭션 기록을 추적하는 데 도움이됩니다.

우리는 또한이 블록 체인 튜토리얼에서 지갑이 소프트웨어 또는 하드웨어의 형태 일 수 있음을 발견했습니다. 마지막으로 지갑 사용의 이점과 과제에 대해 배웠습니다. 그 중에는 기술이 널리 적용되지 않았으며 장치 액세스와 같은 기술적 과제가 있다는 사실도 있습니다.

< | 다음 튜토리얼 >>

블록체인 : 암호키와 비트코인 주소 개념 및 이해 : 암호화폐 지갑 개념, 종류

반응형

암호키와 비트코인 주소의 관계

모든 비트코인 거래에는 블록 상의 장부에 기록되기 위해 유효한 서명이 필요합니다. 이러한 서명은 디지털 키가 있어야 생성되는데, 이러한 디지털 키의 복사본만 가지고 있으면 해당 계좌에서 비트코인을 관리할 수 있습니다. 이 디지털 키는 개인 키(private key)와 공개키(public key)로 구성되어 있습니다. 공개키는 은행의 계좌번호와 유사하고, 개인 키는 비밀 번호(PIN 넘버)또는 계좌를 관리하기 위해 수표에 하는 서명과 유사합니다.

비트코인 네트워크상에서, 공개키는 비트코인을 전송받을 때 사용되며, 개인 키는 전송받은 비트코인을 소비(spend)하기 위해 거래에 서명할 때 사용됩니다. 개인 키를 이용해 직접 거래를 발생시킬 수 있으므로 개인 키는 백업을 해야 하고 항상 소중히 보관해야 합니다. 이 디지털 키는 비트코인 지갑 소프트웨어를 이용해 관리 할 수 있습니다.

비트코인에 접근하는 권한을 주는 한 쌍의 키를 생성하기 위해 공개키 암호법을 사용합니다. 이 과정에서 사용하는 암호함수들은 불가역성(Irreversibility)을 가지기 때문에 역방향으로 계산하는 것이 거의 불가능합니다. 개인 키는 주로 무작위 숫자 추출을 통해 생성되는데, 이렇게 생성된 개인 키로부터 타원곡선 암호법을 이용해 공개키를 생성하게 됩니다.

비트코인의 거래에 있어서 비트코인을 수령하는 대상을 의미하는 것이 바로 비트코인 주소입니다. 대부분의 경우 비트코인 주소는 공개키로부터 생성되며 공개키에 대응됩니다. 따라서 디지털 키와 비트코인 주소의 관계는 다음처럼 표현할 수 있습니다. 개인 키로부터 공개키를 생성하고, 공개키를 이용해서 비트코인 주소를 생성합니다. 비트코인 거래에 사용되는 코인의 소유권을 증명하게 되면 비트코인을 소비할 수 있게 되는데, 이때 서명을 위해 개인 키를 사용합니다.

개인 키는 숫자로 구성되어 있으며 대개 무작위로 숫자를 추출하여 생성합니다. 다시 말해, 1에서 2^256 사이의 숫자를 무작위로 선택하는 것입니다. 이때, 선택한 숫자가 재현 가능하지 않도록 보안이 철저한 엔트로피, 즉, 무작위성을 찾아야 하는데, 비트코인 소프트웨어에서는 난수 생성기를 이용해 256bit의 엔트로피를 만들어냅니다. 이때, 암호학적으로 안전한 난수를 생성하기 위해 프로그래밍 언어가 제공하는 단순한 난수 생성기를 사용하기보단 충분한 엔트로피를 가지고 있는 난수 생성기를 사용하는 것이 좋습니다.

이렇게 생성된 난수를 Base58Check를 통해 인코딩하면 지갑에서 볼 수 있는 형태의 개인 키를 생성할 수 있습니다. Base58은 텍스트에 기반을 둔 2진법 인코딩 포맷으로 비트코인이나 기타 여러 암호화폐에서 사용하기 위해 개발되었습니다. Base 64의 부분집합으로, 대문자, 소문자, 숫자 등을 사용하지만 자주 실수가 발생하거나 특정 글자체에서 동일하게 보일 가능성이 있는 몇몇 문자들을 제외한 58개의 문자를 이용하는 방식입니다.

Base58check의 checksum은 중복 검사를 위한 4바이트 크기의 필드입니다. 이 값은 인코딩 되고 있는 데이터의 끝부분에 추가됩니다. 이것을 이용하면 지갑 소프트웨어가 잘못 입력된 비트코인 주소를 유효한 도착지로 승인하는 것을 방지해줍니다. 비트코인에서 사용자들에게 제공되는 데이터는 간결하고 읽기 쉬우며 에러를 쉽게 발견해주는 Base58check로 인코딩됩니다.

공개키

공개키(Public Key)는 타원 곡선 암호법을 기반으로 하여 개인 키로부터 생성됩니다. 영어로는Elliptic curve cryptography라고 합니다.

블록체인 : 암호키와 비트코인 주소 개념 및 이해 : 암호화폐 지갑 개념, 종류 1

무작위로 생성된 숫자인 개인 키를 출발점으로 해서, 곡선 위에서 미리 정해진 값인 생성 포인트 G를 곱해 곡선상의 다른 곳에 위치한 포인트를 얻음으로써 공개키를 생성할 수 있습니다. 생성 포인트는 모든 비트코인 사용자들마다 항상 동일하기 때문에 개인 키 k에 G를 곱하게 되면 항상 동일한 값의 공개키 K를 얻을 수 있습니다.

그림은 간단한 형태의 타원곡선을 보여줍니다. 이때, 공개키 K의 포인트를 K=(x, y)로 정의할 수 있습니다. G를 곡선에 대입한 후, 해당 포인트에 대한 접선을 그려서 곡선과의 교차점을 찾고, x축에 대칭시킵니다. 이 과정을 반복하여 생성 포인트 G에 대해 여러 개의 k*G를 찾는 것이 목표라고 할 수 있습니다. 이 역시 불가역성을 가지고 있기 때문에 공개키를 이용해 개인 키로 전환하는 것은 불가능합니다.

공개키로 비트코인 주소 생성

비트코인 주소는 나에게 코인을 전송하고자 하는 어떤 노드와도 공유할 수 있습니다. 공개키로부터 생성된 비트코인 주소는 숫자와 글자의 조합으로 이루어져 있고, 숫자 1로 시작합니다. 공개키를 표현하는 수단이자, 공개키에서 생성된 결과물인 비트코인 주소를 생성하는 과정에 대해 아래 플로우 차트를 통해 설명을 드리겠습니다. 비트코인 주소를 공개키로부터 생성하기 위해 일방 암호화 해싱을 이용합니다.

블록체인 : 암호키와 비트코인 주소 개념 및 이해 : 암호화폐 지갑 개념, 종류 2

해시 알고리즘은 임의의 크기의 입력값으로부터 해시값을 생성해내는데, 역방향으로 해시값으로부터 원본 입력값을 알아내는 것은 불가능하다는 특징을 가지고 있습니다. 공개키로부터 비트코인 주소를 만드는 데 사용되는 알고리즘은 보안 해시 알고리즘(SHA)과 RIPEMD입니다. 공개키 K를 가지고 SHA256 함수를 이용해 해싱하면, 256bit 크기의 해시값을 얻을 수 있는데요, 이 값을 다시 RIPEMD160으로 해싱하면 160bit 크기의 숫자가 생성됩니다.

여기서 중요하게 기억하셔야 할 것은, 비트코인 주소는 공개키와 똑같지 않다는 점입니다. 비트코인 주소도 개인 키에 적용한 것과 마찬가지로 Base58check 인코딩을 통해 사용자가 읽을 수 있는 형태로 전환되어 제공됩니다. 생성된 디지털 키는 실제로 네트워크상에 저장되어 있지 않고 지갑이라고 하는 파일에 저장됩니다.

사용자의 지갑 속에 들어 있는 디지털 키는 비트코인 프로토콜과 완전히 독립되어 있고, 인터넷 접근 없이 사용자의 지갑 소프트웨어가 생성하고 관리할 수 있습니다. 대부분의 지갑 구현에서는 개인 키와 공개키가 편의를 위해 한 쌍의 키 형태로 함께 저장됩니다. 하지만 공개키는 개인 키를 기반으로 계산할 수 있기 때문에 개인 키만 저장하는 것도 가능합니다.

지갑

지갑은 기본적으로 5가지 기능을 가지고 있습니다. 첫 번째, 개인 키 (Private key)를 생성할 수 있습니다. 결정적 키 생성법을 이용하면 이전 개인 키로부터 새로운 개인 키를 생성할 수 있고, 개인 키들은 차례로 연결됩니다. 두 번째, 개인 키로부터 공개키(Public key)를 생성할 수 있습니다. 세 번째, 공개키로 주소를 만들 수 있습니다. 지갑은 여러 개의 주소를 생성하고 관리할 수 있습니다. 네 번째, 거래를 승인함으로써 코인을 전송할 수 있습니다. 이는 개인 키로부터 만들어진 특별한 서명으로 거래의 진위를 판별함으로써 이루어집니다. 다섯 번째, 여기서 생겨난 정보를 블록체인 네트워크에 공유, 또는 전파합니다.

비트코인의 유형

비트코인 지갑은 비트코인이 아닌 키를 가지고 있고, 각 사용자들은 키가 들어있는 지갑을 보유하고 있습니다. 키를 생성하는 다양한 방법에 따른 지갑의 구조에 대해서 살펴보겠습니다. 첫 비트코인 클라이언트에서 지갑은 단순히 무작위로 생성된 개인 키를 모아 놓은 장소였습니다.

이러한 유형을 유형-0 비결정적 지갑이라고 하고, ‘키만 한가득’이라는 별명으로 불리기도 합니다. 비결정적 지갑은 관리하거나 백업, 데이터를 불러오기에 복잡한 구조를 가지고 있습니다. 또한 무작위로 뽑힌 키는 한 번 생성된 후, 전부 복사본을 보관해야 한다는 번거로움도 있습니다.

이는 지갑이 자주 백업되어야 함을 의미합니다. 만약 키를 백업하지 않아, 지갑에 접근할 수 없게 되면 키가 관리하는 돈을 모두 잃게 됩니다. 이러한 특징 때문에, 지갑의 유형이 점점 결정적 지갑으로 바뀌는 추세입니다. 결정적 지갑(Deterministic wallet)에는 일방 해시 함수를 이용해 공통 종자에서 얻은 개인 키들이 담겨있습니다.

종자만 있으면 추출키 전부를 복원할 수 있기 때문에 특정 시기에 한 번만 백업하면 됩니다. 또한 import와 export도 종자만 있으면 가능하기 때문에 다른 종류의 지갑 사이에서도 사용자들의 키 전부가 쉽게 이동할 수 있다는 장점이 있습니다. 결정적 지갑 중 가장 발달된 유형이 바로 계층 결정적 지갑입니다.

계층 결정적 지갑에서는 트리 구조에서 생성된 키를 담고 있습니다. 이 구조에서는 부모 키가 자식 키를 생성하고, 자식 키가 손자 키를 만들어 낼 수 있습니다. HD 지갑(Hierarchical Deterministic wallet)은 비결정적 키에 대해 두 가지 주요한 장점을 제공합니다.

첫 번째로는, 수입금을 받기 위한 서브키로 구성된 특정 브랜치가 언제 사용되는지 등 유기적인 구조의 의미를 표현하기 위해 트리 구조가 사용될 수 있다는 점입니다. 키의 브랜치는 각기 다른 브랜치를 각 부서, 자회사 등에 배당함으로써 회사 내의 설정에서 사용될 수 있습니다.

두 번째, 사용자들이 공개키에 대응하는 개인 키에 접근하지 않고도 공개키를 생성할 수 있습니다. 따라서 안전하지 않은 서버나 수신 기능만을 하는 서버에서도 HD 지갑을 사용할 수 있고 각각의 거래에 대해 다른 공개키를 발급하게 됩니다.

블록체인 : 암호키와 비트코인 주소 개념 및 이해 : 암호화폐 지갑 개념, 종류 3

암호화폐 지갑은 개인키 및 공개키를 저장하고 다양한 블록과 상호 작용하여 사용자가 암호화폐를 보내고 받을 수 있도록 하는 소프트웨어입니다. 전통적인 ‘포켓’ 지갑과 달리 디지털 지갑은 화폐를 저장하지 않습니다. 실제로 화폐는 단일 위치에 저장되거나 물리적인 형태로 존재하지 않고, 존재하는 것은 모두 블록체인에 저장된 트랜잭션 레코드 뿐입니다.

암호화폐 지갑은 소프트웨어, 하드웨어 및 종이의 세 가지 카테고리로 분류할 수 있습니다. 소프트웨어 지갑은 데스크톱, 모바일 또는 온라인이 될 수 있습니다. 하드웨어 지갑은 USB와 같은 하드웨어 장치에 사용자의 개인 키를 저장한다는 점에서 소프트웨어 지갑과 다릅니다. 하드웨어 지갑은 트랜잭션을 온라인으로 만들지만, 오프라인으로 저장되므로 보안이 훨씬 더 강화됩니다.

종이 지갑은 사용하기 쉽고 매우 높은 수준의 보안을 제공합니다. 종이 지갑이라는 용어는 단순히 공개키 및 개인 키의 실제 사본 또는 인쇄물을 나타낼 수 있지만, 인쇄된 키 쌍을 안전하게 생성하는 데 사용되는 소프트웨어를 나타낼 수도 있습니다.

참조

http://www.kmooc.kr/courses/course-v1:POSTECHk+CSED490U1+2021_T1/about

반응형

비트코인 블록체인 탐색기 사용 방법

커뮤니티 제출 – 저자: John Ma

요약

공개적 투명성은 암호화폐의 핵심 개념입니다. 블록체인의 큰 장점 중 하나는 소수의 특권적 위치에 있는 사람들에게 정보를 국한시키지 않음으로써 참여의 장을 평등하게 만든다는 것입니다.

그런데 이는 정확히 어떤 의미일까요? 여러분은 옆집에 사는 이가 얼마나 많은 비트코인을 보유하고 있는지 알 수 있을까요? 공개적인 데이터를 직접 확인하고 검증하려면 어떻게 해야 할까요? 이것이 바로 우리가 이번 아티클에서 살펴볼 사항들입니다. 우리는 비트코인에 초점을 맞출 것이지만, 여러분은 라이트코인, 이더리움, 바이낸스 등 거의 모든 자체 블록체인을 위한 전용 블록체인 탐색기를 살펴보실 수 있습니다.

들어가며

여러분은 대금을 지급받지 못하거나 돈을 지불했다고 맹세하는 상대방으로부터 실제로는 아무것도 받지 못한 경우가 있었나요? 오늘날의 금융 시스템에서 이는 “정말로 그랬습니다.”라는 식의 상황으로 끝나거나 제3자의 개입이 필요할 수도 있습니다.

블록체인은 누구나 언제든 정보를 볼 수 있는 공개적인 투명성 개념을 도입하여 이 문제를 해결합니다. 비트코인 이더리움 과 같은 블록체인의 모든 정보는 공개적으로 볼 수 있도록 설계되어 있으며, 이는 트랜잭션(또는 Txs)과 콘트랙트를 간편히 확인하고 검증할 때 유용합니다.

이번 아티클에서는 비트코인 블록 탐색기의 기본적인 구성에 대해 살펴볼 것입니다. 또한, 비트코인 피자 데이 를 탄생시킨 5월 22일의 유명한 트랜잭션도 살펴볼 것입니다.

블록체인 탐색기란 무엇인가요?

블록체인 탐색기는 블록체인의 과거와 현재 상태에 대한 정보를 제공하는 검색 엔진과 같은 것입니다. 이는 특정 결제의 진행 과정을 추적하고자 하거나 주소의 잔고 내역을 추적하고자 할 때 유용할 수 있습니다. 인터넷에 접속할 수 있다면 탐색기를 사용하여 누구나 공개 블록체인의 모든 트랜잭션을 살펴볼 수 있습니다.

블록체인 탐색기는 어떻게 작동하나요?

모든 블록체인에는 커맨드 라인 인터페이스(CLI)가 존재하며, 이를 통해 데이터베이스와 상호작용하고 네트워크 내역을 살펴볼 수 있습니다. 그러나 커맨드 라인 인터페이스 탐색기는 일반적인 사용자에게 친화적이지는 않습니다. 이것이 바로 대부분의 블록체인이 그래픽 사용자 인터페이스(GUI)를 갖춘 탐색기를 통해 보다 친절한 방식으로 정보를 제공하는 이유입니다.

여기서는 일반적으로 사용되는 비트코인 탐색기( blockchain.com )를 살펴보도록 하겠습니다. 비트코인 트랜잭션을 살펴볼 수 있는 또 다른 탐색기들로는 blockchair.com blockcypher.com 이 있습니다.

출처: https://www.blockchain.com/explorer

첫 페이지에서 여러분은 비트코인 블록체인에 대한 자세한 데이터를 확인할 수 있습니다. 여기에는 가격, 해시 레이트 추정치, 일간 트랜잭션 수, 트랜잭션 볼륨 이 포함됩니다. 또한, 가격과 밈풀 크기를 바탕으로 한 차트도 볼 수 있습니다. 아래 쪽에서는 가장 최신 블록 과 트랜잭션을 확인할 수 있습니다.

이곳에서 살펴볼 수 있는 사항들에 대해 조금 더 자세히 알아보도록 하겠습니다.

가격: 다수의 시장에서 집계된 USD 가격 피드입니다. 대부분의 경우, 가격은 피드 제공자에 따라 달라지며, 특정 거래소의 현물 가격을 나타내지는 않습니다.

다수의 시장에서 집계된 USD 가격 피드입니다. 대부분의 경우, 가격은 피드 제공자에 따라 달라지며, 특정 거래소의 현물 가격을 나타내지는 않습니다. 해시 레이트 추정 비율: 블록체인을 보호하기 위해 마이너가 현재 사용하고 있는 연산 능력의 추정치입니다. 이는 작업 증명(PoW) 블록체인 보안을 위한 하나의 프록시로 볼 수도 있습니다.

블록체인을 보호하기 위해 마이너가 현재 사용하고 있는 연산 능력의 추정치입니다. 이는 작업 증명(PoW) 블록체인 보안을 위한 하나의 프록시로 볼 수도 있습니다. 트랜잭션: 지난 24시간 동안 승인된 고유한 트랜잭션 숫자입니다. 트랜잭션이 승인되려면 검증된 블록(성공적으로 마이닝된 블록)에 포함되어야 합니다.

지난 24시간 동안 승인된 고유한 트랜잭션 숫자입니다. 트랜잭션이 승인되려면 검증된 블록(성공적으로 마이닝된 블록)에 포함되어야 합니다. 트랜잭션 볼륨: 지난 24시간 동안 블록체인에서 확인된 모든 출력값을 측정한 것입니다. 비트코인 작동 방식 때문에, 총계에는 “지불” 지갑에 반환되는 미사용 출력값도 변경 사항으로 포함됩니다.

지난 24시간 동안 블록체인에서 확인된 모든 출력값을 측정한 것입니다. 비트코인 작동 방식 때문에, 총계에는 “지불” 지갑에 반환되는 미사용 출력값도 변경 사항으로 포함됩니다. 트랜잭션 볼륨(추정치): 고유 지갑 간에 전송된 실제 트랜잭션 볼륨 추정치(BTC)입니다. 트랜잭션 볼륨(위의)은 지불 지갑으로 반환된 추정 출력값 변경 사항은 제외합니다.

고유 지갑 간에 전송된 실제 트랜잭션 볼륨 추정치(BTC)입니다. 트랜잭션 볼륨(위의)은 지불 지갑으로 반환된 추정 출력값 변경 사항은 제외합니다. 밈풀 크기: 밈풀 크기는 블록에 포함되기를 기다리고 있는 트랜잭션의 종합 크기(바이트)를 추적합니다. 이는 블록체인상의 활동량에 대한 프록시이며, 빠른 승인을 위해 필요한 수수료 지표로 사용될 수 있습니다.

밈풀 크기는 블록에 포함되기를 기다리고 있는 트랜잭션의 종합 크기(바이트)를 추적합니다. 이는 블록체인상의 활동량에 대한 프록시이며, 빠른 승인을 위해 필요한 수수료 지표로 사용될 수 있습니다. 최신 블록: 승인된 블록 목록이 최신순으로 표시됩니다. 여기에는 블록 높이, 타임스탬프, 마이너 이름(알려져 있다면), 블록 크기 등이 포함됩니다. 여러분은 “블록 높이”를 클릭하여 블록에 포함된 트랜잭션 정보를 살펴볼 수 있습니다. “마이너”를 클릭하면 블록 마이너의 주소 정보를 볼 수 있습니다. 마이너의 공개 주소는 마이닝 풀 주소일 수 있습니다. 마이닝 풀에 대해 알아보시려면 이 아티클을 참고해보시기 바랍니다.

승인된 블록 목록이 최신순으로 표시됩니다. 여기에는 블록 높이, 타임스탬프, 마이너 이름(알려져 있다면), 블록 크기 등이 포함됩니다. 여러분은 “블록 높이”를 클릭하여 블록에 포함된 트랜잭션 정보를 살펴볼 수 있습니다. “마이너”를 클릭하면 블록 마이너의 주소 정보를 볼 수 있습니다. 마이너의 공개 주소는 마이닝 풀 주소일 수 있습니다. 마이닝 풀에 대해 알아보시려면 이 아티클을 참고해보시기 바랍니다. 최신 트랜잭션: 밈풀에 제출된 유효한 트랜잭션 목록입니다. 트랜잭션은 유효한 블록에 포함되기 전까지는 승인되지 않은 상태라는 점을 참고하시기 바랍니다.

여러분은 네트워크 난이도 , 트랜잭션 수수료, 평균 승인 시간 과 같은 블록체인에 대한 추가적인 사항들을 이 페이지 에서 확인할 수 있습니다. 일부 블록체인 탐색기에는 API를 연결할 수도 있습니다.

10,000 비트코인 피자 트랜잭션 확인하는 방법

피자 데이는 10,000 비트코인 으로 피자 두 판을 구입한 것을 기념하는 역사적인 비트코인 사건입니다. 블록체인 탐색기를 통해 우리는 이 유명한 트랜잭션에 대해 자세히 살펴볼 수 있습니다.

피자 데이 트랜잭션 해시:

a1075db55d416d3ca199f55b6084e2115b9345e16c5cf302fc80e9d5fbf5d48d

위의 트랜잭션 해시를 비트코인 블록체인 탐색기 검색 창에 복사하면 피자 데이 트랜잭션을 살펴볼 수 있습니다. 또는 이 링크를 통해 트랜잭션 페이지로 이동 하실 수도 있습니다.

페이지 상단에는 트랜잭션 입력값 및 출력값에 대한 요약이 표시됩니다. 왼쪽에서는 피자 값을 지불한 비트코인(총 10,000 BTC)을 확인할 수 있습니다. 이는 오른쪽의 단일 주소 로 전송되었습니다(피자 배달원 소유).

피자 데이 트랜잭션 개요. 출처: blockchain.com

오른쪽의 수령 주소(receiving address) 를 클릭하면 트랜잭션 내역을 볼 수 있습니다. 또한 QR 코드를 스캔하여 해당 문자열을 가져올 수도 있습니다. QR 코드는 트러스트월렛 또는 다른 모바일 암호화폐 지갑 에서 결제를 진행할 때 무척 유용합니다.

피자 데이 수령 주소. 출처: blockchain.com

기존의 피자 데이 트랜잭션 페이지 로 되돌아왔다면, 스크롤을 내려 트랜잭션 세부 정보를 확인할 수 있습니다. 여기에는 트랜잭션 고유 해시, 승인 상태, 타임스탬프, 승인 횟수, 전체 입력값 및 출력값, 마이너 수수료 등이 포함됩니다. 여러분은 10,000 BTC를 피자값으로 지불하면서 0.99 BTC를 마이너에게 트랜잭션 수수료로 지불한 것을 확인할 수 있습니다.

피자 데이 트랜잭션 세부 정보. 출처: blockchain.com

블록 높이( 57,043 )를 클릭하면 트랜잭션이 포함된 블록 세부 정보가 표시됩니다.

피자 데이 블록. 출처: blockchain.com

보시는 것처럼 피자 데이 트랜잭션을 확인한 블록은 특별할 것 없는 블록이었습니다. 총 두 건의 트랜잭션이 있었는데, 하나는 피자 데이 트랜잭션이었고 다른 하나는 마이너의 블록 보상 이었습니다.

오른쪽의 녹색 및 빨간 지구본은 비트코인이 트랜잭션 이후 사용되었는지 하는 여부를 알려줍니다. 피자를 판매한 사람은 10,000 BTC를 다른 주소로 보냈지만, 마이너의 주소는 여전히 블록 보상(50.99 BTC)를 보유하고 있습니다.

마치며

블록체인 탐색기는 퍼블릭 블록체인의 공개적이고 투명한 특성을 활용하는 유용한 도구입니다. 이는 트랜잭션 및 주소 기록을 포함한 네트워크 상태에 대한 유용한 정보를 제공합니다. 이를 통해 간편한 추적 및 검증이 가능합니다.

그러나 이러한 완전한 공개성은 체인 분석을 통해 트랜잭션 및 주소 기록을 매핑하는 것으로 이어질 수 있습니다. 이를 통해 동일한 주소를 여러 번 사용(권장하지 않음)하는 사용자의 주소 익명성을 밝혀낼 수 있습니다. 다른 퍼블릭 블록체인( 모네로 와 같은)은 투명성과 프라이버시 사이의 또 다른 균형점을 지향합니다.

이제 여러분은 블록체인 탐색기가 어떻게 작동하는지 대략적으로 이해하셨습니다. 이를 직접 확인해보시기 바랍니다. 놀라운 비밀을 발견하게 될 수도 있을 것입니다!

비트코인 탐색기와 암호화폐에 대해 더 궁금한 점이 있나요? 바이낸스 아카데미의 Q&A 플랫폼 아카데미 질문(Ask Academy) 을 확인해보세요. 커뮤니티 구성원들이 궁금증을 해결해 줄 것입니다.

키워드에 대한 정보 블록 체인 주소

다음은 Bing에서 블록 체인 주소 주제에 대한 검색 결과입니다. 필요한 경우 더 읽을 수 있습니다.

이 기사는 인터넷의 다양한 출처에서 편집되었습니다. 이 기사가 유용했기를 바랍니다. 이 기사가 유용하다고 생각되면 공유하십시오. 매우 감사합니다!

사람들이 주제에 대해 자주 검색하는 키워드 [불백] 블록체인 백과사전 100 키워드 #8회 : 에어드랍 / 주소 / 공개키 / 개인키

  • 불백
  • 불새
  • 블록체인백과사전
  • 블록체인
  • 에어드랍
  • 주소
  • 공개키
  • 개인키
  • 홍준
  • 정애란
  • 정애란 아나운서
  • 쫄불
[불백] #블록체인 #백과사전 #100 #키워드 ##8회 #: #에어드랍 #/ #주소 #/ #공개키 #/ #개인키


YouTube에서 블록 체인 주소 주제의 다른 동영상 보기

주제에 대한 기사를 시청해 주셔서 감사합니다 [불백] 블록체인 백과사전 100 키워드 #8회 : 에어드랍 / 주소 / 공개키 / 개인키 | 블록 체인 주소, 이 기사가 유용하다고 생각되면 공유하십시오, 매우 감사합니다.

Leave a Comment