Popularización tecnológica Aplicación del algoritmo de secreto de estado en la cadena de bloques Ultrain por ULTRAIN ULTRAIN Julio 2020

La criptografía es la base de blockchain, y se utilizan muchos algoritmos de criptografía en blockchain, incluido el cifrado simétrico, el cifrado asimétrico, el algoritmo hash unidireccional, la firma digital y otras tecnologías.

Para realizar el control independiente de la tecnología de criptografía, China también ha definido sus propios estándares nacionales de criptografía. En la "especificación de seguridad de la tecnología de contabilidad distribuida financiera" emitida por el banco central en 2020, se requiere claramente que la tecnología nacional de blockchain debe admitir el algoritmo de criptografía nacional. Ultrain blockchain ahora ha completado el soporte para el algoritmo secreto nacional, que cumple con todos los requisitos de las especificaciones de seguridad del banco central.

Este documento presenta primero los conceptos básicos de encriptación simétrica, encriptación asimétrica y firma digital, luego se enfoca en la tecnología de criptografía de curva elíptica en el algoritmo de encriptación asimétrica y finalmente expone la aplicación del algoritmo de encriptación nacional en la cadena de bloques Ultrain. Para resolver el problema del bajo rendimiento de verificación de firma de OpenSSL, Ultrain optimiza la implementación del algoritmo y logra una mejora del rendimiento de 3 a 4 veces. El código de optimización relevante se ha enviado a OpenSSL GitHub

