비트코인과 암호기술(1)-암호키와 공개키

이 문제를 이해하기 위해서는 다음 두 가지가 전제되어야 한다.

  • 디지털 인터넷 세상에서의 데이터 또는 암호화폐를 비밀리에 전달(이동)하는 문제
  • 송신자 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의 것임을 암호키(개인키)를 모르는 상태에서도 확인 가능
  • 일방향 함수
  • 각각의 주소 속에 들어 있는 비트코인에 대해 암호키를 가지고 주인임을 확인이 가능한 것이고
  • 그와 동시에 이동의 권한을 갖게 됨
  • 그래서 핵심은 암호키(개인키) 관리이다.
  • 암호키(개인키)를 가지고 공개키를 생성할 수 있고, 공개키를 가지고 주소를 생성함(일방향 함수)
  • 주소 -> 공개키 -> 암호키, 즉 역으로는 산출이 안됨