개인키와 공개키에 대해 알아보기 전, 블록체인에서의 지갑의 개념을 소개한다.
0. 블록체인에서의 지갑(월렛)
지갑이란?
- 블록체인에서의 지갑(wallet)은 '디지털 자산을 보관하고 관리할 수 있는 디지털 지갑'을 말한다.
- 블록체인 지갑으로 사용자의 개인키와 공개키를 생성, 저장하며, 사용자가 암호화폐를 송신하거나 수신할 수 있다.
- 블록체인 지갑의 유형에는 소프트웨어 지갑, 하드웨어 지갑, 온라인 지갑, 페이퍼 지갑이 있다.
지갑의 구성 요소
- 개인 키와 공개 키
- 블록체인 지갑은 사용자의 개인키와 공개키를 생성하고 저장한다.
- 개인키는 사용자만이 알 수 있는 비밀 키로, 트랜잭션에 디지털 서명을 생성하는 데 사용된다.
- 공개키는 블록체인 네트워크에 공개되며, 다른 사용자들이 암호화폐를 송금할 때 사용된다.
- 지갑 주소
- 지갑 주소는 공개 키를 해싱하여 생성된 문자열로, 지갑 주소를 통해 암호화폐를 수신할 수 있다.
- 일반적으로 길고 복잡한 문자열로 표현된다.
1. 공개키 암호 알고리즘
공개키 암호 알고리즘(비대칭 암호 알고리즘)은
암호화와 복호화에 서로 다른 한 쌍의 키(공개키, 개인키)를 사용하여,
공개키를 통해 누구나 암호화를 할 수 있고, 그렇게 암호화된 내용은 공개키의 쌍인 개인키(공개키의 소유자만 가짐)로만 복호화할 수 있는
암호 알고리즘을 말한다.
공개키 암호 알고리즘의 핵심은 '일방향 함수'로, 한 방향으로는 계산하기가 쉽지만 그 역산은 할 수 없다는 점이다.
이유는 공개키 암호 알고리즘이 소인수 분해와 같은 수학 문제를 기반으로 하여, 컴퓨터가 이 문제를 해결하는 데에는 수천 년에 가까운 시간이 걸리기 때문이다.
때문에 암호학적 서명의 위조가 불가능하여 어떤 대상(즉, 트랜잭션)의 대하여 진위를 검증하는 데 사용된다.
블록체인에서 개인키와 공개키는 '실제 자금 소유자가 결제 지급 트랜잭션에 서명하였고, 이 내용이 위조되지 않았음을 증명하는 것'을 목적으로 한다.
블록체인에서의 거래를 위해서는 블록상의 장부에 기록되기 위한 유효한 서명(디지털 서명)
이 필요하다.
이 서명은 디지털 키가 있어야 생성되는데, 이 디지털 키의 복사본만 가지고 있으면 비트코인을 관리할 수 있다.
이 키는 개인키와 공개키의 한 쌍으로 구성되어있다.
2. 개인키 (Private Key)와 공개키 (Public Key)
개인키 (Private Key)
- 암호화폐를 소유한다고 했을 때 실제 소유하는 것은 '개인 키'를 말한다.
- 개인키는 블록체인 지갑을 만들 때 생성되고, 그 값은 거대한 난수 표에서 무작위로 선정된 256비트의 난수에 해당한다.
- 이때, 난수를 선정하는 알고리즘이 매우 중요한데, 그 이유는 난수 생성기의 품질이 떨어질 경우 개인키 값을 예측할 가능성이 높아지기 때문이다.
- 따라서 단순한 난수 생성기가 아니라 검증된 난수 생성기를 사용해야 한다.
- 이 개인 키(난수)가 암호화폐에 대한 접근을 가능하게 해주고 암호화폐에 대한 소유권과 통제권을 갖게 한다.
- 다시 말해, 개인 키가 노출되면 누구나 해당 암호화폐(비트코인)을 소비할 수 있게 되는 것이다.
- 따라서 그 이름처럼 개인의 것으로 관리되어야 한다. 이를 위해 여러번 백업을 해두는 등 소중히 관리해야 한다.
공개키 (Public Key)
- 공개키는 개인키 값을 타원곡선 함수에 대입해 생성된다.
- 공개키에 해시 함수를 적용하면 지갑의 주소를 얻을 수 있다.
- 이때 지갑의 주소에서 공개키를 도출하는 것은 불가능하다.
- 공개키에서 개인키를 도출하는 것 역시 불가능.
- 즉, 함수에 대한 역산은 불가능하다.
- 공개키라는 이름처럼 누구에게나 노출되어도 상관이 없는 데이터이다.
- 공개키를 사용해 블록상의 장부의 거래에서 해당 공개키를 가지고 있는 사람의 거래가 참인지 거짓인지를 판단할 수 있다.
지금까지 개인키와 공개키에 대해 알아보았는데, 그럼 이것들은 어디에 사용되는 걸까?
바로 '서명'을 통한 '트랜잭션 유효성 검증'에 사용된다.
트랜잭션 유효성 검증에 대해 알아보기 전에 우선 '트랜잭션 데이터'와 '서명'이 뭔지 알아보자.
3. 트랜잭션 유효성 검증
'트랜잭션 데이터'와 '서명'의 개념
트랜잭션 데이터(Transaction Data)
- 트랜잭션 데이터는 '실제로 전송되는 정보'를 나타낸다.
- 이 데이터에는 송신자, 수신자, 전송되는 암호화폐의 양 등이 포함될 수 있다.
- 예를 들어, A가 B에게 1 BTC를 전송하는 트랜잭션에서는 A의 주소, B의 주소, 전송되는 BTC의 양 등이 트랜잭션 데이터이다.
- 트랜잭션 유효성 검사에서 트랜잭션 데이터는 '원본 데이터'를 의미한다.
서명(Signature) (디지털 서명)
- 서명은 트랜잭션을 생성한 지갑의 개인 키를 사용하여 생성된 값으로, 트랜잭션의 무결성을 보장하고, 해당 지갑이 트랜잭션을 서명한 것임을 증명한다.
- 서명을 생성하기 위해서는 우선 트랜잭션 데이터를 해싱하여 고정 길이의 해시 값을 생성한다.
- 이후, 이 해시 값을 개인 키를 사용하여 암호화하여 서명을 생성한다. 이 과정에서 주로
ECDSA(Elliptic Curve Digital Signature Algorithm)
알고리즘이 사용된다. - 이렇게 생성된 서명은 공개키, 그리고 트랜잭션 데이터(원본 데이터)와 함께 묶여서 블록체인 네트워크에 제출되고, 수신자들(모든 노드들)은 이 공개키와 서명을 이용해 트랜잭션의 유효성을 검증한다.
- 이를 통해 블록체인에서는 안전하고 신뢰할 수 있는 트랜잭션 처리가 가능해진다.
트랜잭션 유효성 검증 과정
1. 트랜잭션 생성
사용자가 블록체인 네트워크에서 트랜잭션을 생성한다.
이 트랜잭션은 지갑(wallet)을 통해 생성되며, 생성자, 송신자, 전송하는 금액 등의 정보가 포함되어 있다.
2. 디지털 서명 생성
사용자는 트랜잭션 데이터(원본 데이터)를 해싱한 값을 개인키를 사용해 암호화하여 '디지털 서명'을 생성한다.
디지털 서명은 송신자의 개인키를 사용하여 생성하므로, 해당 트랜잭션이 송신자에 의해 전송되었다는 것을 증명한다.
3. 트랜잭션 전파
송신자는 자신의 디지털 서명, 공개키, 원본 데이터를 블록체인 네트워크에 전파한다.
4. 트랜잭션 검증
트랜잭션을 받은 수신자들은 송신자의 공개키를 사용하여 디지털 서명을 복호화한다.
만약 복호화한 결과가 원본 데이터와 같다면 해당 트랜잭션이 송신자에 의해 전송되었음이 확인된다.
이는 곧 트랜잭션이 위조되지 않았음을 의미한다.
5. 트랜잭션의 포함
검증이 완료된 트랜잭션은 블록체인의 블록에 포함되어 체인에 추가된다.
이 과정은 채굴자가 트랜잭션을 블록에 포함시키기 위해 수행하는 작업으로, 이를 통해 블록체인의 보안이 더욱 강화된다.
아래 블로그에 그림으로 정리가 잘 되어 있다.
https://steemit.com/kr/@yahweh87/15-3-n
#15 - 트랜잭션 검증 원리에 대한 개념정리 / 비트코인 거래원리(3/N) — Steemit
비트코인을 거래하기 위해서는 거래 정보를 작성해야합니다. 예를 들어서 'Bird'가 'Dog'에게 1.0 BTC를 보낼 것이라고 메시지를 작성합니다. 이렇게 작성된 메시지를 '트랜잭션'이라고 표현하며, 해
steemit.com
트랜잭션 유효성 검증과 '채굴'의 차이
- 트랜잭션의 유효성 검증
- 특정 트랜잭션이 블록체인 네트워크의 규칙에 따라 올바르게 생성되었는지를 확인하는 과정.
- 트랜잭션의 유효성 검증은 네트워크의 모든 노드들이 수행하며, 검증된 트랜잭션은 블록에 추가될 수 있다.
- 블록체인 채굴
- 블록체인 채굴은 새로운 블록을 생성하는 과정으로, 새로운 트랜잭션을 블록에 포함시키고 블록을 블록체인에 추가하는 것을 의미한다.
- 채굴자는
PoW (Proof of Work)
나PoS (Proof of Stake)
와 같은합의 알고리즘
을 사용하여 문제를 해결하고 새로운 블록을 만든다. - 블록을 만든 후에는 이를 네트워크에 전파하고 다른 노드들에 의해 검증된다. 검증된 블록은 블록체인에 추가되며, 채굴자는 보상을 받게 된다.
요약하면, '트랜잭션의 유효성 검증'은 '각 트랜잭션이 블록체인 네트워크의 규칙에 따라 올바르게 생성되었는지를 확인하는 것'인 반면,
'블록체인 채굴'은 '새로운 블록을 생성하고 이를 블록체인에 추가하는 과정'을 의미한다.
'Blockchain' 카테고리의 다른 글
[블록체인] 노드란? - 노드의 종류 및 특징 (0) | 2024.04.09 |
---|---|
[블록체인] 블록이란? - 블록의 개념 및 구성 요소 (0) | 2024.04.07 |