용어집 / 개발자 참고 자료
결제 프로토콜(BIP70)
별칭은 Payment protocol (BIP70)입니다.
- 결제 프로토콜(BIP70)이란 무엇입니까?
- 결제 프로토콜(BIP70)은 단순한 주소를 서명되고 인증서로 뒷받침되는 결제 요청으로 대체하려 했던 비트코인의 시도였으며, Bitcoin Core는 버전 0.20.0에서 마지막 남은 지원을 제거했습니다.
BIP-70에 명시되어 있습니다.
야심, 그리고 포기. Gavin Andresen과 Mike Hearn은 2013년 7월 29일에 BIP70을 발표했고, Bitcoin Core는 2014년 3월에 0.9.0 버전에 이를 포함했으며, 2019년 11월에 0.19 버전에서 사용 중단으로 표시했고, 2020년 6월 3일에 0.20.0 버전에서 삭제했습니다. 만약 결제 화면이 여전히 지갑에 이 프로토콜을 지원하라고 요구한다면, 그 통합은 수년간 손대지 않았다는 신호로 받아들이시면 됩니다.
작동 방식
상태: Bitcoin Core 0.19에서 사용 중단으로 표시되었고 2020년 6월 3일에 0.20.0 버전에서 완전히 제거되었습니다. 유지 관리되는 지갑 중 이를 구현한 것은 없습니다. 그 대신 사용되는 것은 온체인 결제용의 단순한 BIP21 URI, 라이트닝의 BOLT11 또는 BOLT12 인보이스, 그리고 재사용 가능한 목적지가 필요할 때의 BIP352 사일런트 페이먼트입니다.
설계는 네 개의 BIP로 이루어진 체계였습니다. BIP70은 메시지를 정의했고, BIP71은 네트워크를 오간 세 메시지 각각에 MIME 타입을 등록했으며, BIP72는 URI가 결제 요청을 가리킬 수 있도록 r= 파라미터를 추가했고, BIP73은 프로토콜을 해석하지 못하는 지갑을 위한 콘텐츠 협상을 처리했습니다.
흐름은 카드 단말기처럼 작동했습니다. 판매자는 서명된 PaymentRequest를 HTTPS로 제공했습니다. 고객의 지갑은 이를 가져와 첨부된 X.509 인증서 체인을 이미 신뢰하는 루트까지 거슬러 올라가며 확인하고, 문자열 대신 회사 이름을 표시했습니다. 고객이 승인하면 지갑은 트랜잭션을 브로드캐스트하고, 원본 트랜잭션 바이트와 환불 주소를 담은 Payment 메시지를 판매자에게 다시 전송했습니다. 판매자는 PaymentACK로 응답했으며, 이것이 영수증 역할을 했습니다.
이 프로토콜이 무너진 이유는 네 가지이며, 누군가 비트코인 위에 신원을 얹자고 제안할 때마다 각각이 다시 나타나므로 이해해 둘 가치가 있습니다.
인증 기관으로부터 신뢰를 빌려 왔습니다. 일반적인 루트 저장소에 있는 수백 개의 CA 중 어느 하나라도 어떤 이름에 대해서든 인증서를 발급할 수 있으며, 이것이 바로 비트코인이 피하고자 만들어진 실패 방식입니다. BIP70은 x509+sha1 서명 유형도 허용했고, 2017년 2월 23일에 SHA-1의 실용적인 충돌이 공개되었습니다.
판매자가 온라인 상태여야 했습니다. 판매자의 HTTPS 엔드포인트가 응답하지 않으면 결제를 구성할 수 없었기에, 장애가 발생하면 주소만으로도 작동했을 결제가 중단되었습니다.
정보가 유출되었습니다. 지갑이 판매자의 서버로 외부 요청을 보내 고객의 IP 주소가 노출되었고, 환불 필드는 지불인의 새 주소를 넘겨주었습니다.
얻는 것이 거의 없었습니다. 인증서는 누군가가 도메인 이름을 관리한다는 것을 증명했을 뿐, 청구서가 정당하다거나 상품이 실제로 존재한다는 것을 증명하지는 못했습니다.
확인할 수 있는 곳
BIP70이 여전히 용어로 회자되는 주된 이유는 bitcoin.org의 개발자 참조 문서가 이 프로토콜을 현재 시제로 설명하고 있고, 그 참조 문서가 수년째 Bitcoin Core의 변화를 따라가지 않았기 때문입니다.
그 외에는 보관된 지갑 소스 코드, 대형 결제 처리업체들이 이를 밀어붙이던 시절에 작성된 오래된 통합 가이드, 그리고 간혹 10년 된 청구서에 첨부된 .bitcoinpaymentrequest 파일에서 BIP70을 만나게 됩니다. 오늘 구매하는 어떤 것도 이를 요구하지 않습니다. 결제 화면을 원하는 판매자는 BTCPay Server 같은 소프트웨어를 사용하며, 이는 BIP21 URI와 라이트닝 인보이스를 발행하고 고객의 지갑에 특별한 것을 요구하지 않습니다.
결제 프로토콜(BIP70) vs PaymentRequest
결제 프로토콜은 전체 교환 과정이며, PaymentRequest는 그 안의 한 메시지입니다. 지갑과 판매자 사이에는 세 개의 메시지가 오갔고, PaymentRequest는 그중 첫 번째로 판매자가 제공한 서명된 봉투였습니다. 두 이름을 혼용하면 오래된 문서를 필요 이상으로 읽기 어렵게 만듭니다. 또한 PaymentRequest는 카드 및 지갑 결제를 위한 무관한 브라우저 표준의 이름이므로, 오늘 이 단어를 쓰는 개발자가 비트코인을 뜻할 가능성은 낮다는 점도 유의하시면 됩니다.