Introduction to Stealth Address
비트코인은 트랜잭션이 남아 조회나 추적이 가능하므로 익명성에 한계가 있다. 익명성을 유지하기 위해 프라이버시 코인(Privacy Coin), 스텔스 주소(Stealth Address), 믹싱(Mixing)을 활용한 프로토콜 등을 사용할 수 있다. 여기서는 스텔스 주소에 대해 살펴보겠다.
스텔스 주소(Stealth Address)란?
스텔스 주소는 송신자가 수신자 대신 일회용 주소를 생성해서 사용하는 것이다. 생성된 주소는 다른 거래와 연결할 수 없는 고유 주소이므로, 송신자와 수신자 주소를 연결하기 어려워진다. 이는 안심 번호와 비슷하다.
스텔스 주소의 장점
- 익명성 : 익명성이 보장되는 일회용 수신 주소를 사용해 거래 추적이 어려워진다.
- 개인정보 보호 : 스텔스 주소와 일회성 키가 자동 생성되고, 거래 후 블록체인에 거래 사항이 공개되지만, 구체적인 거래 내역은 송신자와 수신자만 알 수 있다.
스텔스 주소의 단점
- 악용 가능성 : 범죄에 사용된다면 범죄자 추적이 어려워진다. 또한, 블랙리스트 주소 관리에 문제가 생긴다.
- 보장의 문제 : 프로토콜이 거래가 언제 이루어지고 어떤 사용자에게 속하는지 식별하고 거래를 보장하는데 문제가 발생한다. 예를 들어 동일한 웹 사이트에서 무작위로 생성된 고유한 일회용 주소로 여러 번의 거래가 발생하면 트랜잭션을 발견하고 특정 사용자에게 연결하기가 어렵다.
- 사용이 어려움 : 기본적으로 사용되는 방법이 아니기 때문에 사용자의 학습이 필요하다. 복잡한 트랜잭션을 생성할 때 네트워크 용량에 따라 지연이 발생할 수 있고 수수료가 추가될 수 있다.
활용 - 모네로
모네로는 3대 익명성 암호화폐 중 하나로 수신자 익명성 보호를 위해 스텔스 주소를 사용해 수신자 주소를 외부에 노출되지 않도록 한다.
모네로에서 스텔스 주소는 수신자의 공개 소비키(Public Spend Key)와 공개 읽기키(Public View Key)를 기반으로 만들어진다. 소비키는 암호화폐를 전송할 때 사용하고, 읽기키는 계좌의 잔액이나 전속 내역을 볼 때 사용된다. 사용자가 모네로를 시작할 때 개인 소비키와 읽기키가 지급된다. 이후 사용자가 수신자가 되어 암호화폐를 전송받게 되면 개인 소비키와 읽기키를 바탕으로 공개 소비키와 읽기키가 만들어지고, 여기에 임의의 데이터가 합쳐져 스텔스 주소로 변화한다. 개인이 받은 키를 기반으로 스텔스 주소가 만들어지기 때문에 다른 사용자와 주소가 중복되지 않는다.
비탈릭 부테린이 제안한 스텔스 주소 시스템
현재 거래 시스템은 수신자가 본인 주소를 직접 또는 ENS (이더리움 네임 서비스)를 사용해 송신자에게서 자산을 받는다. 수신자의 주소를 알고 있거나 ENS 상의 주소를 알고 있는 경우 송신자와 수신자의 주소를 특정할 수 있어 문제가 생긴다. 이를 해결하고자 부테린은 스텔스 주소 시스템을 사용하는 온체인 프리이버시를 제안했다.
비탈릭 부테린은 본인의 블로그 글 ‘스텔스 주소에 대한 불완전한 안내서’에서 스텔스 주소를 “Alice나 Bob이 생성할 수 있지만 Bob만이 제어할 수 있는 주소”로 정의하고, 새로운 워크플로우를 제안했다. 이어서 스텔스 주소를 사용하기 위해 기존 이더리움 기반 지갑의 변화가 필요하고, 장기적으로 볼 때 영지식 증명(zero-knowledge proof)에 의존할 것처럼 보인다고 밝혔다.
스텔스 주소 시스템 흐름
- Bob(수신자)은 root spending key(m)와 stealth meta-address(M)를 생성한다.
- Bob은 M을 bob.eth의 stealth meta-address로 등록하기 위해 ENS record에 추가한다.
- Alice는 Bob의 M을 ENS에서 찾는다.
- Alice는 오직 그녀만 알고 있고, 한 번만 사용할 임시키를 생성한다. (특정 stealth address를 생성하기 위함)
- Alice는 자신의 임시키와 Bob의 meta-address를 결합해 stealth address를 생성한다. (생성된 주소로 자산을 보낼 수 있음)
- Alice는 그녀의 임시 공개키(ephemeral public key)를 생성하고, 임시 공개키 레지스터에 게시한다. (이 과정은 stealth address로 송금하는 트랜잭션과 같은 트랜잭션에서 수행할 수 있음)
- Bob이 자신에게 속한 stealth address를 발견하기 위해 Bob은 임시 공개키 레지스트리의 전체 목록을 스캔한다.
- Bob은 각 임시 공개키를 자신의 root spending key(m)와 결합해 stealth address를 생성하고 해당 주소에 자산이 있는지 확인한다. 있는 경우 Bob은 해당 주소에 대한 spending key를 계산하고 기억한다.