Preguntas de la entrevista del algoritmo BTC de cifrado asimétrico

1. Compare el cifrado simétrico (como AES) y los algoritmos de cifrado asimétrico (como RSA), describa brevemente las ventajas y desventajas de los algoritmos de cifrado asimétrico y los escenarios prácticos.

Cifrado simétrico: el cifrado y el descifrado utilizan la misma clave, por lo que se denomina cifrado simétrico. El cifrado simétrico tiene solo una clave secreta como clave privada. Algoritmos de cifrado simétrico comunes: DES, AES.

Cifrado asimétrico: el cifrado y el descifrado utilizan claves diferentes. Una es la clave pública y la otra es la clave privada. La información cifrada con la clave pública solo se puede descifrar con la clave privada. Por el contrario, la información cifrada con la clave privada solo se puede descifrar con la clave pública.

Ventajas y desventajas: mayor seguridad, la clave pública es pública y la clave privada no lo es. Desventajas: el cifrado y el descifrado requieren mucho tiempo, baja velocidad y solo son adecuados para cifrar una pequeña cantidad de datos. Escenario práctico: protocolo ssh.

2. Describa brevemente su comprensión del protocolo Bitcoin BIP32, BIP39 y BIP44. Y describa el proceso de cálculo de mnemotécnico a Semilla en BIP39. (Es una ventaja si se puede implementar en el código).

BIP32 : para resolver el problema de la copia de seguridad y la gestión de una gran cantidad de claves privadas, se obtienen N claves privadas a través de la derivación determinista jerárquica basada en una semilla de número aleatorio, y solo se puede guardar una semilla al guardar.

BIP44 : es una especificación de definición de ruta jerárquica para BIP32. La clave se deriva de forma jerárquica, generalmente representada por una ruta, y cada nivel está representado por una barra inclinada /. La clave privada derivada de la clave privada maestra comienza con "m". Por lo tanto, la clave privada secundaria generada por la primera clave principal es m/0. La primera clave pública es M/0. La subclave de la primera subclave es m/0/1 y así sucesivamente. BIP44 estipula un significado canónico para esta ruta (y también amplía el soporte para múltiples monedas), y BIP44 especifica una estructura que contiene 5 niveles de árbol predefinidos:

m / propósito' / moneda' / cuenta' / cambio / índice_dirección

m es fijo, el propósito también es fijo, el valor es 44 (o 0x8000002C); Tipo de moneda

Esto representa la moneda, 0 representa Bitcoin, 1 representa la cadena de prueba de Bitcoin, 60 representa la Cuenta Ethereum representa el índice de cuenta de esta moneda, comenzando desde 0; la constante de cambio 0 se usa para la cadena externa y la constante 1 se usa para la cadena interna (También conocido como cambio de dirección). Las cadenas externas se utilizan para direcciones que son visibles fuera de la billetera (por ejemplo, para recibir pagos). La cadena interna se usa para direcciones que no son visibles fuera de la billetera y se usa para devolver cambios de transacciones. (Por lo general, use 0); el índice de dirección address_index, a partir de 0, representa la dirección generada. La sugerencia oficial es que el índice de dirección debajo de cada cuenta no debe exceder 20. De acuerdo con la discusión propuesta por EIP85, la billetera Ethereum también sigue el estándar BIP44, y la ruta determinada es m/44'/60'/a'/0/n; a representa el número de cuenta, n es la n-ésima dirección generada, y 60 se determina en la propuesta SLIP44 La codificación de Ethereum.

BIP39 : haga que la copia de seguridad de la semilla sea más amigable definiendo palabras mnemotécnicas.

BIP32 nos permite almacenar una semilla de número aleatorio en lugar de un montón de claves. Pero para la mayoría de los usuarios, sigue siendo muy poco amigable, lo que provocó la aparición de BIP39. Utiliza mnemotécnicos para generar semillas. En este caso, los usuarios solo necesitan recordar los mnemotécnicos para crear semillas aleatorias como semillas BIP32. Todo el proceso consta de dos pasos: 1. Generar la mnemotécnica 2. Deducir la semilla de la mnemotécnica. Método de generación de palabras mnemotécnicas: El proceso de generación de palabras mnemotécnicas es el siguiente: primero genera un número aleatorio de 128 bits, además verifica el número aleatorio con 4 dígitos para obtener un número de 132 dígitos, y luego hazlo cada 11 dígitos Segmentación, para que haya 12 números binarios, y luego use cada número para buscar la lista de palabras definida por BIP39, para obtener 12 palabras mnemotécnicas. Semilla de derivación mnemotécnica: este proceso utiliza la función de extensión de clave para mejorar la seguridad de las claves débiles.

