전자서명(Digital Signature)이란?

in #digitalsignature6 years ago (edited)

전자서명은 네트워크 상에서 거래의 보안을 강화하기 위해 암호 알고리즘(Cryptography Algorithm)을 이용하여 송신자의 신원을 증명하고 수신자가 검증하는 과정을 말하며 블록체인 상에서 모든 거래정보가 공유되므로 분산화 되어 있는 디지털 데이터의 진위(Authentication)을 증명하기 위해 전자서명 방식을 사용한다. 쉽게 말해서 여기저기서 오는 거래내용이 진짜인지 가짜인지 판별하기 위해 증명과 검증절차가 필요하다는 것이다. 그래서 비트코인과 이더리움 블록체인 모두 ECDSA(Eliptic Curve Digital Signature Algorithm)이란 전자서명 알고리즘을 사용하고 있다.

비트코인을 예를 들어 설명하자면 비트코인의 소유권은 다음 세가지에 의해 구성되는데 전자키(Digital Key), 주소(Bitcoin Address), 그리고 서명(Digital Signature) 등이다. 그리고 전자키는 개인키(Private Key)와 공개키(Public Key)로 이렇게 두가지로 나눌 수 있다. 공개키는 은행 거래 할 때 은행 계좌번호 그리고 개인키는 비밀 PIN 번호 혹은 개인 서명이라고 볼 수 있다. 은행 거래 시에 계좌번호가 있더라도 비밀번호가 없으면 거래할 수 없고 비밀번호는 남에게 공개되어서도 안되고 개인적으로 보관되어야 하듯이 개인키(Private Key) 도 공유 데이터에 공개 되지 않고 개인 서버에 저장되거나 어떤 형식으로든 개인적으로 관리되어야 한다.

그러면 개인키, 공개키, 주소, 그리고 서명을 가지고 어떻게 전자서명을 하여 안전하게 거래를 한다는 것일까? 우선 거래 과정을 알기 전에 이 요소들의 관계와 어떤 알고리즘들이 적용되는지 먼저 간단하게 이해할 필요가 있다. 전자 서명은 크게 세가지 알고리즘으로 구성되는데 개인키와 공개키로 이루어진 전자 키 쌍(digital key pairs)을 생성하는 알고리즘, 개인키를 이용하여 전자 서명을 생성하는 알고리즘, 그리고 공개키를 이용하여 서명을 검증하는 알고리즘이다.

개인키와 공개키 그리고 주소는 밀접한 관계가 있는데 아래 그림과 같이 개인키로 부터 공개키가 나오고 공개키로 부터 주소가 나온다. 여기서 주목해야할 점은 변환에 쓰이는 함수들이 단방향 암호화 함수(One way cryptographic function)이어서 되돌릴 수 없다(Irreversible)는 특징을 가지고 있다. 한 쪽 방향으로는 연산이 가능하지만 그 반대 방향으로는 연산이 거의 불가능하여 원래의 값을 유추하기 힘들기 때문에 보안 알고리즘에 주로 쓰인다. 즉 개인키로 공개키는 구할 수 있지만 공개키로는 개인키를 구해낼 수 없다는 것이다.
1.png
<출처: Mastering Bitcoin 2nd Edition, Andreas M. Antonopoulos: >

개인키(Private Key)는 랜덤으로 만들어진 256 bit 숫자로 1과 2의 256승 사이에 수를 랜덤으로 뽑은 것이라고 보면 된다. 보통 SHA256Hash 알고리즘(random number를 만드는 함수 중 하나) 을 통해 쉽게 산출할 수 있고 아래 형태와 같다.

2.png
<출처: Mastering Bitcoin 2nd Edition, Andreas M. Antonopoulos>

공개키는 개인키를 Elliptic Curve Multiplication이라는 함수를 통해 환산한 값으로 함수의 식은 K = k*G 으로 k 는 개인키 G는 generator 라는 계수로 공개키 K를 산출한다. 식만 보기에 굉장히 간단한 것 같지만 Elliptic Curve 와 G와 k의 곱으로 환산한 Elliptic Curve Cryptocurrency 그래프는 아래와 같다. 이해하기 어려운 관계로 이해가 되면 포스팅하도록 하겠다.

3.png
<출처: Mastering Bitcoin 2nd Edition, Andreas M. Antonopoulos>

주소(Address)는 공개키(Public Key)로 부터 역시 단방향 암호 알고리즘인 SHA256 함수와 RIPEMD160 Hash 함수 알고리즘을 이용하여 산출한 값을 Base58Check 이라는 인코딩 방식을 이용하여 변환한 값으로 정한다.

4.png
5.png
<출처: Mastering Bitcoin 2nd Edition, Andreas M. Antonopoulos>

그럼 여러 노드 들은 개인키, 공개키, 주소 등을 가지고 어떤 과정을 거쳐서 거래(Transaction)가 진행 될까? 우선 Alice 가 Bob에게 1 비트코인을 송금하는 거래를 한다고 하자 Alice와 Bob은 각각 혼자만 알고 있는 비밀 개인키를 가지고 있고 누구나 알 수 있는 공개키를 가지고 있다. 자세한 (수학적 알고리즘을 설명하기는 너무 어려우므로) 쉽게 설명하자면 Alice가 Bob에게 1 비트코인이 들어 있는 보물함을 보낸다고 생각해보자. 우선 그 보물함은 Alice의 개인키로 열어서(Unlocking) 1 비트코인이 들어가 있는지 확인하고 Bob에게 안전하게 보내기 위해 다시 자물쇠를 잠근다(Locking). 하지만 Bob이 열 수 있지만 안전하게 보내기 위해 사토시 나카모토 브랜드를 가진 특수 자물쇠를 붙여 보내기로 했다. 이 자물쇠로 말하자면 Bob의 공개키를 이용하여 만든 특수한 퍼즐을 풀어야 열리기 되어 있는데 그 퍼즐은 Bob이 가지고 있는 개인키로 만들어진 전자서명으로만 열 수가 있어 아주 안전하다.(이는 사토시 나카모토가 이용한 ECDSA 기술로만 가능하다. 그 기술로 인해 개인키로부터 공개키를 만들 수 가 있지만 공개키로 부터 개인키는 유추할 수가 없다.) 그래서 Bob은 보물함을 전해 받아서 안전하게 보물함을 열고(Unlocking) 1 비트코인을 획득할 수 있다. 결국 모든 거래의 과정은 보물함을 열고(Unlocking) 잠그는(Locking) 과정의 반복이라 할 수 있다. 이런 일련의 과정들은 암호화 되어 블록체인 상에 기록되게 된다. 거래 알고리즘을 수학적으로 자세히 이해하고 싶다면 Andreas M. Antonopoulos의 Mastering Bitcoin 2nd Edition의 3장과 4장을 정독하면 더 많은 내용을 이해할 수 있을 것이다.

Andreas M. Antonopoulos
Visit Amazon.com's Andreas M. Antonopoulos Page and shop for all Andreas M. Antonopoulos books.
www.amazon.com

6.png
<출처:
https://cdn.rawgit.com/andreacorbellini/ecc/920b29a/interactive/modk-mul.html>

Coin Marketplace

STEEM 0.19
TRX 0.14
JST 0.030
BTC 61420.98
ETH 3276.21
USDT 1.00
SBD 2.47