ERC-601 이더리움 결정적 지갑 계층 구조 (Ethereum hierarchy for deterministic wallets)
Final · 계정·지갑 · 2017-04-13 작성
하나의 시드에서 여러 주소를 만들어 내는 결정적 지갑에서, 이더리움 전용으로 설계된 키 파생 경로 체계를 정의합니다. 모든 지갑이 같은 규칙으로 주소를 만들게 하는 표준입니다.
왜 필요한가
결정적 지갑은 시드라고 부르는 하나의 비밀값에서 정해진 규칙(파생 경로)에 따라 여러 개의 주소를 만들어 냅니다. 그런데 이 표준이 나올 당시 이더리움 클라이언트와 지갑마다 서로 다른 파생 경로를 쓰고 있었고 일부는 m/44'로 시작하는 경로를 정의한 기존 표준인 BIP44를 어기기까지 했습니다. 그 결과 지갑 구현 사이에 혼란과 비호환이 생겨 어떤 경우에는 한 지갑에서 만든 자금에 다른 지갑으로는 접근할 수 없었고 어떤 경우에는 사용자에게 파생 경로를 직접 물어봐야 해서 사용성이 나빠졌습니다. 또한 BIP44는 비트코인처럼 거래 출력(UTXO)을 기반으로 하는 블록체인을 염두에 두고 설계된 표준이어서 계정 모델을 쓰는 이더리움에는 잘 맞지 않습니다. 그래서 이 표준은 이더리움의 고유한 요구에 맞춘 새로운 결정적 지갑 계층 구조를 제안합니다.
심층 설명
4단계 경로 구조와 강화 파생
BIP32 경로에 m / purpose' / subpurpose' / EIP' / wallet'의 4개 단계를 정의합니다. 경로의 아포스트로피(')는 BIP32 강화 파생(hardened derivation)을 쓴다는 표시이며 이 표준은 네 단계 모두에서 강화 파생을 사용합니다. 각 단계는 아래 항목에서 설명하는 고유한 의미가 있습니다.
purpose는 43, subpurpose는 60
purpose는 상수 43으로 고정되며 이 키 파생이 비트코인이 아닌 암호화폐를 위한 것임을 나타냅니다. subpurpose는 60으로, 이더리움에 배정된 SLIP-44 코드입니다. 두 단계 모두 강화 파생을 사용합니다.
EIP 단계는 나머지 경로를 정의한 EIP 번호
EIP 단계에는 BIP32 파생 경로의 나머지 부분을 규정하는 EIP의 번호를 넣습니다. 이 표준의 명세를 따르는 경로라면 이 EIP에 배정된 번호를 사용합니다. 이 단계에도 강화 파생을 사용합니다. 이렇게 하면 같은 앞부분 아래에서 서로 다른 EIP가 각자의 경로 규칙을 정의할 수 있습니다.
wallet 단계와 계정 생성 규칙
wallet 단계는 지갑을 서로 다른 사용자 신원으로 나누어 하나의 지갑이 여러 공개 신원을 가질 수 있게 합니다. 계정은 0번부터 순서대로 번호를 매기고 이 번호를 BIP32 파생의 자식 인덱스로 사용하며 강화 파생을 적용합니다. 소프트웨어는 직전 계정에 거래 내역이 없으면(그 주소가 한 번도 쓰이지 않았으면) 새 계정 생성을 막아야 합니다. 또한 외부에서 시드를 가져온 뒤에는 사용된 계정을 모두 찾아내야 합니다.
왜 m/44'/60' 대신 새 계층을 만들었나
기존 관례는 '이더리움' 코인 타입을 써서 m/44'/60'/*로 시작하는 경로를 사용하는 것입니다. 그러나 이 방식은 여전히 UTXO 기반 코인을 가정하므로 이더리움에는 잘 맞지 않고 표준화와 사용성과 보안 면에서 타협을 낳는다고 저자들은 주장합니다. 그래서 이더리움 계열 체인을 위한 완전히 새로운 계층 구조를 제안했습니다.
기존 소프트웨어와의 호환
새 파생 경로가 추가되므로 기존 소프트웨어는 기존 방식에 더해 이 체계를 추가로 지원해야 합니다. 이더리움의 지갑 파생 경로가 이미 혼란스러운 상태라서 추가 혼란은 비교적 적을 것이고 장기적으로는 상황을 크게 개선할 수 있다고 저자들은 봅니다. 니모닉을 쓰는 애플리케이션을 위해서는, 새 경로로 옮길 때 호환성 문제를 피하는 방법을 담은 별도의 EIP 초안을 제출할 예정이라고 밝혔습니다. 테스트 케이스는 미정(TBD)이고 구현은 아직 없다고 적혀 있습니다.