Le chiavi private SSH contengono sempre informazioni sufficienti per ricavare una chiave pubblica?

7

Sto lavorando su un modello di persistenza per chiavi private SSH. La tecnologia utilizzata è Java. Poiché la struttura di persistenza delle chiavi pubbliche e private è piuttosto simile e utilizzando alcune API Java come java.security.interfaces.RSAPrivateCrtKey , sono in grado di ricavare le chiavi pubbliche.

Quindi mi chiedo se è sufficiente persistenza delle chiavi private e in seguito ricavarne la chiave pubblica?

Credo che questo si riduce a poche domande importanti che mi piacciono per ottenere una risposta:

  1. È sempre il caso che io possa ottenere informazioni / metadati necessari per creare una chiave pubblica dalla chiave privata. per esempio. in caso di RSA, sembra che l'API java fornisca modulo ed esponente pubblico.
  2. Le informazioni ricreate saranno sempre le stesse?
  3. Se ottengo una chiave privata SSH come file, esiste la possibilità che non contenga le informazioni relative alla chiave pubblica.
posta Gaurav Abbi 19.08.2014 - 12:48
fonte

1 risposta

9

Ci sono tre lati di questa domanda, RSA in generale, RSA con SSH e SSH con altri crittosistemi.

In RSA la chiave pubblica e privata consistono ciascuno di due valori.

  1. Il modulo, questo è comune alle chiavi pubbliche e private.
  2. L'esponente, c'è un esponente pubblico separato per la chiave pubblica e l'esponente privato per la chiave privata.

Quindi in teoria una chiave privata RSA non deve contenere la chiave pubblica. In pratica comunque.

  1. La maggior parte dei pratici formati di chiavi private contengono informazioni aggiuntive. Solitamente includono l'esponente pubblico perché in realtà è utile per poter creare un file di chiave pubblica dal file della chiave privata. Includono anche normalmente i valori p e q grezzi e una manciata di valori derivati extra per accelerare le operazioni delle chiavi private.
  2. L'esponente di chiave pubblica è in genere uno dei pochi valori noti. Sulla maggior parte delle chiavi RSA, anche se hai il modulo e l'esponente privato, non sarebbe difficile capire l'esponente pubblico per tentativi ed errori.

Secondo il link openssh utilizza il formato chiave privata pkcs # 1 . Secondo il link questo formato contiene il modulo, gli esponenti pubblici e privati, entrambi i numeri primi e un numero di altri valori che sono utili per ottimizzare le operazioni delle chiavi private. L'inclusione delle informazioni sulla chiave pubblica non sembra essere facoltativa.

Quindi per RSA stai bene, perché hai già scoperto che puoi tranquillamente pescare i parametri della chiave pubblica fuori dalla struttura della chiave privata.

Per SSH con ECDSA sembra che i parametri della chiave pubblica non siano normalmente memorizzati come parte della chiave privata, ma possono essere derivati da essa. link

YMMV con altri cryptosystems.

    
risposta data 18.11.2015 - 12:38
fonte

Leggi altre domande sui tag