La multiplicación escalar en curvas elípticas consiste en sumar sucesivamente un punto a sí mismo a lo largo de una curva elíptica . Se utiliza en criptografía de curva elíptica (ECC). La literatura la presenta como multiplicación escalar , tal como se expresa en la matriz hessiana de una curva elíptica . Otro nombre común para esta operación es multiplicación de puntos en curvas elípticas , pero esto puede dar la impresión errónea de que se trata de una multiplicación entre dos puntos.
Lo esencial
Dada una curva E definida por una ecuación en un campo finito (como E : y² = x³ + ax + b ), la multiplicación de puntos se define como la suma repetida de un punto a lo largo de esa curva. Denotemos como nP = P₁ + P₂ + P₃ + … + Pₙ para algún escalar (entero) n y un punto P = ( x , y ) que se encuentra sobre la curva E. Este tipo de curva se conoce como curva de Weierstrass .
La seguridad de la criptografía de curva elíptica moderna depende de la dificultad de determinar n a partir de Q = nP, dados los valores conocidos de Q y P, si n es grande (conocido como el problema del logaritmo discreto en curva elíptica, por analogía con otros sistemas criptográficos ). Esto se debe a que la suma de dos puntos en una curva elíptica (o la suma de un punto consigo mismo) produce un tercer punto cuya ubicación no guarda una relación inmediatamente obvia con las ubicaciones de los dos primeros, y al repetir este proceso muchas veces se obtiene un punto nP que puede estar prácticamente en cualquier lugar. Intuitivamente, esto es similar a que, si se tiene un punto P en un círculo, sumar 42,57 grados a su ángulo puede dar como resultado un punto "no muy lejos" de P , pero sumar 1000 o 1001 veces 42,57 grados dará como resultado un punto que requiere un cálculo algo más complejo para hallar el ángulo original. Invertir este proceso, es decir, dado Q=nP y P , y determinar n , solo se puede hacer probando todos los posibles n, un esfuerzo que es computacionalmente intratable si n es grande.
Operaciones puntuales

