블록체인

비트코인 코어 키페어 생성하는 방법

대소니 2019. 2. 22. 16:15

비트코인 코어 키페어 생성하는 방법

비트코인 코어에서 사용자의 주소를 생성하고 트랜잭션을 생성하기 위해서 개인키와 공개키가 필요합니다.개인키와 공개키는 타원곡선이라는 알고리즘을 사용하여 생성이 됩니다.

비트코인 진형에서는 코어에서 사용하기 좋도록 최적화하고 개선한 라이브러리를 사용하고 있는데요. secp256k1 이라는 이름의 라이브러리입니다. 이 라이브러리는 c 기반으로 되어 있고 비트코인 오픈소스 내에 포함되어 있습니다. (https://github.com/bitcoin/bitcoin/tree/master/src/secp256k1)


secp256k1 라이브러리는 openssl 라이브러리를 기반으로 하여 타원곡선 알고리즘을 사용합니다. 이를 비트코인에서 사용하기 위해서 추가적인 랩핑하는 기능들과 보다 더 보안성을 강화하기 위한 secure한 기능들이 추가되어 있는 강력한 암호화 라이브러리입니다.


이 라이브러리와 비트코인 코어의 키 클래스를 사용하면 사용하는 개인키와 공개키를 생성할 수 있고 공개키를 인코딩하면 주소 값을 생성할 수 있습니다.



cpp 파일을 컴파일하고 실행

비트코인 오픈소스를 github에서 클론을 하고 컴파일을 하면 블록체인 코어 노드를 실행시킬 수 있습니다. 저는 맥북에 우분투를 듀얼부팅이 가능하도록 설치를 했기 때문에 우분투에서 해봤습니다.

키를 생성하는 별도에 cpp 파일을 생성하여 컴파일하고 실행을 하면 커스텀하게 키를 생성하여 출력해볼 수 있습니다. 다음은 터미널에서 실행 파일을 실행했을 때 생성된 키 값들입니다.


출력된 키값 들은 순서대로 개인키, 공개키, 비트코인 메인넷 주소로 3가지 정보를 출력하도록 되어 있습니다. 개인키를 보면 값이 상당히 긴 사이즈의 데이터로 생성이 되는 것을 알수 있습니다. 이 값들은 ecdsa 표준 개인키값을 포함하고 있는 비트코인 암호화 라이브러리에서 사용하는 랩핑된 값임을 알 수 있습니다.

이 개인키를 사용해서 생성된 공개키 값과 주소값들은 실행을 할 때마다 다른 값들이 생성이 되기 때문에 한번 생성했던 키 값이 또 다시 만들어질 확률이 매우 낮습니다. 그래서 실행하자마 캡처하고 기록을 해놓아야 합니다.

그리고 이 값들이 정확한 타원곡선 값이며 유효한 값인지를 체크하기 위해서 '공공블록' 사이트에서 비교를 해볼 수 있습니다. 물론 코어 알고리즘을 사용하여 생성된 값이므로 지극히 정상적인 값이 맞을겁니다. 진짜 맞는지 확인을 해보겠습니다.



공공블록에서 키값들을 비교하기

먼저 공공블록 웹사이트를 구글에서 검색해서 찾아 들어갑니다. 검색 첫번째에 바로 나오니 찾기가 어렵지 않습니다. 혹은 사이트 링크를 클릭합니다. [클릭]


공공블록 웹사이트에서 매뉴 - 지갑 - Bitcoin Keys 로 이동을 합니다. 여기서는 비트코인 키 값들이 생성되는 과정들을 볼 수 있으며 중간 단계에서 생성되는 값들도 확인을 할 수 있도록 되어 있습니다.



이 중에서 위에 코어에서 실행하면서 생성이 되었던 개인키 값을 복사해서 공공블록의 PrivateKeyHex 란에 붙어 넣어 줍니다. 그리고 tap 키를 한번 눌러주시면 해당 개인키 값을 기준으로 아래 항목들의 모든 값들이 갱신이 됩니다. 개인키 값은 아래와 같이 입력을 하면 됩니다.


그러면 이번에는 공공블록 중간쯤에 공개키 값이 생성이 되어 있을 겁니다. 이 값이 비트코인 코어에서 생성된 공개키 값과 동일한지를 비교해보겠습니다. 대소문자 차이가 있기는 하지만 앞과 뒤가 모두 같으니 공개키가 유효한 값으로 잘 생성이 된 것을 확인할 수 있습니다.

비트코인 코어에서 생성된 값

(04e298923599a3d087d2b5a4669285ad8ee1cb538c140728b87944491f7b9ddfc531bbcc2d8d67e59e2b27bbfc6e71b187732b44a3dd26f6e47e37b5a169d1eccf)

공공블록에서 생성된 값

최종적으로 주소 값이 정확한지를 확인해보겠습니다. 코어에서 생성된 주소값은 113VpsnmiKQv1hDKLNoKMa4WXNJD6AR6T8 였습니다. (참고로 이 주소값은 임의의 값으로 실제 비트코인을 전송하거나 사용하시면 안되는 주소 값이니 오해 없으시길 바랍니다.)

공공블록 맨 하단 부분으로 내려가면 마지막 부분에 주소 값이 있습니다. 이 값을 비교해보면 코어에서 생성된 값이랑 동일하므로 정상적인 주소가 생성이 된 것을 알 수 있습니다.



결론

비트코인 코어에서 암호화 라이브러리를 이용하여 생성해본 개인키와 공개키, 주소값이 정확하게 생성이 되었는지를 확인해보았습니다.


참고로 우분투를 맥북에 처음 설치해서 GUI로 사용해보는 것이 처음이였는데 우분투도 스크린 샷을 영역으로 지정해서 캡처를 할 수 있더군요. 하지만 키를 몰라서 찾아보니 setting - keyboard 에서 단축키 설정을 할 수 있었습니다. 특정 키로 셋팅을 하고 화면 캡처를 하면 pictures 폴더에 파일로 자동 저장이 됩니다. 이 파일은 근데 텍스트 파일로 생성이 되어 지고 확장자가 없어서 실제로 사용할 때에는 확장자를 .png로 붙여주어야 이미지로 인식이 되어 사용할 수 있었습니다.