Mi primera pregunta es cómo verificar la firma usando solo r, s y el parámetro de curva elíptica, y una dirección (que tiene un hash de clave pública, por lo que no puede recuperar la clave pública de la dirección).
La siguiente pregunta es, ¿por qué ethereum (también creo que bitcoin) usa una clave pública hash como dirección en lugar de usar directamente la clave pública como dirección?
Tal vez esta respuesta pueda ayudarlo: https://ethereum.stackexchange.com/a/33346/16729
El modelo de seguridad de Ethereum se basa en la criptografía de curva elíptica (ECC) para firmar y validar transacciones. En ECC, la clave pública y privada se utilizan para firmar y verificar. No tiene concepto de direcciones. Al firmar y verificar transacciones no necesita direcciones. El documento original de bitcoin no menciona direcciones en absoluto. Aparecen más tarde en un esfuerzo por hacerlos más fáciles de recordar (la clave pública comprimida es de 32 bytes frente a la dirección de 20 bytes). Ahora puede ocultar completamente la clave pública de la interacción del usuario y solo tener claves y direcciones privadas. Pero internamente ethereum sigue usándolos para validar transacciones.
La clave pública en todos los esquemas criptográficos está relacionada con la clave privada . La única medida segura que impide que un usuario calcule su clave privada a partir de su clave pública es la suposición de que el logaritmo discreto es "imposible de resolver".
Todos sabemos que la criptografía cuántica se acerca cada día más, y el problema que esto presenta es que resolver logaritmos discretos es "fácil" si estás ejecutando una PC/CPU cuántica . Entonces, teniendo el Pk, será posible obtener el Sk (clave privada).
Para anticipar eso, si solo tiene acceso al hash del Pk, no lo sabe, por lo que incluso con la criptografía cuántica (hasta ahora parece que el cuántico no podrá pasar funciones hash tan fácilmente ), estás seguro.
Más información sobre la resistencia de las funciones hash a la criptografía cuántica aquí.
La longitud de una clave pública es mucho mayor que su hash, que siempre es una variable de 256 bits . Entonces, si cuenta todas las transacciones que se realizan en un día, está ahorrando mucho combustible en las transacciones porque las claves públicas harán que los mineros y los nodos procesen/almacenen muchos más datos porque son mucho más grandes que sus hashes.
Puedo ampliar más la explicación si lo necesita, pero esencialmente, esto es todo.
EDIT COMO estás pidiendo en los comentarios, aquí tienes un tema en el que se explica cómo recuperar el Pk de su hash.
Obtenga la clave pública de cualquier cuenta de ethereum
Espero eso ayude.
eth.getTransaction
, pero no veo ninguna pista para recuperar un público de él.Descubrí cómo recuperar la clave pública de tx (firma, r y s) y su dirección.
Primero, así es como se genera la firma, el público es B
, y la clave privada es d
, donde B = dA
. (multiplicación en curva elíptica). Es REALMENTE difícil (o simple, porque no sabemos si P=NP o no), por lo que no podemos recuperar d
de B
y A
.
Y el público se puede recuperar de la siguiente manera, y el número de candidatos de clave pública es dos, porque solo conocemos la coordenada x de R
. Por lo tanto, es fácil encontrar una clave pública cuya clave pública sea real a partir de la dirección.
la prueba es la siguiente,
por favor corrígeme si algo está mal. Parece que hay una función útil en https://github.com/cryptocoinjs/secp256k1-node.recover(Buffer message, Buffer signature, Number recovery [, Boolean compressed = true])
para recuperar la clave pública .
Cronos
Luis Soares
Luis Soares
Luis Soares
ismael