ERC-2334 BLS 키 계층 경로 표준 (BLS12-381 Deterministic Account Hierarchy)

Review · 계정·지갑 · 2019-09-30 작성

ERC-2333이 만드는 BLS 키 트리에서 어떤 키를 어떤 용도로 쓸지 정하는 경로 규칙입니다. 비콘 체인 검증자의 출금 키와 서명 키 경로도 함께 정합니다.

왜 필요한가

이더리움 비콘 체인은 BLS12-381이라는 새 서명 방식을 쓰고 이를 위한 키 생성 방식은 ERC-2333으로 새로 정해졌습니다. 그런데 이 방식은 기존 지갑들이 쓰던 경로 표준인 BIP44와 맞지 않습니다. 모든 키를 강화 방식(hardened)으로만 만들고 한 단계에서 만들 수 있는 키 수가 더 많으며 키 유도에 BIP32를 쓰지 않기 때문입니다. 경로 표준이 없으면 하나의 비밀값에서 어떤 순서로 어떤 키를 꺼내 쓸지 지갑마다 달라집니다. 실제로 과거 이더리움에서는 네 가지 서로 다른 지갑 경로가 쓰여 혼란이 있었고 이를 정리하려는 초안 ERC-600과 ERC-601이 나오기도 했습니다. 이 표준은 그런 혼란을 반복하지 않도록 BLS 키 트리를 탐색하는 공통 경로를 정하고 BIP44보다 일반적인 구조를 지향합니다.

심층 설명

경로 구조와 표기

경로는 형제 인덱스를 나타내는 정수를 /로 이어 조상 관계를 표시합니다. m은 트리의 마스터 노드(뿌리)를 뜻하고 i / j는 j가 i의 자식임을 뜻합니다. 경로는 마스터 노드를 제외하고 purpose, coin_type, account, use의 4단계로 이루어지며 최소 4단계(마스터 노드 포함 5단계)를 반드시 써야 합니다. 전체 형태는 m / purpose / coin_type / account / use입니다.

purpose는 12381

purpose는 새 곡선의 이름인 BLS12-381을 따라 12381로 고정됩니다. 이 표준을 준수하려면 키 유도 함수(KDF)로 ERC-2333을 반드시 구현해야 하며 그렇지 않은 경우 purpose 값 12381을 쓸 수 없습니다. BIP43·BIP44와 KDF와 경로가 상호 호환되지 않으므로 purpose 값을 구분할 필요가 있고 12381이 자연스러운 선택이었다고 설명합니다.

coin_type은 3600

coin_type은 코인별 번호로, 서로 다른 체인에서 쓰는 키를 분리하는 역할을 합니다. 이더리움의 BLS12-381 키에는 3600을 씁니다. 이는 BLS12-381 키와 기존 secp256k1 키를 깔끔하게 분리하기 위해 새로 정한 값이며 이더리움 secp256k1의 coin_type인 60의 제곱(3600 == 60^2)이라는 이유로 선택되었습니다.

account와 use 단계

account는 사용자가 원할 경우 용도별로 서로 다른 키 묶음을 가질 수 있게 하는 필드로, 한 사용자의 여러 계정은 이 단계에서 구현하는 것이 권장됩니다(SHOULD). use는 한 계정 안에서 서로 관련되지만 보안상 분리해야 하는 여러 용도의 키를 제공하기 위한 단계입니다. 이 단계의 지원은 필수이지만 많은 경우 값은 0으로 남습니다. use 값은 보통 응용 수준에서 정해져 겹치지 않는 용도마다 별도 키를 제공합니다.

비콘 체인 검증자 키 경로

각 검증자는 두 개의 키를 가집니다. 출금과 이체에 쓰는 출금 키(withdrawal key)와 검증자 임무 수행에 쓰는 서명 키(signing key)입니다. 출금 키 경로는 m/12381/3600/i/0이고 서명 키 경로는 m/12381/3600/i/0/0이며 여기서 i는 i번째 검증자 키 묶음을 뜻합니다. 즉 서명 키는 해당 검증자 출금 키의 0번째 자식입니다. 비밀 분산 검증자나 수탁 검증자처럼 이 경로를 그대로 쓸 수 없는 경우에는 해당 키를 생략하고 다른 방식으로 유도할 수 있으나, 구현은 합리적으로 가능한 범위에서 용도에 맞는 키를 쓰도록 노력해야 합니다. 예를 들어 수탁 스테이킹에서는 예치하는 사용자가 출금 키에 이 표준을 따르고 서비스 제공자의 서명 키 유도 방식은 별개입니다.

서명 키와 출금 키를 나눈 이유

두 키를 나눈 것은 비콘 체인 안에서 행위별 보안 요구가 다르기 때문입니다. 서명 키는 검증자 클라이언트에 넣어 메시지에 서명하는 핫 키입니다. 이 키가 유출되면 최악의 경우 슬래싱 대상 메시지가 서명되어 검증자가 슬래싱되고 강제 퇴출됩니다. 출금 키는 검증 외의 행동에만 필요하고 해당 검증자의 예치 자금 전체에 접근하므로 보안 요구가 더 높은 콜드 키로 다뤄야 합니다. 서명 키가 출금 키의 자식이므로 출금 키만 안전하게 보관하면 필요할 때 서명 키를 복구할 수 있습니다.

BIP44와의 관계와 강화 키 표기

purpose, coin_type, account라는 용어는 BIP43과 BIP44에서 널리 쓰이는 개념을 그대로 가져온 것입니다. 다만 ERC-2333이 새 KDF를 쓰기 때문에 새 경로 표준이 필요했고 이 ERC가 약간의 변경과 함께 이를 구현합니다. purpose 12381 경로는 강화 키(hardened key) 표기를 지원하지 않으므로 ' 문자를 쓰면 안 됩니다. 또한 이 표준은 UTXO 중심 기능을 빼서 BIP44보다 일반적인 구조를 지향합니다.

제안 상태

이 ERC는 현재 Review 상태입니다. 아직 검토 중인 제안이므로 내용이 바뀔 수 있습니다.

ERC 원문 · ← ERCs