용어집 / 주소와 키
지갑 가져오기 형식(WIF)
별칭은 WIF입니다.
- 지갑 가져오기 형식(WIF)란 무엇입니까?
- 지갑 가져오기 형식은 하나의 개인 키를 지갑 간에 옮길 때 쓰는 Base58 인코딩으로, 원시 32바이트를 네트워크 바이트와 체크섬으로 감쌉니다.
WIF 문자열은 지갑이 아니라 키 1개입니다. 이것을 가져오면 그 키에 묶인 코인만 정확히 옮겨지고 그 밖의 것은 아무것도 옮겨지지 않습니다. 메인넷 키는 대응하는 공개 키가 비압축일 때 5로 시작하고 압축일 때 K 또는 L로 시작하며, 길이는 51자 또는 52자입니다. 이 문자열은 시드 문구를 다루듯이 다루셔야 합니다. 이 문자열을 읽은 사람은 누구든 코인을 쓸 수 있기 때문입니다.
작동 방식
지갑 가져오기 형식은 원시 비밀 값을 오타 없이 옮길 수 있게 하기 위해 존재합니다. 키의 32바이트를 가져와 앞에 버전 바이트를 붙이고(메인넷은 0x80, 테스트넷은 0xEF), 키를 압축 공개 키와 함께 쓰기로 한 경우 0x01을 덧붙인 뒤, 체크섬 4바이트를 붙이고 전체 페이로드를 Base58Check로 인코딩합니다. 버전 바이트가 알아볼 수 있는 첫 문자를 만들고, 선택적인 압축 플래그가 문자열 길이를 51자에서 52자로 늘립니다.
이 두 변형은 보이는 것보다 중요합니다. 끝에 붙는 0x01은 키를 전혀 바꾸지 않습니다. 이 바이트는 가져오는 지갑에 어떤 공개 키 형식을 도출할지, 따라서 어떤 주소를 볼지 알려 줍니다. 이것을 잘못 지정하면 코인은 다른 주소에 안전하게 남아 있는데 지갑은 잔액 0을 보고합니다.
체크섬은 옮겨 적는 오류가 비용을 발생시키기 전에 잡아냅니다. WIF 문자열을 디코딩한 지갑이 체크섬 불일치를 발견하면 이를 즉시 거부하므로, 문자 1개가 틀리면 빈 지갑이 아니라 오류 메시지가 나옵니다. 체크섬이 할 수 없는 일은 다른 사람이 이미 읽은 키를 보호하는 것입니다.
나타나는 곳
최신 지갑이 생성하는 것은 WIF 문자열로 배포되지 않습니다. BIP-32에 따른 시드 문구 지갑은 수천 개의 키를 보유하며 그중 하나를 내보낼 이유가 없으므로, WIF는 거의 전적으로 오래된 자료에 나타납니다. 브라우저 생성기로 인쇄한 종이 지갑, 2013년 이전 데스크톱 소프트웨어에서 꺼낸 키, 키 생성기를 돌려 만든 배니티 주소, Casascius 실물 동전의 홀로그램 아래 숨겨진 문자열이 그 예입니다.
그런 키를 현재 지갑으로 가져오는 방법은 두 가지이며, 그 차이는 겉모습의 문제가 아닙니다.
가져오기는 키를 지갑에 추가하고 그 키를 계속 살아 있게 둡니다. 이제 지갑이 그 코인을 쓸 수 있지만, 인쇄물이나 그 사진, 또는 그것을 생성한 기계를 한 번이라도 본 사람은 누구든 쓸 수 있습니다. 스위프는 잔액 전체를 자신의 시드 문구에서 도출한 새 주소로 보내는 트랜잭션을 만들고, 그러면 옛 키는 아무것도 통제하지 못합니다. 특별한 이유가 없다면 스위프하시고, 종이에 있었거나 스크린샷에 있었거나 클라우드 백업에 있었던 키는 이미 유출된 것으로 보셔야 합니다.
한 가지 습관을 더 들이는 것이 좋습니다. 웹사이트에 입력한 WIF 문자열은 사라진 것입니다. WIF를 요구하는 생성 페이지, 잔액 조회, “지갑 검증기”는 키를 수집하기 위해 존재하며, 코인은 대개 몇 초 안에 옮겨집니다.
지갑 가져오기 형식 vs 시드 문구
WIF 문자열은 키 1개를 담는 반면 시드 문구는 지갑 전체의 뿌리를 담습니다. BIP-39에서 12단어 문구는 128비트의 엔트로피를 인코딩하고 24단어 문구는 256비트를 인코딩하며, 지갑은 그 뿌리에서 모든 도출 경로를 따라 앞으로 사용할 모든 키를 영구히 도출합니다. 문구를 복원하면 기록하지 않은 주소까지 포함해 지갑 전체가 돌아옵니다. WIF를 복원하면 키 1개와 그 코인이 돌아오며, 키 내보내기가 백업 전략이 아니라 레거시 자금을 위한 복구 도구인 이유가 여기에 있습니다.