이 문제를 이해하기 위해서는 다음 두 가지가 전제되어야 한다.
- 디지털 인터넷 세상에서의 데이터 또는 암호화폐를 비밀리에 전달(이동)하는 문제
- 송신자 A와 수신자 B는 공간적으로 멀리 떨어져 있는 상태
대칭키와 비대칭키
대칭키
- 송신자(A)와 수신자(B)가 동일한 키를 사용
- 데이터 암호화와 복호화 과정이 동일한 키를 사용하기 때문에 빠르다는 장점이 있다.
- 그렇지만, 키를 전달(이메일 또는 전화)하는 과정에서 해킹 위험 노출
비대칭키(개인키와 공개키 분리)
- 키를 개인키(비밀키/암호키)와 공개키로 분리
- 개인키(암호키)는 비공개하고, 공개키만 인터넷 상에 공개
- 오로지 개인키(암호키)로만 암호화와 복호화를 할 수 있음
- 먼저 수신자B는 개인키(암호키)로 누구나 볼 수 있는 공개키를 발행
- 송신자A는 B의 공개키를 받아서 데이터를 암호화하여 인터넷 상에 올린다
- 수신자B는 개인키(암호키)로 A가 보낸 데이터를 해독한다.
- (핵심) 공개키(또는 공개키로 데이터를 암호화한 암호문)는 누구나 볼 수 있으나, 오로지 해독할 수 있는 사람은 그 공개키를 발행한 개인키(암호키) 소유자 뿐임.
- 온라인 상에서 해킹 위험이 없음
공개키 암호화 시스템 : RSA
- 공개키 암호화 방식의 알고리즘
- 이 알고리즘의 개발자인 MIT의 Rivest, Shamir, Adleman 3명 이름의 머리 글자를 딴 것
- 인터넷 검색에서 <RSA온라인> 검색
- (공개키/암호키) RSA 테스트 해보기 사이트
- https://www.devglan.com/online-tools/…
- 위 그림에서 <Generate RSA Key Pair >를 클릭하면, 공개키(Public Key)와 개인키(Private Key)가 만들어진다
- 위 그림 왼편에서 공개키를 가지고 “하늬야 나 너 좋아해” 데이터를 암호문으로 발행(Encrypt)하고,
- 그것을 복사해서 우측 <RSA Decryption>에 붙여넣기 한 다음
- 개인키로 Decryt하면, “하늬야 나 너 좋아해”를 볼 수 있다.
- (핵심) 개인키(비밀키) 보관이 핵심!
- 현재 대부분의 인터넷 뱅킹에도 적용됨
디지털서명
- 온라인상에서 본인을 증명하는 것
- 전자서명은 디지털 데이터의 진위를 증명할 때 사용
- 비트코인은 ECDSA(타원곡선함수) 전자서명 알고리즘 사용
전자서명의 기능
- 본인 : 개인키를 활용해서 특정 메시지에 서명하고
- 대중 : 공개키를 통해 특정 메시지를 검증한다.
암호키를 가지고 메시지를 암호화 해보기
- 암호키 노출 없이 사람들에게 해당 메시지의 주인이 나임을 증명 가능
- 즉 위 그림에서 왼편 개인키(Private Key)로 암호문을 공개 발행한 다음
- 우측 누구에게나 공개된 공개키(Public Key)로 해독함으로써 다른 사람들이 암호문(메세지)의 주인이 나임을 증명
암호키로부터 파생되는 공개키와 주소
- 암호키 : 16진수의 64자리 무작위 숫자
- 16진수 : 0~9, a~f 의 조합
- 비트코인 사용자 A가 암호키(개인키)로 트랜잭션에 서명을 하면
- 노드들은 공개된 공개키로 그 트랜잭션이 A의 것임을 암호키(개인키)를 모르는 상태에서도 확인 가능
- 일방향 함수
- 각각의 주소 속에 들어 있는 비트코인에 대해 암호키를 가지고 주인임을 확인이 가능한 것이고
- 그와 동시에 이동의 권한을 갖게 됨
- 그래서 핵심은 암호키(개인키) 관리이다.
- 암호키(개인키)를 가지고 공개키를 생성할 수 있고, 공개키를 가지고 주소를 생성함(일방향 함수)
- 주소 -> 공개키 -> 암호키, 즉 역으로는 산출이 안됨