Saltar al contenido
buybitcoinsmart

Glosario / Referencia para desarrolladores

Función de punto

¿Qué es la función de punto?
La función de punto convierte una clave privada en una clave pública multiplicando el punto generador de secp256k1 por ese número, y es el paso unidireccional sobre el que se construye toda dirección de bitcoin.

Se especifica en el BIP-32.

BIP32 le da un nombre a la operación, point(p), porque la derivación jerárquica de claves la menciona en casi cada línea. Multiplique el generador fijo de la curva por un secreto de 256 bits y el resultado es un par de coordenadas que puede publicarse sin riesgo; recuperar el secreto a partir de ese par exige resolver un logaritmo discreto en un espacio de 78 dígitos. Su billetera ejecuta la función una vez por dirección y nunca tiene que ejecutarla a la inversa.

Cómo funciona

La función de punto es la multiplicación sobre una curva elíptica con uno de sus dos valores de entrada fijo para siempre.

Bitcoin usa la curva secp256k1, definida por la ecuación y al cuadrado igual a x al cubo más 7 sobre un campo primo grande, y estandarizada en el documento SEC 2 y no por el NIST. La curva viene con un punto generador G que toda implementación lleva escrito en el código, y con un orden del grupo n cuyo valor queda justo por debajo de 2 elevado a 256. Una clave privada es cualquier entero desde 1 hasta n menos 1. La función suma G consigo mismo ese número de veces mediante una escalera de duplicaciones y sumas, que termina en mucho menos de un milisegundo y no en la edad del universo.

Todo el supuesto de seguridad reside en el sentido inverso. Dado el punto resultante, ningún método publicado recupera el multiplicador más rápido que aproximadamente la raíz cuadrada del tamaño del grupo, lo que sitúa el trabajo en alrededor de 2 elevado a 128 operaciones. Nada de eso cambia si una dirección se reutiliza, se publica o se conserva durante décadas.

Una propiedad hace posibles las billeteras jerárquicas. La multiplicación escalar es distributiva respecto de la suma, así que el punto de a más b es igual al punto de a sumado al punto de b. Sume un ajuste (tweak) a una clave privada y la clave pública correspondiente se desplaza en el punto de ese ajuste, un valor que cualquiera puede calcular sin tener la clave. La derivación BIP32 no endurecida se apoya en esa identidad, y también la clave de salida de Taproot, que es una clave interna desplazada por un compromiso que fija un árbol de scripts.

Dónde aparece

La función de punto se ejecuta cada vez que una billetera le muestra una dirección de recepción nueva.

También explica por qué una clave pública extendida es útil por sí sola. Entregue una xpub a una tienda en línea o a un teléfono de solo lectura y esa máquina podrá generar una dirección nueva por pago ajustando una clave pública, sin que haya una clave privada en ninguna parte de ella. Las billeteras de hardware aprovechan la misma asimetría desde el otro lado: el secreto nunca sale del chip y solo el punto resultante vuelve por el cable.

La propiedad tiene un filo peligroso. Como la relación es aditiva y pública, una clave pública extendida combinada con una sola clave privada hija no endurecida que se haya filtrado permite a cualquiera recuperar la clave privada padre y, con ella, toda la rama. Por eso la derivación a nivel de cuenta es endurecida, y por eso una xpub filtrada es un desastre para la privacidad y no un robo inmediato.

Función de punto frente a clave pública comprimida

La función de punto produce un objeto matemático; una clave pública comprimida es una forma de escribir ese objeto. Un punto es un par de coordenadas de 32 bytes cada una. La forma comprimida prescinde de la coordenada y; conserva un prefijo de un byte que indica si era par o impar, lo que da 33 bytes. La forma sin comprimir escribe completas las dos coordenadas en 65 bytes. La forma x-only (solo coordenada x) de Taproot conserva 32 bytes y ningún prefijo. Todas ellas describen el mismo punto y, sin embargo, el hash de cada codificación conduce a una dirección distinta, y por eso importar una clave antigua con el indicador de compresión equivocado muestra un saldo de cero mientras las monedas siguen intactas en la otra dirección.

No confundir con

Preguntas frecuentes

¿Se puede convertir una clave pública de nuevo en una clave privada?

No con ningún método conocido. Recuperar el multiplicador a partir de un punto de la curva es el problema del logaritmo discreto, y los mejores ataques publicados necesitan alrededor de 2 elevado a 128 operaciones, algo que ningún hardware actual ni previsible puede realizar.

¿Por qué una xpub puede generar direcciones sin una clave privada?

Porque la multiplicación escalar es distributiva respecto de la suma. Un paso de derivación suma un ajuste a la clave privada, y el mismo ajuste puede aplicarse directamente a la clave pública, así que un servidor que solo tiene una xpub puede producir direcciones nuevas.

Para seguir leyendo

Términos relacionados

Más en la sección Referencia para desarrolladores

Leer esta página en inglés