공개 블록체인에서 Stealth Addresses를 활용한 프라이버시 강화
Source: Dev.to
블록체인은 네트워크 내에서 발생하는 모든 거래를 기록하는 분산 원장으로, 송신자 주소, 수신자 주소, 전송된 금액을 포함합니다. 이러한 기록은 공개적으로 접근 가능하며 언제든지 누구든지 검토할 수 있습니다. 블록체인 주소는 개인 정보를 직접 저장하지 않지만 가명성을 가지고 있어 프라이버시가 보장되지 않습니다. 거래소, 결제, 사회적 상호작용 등을 통해 지갑 주소 뒤에 있는 실세계 신원이 밝혀지면, 해당 주소와 연결된 과거 및 미래의 모든 거래를 추적하기 쉬워집니다. 또한 블록체인 데이터는 공개를 전제로 설계되었기 때문에 지갑의 전체 금융 이력을 제한 없이 볼 수 있습니다.
스텔스 주소란?
스텔스 주소 개념은 블록체인 거래에서 프라이버시를 강화하기 위해 도입되었습니다. 스텔스 주소는 각 거래마다 생성되는 고유하고 일회성인 지갑 주소입니다. 하나의 공개 주소를 재사용하는 대신, 스텔스 주소를 사용하면 사용자는 매번 서로 연결할 수 없는 다른 주소를 통해 자금을 받을 수 있습니다.
외부 관찰자에게는 스텔스 주소를 사용해 보낸 자금이 매 거래마다 완전히 새롭고 무관한 지갑 주소로 전송되는 것처럼 보입니다. 이 설계는 모든 거래가 블록체인에 공개되어 있더라도 동일 수신자에게 여러 번 지급된 사실을 연결하기 어렵게 만듭니다.
예시
앨리스가 친구인 밥에게 자금을 보내고 싶다고 가정해 봅시다. 밥은 자금을 프라이버시하게 받기를 원하고, 앨리스는 이 결제가 자신의 지갑 주소나 이전 거래와 쉽게 연결되지 않도록 하고 싶어합니다. 바로 이런 경우에 스텔스 주소가 활용됩니다.
듀얼‑키 모델
일반적인 블록체인 지갑에서는 사용자가 하나의 개인 키를 제어하며, 이를 통해 공개 키(또는 지갑 주소)를 파생합니다. 하지만 스텔스 주소는 듀얼‑키 모델인 Dual‑Key Stealth Address 프로토콜을 활용합니다.
이 모델에서 수신자(Bob)는 두 개의 별도 개인 키를 생성합니다:
| 키 | 목적 |
|---|---|
| Viewing Key | Bob이 블록체인을 스캔하여 자신에게 속한 결제를 식별할 수 있게 합니다. |
| Spending Key | 자금을 수신한 후 이를 제어하고 사용할 때 사용됩니다. |

Bob이 두 키를 모두 생성하면 각각에 대응하는 공개 키를 파생합니다. 이 두 공개 키—viewing public key와 spending public key—는 스텔스 메타‑주소라는 단일 키로 결합됩니다.

스텔스 메타‑주소는 직접 자금을 보유하는 지갑 주소가 아닙니다. 대신 Bob이 안전하게 타인에게 공유할 수 있는 공개 식별자 역할을 합니다. Bob은 이 스텔스 메타‑주소를 송신자 Alice에게 전달합니다.
Source: …
송신자의 프로세스: 스텔스 주소 생성
Bob의 스텔스 메타‑주소를 입수한 Alice는 다음과 같이 진행합니다:
-
일시적인 키 쌍 생성
Alice는 이번 거래에만 사용할 임시(일회용) 키 쌍을 생성합니다. -
공유 비밀 생성
그녀는 뷰잉 공개키(스텔스 메타‑주소에서 추출)와 자신의 일시적인 개인키를 혼합하여 공유 비밀을 생성합니다.
Bob은 나중에 자신의 뷰잉 개인키와 Alice의 일시적인 공개키를 사용해 동일한 비밀을 재생성할 수 있습니다.
이 공유 비밀은 타원곡선 디피‑헬만(ECDH) 프로토콜을 통해 파생됩니다.Note
ECDH는 두 당사자가 안전하지 않은 채널을 통해 공유 비밀 키를 안전하게 설정할 수 있게 해 주는 암호학적 키 교환 프로토콜입니다. -
스텔스 주소 파생
Alice는 공유 비밀을 사용해 고유한 일회성 주소, 즉 스텔스 주소를 계산하고 그 주소로 자금을 전송합니다.

