Tome una clave pública de bitcoin (x, y) y su inverso aditivo (x, -y). ¿Cómo identificar cuál es el punto positivo y cuál es el punto negativo?
Ejemplo
Clave privada 1 -> (x, y)
x = 0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798L
y = 0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8L
-y = 0xb7c52588d95c3b9aa25b0403f1eef75702e84bb7597aabe663b82f6f04ef2777L
Clave privada 2 -> (x, y)
x = 0xc6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5L
y = 0x1ae168fea63dc339a3c58419466ceaeef7f632653266d0e1236431a950cfe52aL
-y = 0xe51e970159c23cc65c3a7be6b99315110809cd9acd992f1edc9bce55af301705L
Clave privada 3 -> (x, y)
x = 0xf9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9L
y = 0x388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672L
-y = 0xc77084f09cd217ebf01cc819d5c80ca99aff5666cb3ddce4934602897b4715bdL
Además, ¿cómo puedes identificar qué clave de pub es impar y cuál es par?
ej: clave privada 1 x,y es impar, clave privada 2 x,y es par
No existe una determinación concreta que haga que un valor de 'y' sea negativo o no en un punto EC. Siéntete libre de hacer tu propia convención, como valores y <= que la mitad de p son negativos, y > la mitad de p son positivos. Sin embargo, eso es solo una convención.
Relacionado:
Además, ¿cómo puedes identificar qué clave de pub es impar y cuál es par?
ej: clave privada 1 x,y es impar, clave privada 2 x,y es par
¡No puedes! No sin conocer la propia clave privada. Si pudiera, sería parte del camino hacia la solución del problema del registro discreto .
Veamos esto más formalmente.
Suponga que hay una función lsbPriv(P)
tal que devuelve el LSB de la clave privada k
de la clave pública P = [k]G
donde G
está el punto base.
Ahora, podemos usar esta función para determinar todos los bits de la clave privada de la k
siguiente manera;
func DlogbyLSB(P)
for i in range(1..256)
x = lsbPriv(P)
secretKey.append(x)
if x == 0 then ; test the bit
P = [2^-1]P ; i.e. we can divide `k` by `2` since the last bit is `0`
else
P = [1]G ; i.e. we substructed the bit `1` from the `k` and
P = [2^-1]P ; now it is again divisible by `2`
return secretKey
Esto es casi como el reverso del algoritmo de duplicar y sumar que calcula la multiplicación escalar en las curvas elípticas.
Entonces, con la ayuda de lsbPriv
podemos aprender cada parte de la clave privada k
. En criptografía llamamos a esto predicado lsb bit
de núcleo duro . Como podemos ver, después de las llamadas al 256, el lsbPriv
revela la clave. Entonces lsbpriv
es tan difícil como recuperar todos los bits.
Esto también implica que si tal lsbPriv
función existe es igual a resolver el Dlog
problema en la curva Secp256k
. Actualmente, sabemos que es difícil, por lo que no existe tal lsbPriv
función.
Nate Eldredge
codificador morse