15건의 항목
송재준 저자의 Programming Bitcoin을 정리합니다.
Bitcoin Programming 책을 읽으며 이해한 내용에 대해 정리한다. 첫번째는 유한체이다.
암호학에서 중요하게 사용되는 타원곡선에 대해 알아보자. 왜 해당 곡선을 사용할까? 타원곡선 y^2 = x^3 + Ax + B 위의 방정식의 형태로 나타나는 곡선 타원의 둘레를 구하기 위한 적분, 이의 역함수를 구하는 과정에서 유래했다.
타원 곡선을 알아보았다면, 이걸 토대로 암호를 만들어보자. 유한체에서 정의된 타원 곡선 2장에서 보았던 타원 곡선은 “실수체”에서 정의되었다. 무한집합 그렇기 때문에 꽉 찬 곡선으로 보였던 것 이제 이 정의되는 공간을 유한체로 바꿀 것이다.
비트코인에서 사용하는 타원곡선은 무엇일까? 비트코인에서 사용하는 타원 곡선 지금까지는 타원곡선에 들어가는 유한체의 위수를 작은 소수를 사용했다. 하지만 실전에서는 매우 큰 소수를 사용하여 컴퓨터로 탐색이 불가능하게 만든다.
서명, 검증 알고리즘을 알았으니 필요한 클래스들을 작성해보자.
비밀키, 공개키, 서명, 그리고 검증 방법까지 알아보았다. 하지만 이러한 값을 가지고 있기만 해서는 결제라는 행위가 이루어질 수 없다. 어딘가로 보내야 한다. 그때 필요한 기술인 직렬화를 알아보자.
서명 역시 검증을 위해 전파될 필요가 있다. 즉, 직렬화가 필요하다. DER(Distinguished Encoding Rules) 서명에 대해 앞에서 공부했을 때 핵심은 r, s의 값이었다.
공개키 비트코인 주소 형식에 대해 알아본다. 이는 곧 “주소”이다. 비트코인 주소 WIF(Wallet Import Format) 앞에서 공개키와 비밀키, 그리고 서명, 검증 방식에 대해 알아보았다. 그리고 이를 직렬화하는 방법도 배웠다.
Reference Programming Bitcoin by Jimmy Song(O’Reilly). Copyright 2019 Jimmy Song, 978-1-492-03149-9 programmingbitcoin .
비밀키를 직렬화하는 방법을 알아보자. 비밀키 직렬화 비밀키를 직렬화할 이유는 그닥 없다. 네트워크로 전파할 일이 없기 때문이다. 비밀키 전파는 지갑이 털릴 수 있는 위험이 매우 크다.
비트코인의 트랜잭션에 대해 알아보자. Transaction 앞에서 네트워크 혹은 디바이스에 이동하기 위한 공개키와 비밀키의 직렬화 방법에 대해 알아보았다. 물론 그에 대한 파싱까지 같이 배웠다.
이번엔 트랙잭션 입력에 대해 알아보자.
가변적인 수를 Encoding하는 방법 중 하나인 Varints 형식을 알아보자. Varint 이전에 Input, output등의 개수를 나타낼 때 있어 varint 형식을 사용한다고 했었다. 여기서 간단하게 알아보자.
비트코인 스크립트는 무엇일까? Smart Contract 비트코인이 전송되는데 있어 어떠한 계약을 걸 수 있다. 그걸 스마트 컨트랙트이라고 한다. 그리고 그 계약을 서술하는 프로그래밍 언어가 스크립트이다. 스크립트는 스택 기반의 스크립트 언어이다.