SSH ED25519 Key Extract pk (32 bit)

1

Sto giocando con le chiavi ssh con ED25519. Ho visto un paio di librerie giocare con la generazione della coppia di chiavi pubblica / privata. Un'altra analisi della chiave privata openssh per ottenere la chiave, ma la sfida che sto incontrando è quella di ottenere il valore pk dalla chiave pubblica.

Da OpenSSH link

Questo lo trovo:

pk is the encoded Ed25519 public key as defined by draft-josefsson-eddsa-ed25519-03.

Quindi sto cercando di ottenere il valore effettivo della chiave pubblica (32 bit) dalla chiave pubblica e quindi di codificarlo.

Le mie domande: \

  1. Qualcuno può spiegare come estrarre la chiave pubblica effettiva dalla chiave pubblica della chiave ssh (rimuovendo tutte le cose extra e lasciando solo la chiave)?

  2. Qualcuno potrebbe inserire nel linguaggio umano (o codice) un esempio di codifica della chiave pubblica?

(Lo sto facendo in python, cryptography.hazmat non supporta ancora questo. Ho passato il codice C per la firma keygen di openssh, che ha bisogno del pk, e non ho familiarità con C per scavare attraverso i puntatori ai puntatori, ecc. per capire abbastanza bene cosa sta facendo.)

Felice di fare ulteriori ricerche se necessario, ma solo cercando un posto dove cercare.

    
posta John 03.06.2017 - 07:46
fonte

1 risposta

2

1- Can someone explain how to extract the actual public key from the the ssh key public key (removing all the extra stuff and leaving just the key)?

Il formato della chiave pubblica è descritto come la parte della sezione known_hosts della pagina manuale per sshd :

keytype, base64-encoded key, comment.

Quindi, crea una chiave per vedere cosa c'è.

$ ssh-keygen -t ed25519 -f ed25519
$ cat ed25519.pub 
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIE8C+wgMJ89PV5cQZxfCpq+GB/gZ0zO7JQhnVBIh2gOj comment

Usando cut possiamo selezionare solo il blob della chiave, che è la struttura LV (valore della lunghezza), contenente (ancora una volta) il nome della chiave e poi il valore PK attuale:

$ cat ed25519.pub | cut -d' ' -f2 | base64 -d | hexdump -C
00000000  00 00 00 0b 73 73 68 2d  65 64 32 35 35 31 39 00  |....ssh-ed25519.|
00000010  00 00 20 4f 02 fb 08 0c  27 cf 4f 57 97 10 67 17  |.. O....'.OW..g.|
00000020  c2 a6 af 86 07 f8 19 d3  33 bb 25 08 67 54 12 21  |........3.%.gT.!|
00000030  da 03 a3                                          |...|
00000033

Possiamo ancora una volta eliminare il nome della chiave per ottenere solo la stringa che rappresenta il PK. La lunghezza è rappresentata sempre usando 4 byte: 00 00 00 0b (11) è la lunghezza della stringa ssh-ed25519 (hex: 73 73 68 2d 65 64 32 35 35 31 39 ) e quindi segue la lunghezza PK 00 00 00 20 (sempre 32 byte) e la chiave stessa ( esadecimale):

4f 02 fb 08 0c 27 cf 4f 57 97 10 67 17 c2 a6 af 86 07 f8 19 d3 33 bb 25 08 67 54 12 21 da 03 a3

2- Could someone put in human speak (or code) an example of encoding the public key?

Quanto sopra è la versione bash e manuale dell'estrazione del valore PK dalla chiave pubblica OpenSSH. Credo che sarete in grado di implementarlo in Python dalla descrizione precedente.

    
risposta data 04.06.2017 - 10:58
fonte

Leggi altre domande sui tag