(https://github.com/openssl/openssl/issues/11992)。

01 cifrado simétrico y cifrado asimétrico

La criptografía simétrica es una forma de usar la misma clave al cifrar y descifrar. La clave simétrica tiene muchos alias, como contraseña de clave pública, contraseña tradicional, contraseña de clave privada, contraseña de clave compartida, etc. La Figura 1 y la Figura 2 son procesos de cifrado y descifrado de cifrado simétrico, respectivamente. El cifrado y el descifrado utilizan la misma clave, por lo que se denominan cifrado simétrico.

1.2 cifrado asimétrico

La criptografía asimétrica utiliza diferentes claves al cifrar y descifrar, lo que también se denomina criptografía de clave pública. Suelen ser un par de claves: clave pública y clave privada. Una vez que se encripta la clave pública, se puede descifrar la clave privada; después de que se encripta la clave privada, se puede descifrar la clave pública. La clave pública se deriva de la clave privada, y la clave pública es pública. El cifrado asimétrico resuelve el problema de la distribución de claves en el cifrado simétrico. La clave pública general se utiliza para el cifrado y la clave privada para el descifrado. Cuando la clave privada se utiliza para el cifrado, en esencia es una firma digital, es decir, el descifrado con la clave pública puede verificar que la información es realmente el resultado del cifrado de clave privada. En la actualidad, la criptografía de clave pública incluye principalmente lo siguiente:

RSA (la primera letra de los apellidos de Ron Rivest, ADI Shamir y Leonard Adleman). Este algoritmo utiliza la dificultad de la descomposición de factores primos grandes.

EIGamal, diseñado por Taher EIGamal, es diferente de RSA en que es difícil encontrar el logaritmo discreto bajo mod n.

Rabin, un algoritmo de clave pública diseñado por m.o.rabin. La dificultad de la forma de Rabin de encontrar la raíz cuadrada

Criptografía de curva elíptica (ECC),

Hoy nos centramos en el algoritmo de criptografía, que se realiza mediante la multiplicación especial de puntos específicos en la curva elíptica. Aprovecha el hecho de que la operación inversa de este algoritmo de multiplicación es muy difícil.

El algoritmo de clave pública es más lento que el algoritmo de cifrado simétrico, por lo que el algoritmo de cifrado simétrico se usa en el cifrado de datos, mientras que el algoritmo de clave pública se usa más en escenarios de firma digital.

1.3 firma digital

Un día, Alice envió un correo electrónico a Bob: "Hola, Bob, dame 1000000 yuanes, el número de cuenta es 6214 6576 8789 8987, el nombre de cuenta es Alice". En la vida real, Bob puede llamar a Alice para confirmar si el correo electrónico está falsificado o no, y para confirmar si el contenido ha sido alterado, a fin de evitar que la cuenta de cobranza y la cantidad se modifiquen maliciosamente. Por supuesto, hay otro escenario, Bob llama a Alice y Alice niega haber enviado el correo electrónico por fin.

La tecnología que puede evitar la falsificación, la manipulación y la negación mencionadas anteriormente es la firma digital mencionada anteriormente. En general, el mensaje es largo. Solo firmamos el valor hash del mensaje, por lo que el proceso de que Alice envíe el mensaje es el siguiente:

1. Alice usa la función hash unidireccional para calcular el valor hash del contenido del correo;

2. Alice cifra el valor hash con la clave privada, y el texto cifrado obtenido es la firma de Alice del valor hash. Dado que solo Alice posee su clave privada, nadie más puede generar el mismo texto cifrado, excepto Alice, y la firma firmada que Alice no puede negar;

3. Alice envía el mensaje y la firma a Bob;

4. Bob usa la clave pública de Alice para descifrar la firma recibida con el valor hash;

5. Bob compara el valor hash obtenido en 4 con el valor hash del mensaje enviado directamente por Alice. Si los dos son iguales, la verificación de la firma tiene éxito; de lo contrario, la verificación falla.

02 Explicación detallada del algoritmo de cifrado de curva elíptica

Hemos entendido los conceptos básicos de cifrado simétrico y cifrado asimétrico. En esta sección, hablamos principalmente sobre la tecnología de curva elíptica en el algoritmo de cifrado asimétrico para firma digital.

2.1 conceptos básicos

2.1.1 Grupo abeliano

En matemáticas, un grupo es una estructura algebraica, que consiste en un conjunto y una operación binaria + y cumple las siguientes condiciones:

1. cercanía. El resultado de la operación binaria de dos números en el conjunto todavía está en el conjunto.

2. Combinación a + b + c = a + (b + c)

3. Unidad: yuan. Hay un elemento unitario 0, entonces a + 0 = 0 + a = a

4. Elemento inverso. Para cualquier a, debe haber B para hacer a + B = 0

5. Derecho cambiario. a + b + c = a + c + b

2.1.2 ecuación de curva elíptica

En criptografía, la ecuación de curva elíptica definida en el campo principal GFP es:

E: Y2 = X3 + ax + b donde a, B ∈ GFP y (4A3 + 27b2) mod p! = 0

Además de las curvas definidas por y p, a y B, x, y y N generalmente se necesitan para determinar una curva elíptica. Entonces, para describir una curva elíptica n sobre un campo finito, hay seis variables: T = (P, a, B, x, y, n)

P: el número de puntos en el campo principal, cuanto mayor es P, más seguro es, pero con el aumento del cálculo

a. B – coeficiente de curva

X. Coordenada X, Y del punto Y – G

N – es el número primo y es el orden del punto G. Hay un número entero mínimo positivo en un punto P en la curva elíptica, de modo que NP = 0 ∞ (origen o infinito, el siguiente infinito está representado por 0), entonces n se llama el orden de p; si n no existe, decimos que P es infinito. En el campo principal, existe el orden de todos los puntos de la curva elíptica.

2.1.3 operación de punto en curva elíptica

Los puntos en las curvas elípticas en el campo principal también son grupos abelianos. El elemento unitario es cero en el infinito. El elemento inverso del punto P en una curva elíptica es su punto simétrico del eje X.

P y Q son los dos puntos de la curva elíptica en el campo primario GFP respectivamente. Sus líneas se cruzan con la curva elíptica en el tercer punto R (ver el caso 1 en la Figura 5), ​​y hay puntos infinitos P + Q + r = 0. Hay varios casos especiales, 2, 3 y 4 en la figura a continuación. En el segundo caso, la línea recta es tangente a Q, que puede verse como Q y Q están conectados, intersectando la curva elíptica en el punto P, es decir, q + Q + P = 0; en el tercer caso, P y Q son paralelas al eje y, porque las dos líneas paralelas se cruzan en el infinito, P + Q + 0 = 0; en el cuarto caso, P y P están conectados, intersectando en el infinito.

Con base en lo anterior, tenemos las siguientes conclusiones:

Q + Q + P = 0, es decir, q + q = – P, (Q + Q) + (Q + Q) = (- P) + (- P), es decir, tomando el punto-p simétrico de P como la tangente, y así sucesivamente, podemos obtener rápidamente 2n * q puntos, n ∈ (0, + ∞). En el cifrado de curva elíptica, la clave privada es un número entero grande, y la clave pública es el producto del punto G en la curva elíptica y la clave privada. Podemos calcular rápidamente la clave pública a través de la representación binaria de la clave privada.

2.2 aplicación de algoritmo

La curva elíptica se utiliza principalmente para la firma digital. El siguiente es el proceso de cálculo matemático para realizar la firma digital y la verificación de la firma.

2.2.1 firma digital y verificación de firma

La firma digital necesita principalmente el valor hash (resumen) H y la clave privada Ka del mensaje M para generar el resultado final {R, s}; La verificación de firma utiliza principalmente la clave pública p y el resumen de mensaje H. El siguiente es el proceso de cálculo de la generación de firma y la verificación de firma.

Generando firma, es decir, el proceso de cálculo de R y S

La clave privada es un gran número Ka, y la clave pública es el punto donde la clave privada multiplica el punto G, P = kag

Se genera el número aleatorio k. El producto del cálculo y el punto base k = kg. La coordenada del eje x KX del punto k es r al módulo KX (MOD n) del orden n de la curva elíptica, es decir, r = KX (MOD n)

Cálculo de k-1 (MOD n) basado en el orden de la curva

R se ha generado en el paso 2, s = k-1 (H + Kar) (MOD n)

Verificación de firma

Cálculo de s basado en el inverso S-1 del orden n de la curva elíptica

Calcular U1 = HS-1

Calcular U2 = RS-1

Punto de cálculo q = u1g + U2 * P

Tome la coordenada QX del eje x del punto Q, si QX es igual a R, es decir, la coordenada KX del eje x del punto K en el proceso de firma, entonces se pasa la verificación.

¿Por qué la prueba tiene esta característica en el proceso de verificación de firma?

Según el cálculo de la firma, s = k-1 (H + Kar) (MOD n), SK = (H + Kar) (MOD n) se multiplica por K en ambos lados.

Punto q = u1g + U2 * P, P = kag, q = u1g + u2kag

Sustituyendo U1 y U2 en q = h s-1g + rs-1kag = (H + RKA) s-1g

Sustituyendo la fórmula del paso 1 en el paso 3, q ​​= SK * s-1g = kg, entonces si {R, s}, h es correcto, el punto K y el punto P tienen las mismas coordenadas del eje X

2.2.2 ventajas comparativas de la curva elíptica y la tecnología RSA

Hemos hablado de RSA asimétrico antes. Se recomienda utilizar el cifrado de curva elíptica por secreto nacional porque la curva elíptica tiene algunas ventajas sobre RSA:

Más seguro. La curva elíptica se basa en la dificultad del logaritmo discreto, y la complejidad computacional es exponencial, por lo que es difícil de resolver. Sin embargo, el algoritmo RSA es difícil de descomponer grandes factores primos, y la complejidad computacional es sub exponencial.

Una clave más corta. Bajo el mismo nivel de seguridad, la longitud de la clave de ECC es mucho menor que la de otros algoritmos de clave pública. El algoritmo de curva elíptica de 128 bits tiene el mismo nivel de seguridad que el algoritmo RSA de 1024 bits.

2.3 curvas elípticas comunes

En las redes Bitcoin y Ethereum, se usa secp256k1. P es un número primo de 256 bits, y K representa Koblitz. a = 0 , b = 7。 La ecuación de la curva es y2 = X3 + 7. La curva elíptica de Koblitz tiene algunas propiedades especiales, que pueden realizar la operación del grupo de manera más efectiva.

Secp256r1. Curva hermana de secp256k1. P también es un número primo de 256 bits, pero el valor es diferente de la curva secp256k1, y R representa aleatorio. La selección "aleatoria" de parámetros es más segura, sin embargo, algunos sospechan que los coeficientes aleatorios pueden haber sido elegidos para proporcionar una puerta trasera. Por lo tanto, la red bitcoin no lo eligió, sino que eligió un secp256k1 más eficiente.

Curva SM2. SM2 es una curva estándar recomendada por China sobre la base de estudios previos sobre ECC. GB / T 35276–2017 define la implementación específica del algoritmo SM2.

03 Aplicación del algoritmo de secreto de estado en Ultrain

Además de la curva elíptica SM2, SM3 y SM4 también se aplican en el soporte de la cadena de bloques ultrain al algoritmo secreto nacional.

El algoritmo hash SM3 genera un valor hash de 256 bits, que se utiliza principalmente para reemplazar el algoritmo sha256.

El algoritmo de cifrado simétrico SM4, el cifrado de clave privada pública de la billetera ultrain reemplazó aes128 con SM4.

3.1 detalles de implementación del algoritmo secreto nacional

Hemos explicado el principio de la curva elíptica anterior, y la curva SM2 también se basa en ella, pero también tiene sus propias características:

3.1.1 cálculo del valor H en Sm2

En secp256k1, h es el valor hash del mensaje, mientras que en SM2, es más complejo calcular el valor H, que debe calcularse en dos pasos:

1. Calcule el valor Z a través del algoritmo SM3:

Z = SM3 (ENTL || ID || a || b || xG || yG || xA || yA)

ID: cadena de bandera de identidad del usuario

Entl: longitud de bit de ID representada por dos bytes

a. B: parámetros de curva

XG, YG: coordenada del punto G x, eje Y

Xa, ya: coordenadas de clave pública x, eje Y

2. Utilice Z y el mensaje a firmar para calcular el valor hash H a SM3, H = SM3 (z | m)

3.2 optimización del algoritmo de secreto de estado

3.2.1 Problemas de rendimiento de la curva OpenSSL SM2

Desarrollamos la implementación de SM2 basada en OpenSSL, pero encontramos que la velocidad de firma y verificación es muy lenta. En MacBook Pro, firmamos 22496 veces cada 10 segundos y verificamos 24374 veces cada 10 segundos. Localizar en EC_ POINT_ Mul es lento. Verifique el código fuente de OpenSSL. No almacena previamente en caché el 2n * g, n ∈ (0, 256) (la clave privada tiene una longitud de 256 bits). Por ejemplo, si el valor binario de la clave privada es 1000 1100, es 27 * G + 23 * G + 22 * ​​g para la clave pública, mientras que 2 * g, 22 * ​​g, 23 * g … 2256 * g son todo conocido, por lo que solo se necesita la operación + de tres puntos en la curva elíptica, y no es necesario volver a calcularla cada vez. Además, algunas funciones centrales deben compilarse por ensamblaje, y el rendimiento después de la optimización se puede mejorar de 3 a 4 veces, como se muestra en la siguiente tabla.

3.2.2 La firma SM2 y el mensaje no pueden recuperar la clave pública

En secp256k1, podemos recuperar la clave pública de acuerdo con la firma {R, s} y el mensaje, pero SM2 no puede recuperar la clave pública a través de la firma y el mensaje, porque en el proceso de calcular el valor H de SM2, utilizamos las coordenadas de la clave pública, por lo que debemos conocer la clave pública, que está en conflicto solo con la firma y la clave pública de recuperación de mensajes. Como SM2 no puede pasar la firma y el mensaje recupera la clave pública, sacamos la clave pública y la verificamos en el proceso de verificación de la transacción. Sin embargo, en nuestro sistema, una cuenta puede tener varias claves públicas, por lo que es necesario recorrer la clave pública de la cuenta para verificar la transacción, lo que resulta en un menor rendimiento de la transacción de varias cuentas de clave pública. Afortunadamente, el 99% de todas las cuentas en el sistema tienen solo un par de claves públicas y privadas, por lo que, en teoría, no afectará el rendimiento general del sistema.

04 Conclusión

Este documento presenta primero los conceptos básicos de cifrado simétrico y cifrado asimétrico, luego introduce la tecnología de cifrado de curva elíptica en la tecnología de cifrado asimétrico en detalle y finalmente describe el soporte de la cadena de bloques ultrain al algoritmo de cifrado nacional. La comprensión de la parte de cifrado de curva elíptica requiere una base matemática más alta. La confianza descentralizada de blockchain se basa en la criptografía, y la tecnología de criptografía se basa en las matemáticas, por lo que confiamos en las matemáticas.

referencia:

(1) https://encyclopedia.thefreedictionary.com/elliptic+curve