Saltar al contenido
buybitcoinsmart

Glosario / Lightning y capa 2

Secreto de pago

¿Qué es un secreto de pago?
Un secreto de pago es un valor de 32 bytes que el destinatario genera para cada factura y exige de vuelta en la carga útil cebolla final, de modo que conocer solo el hash de pago no convierte a nadie en el pagador.

El secreto de pago de Lightning funciona como una contraseña por factura que el pagador repite antes de que el nodo destinatario acepte el dinero. BOLT 11 le asigna la letra de etiqueta s, establece su longitud en 52 caracteres bech32 e indica a quien lee las facturas que haga fallar toda factura que llegue sin él. Para usted, es la razón por la que un nodo de enrutamiento que vio su hash de pago no puede saber que el pago terminó en su billetera.

Cómo funciona

Un secreto de pago lo crea la billetera del destinatario, nunca el pagador, y permanece sellado dentro del paquete cebolla hasta que el pago llega a su último salto.

BOLT 11 lo define como el campo etiquetado de tipo 16, escrito con la letra s y un data_length fijo de 52. Esos 52 caracteres bech32 llevan 260 bits, un valor de 32 bytes más relleno, y quien escribe una factura debe incluir exactamente uno. Quien la lee debe hacer fallar el pago si un campo de longitud fija tiene una longitud incorrecta, y también si no hay ningún campo s válido.

El pagador copia el valor en la carga útil cebolla del último nodo, en lo que BOLT 4 llama registro TLV de tipo 8, payment_data, que contiene el secreto de 32 bytes y una cifra total_msat. Solo el destino puede quitar esa capa, así que los saltos intermedios nunca lo ven, a diferencia del hash de pago en el que todos bloquean sus HTLC.

La comprobación en el destino es deliberadamente poco informativa. Un secreto que no coincide con el esperado para ese hash de pago, o que es obligatorio y falta, hace fallar el HTLC con incorrect_or_unknown_payment_details, el error PERM|15, la misma respuesta que recibe un hash de pago desconocido. BOLT 4 explica por qué se unificaron los errores: los dos códigos anteriores, PERM|16 incorrect_payment_amount y 17 final_expiry_too_soon, permitían a un nodo que reenvía volver a enviar pagos con el mismo hash con valores mucho menores y leer la respuesta para confirmar que había encontrado el destino.

La compatibilidad ya no se negocia. BOLT 9 recoge los bits de funcionalidad 14 y 15, payment_secret, como ASSUMED (supuesto), y los bits 16 y 17, basic_mpp, dependen de esa funcionalidad.

Dónde aparece

Un secreto de pago se reconoce en una cadena de caracteres lnbc moderna como el tramo que empieza por sp5 y continúa durante 52 caracteres de bech32.

En los vectores de prueba de BOLT 11, ese tramo es zyg3 repetido doce veces y luego zygs, y codifica un secreto cuyos 32 bytes valen todos 0x11. Usted nunca teclea un secreto de pago: solo quien escribe la factura y la billetera que paga manejan alguna vez el valor.

Donde el campo demuestra su utilidad es en los pagos multiparte. Cuando ninguna ruta tiene por sí sola liquidez suficiente y la factura ofrece basic_mpp, BOLT 4 permite a una billetera repartir el monto entre varios HTLC que comparten un mismo hash de pago, y cada parte debe llevar el secreto y debería coincidir en total_msat. El destinatario no liquida nada hasta que llega el total, y debería esperar al menos 60 segundos tras el primer HTLC antes de hacer fallar el conjunto con un mpp_timeout. Así, un retiro Lightning más grande desde una aplicación centrada en Lightning como Strike que queda pendiente durante un minuto y luego se devuelve puede ser un conjunto de HTLC incompleto que expira, y no dinero perdido. Tanto si es su propia billetera la que reúne esas partes, como hace Phoenix al ejecutar un nodo Lightning real en el teléfono, como si lo hace un custodio en un servidor que usted no controla, el secreto las marca como un solo pago.

Secreto de pago frente a hash de pago

El hash de pago y el secreto de pago son ambos campos de 256 bits de una misma factura BOLT 11, y la diferencia está en quién llega a verlos. Cada salto conoce el hash, porque cada uno bloquea en él el HTLC que reenvía, mientras que nadie salvo el nodo final conoce el secreto, que viaja en la capa más interna del paquete cebolla. El hash responde a si el pago se liquidó, y la preimagen que lo abre es el recibo. El secreto responde a si el pagador trabaja a partir de la factura que usted escribió, algo que un hash no puede hacer, al ser visible para todos los de la ruta. En la codificación parecen gemelos: etiqueta p y etiqueta s, ambos de 52 caracteres, ambos rechazados con cualquier otra longitud.

No confundir con

Preguntas frecuentes

¿Tengo que teclear alguna vez un secreto de pago?

No, su billetera lo gestiona de principio a fin. La billetera del destinatario genera el valor de 32 bytes y lo escribe en la factura, y la billetera que paga lo copia en la carga útil cebolla del último salto sin mostrárselo nunca. Si usted pega un código lnbc, el secreto ya va dentro.

¿El secreto de pago es lo mismo que la preimagen?

No. La preimagen es el secreto del destinatario que desbloquea el hash de pago y se convierte en su prueba de pago, mientras que el secreto de pago viaja en sentido contrario, de la factura al destinatario, y demuestra que el pagador trabaja a partir de esa factura. Ambos ocupan 32 bytes, y ahí suele empezar la confusión.

¿Por qué falló mi pago Lightning con incorrect_or_unknown_payment_details?

Porque el nodo final encontró algo incorrecto y no va a decir qué. Según BOLT 4, ese único error, PERM|15, abarca un hash de pago desconocido, un secreto de pago ausente o que no coincide, un monto inferior al que pedía la factura y una expiración CLTV demasiado cercana a la punta de la cadena. La vaguedad es deliberada: un error específico permitiría a alguien comprobar conjeturas contra su nodo.

Para seguir leyendo

Términos relacionados

Más en la sección Lightning y capa 2

Leer esta página en inglés