C'è un filesystem crittografato su un server I ssh
nell'uso dell'autenticazione a chiave pubblica. Poiché un ssh-agent inoltrato può firmare in modo deterministico un messaggio (vedi anche il protocollo ssh-agent sezione 2.6.2), considero l'utilizzo di un messaggio memorizzato sul server combinato 1 con la sua firma (usando una chiave RSA privata memorizzata sul client tramite il% co_de inoltrato) come password inviata al programma di crittografia per risolvere la mia domanda Come decrittografare un contenitore crittografato tramite ssh senza immettere una passphrase mentre richiede l'autenticazione di alcuni client? (ma in pratica qualsiasi richiesta di richiesta di password potrebbe essere coinvolta qui) e quindi scartata di nuovo. Ma questa è una buona idea (= sicura)? Che tipo di combinazione tra messaggio e firma dovrei effettivamente usare? È necessario utilizzare una coppia di chiavi diversa da quella per l'autenticazione ssh? O sto cercando di inventare una ruota triangolare?
1 La combinazione del messaggio originale con la firma in realtà aiuta in qualche modo rispetto all'uso semplicemente della firma? (A parte l'entropia, ma supponiamo che lo stretching chiave sia applicato comunque)
Ecco un breve riassunto di come funziona l'autenticazione della chiave pubblica SSHv2:
ssh-agent
sul server remoto si aspetta che sshd
o ssh
del client firmi un messaggio predeterminato con la sua chiave privata (che non è memorizzata in remoto ) e il server può quindi verificarlo tramite la chiave pubblica inoltrata e controllarlo contro il database ssh-agent
dell'utente.
authorized_keys
-forwarding di solito consiste in una connessione a un terzo PC. Il PC intermedio genera il messaggio, ma chiede al ssh-agent
del client originale di firmarlo, senza mai conoscere la chiave privata stessa. Questa stessa istruzione di firma è ciò che voglio usare per ottenere un "segreto" (la firma, non la chiave pubblica) che può essere usato come password che non è memorizzato da nessuna parte (e non può essere riprodotto sul client da solo se il messaggio -to-essere-firmato è memorizzato solo sul server) - nessun terzo PC coinvolto, solo l'agente che inoltra.
Ecco un'illustrazione del processo che intendo implementare:
Client: Server:
>ssh-add SECRET RSA KEY
>ssh -A server <-- connect, forward agent (authentication does not
need to use that specific secret key)
Connect to the 'SSH_AUTH_SOCK' unix socket and ask
the client's ssh-agent to sign MESSAGE with SECRET RSA KEY
(knowing only the respective PUBLIC RSA KEY to identify it)
ssh-agent signs MESSAGE --> SIGNATURE
[optionally verify SIGNATURE]
Use SIGNATURE as PASSWORD,
pipe that to the program and forget it.
A mio avviso ciò implica quanto segue:
Se il server viene rubato, il ladro dovrebbe intercettare il client che firma ssh-agent
, altrimenti non può ottenere MESSAGE
. Se il client viene rubato, senza PASSWORD
non può essere generato nemmeno MESSAGE
. Quindi sia il server che il client devono essere rubati e la passphrase di SIGNATURE
può essere ottenuta - la forzatura bruta di cui sarebbe altrettanto fastidiosa come la forzatura bruta della stessa password originale ...
modifica Ho scritto un piccolo script Python per questo, SECRET RSA KEY