본문 바로가기
블록체인

이더리움 프라이버시: 익명성 (Stealth address, Gas Ticketing)

by dbadoy 2023. 6. 24.

얼마 전 비탈릭 부테린이 이더리움이 성숙해지는 데 필요한 세 가지 전환이라는 주제로 글을 썼다.

그 세 가지는 L2 스케일링, 스마트 컨트랙트 지갑, 프라이버시이며, 이 글에서는 프라이버시에 대해 다룬다.

불과 몇 년 전만 해도 이더리움 계정은 단순히 자산의 전송으로만 사용되었으나, ENS, POAP, NFT, 소울 바운드 토큰 등이 만들어지며 계정에 자산 정보 외에도 여러 데이터가 포함되고 있다. 즉, 계정에 개인 정보들이 포함되기 시작한 것이다. 

이에 따라 온체인에서 하는 활동과 개인 정보 간 링크가 생기게 되었고 프라이버시를 갖기 어려워졌다. 예를 들어 프라이버시(i.e. 익명성)가 보장된 온체인 활동을 하고 싶다고 가정해보자. 사용자는 새로운 계정을 만들 것이다. 만들어진 계정은 아무런 내역도, 기존 계정과는 아무런 링크도 없는 말 그대로 익명의 계정이다. 하지만 온체인 활동을 하기 위해서는 Gas fee를 지불할 ETH가 필요할 텐데, 이를 어디서 받을 것인지가 문제 지점이다. 

기존에 사용하던 계정으로부터 ETH를 받게 되면, 기존 계정 정보와 새로 만든 계정 간 링크가 생기게 된다. 이를 해결하여 프라이버시를 갖는 계정을 만들고 온체인 활동을 하기 위한 ETH를 받기 위한 여러 옵션을 생각해보자.

옵션 1. 토네이도 캐시) 미국에서는 토네이도 캐시가 금지된 것처럼, 제재를 위반할 위험이 있는 한 누구에게나 유효한 대안은 아니기 때문에 다른 방법을 찾아야 한다.
옵션 2. 중앙 거래소) 이는 더욱더 프라이버시에서 멀어지는 방법이다. 최근 거래소는 심지어 신원 인증까지 거쳐야 한다.

이렇다 할 뾰족한 옵션이 없는 상황이기 때문에 이더리움 개발자들은 이에 대해 여러 방법을 모색하고 제안하고 있다. 아래에는, 그중에서도 'Stealth address', 'Gas Ticketing' 두 가지 대안에 대해 살펴보고자 한다.

Stealth address

사용자 A가 사용자 B로부터 자산을 받을 때, A는 자산을 받았다는 것을 전 세계에 알리고 싶지 않을 수 있다. 이를 위해 A만 제어할 수 있는 (A만 키를 알고 있는) Stealth meta-address를 생성하고, 사용자 B에게 전달한다. 사용자 B는 받은 Stealth meta-address로부터 Stealth address를 생성하여 자산을 전송하고 사용자 A는 이를 완전히 제어할 수 있다.

이에 대한 플로우를 그려보자면 아래와 같다.

1. 사용자 A는 Root spending key를 생성후, 이로부터 Stealth meta address를 생성
2. 사용자 A는 Stealth meta address를 사용자 B에게 공유 (직접 공유, ENS...)
3. 사용자 B는 Stealth meta address로부터 Stealth address A'를 생성, A'로 자산 전송
4. 사용자 A는 Root spending key로 Stealth address A'를 제어할 수 있는 키를 생성
5. 사용자 A는 키로 address A' 제어

이렇듯 Stealth address를 이용하면 각 트랜잭션마다 계정을 새로 만드는 것과 같은 프라이버시를 보장받을 수 있다. 
(암호학 및 자세한 내용은 비탈릭 부테린 블로그 포스팅을 참고)

이 방법에는 반드시 해결해야 할 문제가 있다. 바로 Stealth address의 온체인 활동에 사용할 ETH 공급이다. 사용자 A는 남들에게 자산을 받은 것을 숨기겠다는 목적은 달성했으나, 이 자산을 전송하는 등의 온체인 활동이 불가능하다. Gas fee로 제공할 ETH가 없기 때문이다.

비탈릭 부테린은 Stealth address 관련 포스팅에서, 트랜잭션을 집계하는 노드 (이하 Searcher)를 신뢰하는 방법으로 이를 해결할 수 있다고 한다. 디테일한 내용은 다루지 않지만, 사용자가 Ticket으로 온체인 거래 수수료를 지불할 수 있도록 하고 Ticket을 받은 Searcher는 사용자의 트랜잭션이 블록에 성공적으로 포함될 때까지 무료로 번들에 포함함으로써 이를 해결하자는 것이다.
(** Searcher, Bundle과 같은 용어는 MEV와 관련된 용어이기 때문에 MEV를 찾아보면 도움이 되겠다)

Gas Ticketing

비탈릭 부테린이 해당 포스팅을 올리고 며칠 지나지 않아 'Gas Ticketing - A Backstage Pass to Ethereum Blocks' 라는 글을 Toni Wahrstätter가 업로드했다.

