Silent Payments는 재사용할 수 있는 식별자 하나로 비트코인을 받으면서도 매번 같은 공개 추적 가능한 주소로 입금되는 일을 피하게 해 줍니다. 지갑은 비트코인을 받고 보내는 앱이나 기기입니다. 송금자의 지갑이 결제마다 새 대상을 계산하고 수취인의 지갑이 나중에 체인에서 찾아냅니다. 절차는 BIP352에 설명되어 있습니다. 수취인은 온라인으로 기다리거나 결제 전에 새 주소를 전달할 필요가 없습니다.
밥이 웹에 일반 Bitcoin 주소를 올리면 누구나 탐색기에서 입금을 추적할 수 있습니다. 블록 탐색기는 특정 네트워크의 거래와 블록을 조회하는 앱입니다. 사람마다 새 주소를 주는 편이 낫지만 이를 전달할 방법이 필요합니다. Silent Payments는 이 문제를 다룹니다. 밥은 고정 정보를 공개하고 앨리스는 이를 바탕으로 해당 결제만의 출력을 만듭니다. 출력은 금액과 나중에 그 금액을 쓸 수 있는 조건을 기록한 것입니다. 공개 수취 정보가 같은 주소로 체인에 반복해서 나타나지 않습니다. [1] [3] [9] [7]
Silent Payments 주소에는 공개 scan key와 공개 spend key가 들어 있습니다. 개인키는 비밀로 보관하는 숫자 값이며 대응하는 공개키는 다른 사람과 공유할 수 있습니다. 이름은 역할을 나타냅니다. scan key는 결제를 찾는 데, spend key는 지출에 관련됩니다. 각각에 대응하는 개인키는 밥이 보관합니다. Bitcoin의 실제 운영 네트워크인 mainnet에서는 sp1로 시작하고 Bech32m을 사용합니다. bc1p로 시작하는 일반 Taproot 주소도, 지갑 백업도 아닙니다. 이 공개키 쌍은 호환되는 송금자가 결제 대상을 계산하게 하지만, 지출 권한이나 밥의 입금 목록은 주지 않습니다. [1] [5] [9]
밥에게 결제하려면 앨리스의 지갑이 이전에 받은 금액을 선택합니다. 그 금액을 가리키는 참조가 새 거래의 입력이 됩니다. 결제 대상 계산에는 BIP352의 규칙에 맞는 입력의 키를 사용하며, 모든 입력 유형이 해당하는 것은 아닙니다. 앨리스는 ECDH를 통해 그 개인키들과 밥의 공개 scan key를 결합합니다. 이 암호학적 방법을 쓰면 개인키를 주고받지 않고도 양쪽이 같은 비밀값을 각각 계산할 수 있습니다. 지갑은 그 값과 구체적인 입력의 연결을 바탕으로 밥의 공개 spend key를 조정해 새 출력 키를 만듭니다. 입력에 묶어 계산하므로 입력 키를 다시 써도 같은 결제 대상이 재사용되는 일을 막습니다. 앨리스가 RBF, 즉 아직 확정되지 않은 거래를 대체하는 방법을 써서 예를 들어 수수료를 높이고 입력도 바꾼다면, 지갑은 결제 대상을 다시 계산해야 합니다. 이전 결과를 그대로 가져다 쓸 수는 없습니다. [1] [4]
밥의 지갑은 대상 거래를 검색하고 개인 scan key와 입력의 공개 데이터로 가능한 출력을 계산합니다. 일치하면 그 출력을 자기 자금으로 기록합니다. 체인에는 별도 알림 없이 Taproot 출력으로 보입니다. 앨리스가 보낼 때 밥이 온라인이거나 미리 답할 필요는 없지만, 나중에 지갑이 필요한 데이터를 처리해야 합니다. [1] [6]
scan key는 입금을 찾고, spend key는 도출된 데이터와 함께 지출을 가능하게 합니다. 개인 spend key는 온라인 스캐너와 분리해 보관할 수 있습니다. 개인 scan key가 유출되어도 그것만으로 자금을 훔칠 수는 없지만 공개 데이터와 결합해 입금이 드러날 수 있습니다. 따라서 외부 스캔 서버에 넘기는 것도 프라이버시에 영향을 줍니다. 해당 서버에 seed나 개인 spend key를 보내면 안 됩니다. [1]
Silent Payments는 특별한 알림 거래가 필요 없지만 계산과 데이터 전송에는 비용이 듭니다. 수취인은 대상 거래를 검사하고 앞서 설명한 암호학적 계산을 수행합니다. 휴대전화에서는 인덱싱, 데이터 출처, 마지막 검색 뒤의 시간이 중요합니다. 일반 주소 목록만으로는 부족합니다. 노드는 거래와 블록을 검증하고 네트워크의 다른 참여자와 통신하는 소프트웨어입니다. 개인 노드와 외부 제공자는 요구 조건과 프라이버시·가용성에 미치는 영향이 다릅니다. [1] [2] [8]
밥은 프로젝트별로 labels라는 파생 수취 정보를 쓸 수 있습니다. 각 변형마다 완전히 독립된 검색을 할 필요는 없습니다. 하지만 공개된 변형들은 scan key를 공유하므로 관찰자가 같은 소유자임을 알아볼 수 있습니다. 라벨은 입금을 분류하는 용도이지 별도의 익명 신원을 만드는 방법이 아닙니다. 잔돈용 특별 라벨은 밥 자신의 결제에서 남은 금액을 구분합니다. 이전에 받은 금액 중 결제액과 수수료의 합보다 큰 금액을 사용하면 나머지는 자기 지갑으로 돌아옵니다. 판매자가 보내는 환불과는 다릅니다. BIP352는 이 용도로 m = 0 라벨을 예약합니다. 지갑은 복원할 때 항상 이 라벨을 찾으며, 다른 사람에게 입금받을 수취 정보로 공개해서는 안 됩니다. [1] [4]
밥이 휴대전화를 잃어버렸지만 백업은 가지고 있다고 해 봅시다. seed는 지갑이 키를 도출하는 비밀 초기값이며, 보통 정해진 순서로 나열된 복구 단어인 Seed Phrase로 백업합니다. 하지만 그 단어들만 있다고 아무 앱이나 Silent Payments를 찾아내는 것은 아닙니다. 같은 키 도출 방식과 이 결제들을 찾는 기능을 지원해야 합니다. 사용한 labels와 지갑을 처음 쓴 날짜를 백업하면 복구에 도움이 됩니다. 현재 자금을 찾을 때는 남은 UTXO를 포함하는 거래의 필요한 데이터를 검색할 수 있습니다. UTXO란 개별적으로 받은 금액 중 아직 쓰지 않은 것을 뜻합니다. 전체 내역을 복구하려면 체인을 더 넓게 검색해야 합니다. 따라서 검색이 끝나기 전에 화면이 비어 있다고 해서 자금이 사라졌다는 뜻은 아닙니다. [1]
Silent Payments는 주소 재사용으로 생기는 연결을 줄이지만 금액, 확정 시점, 소비한 입력의 과거 내역은 숨기지 않습니다. 앨리스는 밥에게 한 자기 결제를 알고, 주문에는 개인정보가 있을 수 있습니다. 밥이 나중에 여러 UTXO를 합치면 연결이 다시 드러날 수 있습니다. Silent Payments는 CoinJoin이 아니며 조합도 자동으로 안전하지 않습니다. BIP352는 독립된 송금자들이 협력하는 환경의 형식적 안전성 증명이 없음을 지적합니다. [1] [3]
BIP352의 작성자는 josibake, Ruben Somsen, Sebastian Falbesoner이며 번호는 2023년에 부여되었습니다. 2026년 10월 17일 확인 시점의 상태는 Complete입니다. 이것이 모든 지갑의 지원을 뜻하지는 않습니다. 송신, 수신, 검색, 복구를 따로 확인해야 합니다. 프로토콜은 기존 Taproot를 사용하므로 새 Soft Fork, 즉 네트워크가 채택하는 유효성 규칙 강화가 필요 없습니다. 미지원 구형 앱은 sp1 주소를 올바르게 처리하지 못합니다. [1] [2]
더 정확히 이해하려면 이 항목과 함께 다음도 읽어 보세요 Bitcoin 프라이버시, 가명성, Taproot, CoinJoin, Replace-by-Fee (RBF), UTXO. 다음 항목에서도 이 글을 참조합니다 Bitcoin 프라이버시, Transaction Labeling.