obter componentes xey da chave pública ec usando openssl


12

Estou gerando um KeyPair para ECC a partir da curva 'secp128r1' usando openssl

Etapas que segui:

  • primeiro eu gerei uma chave privada usando o comando

    openssl ecparam -genkey -name secp128r1 -noout -out private.pem

  • então eu vi a chave pública correspondente usando o comando

    openssl ec -in private.pem -text -noout

    que mostrou uma saída como:

    leia chave CE

    Chave privada: (128 bits)
    priv:
    00: 9f: bf: 2b: bd: 06: 86: 3a: a1: bc: 7c: 3e: 90: 57: 40:
    f4: bc
    pub:
    04: 04: ce : 24: 34: d4: cb: f2: 58: 94: 2f: 8a: 5f: 06: d7:
    3f: ed: 5a: 50: ef: fb: cc: b7: 49: 62: 16: 62: 9e : aa: d5:
    30: a8: a5

    ASN1 OID: secp128r1

Eu quero explicitamente os componentes xey da chave pública gerada aqui. Alguém pode sugerir a maneira correta de fazer isso?
A chave pública acima tem 264 bits e, portanto, não pode levá-la (/ dividir) como está
Obrigado


5
Dupe de security.stackexchange.com/questions/60926/… ; por tools.ietf.org/html/rfc5480#section-2.2 o primeiro octeto (04) significa descompactado, seguido de X, Y coordena cada um exatamente o tamanho do campo arredondado para octetos, aqui 16 octetos.
David_thompson_085

2
@dave_Thompson - Acho que você deve fornecer uma resposta. Foi uma boa pergunta e boas informações (e no site correto !!!), e você deve receber o benefício de uma boa resposta.
JWW

Respostas:


1

Primeiro, secp128r1 está desatualizado. Use curvas que oferecem melhor segurança para o padrão atual. Veja safecurves de Daniel J. Bernstein e Tanja Lange.

Uma curva elíptica definida ao longo de um campo de tamanho de q e cada elemento -point- tem duas coordenadas X e Y . A curva elíptica Secp128r1 tem 2 128 -2 97 -1 ℓ tamanho, ou seja, o número de pontos de um pouco menos de 2 ^ 128. Isso significa que precisamos de uma representação de 128 bits.

A chave pública, que também é um ponto na curva, possui duas coordenadas; portanto, precisamos armazenar dois de 128 bits.

Se olharmos para a equação da curva elíptica Y 2 = X 3 + aX + b onde

 a = FFFFFFFD FFFFFFFF FFFFFFFF FFFFFF
 b = E87579C1 1079F43D D824993C 2CEE5E

se sabemos X a partir da equação podemos encontrar Y . Como estamos trabalhando em um campo, o Y pode ter no máximo duas raízes quadradas. Y 2 terá y ou -y como raiz quadrada. Esse conhecimento pode ser usado para compactar a representação de um ponto e é chamado de compactação de ponto . Apenas x coordenadas e um bit para selecionar y ou -y . Agora observe o ponto base (consulte a recomendação Certicom )

 base point = 03 161FF752 8B899B2D 0C28607C A52C5B86
            = 04 161FF752 8B899B2D 0C28607C A52C5B86 CF5AC839 5BAFEB13 C02DA292 DDED7A83 

O primeiro octeto determina a estrutura

  • 04 significa que não há compressão
  • 03significa que há uma compressão e selecione y como positivo
  • 02significa que há uma compressão e selecione y como negativo

Agora se transforme nos parâmetros do OP;

pub:
04:
04:ce:24:34:d4:cb:f2:58:94:2f:8a:5f:06:d7:3f:ed: -->X
5a:50:ef:fb:cc:b7:49:62:16:62:9e:aa:d5:30:a8:a5  -->Y

primeiro octeto 04significa que não há compressão. A primeira linha é a coordenada X e a segunda linha é a coordenada Y da sua chave pública.

E a chave privada n ? É apenas um escalar-integrante- entre 0 <= n <= ℓ

priv: 00: 9f: bf: 2b: bd: 06: 86: 3a: a1: bc: 7c: 3e: 90: 57: 40: f4: bc

Portanto, o número acima - e não o ponto - é sua chave privada.

Você também pode usar algumas ferramentas da web para extrair essas informações.

Nota: não exponha sua chave privada.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.