3. Clave pública conocida

X=0x1E25ECA6C24E4438DB9AD6E66A63D97855F0E910DDF15D3EEF256AD9D5

41CD5A

Y=0xF22469776B19A8F60D170CDB566CC90EB56DC1FBBD14BE5A6086A75959

4AD08F

  1. Por favor, calcule la dirección BTC correspondiente. (Se recomienda escribir los resultados intermedios de cada paso de conversión)

1. Obtenga la clave pública:

X=0x1E25ECA6C24E4438DB9AD6E66A63D97855F0E910DDF15D3EEF256AD9D541CD5A

Y=0xF22469776B19A8F60D170CDB566CC90EB56DC1FBBD14BE5A6086A759594AD08F

Combine las direcciones de clave pública X e Y para obtener la dirección estándar (130*4bit=65 bytes)

041E25ECA6C24E4438DB9AD6E66A63D97855F0E910DDF15D3EEF256AD9D541CD5A

 F22469776B19A8F60D170CDB566CC90EB56DC1FBBD14BE5A6086A759594AD08F

2. El hash SHA-256 de la clave pública

Alinee y realice el cálculo hash SHA-256 para obtener el resultado (64*4bit=32 bytes);

1dc3cdfa3286e900e6567a3354ca2907612408e2edb0507ff7d5b07212738268

3. Tome el resultado del paso anterior y calcule el valor hash RIPEMD-160 (20 bytes)

f12befaba88f09619af4e2cf0f42f177d55dda0a'

4. Tome el resultado del paso anterior y agregue el número de versión de la dirección al frente (número de versión de la red principal de Bitcoin "0x00")

00f12befaba88f09619af4e2cf0f42f177d55dda0a

5. Tome el resultado del paso anterior y calcule el valor hash SHA-256 dos veces (32 bytes)

   -1- 36a852646d95a2ff65b65702e4133ccbd4ae921141e929fdd80c0463c0eaaa09

   -2- aabe7a349b23b3c4995807f42f8a9b9910eda7d19b62eb271edb9db25decfb1d

6. Tomar los primeros 4 bytes del resultado del paso anterior (hexadecimal de 8 dígitos)

  aabe7a34 

7.hash de clave pública , agregue estos 4 bytes después del resultado del paso 4 como verificación (esta es la forma hexadecimal de la dirección de bitcoin).

  00f12befaba88f09619af4e2cf0f42f177d55dda0a aabe7a34  

8. Dirección

En última instancia, para los usuarios: use la codificación base58 para transformar la dirección (esta es la forma más común de dirección de Bitcoin)

1FYnVTYGNcutq3F7GwbHMhx77hCum6DcbK

2) Escribe una función para calcular la dirección a partir de la clave pública.

# codificación:utf-8 

de __futuro__ import print_function 

import cryptos 



def func (x , y): 

      public_key=( int (x , 16 ) , int (y , 16 )) 



      print ( "Las coordenadas de la clave pública (x,y) son: " , public_key) 



      # Codificar como hexadecimal, prefijo 04 

      hex_encoded_public_key = cryptos.encode_pubkey(public_key , 'hex' ) 

      print ( "La clave pública (hexadecimal) es:" , hex_encoded_public_key)



      # Comprimir la clave pública, ajustar el prefijo dependiendo de si y es par o impar 

      (public_key_x , public_key_y) = 

      public_keypressed_prefix = '02' if (public_key_y % 2 ) == 0 else '03' 

      hex_compressed_public_key =pressed_prefix + (cryptos.encode(public_key_x) , 16 ).zfill( 64 )) 

      print ( "(cryptos.encode(public_key_x, 16):" , cryptos.encode(public_key_x , 16 )) 

      print ( "cryptos.encode(public_key_x, 16).zfill(64): " , cryptos.encode(public_key_x, 16 ) _ _ 

      _ _ _ _ _ 



      _ 

      _ _ _ _ _ 



      # Genere una dirección de bitcoin comprimida a partir de 

      la impresión de clave pública comprimida ( "La dirección de Bitcoin comprimida (b58check) es:" , 

            cryptos.pubkey_to_address (hex_compressed_public_key))

Supongo que te gusta

Origin blog.csdn.net/L1153413073/article/details/127109186
Recomendado
Clasificación