비탈릭 부테린의 원본 글
번역: 아즈마, 오데일리 플래닛
3월 9일, 이더리움의 공동 창립자인 비탈릭 부테린은 "하드포크를 통해 갑작스러운 양자 공격으로부터 사용자 자금을 구하는 방법"이라는 제목으로 이더리움 연구 포럼(ethresear.ch)에 짧은 글을 올렸습니다.
이 글에서 비탈릭은 내일 양자 공격이 발생할 경우 이더리움이 비상 상황에서 사용자 자금 손실을 최소화할 수 있는 방법과 양자 방지 형태로 전환하고 이후 정상 운영으로 돌아가기 위해 어떤 절차를 마련해야 하는지 설명합니다.

아래는 오데일리 플래닛에서 정리한 비탈릭의 글 전문입니다.
양자 컴퓨터가 내일 실현될 수 있고, 사기꾼이 어떻게든 양자 컴퓨터에 접근하여 사용자 자금을 훔치려 한다고 가정하면 어떻게 해야 할까요?
이를 방지하기 위해 윈터니츠 서명, STARK 등의 양자 내성 기술이 개발되어 계정 추상화가 준비되면 모든 사용자가 양자 내성 서명 체계로 임의로 전환할 수 있습니다. 하지만 시간이 그렇게 많지 않고 양자 공격이 생각보다 갑작스럽게 발생한다면 어떻게 해야 할까요?
현재로서는 비교적 간단한 복구 포크를 통해 문제를 해결할 수 있는 좋은 위치에 있다고 생각합니다. 이 솔루션을 사용하면 이더 네트워크는 하드포크를 거쳐야 하고 사용자들은 새로운 지갑 소프트웨어를 다운로드해야 하지만, 소수의 사용자만 자금을 잃을 수 있습니다.
양자 공격의 주요 위협은 다음과 같습니다. 이더리움 주소는 keccak(priv_to_pub(k))[ 12:] 함수에서 파생되며, 여기서 k는 개인키에 해당하고 priv_to_pub는 개인키를 공개키로 변환하는 데 사용되는 타원 곡선 곱셈에 해당합니다.
양자 컴퓨팅이 구현되면 위의 타원 곡선 곱셈은 가역적이 되지만(실제로는 이산 로그 문제의 해법이기 때문에), 해싱 연산은 여전히 안전할 것입니다. 사용자가 거래를 하지 않은 경우 주소 정보만 공개되며 이 경우에도 여전히 안전하지만, 사용자가 한 번이라도 거래를 했다면 거래 서명을 통해 공개 키가 공개되며, 양자 컴퓨터가 있는 경우 개인 키가 공개될 가능성이 있습니다. 따라서 이 경우 대부분의 사용자가 위험에 처하게 됩니다.
하지만 실제로 이러한 위협을 완화할 수 있는 방법이 있으며, 여기서 중요한 점은 실제로 대부분의 사용자의 개인 키는 일련의 해싱 작업을 통해 생성된다는 것입니다. 예를 들어, 많은 개인키는 일련의 니모닉과 일련의 해싱 연산을 기반으로 하는 BIP-32 사양을 사용하여 생성되며, BIP-32가 아닌 많은 개인키도 비슷한 방식으로 생성됩니다(예: 사용자가 브레인 월렛을 사용하는 경우 일반적으로 일련의 해싱 연산(또는 다소 어려운 키 파생 함수)을 거친 암호에서 생성됩니다).
즉, 탄력적 포크를 통한 갑작스러운 양자 공격에 대한 해결책은 다음과 같은 단계를 거치게 됩니다:
- 첫째, 대규모 공격이 발생한 후 모든 블록을 롤백합니다;
- 둘째, EOA 주소에 기반한 기존 트랜잭션 모델을 비활성화합니다;
- 셋째, (그때까지 출시되지 않은 경우) 스마트 컨트랙트 지갑을 통한 거래를 허용하는 새로운 거래 유형을 추가합니다(예: RIP-7560의 일부 지갑);
- 넷째, 사용자가 STARK 증명을 제공할 수 있는 새로운 거래 유형 또는 연산 코드를 추가하고, 증명이 통과되면 사용자 주소의 코드가 새로운 검증 코드로 전환되며, 이후 사용자는 새로운 코드 주소를 스마트 컨트랙트 지갑으로 사용할 수 있습니다.
- 다섯째, 스타크 증명의 데이터 양이 많기 때문에 가스를 절약하기 위해 위와 같은 유형의 스타크 증명을 동시에 여러 개 수행할 수 있도록 일괄 스타크 증명을 지원할 예정입니다.
원칙적으로 내일 이 복구 포크를 구현하는 데 필요한 인프라 개발을 시작하여 갑작스러운 양자 공격이 발생했을 때 이더 생태계에 대비할 수 있도록 할 것입니다.

