What is Nostr?
Coiner
npub1sws…08un
2023-10-28 16:48:19

Coiner on Nostr: [에피소드] Sign/Verify Message 에피소드(1) 몇 년 전 BIP39/BIP32 ...

[에피소드] Sign/Verify Message 에피소드(1)

몇 년 전 BIP39/BIP32 알고리즘을 구현할 때의 일이었다.
개발 스펙에 따라 구현을 완료하고 여러 데이타를 테스트할 때, 아주 우연히 iancoleman 웹사이트의 BIP39 결과값 비트코인 주소와 내 프로그램의 결과가 다르게 나오는 것을 확인하였다. 좀 더 깊게 연구해 보니, iancoleman도 동일한 버그로 과거에 큰 문제(https://github.com/iancoleman/bip39/issues/58)가
야기된 적이 있다는 것을 알게되었다. 즉, BIP32 derivation을 할 때 derived private key (혹은 chain code)가 32 바이트보다 작은 값 (보통 31 바이트)을 가질 수 있는데, 앞에 0을 붙여 정확히 32바이트로 보정해 주지 않으면 다른 주소를 생성하게 된다. 물론 현재는 버그가 수정되었고, 다른 지갑들/라이브러리들도 이러한 문제를 수정하였다.
Lesson learned: 모든 프로그램 혹은 Firmware 들은 버그를 가질 수 있다...

만약 당신이 1년동안 모은 비트코인을 하드월렛에 옮기거나 기존 웰렛에 있는 코인들을 새로 산 하드웰렛의 하나의 주소로 옮길 때, (잘못될 일은 절대 없겠지만^^) 혹시라도 그 주소에 대한 private key를 내가 제대로 가지고 있는지 검증해 보고 싶지 않을까?

일반적으로 하드웨어 웰렛은 특정 주소에 대한 private key를 보여주지 않는다 (보여준다 하더라도 그 주소와 private key 매핑을 확인하기 위해 다른 도구가 필요하다). 이러한 검증을 위해 사용할 수 있는 한 방법으로 "Sign/Verify Message"를 사용할 수 있다. 예를 들어, 콜드카드에서 특정 비트코인 주소에 대해 임의의 텍스트 메시지 파일을 Sign한 후, Sparrow 등과 같이 "Sign/Verify Message" 기능을 제공하는 툴에서
이를 검증해 보는 것이다. 만약 이러한 검증이 성공한다면, 기술적(?!)으로 당신은 그 비트코인 주소를 100% 소유했다고 말할 수 있다.

비트코이너 마인드: I trust you, but I want to verify...
Author Public Key
npub1swstl3r7xgjzck3an2du8xpzwhcmywx9mpl8ead5f4e2kmu48kmstw08un