(해당 개념은 중앙화된 전자 현금 시스템에서 추적 불가능한 결제를 가능하게 한 데이비드 차움의 “Blind Signatures for Untraceable Payments” 개념을 기반으로 제안되었다고 한다)

Gas Ticket 작동 예시를 살펴보자.

  • 사용자가 계정 A를 사용하여 코디네이터로부터 0.001 이더리움으로 'Ticket'을 구매하고, 이를 위해 사용자는 블라인드 데이터와 함께 이더리움을 코디네이터에게 전송합니다. 이 "데이터"는 이론적으로 "이것은 나의 첫 번째 Ticket입니다"라는 해시 문자열일 수 있습니다. "블라인딩"은 코디네이터가 제공된 데이터를 일반 텍스트로 볼 수 없도록 하는 암호화 기법입니다. 블라인딩에는 무작위로 생성된 숫자, 즉 블라인딩 인자가 필요하며, 이 숫자는 데이터를 '블라인드'하는 데 사용되며 사용자가 비밀로 유지합니다.
  • 코디네이터는 0.001 이더리움의 수령을 확인하고 블라인드된 데이터에 서명한 후 서명된 블라인드된 데이터를 사용자에게 반환합니다.
  • 이제 계정 B를 사용하는 사용자는 먼저 서명된 블라인드 데이터를 "블라인드 해제"(코디네이터로부터 유효한 서명을 효과적으로 획득)한 다음 코디네이터에게 서명을 보여줌과 동시에 코디네이터에게 1000 DAI를 보유한 펀딩 대상 계좌를 제공함으로써 Ticket을 사용할 수 있습니다.
  • 서명이 유효하면 코디네이터는 사용자가 미리 Ticket을 구매하여 결제했음을 알고 제공된 계정에 자금을 입금할 수 있습니다. 마지막 단계에서 코디네이터는 이중 사용을 방지하기 위해 사용된 서명을 기록합니다.

정리해보자면 Ticket을 판매/처리해주는 코디네이터가 존재하고, 대상 계정에 자산을 입금하는 계정은 코디네이터일 것이기 때문에 누가 보냈는지 특정할 수 없다는 것이다. 그림과 함께 한 번 더 보자.

https://hackmd.io/@Nerolation/rkp8LyRUh

  1. 사용자가 무작위/임의 데이터를 생성하고 이를 블라인드 처리
  2. 사용자는 해당 데이터를 이더리움과 함께 코디네이터에게 전송
  3. 코디네이터는 수신을 확인하고 블라인드된 데이터에 서명
  4. 코디네이터는 서명된 블라인드 데이터를 반환
  5. 사용자가 서명된 블라인드 데이터의 블라인드를 해제하고 코디네이터의 서명을 받음
  6. 사용자가 미펀딩 계정을 사용하여 코디네이터의 서명과 블라인드 해제된 Ticket과 함께 펀딩할 주소를 제출
  7. 코디네이터가 서명을 확인하고 제공된 주소에 Ticket 금액 펀딩

하지만 이 방법은 발급되었지만 사용되지 않은 Ticket들을 가지고 코디네이터가 도망갈 위험성이 있다. 즉, 코디네이터에 대한 신뢰가 필요한 것이다. 이 부분에 대해서는 동의하지 않는 사람도 충분히 있을 것 같다.

신뢰하는 것에 대해 동의하는 사람들에 한해서, 코디네이터에게 어느 정도의 수수료를 내더라도 프라이버시를 챙기려 할 것이기 때문에 수익을 창출할 수 있게 된다. 신뢰가 필요하지 않은 방법으로 이를 해결하기 위해선 토네이토 캐시와 같은 서비스를 이용해야 할 것인데, 이는 더 많은 수수료가 들기 때문에 결국 코디네이터를 사용하는 사람들이 많아지지 않을까?

 

이렇게 비탈릭 부테린이 말하는 이더리움 프라이버시에 대해서 알아보았다. 

사실 처음에 비탈릭 부테린이 말하는 세 가지에 프라이버시가 있는 것이 의아했다. 설마 트랜잭션을 암호화라도 하겠다는 건가 싶었는데, 기존의 계정과 트랜잭션의 구조, 처리 과정에 대한 변화는 없으며 필요에 따라 익명성을 지킬 수 있는 방안이 필요하다는 의미로 추측된다.

최근 계정 추상화에 대해서도 보고있는데, 점점 더 이더리움을 이루는 모듈이 많아지고 있다.
이더리움 노드 자체도 EL, CL으로 나뉘고, L2, MEV, 계정 추상화, ... 필요한 노드 종류가 너무 많다. 한 번 이를 놓친다면 다시 따라가는 것이 쉽지 않겠다.

참고

https://vitalik.ca/general/2023/01/20/stealth.html#stealth-addresses-and-paying-transaction-fees

https://hackmd.io/@Nerolation/rkp8LyRUh

'블록체인' 카테고리의 다른 글

[이더리움] Signature API 클라이언트  (0) 2023.05.16
[이더리움 코어] event.Feed  (0) 2023.05.10
[이더리움] chainID, networkID  (0) 2023.04.27
[이더리움] Access list  (0) 2023.04.12
[이더리움] Multicall contract  (0) 2023.04.08