WIF(Wallet Import Format)

 

[ WIF ]

 

WIF 정의

WIF(Wallet Import Format)이란, 블록체인 지갑(Wallet)에 보관되어 있는 키(Key)를 다른 곳으로 이동시킬 때 등장하는 용어로, 블록체인에 사용되는 Key(=Private Key)를 기존에 사용중이던 Wallet에서 다른 Wallet으로 Export(내보내기)하거나 Import(가져오기)를 할 때 사용되는 포멧을 말합니다. 

 

 

 

WIF 등장이유?

Wallet들끼리 Key를 이동시키려 할 때 WIF가 아닌 다른 특정 포멧을 사용해도 상관없지만, 다양한 Wallet들이 Key를 이동시킬 때 사용되는 포멧이 제각각이라면 호환성이 굉장히 떨어질 것입니다. 개발자나 사용자나 어지간히 불편해질 것입니다. 그래서 현재 대부분 상용화된 블록체인 Wallet 들은 Import와 Export를 위해 WIF라는 통일된 포멧을 사용하고 있는 것입니다. WIF는 Key를 단순히 WIF라는 특정 포멧으로 변경한 것뿐이기 때문에, WIF에서 Key로 변경하거나 Key에서 WIF로 변경이 가능합니다. 


 

WIF 개발

WIF Export 방법 (Private Key to WIF)

1. Private Key 획득한다.
= 32 byte 크기의 Private Key를 준비한다.
2. Private Key 앞에 prefix를 붙인다.
= 블록체인 네트워크를 의미하는 1 byte 크기의 prefix를 붙인다.
3. (경우에 따라) Private Key 뒤에 suffix를 붙인다.
= 압축된 Public Key를 사용한다면 0x01값을 suffix로 붙이고, 압축되지 않은 일반 Public Key를 사용한다면 0x01값을 suffix로 붙이지 않는다.
4. Private Key 뒤에 checksum를 붙인다.
= 2번값에 대해 binary sha256을 두번 수행한 후 나온 결과값 중 4 byte 값만이 checksum으로 사용된다.
5. 1~4번까지 수행한 후의 최종 값에 대해 base58로 인코딩해서 WIF포멧의 Private Key를 획득한다.


WIF Import 방법 (WIF to Private Key)

1. WIF포멧의 Private Key를 base58로 디코딩한다.
2. WIF포멧의 Private Key 뒤에 checksum을 검증한다.
= 뒤에서 4 byte를 분리한 값에 대해 binary sha256을 두번 수행한 후 나온 결과값 중 4 byte가 checksum과 동일한지 비교검증한다.
3. WIF포멧의 Private Key 앞에 prefix를 제거한다.
4. 32 byte의 Private Key를 획득한다.


WIF Export/Import 샘플

아래 그림을 보고 WIF Export와 Import에 대한 이해를 도와보겠습니다. 그림처럼 지갑에 보관되어 있는 사용자의 개인키(Private Key)값이 0x63792B…74B1일 때, 이 개인키를 다른 지갑으로 옮긴다면 그때, 기존 지갑에서는 개인키를 WIF포멧에 맞게 만드는 과정인 Export를 하고, 다른 지갑에서는 Export된 WIF포멧으로 만들어진 값을 다시 풀어서 개인키만을 뽑아내는 Import하는 과정을 수행하는 것입니다. 그러면 최종으로 다른 지갑에는 기존 지갑에 있던 0x63792B…74B1값인 개인키가 이동이 되는 것이죠. 

 

[ WIF import/export Sample ]