¿Cómo determinar si un punto de clave pública y es negativo o positivo, par o impar?

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 entiendo la pregunta x e y aquí son elementos del campo finito F_p en el que generalmente no hay un significado inequívoco de "impar" y "par": cada número es divisible por 2 con respecto a la multiplicación del campo. Hay un problema similar con "positivo" y "negativo" ya que F_p no es un campo ordenado.
@NateEldredge, creo que Prabu está buscando saber si el punto se generó o no a partir de una clave privada que es par/impar, no si las coordenadas resultantes son pares/impares.

Respuestas (2)

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 .

Hola, StephenM347, los valores y <= que la mitad de p son negativos y > la mitad de p son positivos, ¿puedes explicar esto claramente con algún ejemplo?
¿Cómo se resolvería el problema del logaritmo discreto sabiendo si Y es positivo, negativo, impar o par? ¿Rompería absolutamente la criptografía o simplemente limitaría la búsqueda de campo para encontrar una clave privada?
@PedroGonçalves Saber si la coordenada Y es impar o par, por supuesto, no rompe nada, porque es información pública. Saber si la coordenada Y es "positiva o negativa" depende de cómo defina positivo o negativo (como se indica en esta respuesta, puede crear su propia convención). SI lo define como "la clave privada correspondiente es par/impar", entonces saber si Y es positivo o negativo es una brecha de seguridad trivial (se supone que no puede inferir ninguna información sobre la clave privada).

Veamos esto más formalmente.

Suponga que hay una función lsbPriv(P)tal que devuelve el LSB de la clave privada kde la clave pública P = [k]Gdonde Gestá el punto base.

Ahora, podemos usar esta función para determinar todos los bits de la clave privada de la ksiguiente 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 lsbPrivpodemos aprender cada parte de la clave privada k. En criptografía llamamos a esto predicado lsb bitde núcleo duro . Como podemos ver, después de las llamadas al 256, el lsbPrivrevela la clave. Entonces lsbprives tan difícil como recuperar todos los bits.

Esto también implica que si tal lsbPrivfunción existe es igual a resolver el Dlogproblema en la curva Secp256k. Actualmente, sabemos que es difícil, por lo que no existe tal lsbPrivfunción.