È possibile utilizzare l'agente SSH in esecuzione per decrittografare alcuni dati (forniti come stringa o letti dal file)?
È possibile utilizzare l'agente SSH in esecuzione per decrittografare alcuni dati (forniti come stringa o letti dal file)?
No, non è almeno con OpenSSH - non ci sono opzioni per operare in questa modalità. È per l'autenticazione con i server remoti (convalida dell'identità) e quindi per crittografare il traffico di rete tra l'applicazione client ssh
e il server remoto sshd
.
Potresti provare a compilare una libreria da OpenSSH che usa le sue modalità di crittografia e creare un eseguibile basato su quello per usare la crittografia, ma gli autori di OpenSSH non hanno provato a farlo. Ecco un repository github che ha richiesto openssh e ha provato a convertirlo in una libreria che altre applicazioni possono utilizzare.
OpenSSH utilizza protocolli noti implementati in OpenSSL; ad es., la mia connessione ssh adesso usa aes128-ctr per crittografare con hmac-md5 per verificare l'integrità (la combinazione). Concesso se si riesce effettivamente a risalire per vedere da dove proviene aes128-ctr, lo si troverà alla fine preso da OpenSSL library . (Questo è in libopenssh / cipher.c dice a aes128_ctr
di usare EVP_aes_128_ctr
che sta attraversando il file di intestazione #include "cipher.h"
(libOpenSSH che include #include <openssl/evp.h>
(note OpenSSL) che definisce EVP_aes_128_ctr
che alla fine riconduce all'attuazione ( dopo alcuni wrapper per gestire diverse modalità / dimensioni) in openssl / crypto / aes / aes_core. c .
EDIT:
Scusa non mi è stato chiaro che stavi parlando di ssh-agent
.
Come utilizzare le chiavi private caricate in ssh-agent per crittografare o decodificare i messaggi, non è possibile. L'intero scopo di ssh-agent
è limitare l'uso della chiave privata solo alla funzione accettabile (autenticazione in ssh).
Guarda il codice sorgente di ssh-agent e la descrizione di la funzionalità in PROTOCOL.agent . Per sicurezza, ssh-agent fornisce un'interfaccia molto limitata all'utilizzo delle chiavi private ssh memorizzate.
Per ssh2, l'unico uso della chiave privata è quello di firmare le richieste usando la tua chiave privata . Con ssh1 ci sono anche sfide di autenticazione dei processi , ma non dovresti davvero usa più ssh1. Le altre funzioni non utilizzano la chiave privata, ma gestiscono la gestione delle chiavi.
Le sfide principali in SSH1 hanno funzionato come borsisti . Innanzitutto, il terminale remoto invia una sfida: una stringa di bit casuale crittografata con la chiave pubblica dell'utente (nota dal file authorized_keys). L'utente invia la sfida a ssh-agent
, che utilizza la chiave privata per decrittografare il messaggio di verifica. Quindi, ssh-agent prende la stringa di bit casuale e calcola un hash crittografico di esso e restituisce l'hash crittografico. Ciò verifica che l'utente fosse in possesso della chiave privata e trapelasse solo l'hash del messaggio decrittografato, ma non il vero messaggio decrittografato.
Le principali sfide in SSH2 ora funzionano inviando richieste di firma. Anche in questo caso, il server remoto invia all'utente una stringa di bit casuale. Quindi ssh-agent prende quella stringa a caso e usa la sua chiave privata per firma crittograficamente che messaggio - non viene eseguita alcuna decrittografia. La firma viene rinviata e il server verifica la firma utilizzando la chiave pubblica per convalidarla.
Nel contesto di RSA, la chiave pubblica è ( N = p*q
, e
) e la chiave privata ( N
, d
), dove d è costruito in modo d*e ≡ 1 (mod (p-1)(q-1))
(d può essere calcolato in modo efficiente conoscere e, peq tramite l'algoritmo esteso di Euclide). Quindi il metodo di firma è hash (con SHA1) il messaggio casuale h = sha1(r)
e quindi aumenta l'hash a potenza con la chiave privata S = h^d (mod N)
. Quindi il server convalida la firma S
con la chiave pubblica dell'utente calcolando S^e (mod N)
che a causa del teorema totemico di Eulero sarà l'hash del messaggio inviato, che verrà confrontato con S^e ≡ (h^d)^e ≡ h^(d*e) ≡ h^(1 + (q-1)(p-1)) ≡ h (mod N)
.
Non è possibile utilizzare l'agente SSH per asimmetricamente decrittografare i dati che sono stati crittografati con la chiave pubblica perché l'agente SSH espone solo la possibilità di firmare utilizzando la chiave privata, non decrittografata.
Puoi comunque usare il fatto che la chiave privata nell'agente SSH è l'unica che può generare una firma per qualcosa, e usa quella firma come simmetrica .
Ho fatto sshcrypt per farlo.
Leggi altre domande sui tag ssh file-encryption