Source: …
수신자가 자금을 감지하고 청구하는 방법
문제: Alice가 무작위 스텔스 주소로 자금을 전송한 후, Bob은 해당 트랜잭션이 자신을 위한 것임을 어떻게 알고, 어떻게 자금에 접근할 수 있을까요?
-
Announcement
전송이 완료되면 Alice는 임시 공개키를 포함한 Announcement를 블록체인에 게시합니다. -
Scanning
Bob은 블록체인을 지속적으로 스캔하면서 스텔스 주소와 함께 제공된 Announcement를 찾습니다. -
공유 비밀 재생성
Bob은 자신의 조회 전용 개인키와 Alice가 Announcement에 포함한 임시 공개키를 사용해 공유 비밀을 다시 계산합니다. -
스텔스 주소에 대한 개인키 파생
공유 비밀로부터 Bob은 자금을 받은 일회용 스텔스 주소에 대응하는 개인키를 파생합니다. -
지출
이 개인키를 사용하면 Bob은 일반 트랜잭션처럼 자금을 사용할 수 있습니다.

요약
- 스텔스 주소는 트랜잭션당 연결성을 차단하면서 블록체인을 공개 상태로 유지합니다.
- 이중 키 모델은 조회(감지)와 지출(통제) 기능을 분리합니다.
- ECDH는 송신자와 수신자가 공유 비밀을 생성하도록 하여 고유한 일회용 주소를 만듭니다.
- Announcement 메커니즘을 통해 수신자는 기본 주소와의 연관성을 드러내지 않고 자금을 발견하고 청구할 수 있습니다.
이러한 암호학적 기법들의 조합은 투명한 퍼블릭 원장에서도 사용자가 보다 높은 수준의 프라이버시를 누릴 수 있게 합니다.
Alice는 view tag를 생성했으며, 이는 앞서 생성한 공유 비밀 sge의 처음 몇 바이트와 Alice가 돈을 보낸 실제 스텔스 주소를 결합한 것입니다.
Bob의 스캔 과정
이제 최종 단계가 남았습니다. 수신자인 Bob은 블록체인을 모니터링하고 게시된 Announcement를 확인해야 합니다. 여러 사람의 Announcement가 있을 수 있는데, Bob은 어떻게 자신에게 해당하는 Alice의 Announcement를 찾을 수 있을까요?
Bob은 각 Announcement를 확인합니다. 각각에 대해 다음을 수행합니다:
- 임시 공개키를 가져옵니다.
- 이를 자신의 조회 전용 개인키와 결합해 공유 비밀을 생성합니다.
생성된 공유 비밀의 처음 몇 바이트가 Announcement에 포함된 view‑tag 값과 일치하면, 해당 Announcement가 자신을 위한 것임을 알 수 있습니다.
Note – 초기 view‑tag 비교를 통해 모든 Announcement에 대해 스텔스 주소를 재구성하는 작업을 피함으로써 스캔 속도가 빨라집니다.
Bob이 올바른 Announcement를 찾으면, 다음 단계인 자금 접근으로 넘어갑니다.
스텔스 주소 재구성
Bob은 자신이 보유한 지출용 공개키와 공유 비밀을 결합해 Alice가 자금을 보낸 스텔스 주소를 생성합니다. 생성된 스텔스 주소가 Announcement에 있는 주소와 일치하면, 해당 트랜잭션이 자신을 위한 것임을 확인할 수 있습니다.
Source: …
스텔스 개인키 생성
최종 단계는 스텔스 주소에 대한 개인키를 생성하는 것으로, 이를 통해 Bob은 원하는 어떤 지갑으로든 자금을 전송할 수 있습니다.
- 지출 개인키와 생성된 공유 비밀을 결합합니다.
- 그 결과가 일회용 스텔스 주소에 대한 스텔스 개인키가 됩니다.
이 개인키를 사용하면 Bob은:
- 임시 스텔스 지갑에서 자신이 소유한 다른 지갑으로 자금을 전송할 수 있습니다.
- 자금을 직접 거래소로 보낼 수 있습니다.
외부 관찰자의 입장에서는 Alice가 Bob이 소유한 지갑이 아니라 무작위 주소로 자금을 보낸 것처럼 보입니다. 마찬가지로 Bob의 메인 주소를 감시하는 사람도 자금이 일회용 스텔스 주소로 전송되었기 때문에 Alice 주소와 직접적인 연결 고리를 보지 못합니다.
중요한 주의사항
- 금액은 숨겨지지 않음 – 누구든지 스텔스 주소로 전송된 금액을 확인할 수 있습니다.
- 연결 가능성 – 분석가가 시간에 따라 자금 흐름을 면밀히 추적한다면 Alice와 Bob의 지갑 사이에 연결 고리를 추론할 수 있지만, 이는 간접적이며 일반 주소보다 훨씬 파악하기 어렵습니다.
다음 단계는?
이 섹션에서는 스텔스 주소의 전반적인 개념과 암호학적 프로세스를 다루었습니다. 다음 파트에서는 특정 오프체인 구현을 살펴보며, 이러한 개념이 실제 코드로 어떻게 변환되는지, 그리고 송신자와 수신자가 실무에서 동일한 스텔스 주소를 독립적으로 생성하는 방법을 시연합니다.

