Sözlük / Geliştirici başvuru kaynağı
PaymentRequest
- PaymentRequest nedir?
- PaymentRequest, BIP70 dış zarfıdır: serileştirilmiş bir PaymentDetails ikili verisini bir sertifika zinciri ve bir imzayla birlikte sarar, böylece ödeme yapan taraf isteği kimin gönderdiğini kontrol edebiliyordu.
Tanımlandığı belge: BIP-70.
PaymentRequest, bir cüzdanın karakter dizisi yerine bir şirket adı göstermesini sağlayan mesajdı. Beş alanı vardı ve önemli olan ikisi pki_type, yani none, x509+sha256 veya x509+sha1 değerlerinden biri, ile serileştirilmiş ayrıntılar üzerindeki signature alanıydı. Bugün ödeme yapan biri için ders, protokolden daha uzun ömürlü: bir ödeme ekranındaki ad, ancak ona kefil olan kadar güvenilirdir.
Nasıl çalışır
Durum: kullanımdan kalktı. Bitcoin Core, PaymentRequest işlemeyi 0.9.0 sürümünden 0.20.0 sürümünün bunu 3 Haziran 2020 tarihinde kaldırmasına kadar taşıdı ve bugün bakımı sürdürülen hiçbir cüzdan bu mesajı ayrıştırmıyor.
Beş alan, sırasıyla:
payment_details_version, varsayılan değeri 1 olan 32 bitlik bir tamsayı. Hiçbir zaman artırılmadı.pki_type, varsayılan değeri "none" olan bir karakter dizisi. Alternatifler "x509+sha256" ve "x509+sha1" idi.pki_data, içinde önce satıcının uç sertifikasının, ardından varsa ara sertifikaların bulunduğu bir X509Certificates yapısı taşıyordu.serialized_payment_details, zorunlu, bu sözlüğün başka bir yerinde açıklanan opak bayt dizisi.signature, her şeyin sertifika sahibinden geldiğini kanıtlayan baytlar.
İmzalama prosedüründe küçük bir hile var. Satıcı her alanı doldurur, signature alanını boş bırakır, eksiksiz mesajı serileştirir, bunun hash'ini alır, hash'i uç sertifikaya ait özel anahtarla imzalar ve ardından imzayı az önce boş bıraktığı alana yazar. Doğrulayan taraf alanı yeniden boşaltır, yeniden serileştirir ve kontrol eder. Basit, kendi kendine yeterli ve sertifikadan başka hiçbir şeye bağlı olmayan bir yöntem.
Sorun da bu bağımlılıktı. Zinciri doğrulamak, cüzdanın bir kök sertifika deposu barındırmasını gerektiriyordu; masaüstü yazılımı bunu işletim sisteminden devralıyor, mobil yazılım ise sık sık yanlış uyguluyordu. Doğru bir uygulama bile yalnızca bir sertifika otoritesinin bir alan adına kefil olduğunu kanıtlıyordu ve bir kök depoda yüzlerce otorite bulunur; bunlardan herhangi biri herhangi bir ad için sertifika düzenleyebilir. Sunulan en zayıf seçenek olan x509+sha1 özellikle kötü yaşlandı: pratik bir SHA-1 çakışması, BIP70 yazıldıktan dört yıl sonra, 23 Şubat 2017 tarihinde yayımlandı.
Nerede görülür
PaymentRequest adını hâlâ iki yer kullanıyor ve bunlardan yalnızca biri Bitcoin ile ilgili.
Birincisi, arşivlenmiş kod ve belgelerdir; burada BIP71 MIME türü application/bitcoin-paymentrequest, satıcı sunucusunun döndürdüğü yanıtı işaretliyordu. İkincisi, modern web platformudur; burada PaymentRequest, bu protokolle hiçbir ilgisi olmayan, kartla ve kayıtlı ödeme yöntemleriyle ödeme için bir tarayıcı API'sini adlandırır. Bugün bu kelimeyi kullanan bir geliştirici neredeyse kesin olarak tarayıcıdakini kastediyordur ve ikisini karıştırmak, eski Bitcoin belgelerinde yapılan aramalardaki en yaygın tek hatadır.
Bitcoin satın alan biri için çıkarılacak ders, kimliğin ödemelere nasıl eklendiğiyle ilgilidir. Borsalar bunu hesaplar ve kimlik doğrulama (KYC) ile çözer; böylece platform kim olduğunuzu bilir ve siz platformun itibarına güvenirsiniz. Kendi kendine saklama bunu adresi kendiniz kontrol etmenizi sağlayarak çözer. BIP70 üçüncü bir yol denedi, web'in sertifika sistemini ödünç aldı ve o yol kapandı.
PaymentRequest vs PaymentDetails
PaymentRequest zarftır; PaymentDetails içindeki mektuptur. Zarfı okumak size kimin imzaladığını ve hangi sertifikayı kullandığını söyler, ama neyin talep edildiğini söylemez. Tutarlar, betikler, son kullanma süresi ve not, hepsi iç mesajda yer alır; bu mesaj zarfta tam da imzanın yeniden kodlamayla geçersiz kılınamaması için ayrıştırılmamış bir bayt dizisi olarak durur. Bir cüzdan, ikincideki hiçbir şeye güvenmeden önce birinciyi doğrulamak zorundaydı.