¿Debe endurecerse el nivel de cuenta en BIP32/BIP44?

Digamos que tenemos un intercambio comercial ETH donde empleamos BIP32/BIP44 para generar una dirección de billetera única para cada usuario. Para simplificar, cada usuario usa la misma dirección de billetera (única para cada usuario) para todos los depósitos/retiros posteriores.

Por razones de seguridad, tenemos una billetera caliente/en línea y una billetera fría/fuera de línea, donde la billetera caliente/en línea es manejada por un servicio (por ejemplo, una aplicación NodeJS) que solo contiene una clave pública extendida y no el mnemotécnico/semilla de la Nodo raíz de HD Wallet.

También usamos la estructura de ruta de derivación similar a BIP44

m / propósito' / tipo_moneda' / cuenta' / índice_dirección

Pregunta 1: ¿Se practica generalmente permitir que cada usuario tenga un nodo de nivel de cuenta diferente? Por ejemplo: el usuario 1 tiene m/44'/20'/1, el usuario 2 tiene m/44'/20'/2', etc.

Pregunta 2: suponiendo que la pregunta anterior sea correcta, ¿debería reforzarse o no reforzarse la clave de nivel de cuenta?

Según mi (pobre) entendimiento hasta ahora, si usamos m/44'/20'/0en lugar de m/44'/20'/0', solo necesitamos la clave pública extendida para m/44'/20'generar direcciones de depósito para cada usuario m/44'/20'/0, m/44'/20'/1etc.

Sin embargo, si usamos m/44'/20'/0', necesitamos la clave privada extendida para m/44'/20'generar direcciones de depósito para cada usuario, y esto es menos seguro porque si la clave privada extendida en la aplicación de billetera en línea/activa se ve comprometida en lugar de la clave pública extendida, todos los fondos puede ser robado

Por último, ¿cuál es la mejor práctica para implementar BIP32 en una aplicación de este tipo (intercambio comercial, mercado, etc.)? ¿La aplicación que maneja la billetera y guarda las claves se comunica a través de un método REST/websockets/jobqueue con los otros servicios que aceptan la entrada del usuario para solicitar retiros/depósitos?

Respuestas (1)

Para simplificar, cada usuario usa la misma dirección de billetera (única para cada usuario) para todos los depósitos/retiros posteriores.

De manera realista, este no sería el caso, tal vez para retiros pero no para depósitos, ya que revela demasiada información sobre el usuario individual. Debe realizar un seguimiento del saldo por usuario en un esquema diferente y usar facturas para manejar pagos y retiros. La razón por la que menciono esto es porque estás preguntando qué es la práctica general en la Pregunta 1.

Pregunta 1: ¿Se practica generalmente permitir que cada usuario tenga un nodo de nivel de cuenta diferente? Por ejemplo: el usuario 1 tiene m/44'/20'/1, el usuario 2 tiene m/44'/20'/2', etc.

yo no lo haría Este sistema no solo vincula el dinero en el sistema, sino que también vincula quién tiene cuánto dinero.

Pregunta 2: suponiendo que la pregunta anterior sea correcta, ¿debería reforzarse o no reforzarse la clave de nivel de cuenta?

Como mencionaste, la ruta de derivación es como tal

m / purpose' / coin_type' / account' / change / address_index

Esto significa que la profundidad de la cuenta debe fortalecerse. De lo contrario, será una anomalía y si coloco la clave privada maestra en una billetera diferente, se generarán direcciones diferentes. Entonces, la respuesta a su pregunta es sí, debe endurecerse.