Ilustración del principio de cifrado de blockchain de conocimiento profundo (cifrado, firma)
Primero, pongamos un diagrama de arquitectura de Ethereum:
En el proceso de aprendizaje, utilizamos principalmente un único módulo para aprender y comprender, incluyendo P2P, criptografía, red, protocolos, etc. . Comencemos directamente con el resumen:
El problema de la distribución de la clave secreta es también el problema de la transmisión de la clave secreta. Si la clave secreta es simétrica, entonces la clave secreta solo se puede intercambiar fuera de línea. Si la clave secreta se transmite en línea, puede ser interceptada. Por lo tanto, se utiliza cifrado asimétrico, con dos claves, una clave privada se mantiene de forma privada y la otra clave pública se hace pública. Las claves públicas se pueden transmitir a través de Internet. No se requieren transacciones fuera de línea. Garantizar la seguridad de los datos.
Como se muestra en la figura anterior, el nodo A envía datos al nodo B y en este momento se utiliza el cifrado de clave pública. El nodo A obtiene la clave pública del nodo B de su propia clave pública, cifra los datos en texto plano y envía el texto cifrado al nodo B. El nodo B utiliza su propia clave privada para descifrar.
2. No se puede resolver la manipulación de mensajes.
Como se muestra en la figura anterior, el nodo A usa la clave pública de B para cifrar y luego transmite el texto cifrado al nodo B. El nodo B utiliza la clave pública del nodo A para descifrar el texto cifrado.
1. Dado que la clave pública de A es pública, una vez que un hacker en línea intercepta el mensaje, el texto cifrado será inútil. Para decirlo sin rodeos, este método de cifrado se puede descifrar siempre que se intercepte el mensaje.
2. También existe el problema de no poder determinar el origen del mensaje y el problema de la manipulación del mensaje.
Como se muestra en la figura anterior, antes de enviar datos, el nodo A primero los cifra con la clave pública de B para obtener el texto cifrado 1, y luego usa la clave privada de A para cifrar el texto cifrado 1 para obtener el texto cifrado 2. Después de que el nodo B obtiene el texto cifrado, primero usa la clave pública de A para descifrarlo y obtener el texto cifrado 1, y luego usa la clave privada de B para descifrarlo y obtener el texto sin formato.
1. Cuando se interceptan datos del texto cifrado 2 en la red, dado que la clave pública de A es pública, puede usar la clave pública de A para descifrar el texto cifrado 2 y obtener el texto cifrado 1. Entonces esto parece ser un cifrado doble, pero de hecho la firma de clave privada de la última capa no es válida. En general, todos esperamos que la firma esté firmada sobre los datos más originales. Si la firma se coloca más tarde, la firma carece de seguridad ya que la clave pública es pública.
2. Hay problemas de rendimiento. El cifrado asimétrico en sí es muy ineficiente y se realizan dos procesos de cifrado.
Como se muestra en la figura anterior, el nodo A se cifra primero con la clave privada de A y luego con la clave pública de B. Después de recibir el mensaje, el nodo B primero usa la clave privada de B para descifrarlo y luego usa la clave pública de A para descifrarlo.
1. Cuando un pirata informático intercepta los datos del texto cifrado 2, dado que el texto cifrado 2 solo se puede descifrar usando la clave privada de B, y la clave privada de B solo es propiedad del nodo B, otros no pueden mantenerlo en secreto. Por tanto, la seguridad es la más alta.
2. Cuando el nodo B descifra y obtiene el texto cifrado 1, solo puede usar la clave pública de A para descifrar. Solo los datos cifrados con la clave privada de A se pueden descifrar con éxito con la clave pública de A. Solo el nodo A tiene la clave privada de A, por lo que se puede determinar que los datos fueron transmitidos por el nodo A.
Después de dos cifrados asimétricos, el problema de rendimiento es grave.
Basándonos en el problema anterior de manipulación de datos, introdujimos la autenticación de mensajes. El proceso de cifrado después de la autenticación del mensaje es el siguiente:
Antes de que el nodo A envíe un mensaje, primero realiza un cálculo hash en los datos de texto sin formato. Se obtiene un resumen y luego la iluminación y los datos originales se envían al Nodo B al mismo tiempo. Cuando el nodo B recibe el mensaje, lo descifra.
Analice el resumen hash y los datos originales, luego realice el mismo cálculo hash en los datos originales para obtener el resumen 1 y compare el resumen y el resumen 1. Si son iguales, no han sido manipulados; si son diferentes, han sido manipulados.
Durante el proceso de transmisión, siempre que se altere el texto cifrado 2, el hash resultante será diferente del hash1.
El problema de la firma no se puede solucionar, es decir, ambas partes se atacan entre sí. A nunca reconoce el mensaje que envió. Por ejemplo, A envía un mensaje de error a B, lo que provoca que B sufra pérdidas. Pero A negó haberlo enviado él mismo.
En el proceso de (3), no hay forma de resolver el problema de los ataques mutuos entre las dos partes que interactúan. ¿Qué significa? Puede ser que el mensaje enviado por A no sea bueno para el nodo A, y luego A niegue que el mensaje no fue enviado por él.
Para solucionar este problema se introdujeron firmas. Aquí combinamos el método de cifrado en (2) -4 con la firma del mensaje.
En la figura anterior, usamos la clave privada del nodo A para firmar la información resumida enviada por él, luego convertimos la firma al texto original y luego usamos la clave pública de B para cifrarla. Después de que B obtiene el texto cifrado, primero usa la clave privada de B para descifrarlo y luego usa la clave pública de A para descifrar el resumen. Solo se compara el contenido de los dos resúmenes para ver si son iguales. Esto no sólo evita el problema de la manipulación, sino que también evita el problema de los ataques de ambas partes. Debido a que A firmó la información, ésta no puede ser repudiada.
Para resolver el problema de rendimiento al cifrar datos de forma asimétrica, a menudo se utiliza el cifrado híbrido. Aquí debemos introducir el cifrado simétrico, como se muestra a continuación:
Al cifrar datos, utilizamos la clave secreta simétrica compartida por ambas partes para cifrar. La clave secreta simétrica no debe transmitirse en la red tanto como sea posible para evitar pérdidas. La clave simétrica compartida aquí se calcula en función de su propia clave privada y la clave pública de la otra parte, y luego la clave simétrica se utiliza para cifrar los datos. Cuando la otra parte recibe los datos, también calcula la clave secreta simétrica y descifra el texto cifrado.
La clave simétrica anterior no es segura porque la clave privada de A y la clave pública de B generalmente se fijan en el corto plazo, por lo que la clave simétrica compartida también es fija. Para mejorar la seguridad, la mejor manera es generar una clave simétrica compartida temporal para cada interacción. Entonces, ¿cómo podemos generar una clave simétrica aleatoria durante cada interacción sin transmitirla?
Entonces, ¿cómo generar una clave privada aleatoria para el cifrado?
Para el nodo remitente A, se genera un par de claves secretas asimétricas temporales cada vez que se envía, y luego se puede calcular una clave secreta simétrica en función de la clave pública del nodo B y la clave privada asimétrica temporal (Algoritmo KA-Acuerdo de clave). Luego, la clave secreta simétrica se utiliza para cifrar los datos. El proceso aquí para la clave secreta compartida es el siguiente:
Para el nodo B, cuando se reciben los datos transmitidos, se analiza el número aleatorio del nodo A. Clave pública y luego use la clave pública aleatoria del nodo A y la clave privada del nodo B para calcular la clave secreta simétrica (algoritmo KA). Luego, los datos se cifran mediante una clave simétrica.
Para los métodos de cifrado anteriores, todavía hay muchos problemas, como cómo evitar ataques de repetición (agregando Nonce al mensaje) y problemas como las tablas de arcoíris (consulte el mecanismo KDF para resolverlos). Debido al tiempo y la capacidad limitados, lo ignoraré por ahora.
Entonces, ¿qué tipo de cifrado se debe utilizar?
Se basa principalmente en el nivel de seguridad de los datos a transmitir.
Los datos sin importancia pueden autenticarse y firmarse, pero los datos muy importantes deben utilizar un esquema de cifrado con un nivel de seguridad relativamente alto.
El conjunto de cifrado es un concepto de protocolo de red. Incluye principalmente algoritmos para autenticación de identidad, cifrado, autenticación de mensajes (MAC) e intercambio de claves secretas.
Durante el proceso de transmisión de toda la red, los algoritmos se dividen principalmente en las siguientes categorías según el conjunto de cifrado:
Algoritmo de intercambio de claves secretas: como ECDHE, RSA. Se utiliza principalmente para la autenticación cuando el cliente y el servidor se dan la mano.
Algoritmo de autenticación de mensajes: como SHA1, SHA2, SHA3. Se utiliza principalmente para resumir mensajes.
Algoritmo de cifrado por lotes: como AES, utilizado principalmente para cifrar el flujo de información.
Algoritmo de números pseudoaleatorios: por ejemplo, la función pseudoaleatoria de TLS 1.2 utiliza la función hash del algoritmo MAC para crear una clave maestra, una clave privada de 48 bytes compartida por ambas partes en el conexión. La clave maestra sirve como fuente de entropía al crear claves de sesión (como la creación de una MAC).
En la red, la transmisión de un mensaje generalmente debe cifrarse en las siguientes cuatro etapas para garantizar una transmisión segura y confiable del mensaje.
Fase de apretón de manos/negociación de red:
Durante la fase de apretón de manos entre ambas partes, se requiere la negociación del enlace. Los principales algoritmos de cifrado incluyen RSA, DH, ECDH, etc.
Fase de autenticación de identidad:
En la fase de autenticación de identidad, es necesario determinar el origen del mensaje enviado. Los principales métodos de cifrado utilizados incluyen RSA, DSA, ECDSA (cifrado ECC, firma DSA), etc.
Etapa de cifrado de mensajes:
El cifrado de mensajes se refiere a cifrar el flujo de información enviado. Los principales métodos de cifrado utilizados incluyen DES, RC4, AES, etc.
Fase de autenticación de identidad del mensaje/fase antimanipulación:
Principalmente para garantizar que el mensaje no ha sido manipulado durante la transmisión. Los principales métodos de cifrado incluyen MD5, SHA1, SHA2, SHA3, etc.
ECC: Elliptic Curves Cryptography, criptografía de curva elíptica. Es un algoritmo que genera claves públicas y privadas basadas en productos puntuales múltiples en elipses. Se utiliza para generar claves públicas y privadas.
ECDSA: se utiliza para firmas digitales y es un algoritmo de firma digital. Una firma digital válida le da al destinatario motivos para creer que el mensaje fue creado por un remitente conocido, de modo que el remitente no puede negar que el mensaje ha sido enviado (autenticación y no repudio) y que el mensaje no ha sido alterado en tránsito. . El algoritmo de firma ECDSA es una combinación de ECC y DSA. Todo el proceso de firma es similar a DSA. La diferencia es que el algoritmo utilizado en la firma es ECC y el valor firmado final también se divide en r y s. Se utiliza principalmente en la fase de autenticación de identidad.
ECDH: También es una clave secreta del árbol de Huffman basada en el algoritmo ECC. A través de ECDH, ambas partes pueden negociar un secreto compartido sin compartir ningún secreto, y esta es la clave secreta compartida de forma temporal y aleatoria. generada para la comunicación actual. Una vez que se interrumpe la comunicación, la clave secreta desaparece. Se utiliza principalmente en la fase de negociación del apretón de manos.
ECIES: es un esquema de cifrado integrado, también conocido como esquema de cifrado híbrido, que proporciona seguridad semántica contra ataques de texto plano y de texto cifrado elegidos. ECIES puede utilizar diferentes tipos de funciones: función de acuerdo de clave (KA), función de derivación de clave (KDF), esquema de cifrado simétrico (ENC), función hash (HASH), función H-MAC (MAC).
ECC es un algoritmo de cifrado elíptico, que describe principalmente cómo se generan las claves públicas y privadas en la elipse, y es irreversible. ECDSA utiliza principalmente el algoritmo ECC para crear firmas, mientras que ECDH utiliza el algoritmo ECC para generar claves simétricas.
Los tres anteriores son aplicaciones del algoritmo de cifrado ECC. En escenarios del mundo real, a menudo utilizamos cifrado híbrido (una combinación de cifrado simétrico, cifrado asimétrico, tecnología de firma, etc.). ECIES es un conjunto de soluciones de cifrado integradas (híbridas) proporcionadas por el algoritmo ECC subyacente. Esto incluye cifrado asimétrico, cifrado simétrico y funciones de firma.
lt; meta charset="utf-8"gt;
Esta condición previa es garantizar que la curva no contenga puntos singulares.
Por lo tanto, a medida que los parámetros de la curva a y b continúan cambiando, la curva también muestra diferentes formas. Por ejemplo:
Todos los principios básicos del cifrado asimétrico se basan básicamente en una fórmula K = k G. Entre ellos, K representa la clave pública, k representa la clave privada y G representa un punto base seleccionado. El algoritmo de cifrado asimétrico garantiza que la fórmula no se pueda invertir (es decir, no se pueda calcular G/K). *
¿Cómo calcula ECC las claves pública y privada? Aquí lo describo según mi propio entendimiento.
Entiendo que la idea central de ECC es seleccionar un punto base G en la curva, luego elegir aleatoriamente un punto k en la curva ECC (como clave privada) y luego calcular nuestra clave pública. clave basada en k G K. Y asegúrese de que la clave pública K también esté en la curva. *
Entonces, ¿cómo calcular k G? ¿Cómo calcular k G para asegurar que el resultado final sea irreversible? Esto es lo que se supone que debe resolver el algoritmo ECC.
Primero, seleccionamos aleatoriamente una curva ECC, a = -3, b = 7 para obtener la siguiente curva:
En esta curva, selecciono aleatoriamente dos puntos Cómo calcular. la multiplicación de puntos? Podemos simplificar el problema. La multiplicación se puede expresar mediante la suma, como 2 2 = 2 2, 3 5 = 5 5 5. Entonces, siempre que podamos calcular la suma en la curva, teóricamente podemos calcular la multiplicación. Por lo tanto, siempre que se puedan realizar cálculos de suma en esta curva, teóricamente se puede calcular la multiplicación y teóricamente se puede calcular el valor de una expresión como k * G.
¿Cómo calcular la suma de dos puntos de la curva? En este caso, para garantizar la irreversibilidad, ECC ha personalizado un sistema de adición en la curva.
En realidad, 1 1=2, 2 2=4, pero en el algoritmo ECC, el sistema de suma que entendemos es imposible. Por tanto, es necesario personalizar un conjunto de sistemas de adición adecuados para esta curva.
La definición de ECC es encontrar aleatoriamente una línea recta en el gráfico y cruzar la curva ECC en tres puntos (tal vez dos puntos son P, Q y R respectivamente).
Entonces P Q R = 0. Entre ellos, 0 no es el punto 0 en el eje de coordenadas, sino el punto infinito en ECC. En otras palabras, el punto infinito se define como el punto 0.
De manera similar, podemos obtener P Q = -R. Como R y -R son simétricos con respecto al eje X, podemos encontrar sus coordenadas en la curva.
P R Q = 0, entonces P R = -Q, como se muestra en la figura anterior.
Lo anterior describe cómo se realizan las operaciones de suma en el mundo de las curvas ECC.
Como se puede ver en la figura anterior, solo hay dos puntos de intersección entre una línea recta y una curva, lo que significa que la línea recta es la tangente de la curva. En este momento P y R coinciden.
Es decir, P = R. Según el sistema de suma ECC mencionado anteriormente, P R Q = 0, se puede concluir que P R Q = 2P Q = 2R Q=0
Entonces obtenemos 2 P = -Q (¿Se está acercando a la fórmula K = k G de nuestro algoritmo asimétrico)?
Entonces llegamos a la conclusión de que la multiplicación se puede calcular, pero solo se puede calcular en el punto tangente y solo se puede calcular por 2.
Si 2 se puede convertir en cualquier número para la multiplicación, entonces significa que la multiplicación se puede realizar en la curva ECC y luego el algoritmo ECC puede cumplir con los requisitos de un algoritmo de cifrado asimétrico.
Entonces, ¿podemos calcular la multiplicación de cualquier número aleatorio? La respuesta es sí. Ese es el método de cálculo del producto escalar.
Elija un número aleatorio k, entonces ¿a qué es igual k * P?
Sabemos que en el mundo de la informática todo es binario. Dado que ECC puede calcular la multiplicación de 2, podemos describir el número aleatorio k como binario y luego calcularlo. Supongamos k = 151 = 10010111
Dado que 2 P = -Q, k P se calcula de esta manera. Este es el algoritmo del producto escalar. Por lo tanto, la multiplicación se puede calcular bajo el sistema de curva ECC, por lo que este método de cifrado asimétrico es factible.
En cuanto a por qué este cálculo es irreversible. Esto requiere mucha deducción y yo tampoco lo entiendo. Pero creo que se puede entender de esta manera:
Nuestros relojes suelen tener escalas de tiempo. Ahora si tomamos como punto de partida las 0:00:00 del 1 de enero de 1990, y si te decimos que ha pasado un año completo hasta el punto de inicio, entonces podemos calcular la hora actual, es decir, podemos calcularla. en el reloj. Las manecillas de hora, minutos y segundos deben señalar las 00:00:00. Pero a la inversa, dije que las manecillas de las horas, los minutos y los segundos del reloj ahora apuntan a las 00:00:00. ¿Puede decirme cuántos años han pasado desde el punto de partida?
El algoritmo de firma ECDSA es básicamente similar a otros DSA y RSA, ambos utilizan firma de clave privada y verificación de clave pública. Es solo que el sistema de algoritmos utiliza el algoritmo ECC. Ambas partes que interactúan deben adoptar el mismo conjunto de sistemas de parámetros. El principio de firma es el siguiente:
Seleccione un punto infinito en la curva como punto base G = (x, y). Elija aleatoriamente un punto k en la curva como clave privada y K = k*G para calcular la clave pública.
Proceso de firma:
Genera un número aleatorio R y calcula RG
Según el número aleatorio R, el valor HASH H del mensaje M, y la clave privada k, Calcular la firma S = (H kx)/R
Envía los mensajes M, RG, S al receptor.
Proceso de verificación de firma:
Recibir mensajes M, RG, S
Calcular el valor HASH H según el mensaje
Según la clave pública del remitente K, calcule HG/S xK/S y compare el resultado calculado con RG. Si es igual, la verificación es exitosa.
Inferencia de fórmulas:
HG/S xK/S = HG/S x(kG)/S = (H xk)/GS = RG
En Antes de introducir el principio, déjame explicarte que ECC satisface la ley asociativa y la ley conmutativa, es decir, A B C = A C B = (A C) B.
Aquí hay un ejemplo en WIKI para ilustrar cómo generar una clave privada. También puede consultar el ejemplo de Alice And Bob.
Para que Alice y Bob se comuniquen, ambas partes deben tener claves públicas y privadas generadas por ECC basadas en el mismo sistema de parámetros. Entonces hay ECC con el mismo punto base G.
Etapa de generación de clave secreta:
Alice utiliza el algoritmo de clave pública KA = ka * G, genera la clave pública KA y la clave privada ka, y hace pública la clave pública KA.
Bob utiliza el algoritmo de clave pública KB = kb * G, genera la clave pública KB y la clave privada kb, y hace pública la clave pública KB.
Etapa de cálculo ECDH:
Alice utiliza la fórmula de cálculo Q = ka * KB para calcular una clave secreta Q.
Bob utiliza la fórmula de cálculo Q' = kb * KA para calcular una clave secreta Q'.
***Verificación de clave secreta:
Q = ka KB = ka * kb * G = ka * G * kb = KA * kb = kb * KA = Q' < / p>
Por lo tanto, no es necesario revelar las claves secretas compartidas calculadas por ambas partes antes de poder cifrarlas con Q. Llamamos Q a la clave secreta compartida.
En Ethereum, se utilizan otros contenidos de la suite de cifrado ECIEC:
1. El algoritmo HASH utiliza el algoritmo SHA3 más seguro, Keccak.
2. El algoritmo de firma usa ECDSA
3. El método de autenticación usa H-MAC
4. El sistema de parámetros ECC usa secp256k1, otros El sistema de parámetros se puede encontrar aquí
Todo el proceso de H-MAC se llama Código de autenticación de mensajes basado en Hash. Su modelo es el siguiente:
En la comunicación UDP de Ethereum (los métodos de cifrado de comunicación RPC son). diferente), luego se adopta y amplía el método de implementación anterior.
En primer lugar, la estructura de comunicación UDP de Ethereum es la siguiente:
Entre ellos, sig es la información de la firma cifrada por la clave privada. mac puede entenderse como un resumen de todo el mensaje, ptype es el tipo de evento del mensaje y data son los datos de transmisión codificados con RLP.
Todo el modelo de cifrado, autenticación y firma de UDP es el siguiente: