Glosario / Referencia para desarrolladores
Protocolo de pago (BIP70)
También se conoce como Protocolo de pago o BIP70.
- ¿Qué es el protocolo de pago (BIP70)?
- El protocolo de pago (BIP70) fue el intento de bitcoin de reemplazar las simples direcciones por solicitudes de pago firmadas y avaladas por certificados, y Bitcoin Core eliminó lo último que quedaba de su compatibilidad en la versión 0.20.0.
Se especifica en el BIP-70.
Ambición y después abandono. Gavin Andresen y Mike Hearn publicaron el BIP70 el 29 de julio de 2013; Bitcoin Core lo incluyó en la 0.9.0 en marzo de 2014, lo marcó como obsoleto en la 0.19 en noviembre de 2019 y lo eliminó en la 0.20.0 el 3 de junio de 2020. Si una página de pago todavía pide a su billetera que lo hable, tómelo como señal de que nadie ha tocado esa integración en años.
Cómo funciona
Estado: marcado como obsoleto en Bitcoin Core 0.19 y eliminado por completo en la 0.20.0 el 3 de junio de 2020. Ninguna billetera con mantenimiento activo lo implementa. Lo que se usa en su lugar es un simple URI BIP21 para los pagos on-chain, facturas BOLT11 o BOLT12 en Lightning y pagos silenciosos BIP352 cuando se quiere un destino reutilizable.
El diseño era una familia de cuatro BIP. El BIP70 definió los mensajes, el BIP71 registró un tipo MIME para cada uno de los tres que viajaban por la red, el BIP72 añadió el parámetro r= para que un URI pudiera apuntar a una solicitud y el BIP73 resolvió la negociación de contenido para las billeteras que no sabían interpretar el protocolo.
El flujo funcionaba como un terminal de pago con tarjeta. Un comerciante servía por HTTPS un mensaje PaymentRequest firmado. La billetera del cliente lo descargaba, recorría la cadena de certificados X.509 adjunta hasta un certificado raíz en el que ya confiaba y mostraba el nombre de una empresa en lugar de una cadena de caracteres. El cliente daba su aprobación, la billetera difundía la transacción y además enviaba de vuelta al comerciante un mensaje Payment con los bytes en bruto de la transacción y una dirección de reembolso. El comerciante respondía con un mensaje PaymentACK, que hacía las veces de recibo.
Cuatro razones explican su derrumbe, y vale la pena entenderlas porque cada una reaparece siempre que alguien propone añadir identidad encima de bitcoin.
Tomaba prestada su confianza de las autoridades de certificación (CA). Cualquiera de los cientos de CA de un almacén de certificados raíz típico puede emitir un certificado para cualquier nombre, lo cual es el modo de fallo que bitcoin se construyó para esquivar. El BIP70 también permitía un tipo de firma x509+sha1, y el 23 de febrero de 2017 se publicó una colisión práctica de SHA-1.
Necesitaba al comerciante en línea. No se podía construir un pago si el endpoint HTTPS del comerciante no respondía, así que una caída del servicio detenía pagos que, de otro modo, habrían funcionado con una simple dirección.
Filtraba información. La billetera hacía una solicitud saliente al servidor del comerciante, lo que exponía la dirección IP del cliente, y el campo de reembolso entregaba una dirección nueva que pertenecía al pagador.
Aportaba muy poco. El certificado demostraba que alguien controlaba un nombre de dominio, no que la factura fuera legítima ni que la mercancía fuera real.
Dónde aparece
La principal razón por la que el BIP70 sigue circulando como término es que la referencia para desarrolladores de bitcoin.org describe el protocolo en presente, y esa referencia lleva años sin seguir los cambios de Bitcoin Core.
Aparte de eso, el BIP70 aparece en código fuente archivado de billeteras, en viejas guías de integración escritas cuando los grandes procesadores de pagos lo promovían y, de vez en cuando, en un archivo .bitcoinpaymentrequest adjunto a una factura de hace una década. Nada de lo que usted compre hoy lo exigirá. Los comerciantes que quieren una página de pago usan software como BTCPay Server, que emite URI BIP21 y facturas Lightning y no pide nada inusual a la billetera del cliente.
Protocolo de pago (BIP70) frente a PaymentRequest
El protocolo de pago es el intercambio completo; PaymentRequest es un mensaje dentro de él. Entre la billetera y el comerciante viajaban tres mensajes, y PaymentRequest era el primero de ellos, el sobre firmado que servía el comerciante. Usar los dos nombres indistintamente hace que la documentación antigua sea más difícil de leer de lo necesario. Tenga en cuenta, además, que PaymentRequest es el nombre de un estándar de navegador sin relación con este, pensado para pagos con tarjeta y billetera, así que un desarrollador que hoy use esa palabra difícilmente se referirá a bitcoin.