BIP38 Test Vector

BIP38 Test Vector

BIP38

BIP38은 암호로 보호된 개인키(Passphrase-protected private key)를 생성하는 알고리즘을 설명하고 있는데, https://github.com/bitcoin/bips/blob/master/bip-0038.mediawiki 에 자세히 설명되어 있다. (BIP38은 2012년에 제안된 것으로 Proposal에 코멘트되어 있듯이 실제 구현을 권장하지는 않는다.)

BIP38의 2가지 모드

  • (1) No EC Multiply 모드: 개인키를 사용자가 정한 암호를 활용하여 암호화(AES256)하는 것으로 출력으로 암호화된 개인키(encrypted private key)를 얻게 된다.
  • (2) EC Multiply 모드: 이는 2가지 Factor를 사용하여 개인키를 암호화하는 방식으로, 2개의 그룹 혹은 기관에서 독립적으로 하나의 Factor를 도출할 수 있게 한다. 예를 들어, 공장A에서 Passphrase를 사용하여 랜덤 factor(이를 passfactor라 함)를 넣어 중간코드(intermediate code)를 생성하고 이를 공장B에 전달하면, Passphrase를 모르는 공장B에서는 랜덤 factor(이를 factorb라 함)를 만들어 최종 개인키를 만들어 낸다. 이때 공장A는 passfactor만 알고, factorb를 모르고, 공장B는 factorb는 알지만 passfactor를 모르게 된다. 최종 개인키는 elliptic curve 상의 ECPoint (passfactor*factorb*G)로부터 만들어 진다.

BIP38 Test Vector

https://github.com/bitcoin/bips/blob/master/bip-0038.mediawiki 문서의 마지막에 Test Vector가 있는데, EC Multiply 모드 테스트 벡터의 경우 랜덤 factor들에 정보가 명시적으로 표시되어 있지 않다. (문서에 표기된 정보를 역으로 계산해서 값을 도출할 수 있지만 여기에 참고 자료로 이를 정보를 공유한다.)

EC multiply, no compression, no lot/sequence numbers

Test 1:

Passphrase: TestingOneTwoThree
Passphrase code: passphrasepxFy57B9v8HtUsszJYKReoNDV6VHjUSGt8EVJmux9n1J3Ltf1gRxyDGXqnf9qm
Encrypted key: 6PfQu77ygVyJLZjfvMLyhLMQbYnu5uguoJJ4kMCLqWwPEdfpwANVS76gTX
Bitcoin address: 1PE6TQi6HTVNz5DLwB1LcpMBALubfuN2z2
Unencrypted private key (WIF): 5K4caxezwjGCGfnoPTZ8tMcJBLB7Jvyjv4xxeacadhq8nLisLR2
Unencrypted private key (hex): A43A940577F4E97F5C4D39EB14FF083A98187C64EA7C99EF7CE460833959A519

[추가정보]
*ownersalt: a50dba6772cb9383
*seedb: 99241d58245c883896f80843d2846672d7312e6195ca1a6c

Test 2:

Passphrase: Satoshi
Passphrase code: passphraseoRDGAXTWzbp72eVbtUDdn1rwpgPUGjNZEc6CGBo8i5EC1FPW8wcnLdq4ThKzAS
Encrypted key: 6PfLGnQs6VZnrNpmVKfjotbnQuaJK4KZoPFrAjx1JMJUa1Ft8gnf5WxfKd
Bitcoin address: 1CqzrtZC6mXSAhoxtFwVjz8LtwLJjDYU3V
Unencrypted private key (WIF): 5KJ51SgxWaAYR13zd9ReMhJpwrcX47xTJh2D3fGPG9CM8vkv5sH
Unencrypted private key (hex): C2C8036DF268F498099350718C4A3EF3984D2BE84618C2650F5171DCC5EB660A

[추가정보]
*ownersalt: 67010a9573418906
*seedb: 49111e301d94eab339ff9f6822ee99d9f49606db3b47a497
EC multiply, no compression, lot/sequence numbers

Test 1:

Passphrase: MOLON LABE
Passphrase code: passphraseaB8feaLQDENqCgr4gKZpmf4VoaT6qdjJNJiv7fsKvjqavcJxvuR1hy25aTu5sX
Encrypted key: 6PgNBNNzDkKdhkT6uJntUXwwzQV8Rr2tZcbkDcuC9DZRsS6AtHts4Ypo1j
Bitcoin address: 1Jscj8ALrYu2y9TD8NrpvDBugPedmbj4Yh
Unencrypted private key (WIF): 5JLdxTtcTHcfYcmJsNVy1v2PMDx432JPoYcBTVVRHpPaxUrdtf8
Unencrypted private key (hex): 44EA95AFBF138356A05EA32110DFD627232D0F2991AD221187BE356F19FA8190
Confirmation code: cfrm38V8aXBn7JWA1ESmFMUn6erxeBGZGAxJPY4e36S9QWkzZKtaVqLNMgnifETYw7BPwWC9aPD
Lot/Sequence: 263183/1

[추가정보]
*ownersalt: 4fca5a97
*seedb: 87a13b07858fa753cd3ab3f1c5eafb5f12579b6c33c9a53f
ownerentropy: 4fca5a974040f001 
passpoint : 02a6bf1824208903aa344833d614f7fa3ba46f4f8d57b2e219a1cfac961a9b7395 (hex)
passfactor: 88469643539353826633573932400967225161250310422562217761837694721821251319371 (big-endian BigInteger)
factorb   : 51041525136325882627914407328954734227514226844922907135151774578012677075487 (big-endian BigInteger)

Test 2:

Passphrase (all letters are Greek - test UTF-8 compatibility with this): ΜΟΛΩΝ ΛΑΒΕ
Passphrase code: passphrased3z9rQJHSyBkNBwTRPkUGNVEVrUAcfAXDyRU1V28ie6hNFbqDwbFBvsTK7yWVK
Encrypted private key: 6PgGWtx25kUg8QWvwuJAgorN6k9FbE25rv5dMRwu5SKMnfpfVe5mar2ngH
Bitcoin address: 1Lurmih3KruL4xDB5FmHof38yawNtP9oGf
Unencrypted private key (WIF): 5KMKKuUmAkiNbA3DazMQiLfDq47qs8MAEThm4yL8R2PhV1ov33D
Unencrypted private key (hex): CA2759AA4ADB0F96C414F36ABEB8DB59342985BE9FA50FAAC228C8E7D90E3006
Confirmation code: cfrm38V8G4qq2ywYEFfWLD5Cc6msj9UwsG2Mj4Z6QdGJAFQpdatZLavkgRd1i4iBMdRngDqDs51
Lot/Sequence: 806938/1

[추가정보]
*ownersalt: c40ea76f
*seedb: 03b06a1ea7f9219ae364560d7b985ab1fa27025aaa7e427a
본 웹사이트는 광고를 포함하고 있습니다. 광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.