Existen tres operaciones comúnmente definidas para los puntos de una curva elíptica: suma, duplicación y negación.
Apunta al infinito
Apuntar al infinitoes el elemento neutro de la aritmética de curvas elípticas. Sumarlo a cualquier punto da como resultado ese otro punto, incluyendo sumar el punto en el infinito a sí mismo. Es decir:
El punto en el infinito también se escribe como 0 .
Negación del punto
La negación de un punto consiste en encontrar un punto tal que, al sumarlo a sí mismo, dé como resultado un punto en el infinito ( ).
Para curvas elípticas de la forma E : y 2 = x 3 + ax + b , la negación es un punto con la misma coordenada x pero con la coordenada y negada :
Suma de puntos
Con dos puntos distintos, P y Q , la suma se define como la negación del punto resultante de la intersección de la curva E y la línea recta definida por los puntos P y Q , dando como resultado el punto R. [ 1 ]
Suponiendo que la curva elíptica, E , está dada por y² = x³ + ax + b , esto se puede calcular como:
Estas ecuaciones son correctas cuando ninguno de los puntos es el punto en el infinito ,y si los puntos tienen coordenadas x diferentes (no son inversos mutuos). Esto es importante para el algoritmo de verificación ECDSA, donde el valor hash podría ser cero.
Duplicación de puntos
Cuando los puntos P y Q coinciden (en las mismas coordenadas), la suma es similar, excepto que no hay una línea recta bien definida que pase por P , por lo que la operación se cierra utilizando un caso límite, la tangente a la curva, E , en P.
Esto se calcula como se indicó anteriormente, tomando derivadas (dE/dx)/(dE/dy): [ 1 ]
donde a proviene de la ecuación definitoria de la curva, E , arriba.
Multiplicación de puntos
La forma más sencilla de calcular la multiplicación de puntos es mediante la suma repetida. Sin embargo, existen métodos más eficientes para calcularla.
Duplicar y sumar
El método más sencillo es el método de duplicar y sumar, [ 2 ] similar al de elevar al cuadrado y multiplicar en la exponenciación modular . El algoritmo funciona de la siguiente manera:
Para calcular sP , comenzamos con la representación binaria de s :, donde.
- Algoritmo iterativo, índice creciente:
let bits = bit_representation(s) # el vector de bits (desde LSB hasta MSB) que representa s let res =# apunta al infinito sea temp = P # rastrea el valor P duplicado para bit en bits: si bit == 1: res = res + temp # suma de puntos temp = temp + temp # doble retorno res- Algoritmo iterativo, índice decreciente:
let bits = bit_representation(s) # el vector de bits (desde LSB hasta MSB) que representa s let i = length(bits) - 2 let res = P while (i >= 0): # recorriendo desde el segundo MSB hasta LSB res = res + res # doble si bits[i] == 1: res = res + P # sumar i = i - 1 retorno res
Tenga en cuenta que ambos métodos iterativos mencionados anteriormente son vulnerables al análisis de tiempos. Consulte el método de Montgomery Ladder a continuación para ver un enfoque alternativo.
- Algoritmo recursivo:
El algoritmo f(P, d) es: si d = 0, entonces devuelve 0 (cálculo completado) ; si no, si d = 1 , entonces devuelve P; si no, si d mod 2 = 1 , entonces devuelve point_add(P, f(P, d - 1)) (suma cuando d es impar); si no , devuelve f(point_double(P), d / 2) (duplicación cuando d es par).
donde f es la función de multiplicación, P es la coordenada a multiplicar y d es el número de veces que se suma la coordenada a sí misma. Ejemplo: 100P se puede escribir como 2(2[P + 2(2[2(P + 2P)])]) y, por lo tanto, requiere seis operaciones de doble precisión y dos operaciones de suma. 100P sería igual a f(P, 100) .
Este algoritmo requiere log 2 ( d ) iteraciones de duplicación y suma de puntos para calcular la multiplicación completa de puntos. Existen muchas variaciones de este algoritmo, como el uso de una ventana, una ventana deslizante, NAF, NAF-w, cadenas vectoriales y la escalera de Montgomery.
Método de ventana
En la versión con ventana de este algoritmo, [ 2 ] se selecciona un tamaño de ventana w y se calcula todovalores deparaEl algoritmo ahora utiliza la representacióny se convierte
Q ← 0 para i desde m hasta 0 hacer Q ← punto_doble_repetición(Q, w) Si d i > 0 , entonces Q ← point_add(Q, d i P) # utilizando el valor precalculado de d i P, devolver QEste algoritmo tiene la misma complejidad que el método de duplicar y sumar, con la ventaja de utilizar menos sumas de puntos (que en la práctica son más lentas que la duplicación). Normalmente, el valor de w se elige bastante pequeño, lo que hace que la etapa de precomputación sea un componente trivial del algoritmo. Para las curvas recomendadas por el NIST,suele ser la mejor opción. La complejidad total para un número de n bits se mide comodobles de punto ysumas de puntos.
Método de ventana deslizante
En la versión de ventana deslizante, buscamos intercambiar adiciones de puntos por duplicaciones de puntos. Calculamos una tabla similar a la de la versión de ventana, excepto que solo calculamos los puntos.paraEn efecto, solo estamos calculando los valores para los que está activado el bit más significativo de la ventana. El algoritmo luego utiliza la representación original de doble suma de.
Q ← 0 para i desde m hasta 0 hacer si d i = 0 entonces Q ← punto_doble(Q) de lo contrario t ← extrae j (hasta w − 1) bits adicionales de d (incluido d i ) i ← i − j si j < w entonces Realizar doble suma usando t Devuelve Q de lo contrario Q ← punto_doble_repetición(Q, w) Q ← punto_añadir(Q, tP) devolver Q
Este algoritmo tiene la ventaja de que la etapa de precomputación es aproximadamente la mitad de compleja que el método de ventana normal, a la vez que intercambia adiciones de puntos más lentas por duplicaciones de puntos. En efecto, hay pocas razones para usar el método de ventana en lugar de este enfoque, excepto que el primero se puede implementar en tiempo constante. El algoritmo requieredobles de puntos y como máximosumas de puntos.
Método de forma no adyacente w -aria ( w NAF)
En la forma no adyacente, nuestro objetivo es aprovechar el hecho de que la resta de puntos es tan fácil como la suma de puntos para realizar menos operaciones (de cualquiera de las dos) en comparación con un método de ventana deslizante. El NAF del multiplicandodebe calcularse primero con el siguiente algoritmo
i ← 0 mientras (d > 0) hacer si (d mod 2) = 1 entonces d i ← d mod 2 w d ← d − d i sino d i = 0 d ← d/2 i ← i + 1 devolver (d i−1 , d i-2 , ..., d 0 )Donde la función módulo con signo mods se define como
Si (d mod 2 w ) > = 2 w−1 , devolver (d mod 2 w ) − 2 w; de lo contrario, devolver d mod 2 w.Esto produce el NAF necesario para realizar ahora la multiplicación. Este algoritmo requiere el cálculo previo de los puntos.y sus aspectos negativos, dondees el punto que se va a multiplicar. En las curvas típicas de Weierstrass, sientonces. Por lo tanto, en esencia, los negativos son baratos de calcular. A continuación, el siguiente algoritmo calcula la multiplicación:
Q ← 0 para j ← i − 1 hasta 0 hacer Q ← punto_doble(Q) si (d j != 0) Q ← point_add(Q, d j P) devuelve Q
El wNAF garantiza que en promedio habrá una densidad desumas de puntos (ligeramente mejor que la ventana sin signo). Requiere 1 duplicación de punto ysumas de puntos para el preprocesamiento. El algoritmo luego requiereduplicaciones de puntos ysuma de puntos para el resto de la multiplicación.
Una propiedad del NAF es que tenemos la garantía de que cada elemento distinto de cerova seguido de al menosceros adicionales. Esto se debe a que el algoritmo borra los valores inferiores.trozos decon cada resta de la salida de la función mods . Esta observación puede utilizarse para varios propósitos. Después de cada elemento distinto de cero, los ceros adicionales pueden estar implícitos y no es necesario almacenarlos. En segundo lugar, las múltiples divisiones seriales por 2 pueden reemplazarse por una división pordespués de cada valor distinto de ceroelemento y dividir por 2 después de cada cero.
Se ha demostrado que mediante la aplicación de un ataque de canal lateral FLUSH+RELOAD en OpenSSL , se puede revelar la clave privada completa después de realizar un análisis de temporización de caché contra tan solo 200 firmas realizadas. [ 3 ]
Escalera de Montgomery
El método de la escalera de Montgomery [ 4 ] calcula la multiplicación de puntos en un número fijo de operaciones. Esto puede ser beneficioso cuando la temporización, el consumo de energía o las mediciones de bifurcación están expuestas a un atacante que realiza un ataque de canal lateral . El algoritmo utiliza la misma representación que la de la operación de doble suma.
R 0 ← 0 R 1 ← P para i desde m hasta 0 hacer si d i = 0 entonces R 1 ← point_add(R 0 , R 1 ) R 0 ← punto_doble(R 0 ) de lo contrario R 0 ← punto_añadido(R 0 , R 1 ) R 1 ← punto_doble(R 1 ) // propiedad invariante para mantener la corrección assert R 1 == point_add(R 0 , P) return R 0
Este algoritmo tiene, en efecto, la misma velocidad que el método de duplicar y sumar, con la diferencia de que calcula el mismo número de sumas y duplicaciones de puntos, independientemente del valor del multiplicando d . Esto significa que, a este nivel, el algoritmo no pierde información a través de bifurcaciones ni consume energía.
Sin embargo, se ha demostrado que mediante la aplicación de un ataque de canal lateral FLUSH+RELOAD en OpenSSL, se puede revelar la clave privada completa después de realizar una comprobación de temporización de caché contra una sola firma a un costo muy bajo. [ 5 ]
Cadenas más largas
El uso de cadenas de Lucas proporciona una secuencia optimizada de duplicación y suma en comparación con la escalera de Montgomery, que es más rápida en múltiplos mayores (cadenas más largas). Este método se denomina "PRAC". Montgomery también publica PRAC, siendo GMP-ECM la " implementación de referencia ". [ 6 ] DJ Bernstein menciona varios esquemas de este tipo en 2017. [ 7 ] : § 4.8.2
Escalera de Montgomery de tiempo constante
La seguridad de una implementación criptográfica puede verse amenazada por los llamados ataques de temporización , que explotan las características de temporización dependientes de los datos de la implementación. Las máquinas que ejecutan implementaciones criptográficas consumen cantidades variables de tiempo para procesar diferentes entradas, por lo que los tiempos varían según la clave de cifrado. Para resolver este problema, los algoritmos criptográficos se implementan de forma que se elimina la característica de temporización variable dependiente de los datos de la implementación, lo que da lugar a las llamadas implementaciones de tiempo constante. Las implementaciones de software se consideran de tiempo constante en el siguiente sentido, como se indica en: [ 8 ] “ evita todas las bifurcaciones dependientes de la entrada, todos los índices de matriz dependientes de la entrada y otras instrucciones con tiempos dependientes de la entrada ”. La página de GitHub [ 9 ] enumera las reglas de codificación para las implementaciones de operaciones criptográficas y, más generalmente, para las operaciones que involucran valores secretos o sensibles.
La escalera de Montgomery es una-algoritmo de coordenadas solamente para la multiplicación de puntos de curvas elípticas y se basa en las reglas de doble y suma sobre un conjunto específico de curvas conocido como curva de Montgomery . El algoritmo tiene una ramificación condicional tal que la condición depende de un bit secreto. Por lo tanto, una implementación directa de la escalera no será de tiempo constante y tiene el potencial de filtrar el bit secreto. Este problema se ha abordado en la literatura [ 10 ] [ 11 ] y se conocen varias implementaciones de tiempo constante. El algoritmo de escalera de Montgomery de tiempo constante es el que se da a continuación que utiliza dos funciones CSwap y Ladder-Step. En el valor de retorno del algoritmo Z 2 p-2 es el valor de Z 2 −1 calculado usando el pequeño teorema de Fermat .
El algoritmo Montgomery-Ladder(x P , n) tiene como entrada : Unescalar de bitsy el-coordinarde un punto. producción :-coordenada de, el-veces múltiplo escalar de. X 1 ← x P ; X 2 ← 1; Z 2 ← 0; X 3 ← x P ; Z 3 ← 1 prevbit ← 0 paradedownto 0 hacer bit ← valor de bit en el índicede b ← bitprefijo bit anterior ← bit (X 2 ,Z 2,X 3 ,Z 3) ← CSwap(X 2 ,Z 2,X 3 ,Z 3,b) (X 2 ,Z 2,X 3 ,Z 3) ← Escalera-escalón(X 2 ,Z 2,X 3 ,Z 3,X 1 ) devolver X 2 Z 2 p-2
La función Ladder-Step (que se muestra a continuación) utilizada dentro de la escalera es el núcleo del algoritmo y es una forma combinada de las operaciones de suma diferencial y duplicación. La constante de campo a 24 se define como a 24 =, dóndees un parámetro de la curva de Montgomery subyacente .
Función Escalera-Paso(X 2 ,Z 2,X 3 ,Z 3,X 1 ) T 1 ← X 2 + Z 2 T 2 ← X 2 - Z 2 T 3 ← X 3 + Z 3 T 4 ← X 3 - Z 3 T 5 ← T 1 2 T 6 ← T 2 2 T 2 ← T 2 · T 3 T 1 ← T 1 · T 4 T 1 ← T 1 + T 2 T 2 ← T 1 - T 2 X 3 ← T 1 2 T 2 ← T 2 2 Z 3 ← T 2 · X 1 X 2 ← T 5 · T 6 T 5 ← T 5 - T 6 T 1 ← a 24 · T 5 T 6 ← T 6 + T 1 Z 2 ← T 5 · T 6 regreso (X 2 ,Z 2,X 3 ,Z 3)
La función CSwap gestiona la ramificación condicional y ayuda a que la escalera se ejecute siguiendo los requisitos de una implementación de tiempo constante. La función intercambia el par de elementos del campo.X 2 ,Z 2yX 3 ,Z 3solo si= 1 y esto se hace sin filtrar ninguna información sobre el bit secreto. Se han propuesto varios métodos de implementación de CSwap en la literatura. [ 10 ] [ 11 ] Una opción menos costosa para gestionar el requisito de tiempo constante de la escalera de Montgomery es la selección condicional que se formaliza a través de una función CSelect. Esta función se ha utilizado en varias optimizaciones y se ha discutido formalmente en [ 12 ]
Desde la creación de la curva Montgomery estándar Curve25519 con un nivel de seguridad de 128 bits, se han desarrollado diversas implementaciones de software para calcular el ECDH en diferentes arquitecturas. Para lograr el mejor rendimiento posible, los desarrolladores criptográficos han recurrido a escribir las implementaciones utilizando el lenguaje ensamblador de la arquitectura subyacente. El trabajo [ 13 ] proporcionó un par de implementaciones en ensamblador de 64 bits dirigidas a la arquitectura AMD64. Estas implementaciones se desarrollaron utilizando una herramienta conocida como qhasm [ 14 ] , que puede generar programas criptográficos en lenguaje ensamblador de alta velocidad. La función CSwap se utilizó en las implementaciones de estas escaleras. Posteriormente, se realizaron varios intentos para optimizar la implementación de la escalera mediante programas en ensamblador escritos a mano, entre los cuales la noción de CSelect se utilizó por primera vez en [ 15 ] y luego en [ 16 ] . Además de utilizar instrucciones secuenciales, también se han utilizado instrucciones vectoriales para optimizar el cálculo de la escalera en diversos trabajos. [ 17 ] [ 18 ] [ 19 ] [ 20 ] Junto con AMD64, también se han realizado intentos para lograr implementaciones eficientes en otras arquitecturas como ARM. Los trabajos [ 21 ] y [ 22 ] proporcionan implementaciones eficientes dirigidas a la arquitectura ARM. Las bibliotecas lib25519 [ 23 ] y [ 24 ] son dos bibliotecas de vanguardia que contienen implementaciones eficientes de la escalera de Montgomery para Curve25519 . No obstante, las bibliotecas también tienen implementaciones de otras primitivas criptográficas.
Aparte de Curve25519 , se han realizado varios intentos de calcular la escalera sobre otras curvas en diversos niveles de seguridad. También se han estudiado en la literatura implementaciones eficientes de la escalera sobre la curva estándar Curve448 en un nivel de seguridad de 224 bits. [ 15 ] [ 18 ] [ 20 ] Se propuso una curva llamada Curve41417 que proporciona una seguridad de poco más de 200 bits [ 25 ] en la que se utilizó una variante de la estrategia Karatsuba para implementar la multiplicación de campo necesaria para el software ECC relacionado. En la búsqueda de curvas de Montgomery que sean competitivas con Curve25519 y Curve448, se ha llevado a cabo una investigación y se propusieron un par de curvas junto con implementaciones secuenciales eficientes [ 16 ] y vectorizadas [ 20 ] de las escaleras correspondientes. En un nivel de seguridad de 256 bits, también se han abordado implementaciones eficientes de la escalera a través de tres curvas de Montgomery diferentes. [ 26 ]
Referencias
- 1 2 "Curvas elípticas - Fórmulas de suma explícitas" .
- 1 2 Hankerson, Darrel; Vanstone, Scott; Menezes, Alfred (2004). Guía de criptografía de curva elíptica . Springer Professional Computing. Nueva York: Springer-Verlag. doi : 10.1007/b97644 . ISBN 0-387-95273-X. S2CID 720546 .
- ↑ Benger, Naomi; van de Pol, Joop; Smart, Nigel P.; Yarom, Yuval (2014). Batina, Lejla; Robshaw, Matthew (eds.). "Ooh Aah... Just a Little Bit" : Una pequeña cantidad de canal lateral puede ser muy útil (PDF) . Hardware criptográfico y sistemas embebidos – CHES 2014. Notas de clase en informática. Vol. 8731. Springer. págs. 72–95 . doi : 10.1007/978-3-662-44709-3_5 . ISBN 978-3-662-44708-6.
- ↑ Montgomery, Peter L. (1987). "Acelerando los métodos de factorización de Pollard y de curvas elípticas" . Math . Comp. 48 (177): 243–264 . doi : 10.2307/2007888 . JSTOR 2007888. MR 0866113 .
- ↑ Yarom, Yuval; Benger, Naomi (2014). "Recuperación de nonces ECDSA de OpenSSL mediante el ataque de canal lateral de caché FLUSH+RELOAD" . Archivo de preimpresiones de criptología de IACR .
- ↑ Zimmermann, Paul; Dodson, Bruce (2006). "20 años de ECM" (PDF) . Teoría algorítmica de números . Lecture Notes in Computer Science. Vol. 4076. pp. 525–542 . doi : 10.1007/11792086_37 . ISBN 978-3-540-36075-9.HAL
- ↑ Bernstein, Daniel J.; Lange, Tanja (2017), Curvas de Montgomery y la escalera de Montgomery , consultado el 6 de noviembre de 2025.
- ↑ Bernstein, Daniel J. (2006). "Curve25519: Nuevos récords de velocidad Diffie-Hellman". Criptografía de clave pública - PKC 2006. Notas de clase en ciencias de la computación. Vol. 3958. págs. 207–228 . doi : 10.1007/11745853_14 . ISBN 978-3-540-33851-2.
- ↑ Aumasson, Jean-Philippe. "Directrices para software de criptografía de bajo nivel" . GitHub . Consultado el 26 de marzo de 2024 .
- 1 2 Bernstein, Daniel J.; Lange, Tanja (2017). "Curvas de Montgomery y la escalera de Montgomery" . En Joppe W. Bos; Arjen K. Lenstra (eds.). Temas de teoría computacional de números inspirados en Peter L. Montgomery . Cambridge University Press. pp. 82–115 .
- 1 2 Costello, Craig; Smith, Benjamin (septiembre de 2018). "Curvas de Montgomery y su aritmética: el caso de campos característicos grandes" . Journal of Cryptographic Engineering . 8 (3): 227– 240. arXiv : 1703.01863 . doi : 10.1007/s13389-017-0157-6 .
- ^ Nath, Kaushik; Sarkar, Palash (2020). "Escalera de Montgomery de tiempo constante" . Archivo ePrint de criptología, artículo 2020/956.
- ^ Bernstein, Daniel J.; Duif, Niels; Lange, Tanja; Schwabe, Peter; Yang, Bo-Yin (2012). "Firmas de alta velocidad y alta seguridad" . Revista de ingeniería criptográfica . 2 (2): 77– 89. doi : 10.1007/s13389-012-0027-1 .
- ↑ Bernstein, Daniel J. "qhasm: herramientas para ayudar a escribir software de alta velocidad" .
- 1 2 Oliveira, Thomaz; López, Julio; Hisil, Hüseyin; Faz-Hernández, Armando; Rodríguez-Henríquez, Francisco (2018). "Cómo (pre)calcular una escalera: Mejorando el rendimiento de X25519 y X448" . En Carlisle Adams; Jan Camenisch (eds.). Áreas selectas en criptografía – SAC 2017. Lecture Notes in Computer Science. Vol. 10719. Springer. pp. 172–191 . doi : 10.1007/978-3-319-72565-9_9 . ISBN 978-3-319-72565-9., Código disponible en https://github.com/armfazh/rfc7748_precomputed .
- 1 2 Nath, Kaushik; Sarkar, Palash (2022). "Compromisos de seguridad y eficiencia para Diffie-Hellman de curva elíptica en los niveles de seguridad de 128 y 224 bits" . Journal of Cryptographic Engineering . 12 : 107–121 . doi : 10.1007/s13389-021-00261-y .El código está disponible en https://github.com/kn-cs/x25519
- ↑ Chou, Tung (2016). "Sandy2x: Nuevos récords de velocidad Curve25519" . En Orr Dunkelman; Liam Keliher (eds.). Áreas selectas en criptografía – SAC 2015. Lecture Notes in Computer Science. Vol. 9566. pp. 145–160 . doi : 10.1007/978-3-319-31301-6_8 . ISBN 978-3-319-31300-9.El código está disponible en https://tungchou.github.io/sandy2x/
- 1 2 Faz-Hernández, Armando; López, Julio; Dahab, Ricardo (2019). "Implementación de alto rendimiento de criptografía de curva elíptica mediante instrucciones vectoriales" . ACM Transactions on Mathematical Software . 45 (3): 1– 35. doi : 10.1145/3309759 .Coce está disponible en https://github.com/armfazh/fld-ecc-vec
- ↑ Hisil, Hüseyin; Egrice, Berkan; Yassi, Mert. "Escalera vectorizada rápida de 4 vías para el conjunto completo de curvas de Montgomery" . Revista internacional de ciencia de la seguridad de la información . 11 (2): 12– 24.El código está disponible en https://github.com/crypto-ninjaturtles/montgomery4x
- 1 2 3 Nath, Kaushik; Sarkar, Palash (2022). "Vectorizaciones eficientes de 4 vías de la escalera de Montgomery". IEEE Transactions on Computers . 71 (3): 712– 723. doi : 10.1109/TC.2021.3060505 .El código está disponible en https://github.com/kn-cs/vec-ladder
- ↑ Bernstein, Daniel J.; Schwabe, Peter (2012). "NEON crypto" . En Emmanuel Prouff; Patrick Schaumont (eds.). Hardware criptográfico y sistemas embebidos – CHES 2012. Lecture Notes in Computer Science. Vol. 7428. pp. 320–339 . doi : 10.1007/978-3-642-33027-8_19 . ISBN 978-3-642-33026-1.
- ^ Lenngren, Emil. "Implementación optimizada de AArch64 para X25519" (PDF) . GitHub.
- ↑ Nath, Kaushik; Bernstein, Daniel J. "lib25519" .
- ↑ Harrison, John R. "s2n-bignum" . GitHub .
- ↑ Bernstein, Daniel J.; Chitchanok, Chuengsatiansup; Tanja, Lange (2014). "Curve41417: Karatsuba Revisited" . En Batina, L.; Robshaw, M. (eds.). Advanced Information Systems Engineering . Lecture Notes in Computer Science. Vol. 7908. pp. 316–334 . doi : 10.1007/978-3-662-44709-3_18 . ISBN 978-3-642-38708-1.
- ↑ Nath, Kaushik; Sarkar, Palash (2020). "Cálculo eficiente de Diffie-Hellman de curva elíptica en el nivel de seguridad de 256 bits" . IET Information Security . 14 (6): 633– 640. doi : 10.1049/iet-ifs.2019.0620 .El código está disponible en https://github.com/kn-cs/mont256-dh y https://github.com/kn-cs/mont256-vec
- Curvas elípticas