Questa domanda ha già una risposta qui :

Commenti

  • Leggi le RFC se vuoi maggiori dettagli, esegui il client e il server ssh in modalità debug per scoprire cosa sta succedendo sotto il cofano.
  • Potrebbe essere utile se spieghi perché il duplicato proposto non ' non si applica. Sembra davvero che risponda alla tua domanda.
  • Se risponde alla mia domanda, lo fa in un modo che non mi aiuta. Pertanto, per ottenere una risposta comprensibile, devo chiedermi.
  • amflare: quellaltro post copre le cose che hai chiesto qui. Ho chiuso il duplicato che non hai ' t spiegato cosaltro stavi chiedendo, nonostante altri te lo chiedessero.
  • Qualcosa che posso effettivamente capire (e sì, Lho già detto prima). Mi stai dicendo che cè una risposta, sto dicendo che ' non la capisco. La tua risposta non dovrebbe essere " troppo negativa ".

Risposta

Fondamentalmente, cosa lo rende migliore di una password molto lunga?

Non vengono trasferiti al server (poiché anche la password molto lunga deve essere trasferita). Non è insicuro nel caso ssh (il canale è crittografato a meno che non si utilizzino cifrari non funzionanti), ma in teoria può essere intercettato da Man In the middle o da utenti maligni (super) su il server remoto.

E come agisce la chiave pubblica nelle cose?

Questo è il punto della crittografia asimmetrica. La chiave privata crea la firma e il pubblico può verificare che la firma sia stata effettuata dalla rispettiva chiave pubblica. Invia la chiave pubblica e la firma dei dati offerti dal server e questo è sufficiente perché il server ti permetta laccesso (se la chiave pubblica corrisponde a quella in authorized_keys).

Commenti

  • Quindi invia la chiave pubblica, se corrisponde, i dati che tornano indietro vengono crittografati con quella chiave pubblica, che la chiave privata può quindi decrittografare ? E viceversa con la crittografia privata e la decrittografia pubblica?
  • crittografata con quella chiave pubblica, che la chiave privata può quindi decrittografare – firmata con chiave privata, quale chiave pubblica può verifica.
  • Che cosa significa " signed "? Cosa impedisce a qualcosa di decriptare qualcosa anche se la firma non viene verificata?
  • @amflare: en.wikipedia.org/wiki/Digital_signature Se non altro, allora il codice del sedicente decryptor '.
  • Giusto, ho capito. Da qui la mia (apparentemente errata) supposizione che le chiavi abilitassero la crittografia e la decrittografia. Ma sembra che se fossi un malintenzionato, potrei intercettare i dati e ignorare lautenticità della firma e provare a decrittografarli comunque. Avevo limpressione che le chiavi servissero come mezzo per impedire anche a terze parti di farlo.

Risposta

Non sono sicuro di cosa stai confrontando SSH con la “password molto lunga”. SSH fornisce un mezzo sicuro per inviare il login utente e la password a un server remoto. Oppure puoi usare la chiave pubblica di un client. Le chiavi asimmetriche sono generalmente più difficili da violare perché non sono soggette alla creazione di password errate da parte degli utenti. Per questo motivo è preferibile lautenticazione basata su chiave pubblica. Puoi inserire in white list chiavi pubbliche specifiche per il tuo utente (e IP) in modo che non solo chiunque possa accedere con il tuo nome utente e da qualsiasi computer. Questa lista bianca è contenuta in /home/<user>/.ssh/authorized_keys.

Nozioni di base su SSH:

  1. Il server presenta la sua chiave pubblica RSA a il cliente. Il client verifica manualmente che si fidi di questa chiave prima di continuare.

  2. SSH utilizza Diffie Hellman per stabilire un valore segreto condiviso.

  3. Il segreto condiviso insieme a molti dati di scambio di chiavi viene hash insieme e firmato utilizzando la chiave privata del server.

  4. Il client può verificare questa firma utilizzando in precedenza il server chiave pubblica attendibile.

  5. Entrambe le parti ora dispongono di tutte le informazioni necessarie per generare le chiavi di sessione.

Dalla sezione 7.2 di RFC4253

7.2. Output from Key Exchange The key exchange produces two values: a shared secret K, and an exchange hash H. Encryption and authentication keys are derived from these. The exchange hash H from the first key exchange is additionally used as the session identifier, which is a unique identifier for this connection. It is used by authentication methods as a part of the data that is signed as a proof of possession of a private key. Once computed, the session identifier is not changed, even if keys are later re-exchanged. Each key exchange method specifies a hash function that is used in the key exchange. The same hash algorithm MUST be used in key derivation. Here, we"ll call it HASH. Encryption keys MUST be computed as HASH, of a known value and K, as follows: o Initial IV client to server: HASH(K || H || "A" || session_id) (Here K is encoded as mpint and "A" as byte and session_id as raw data. "A" means the single character A, ASCII 65). o Initial IV server to client: HASH(K || H || "B" || session_id) o Encryption key client to server: HASH(K || H || "C" || session_id) o Encryption key server to client: HASH(K || H || "D" || session_id) o Integrity key client to server: HASH(K || H || "E" || session_id) o Integrity key server to client: HASH(K || H || "F" || session_id) Key data MUST be taken from the beginning of the hash output. As many bytes as needed are taken from the beginning of the hash value. If the key length needed is longer than the output of the HASH, the key is extended by computing HASH of the concatenation of K and H and the entire key so far, and appending the resulting bytes (as many as HASH generates) to the key. This process is repeated until enough key material is available; the key is taken from the beginning of this value. In other words: K1 = HASH(K || H || X || session_id) (X is e.g., "A") K2 = HASH(K || H || K1) K3 = HASH(K || H || K1 || K2) ... key = K1 || K2 || K3 || ... This process will lose entropy if the amount of entropy in K is larger than the internal state size of HASH. 

Una volta stabilito il canale crittografato, il protocollo SSH inizia lautenticazione del client basata in base ai parametri che hai fornito. Tutto questo viene eseguito in modo sicuro attraverso il canale crittografato.

Risposta

Consentitemi di fornire unimmagine di alto livello. Chiaramente, comprendi la necessità di comunicazioni sicure, sia SSH che HTTPS. Comunicazioni sicure significa che il canale è crittografato.

In generale, tutti gli algoritmi di crittografia rientrano in una delle due categorie:

  • Crittografia simmetrica. Una chiave. La stessa chiave viene utilizzata per crittografare e decrittografare. Veloce. Per esempio. AES.
  • Crittografia asimmetrica. Due chiavi. Uno può essere utilizzato per crittografare, ma solo laltro può decrittografare. Molto più lento degli algoritmi simmetrici. Per esempio. RSA.

La crittografia simmetrica è veloce e quindi adatta per comunicazioni che coinvolgono molti dati tra due parti. Utilizza la stessa chiave per la crittografia e la decrittografia: questa chiave è analoga al tuo concetto di password molto lunga. Problema: come condividi la tua chiave / password in primo luogo? Risulta che non è possibile utilizzare un canale protetto costruito esclusivamente su un algoritmo di crittografia simmetrica senza trovare un modo per condividere prima la chiave / password.

È qui che entrano in gioco gli algoritmi asimmetrici, ma sono notevolmente più lenti di algoritmi simmetrici. Non pratico per trasmettere grandi quantità di dati, ma va bene se si trasmette o si scambia qualcosa di piccolo come una chiave / password di crittografia simmetrica. Una volta fatto ciò, ora puoi utilizzare la crittografia simmetrica per le comunicazioni.

Una delle due chiavi per la crittografia asimmetrica è designata come chiave pubblica e laltra come chiave privata. La chiave pubblica può essere distribuita a tutti, ma la chiave privata deve essere mantenuta segreta.

You (has pub) Server (has prv + pub) asym-encrypt(pub, sym-key/pwd) ----> asym-decrypt(prv, encrypted-data) => sym-key/pwd 

pub = chiave pubblica, prv = chiave privata

In ogni caso questa spiegazione è una semplificazione di ciò che SSH fa effettivamente. Altre due cose che vale la pena sottolineare:

  • Diffie Hellman è il tipico algoritmo asimmetrico per lo scambio di chiavi. Con Diffie Hellman non è necessario creare una chiave simmetrica . Entrambe le parti creano insieme la chiave simmetrica durante lo scambio della chiave, che è una bella caratteristica di sicurezza. Vedi " Diffie-Hellman Key Exchange " in inglese normale .

  • Nella mia spiegazione ho assunto che tu abbia trovato la chiave pubblica del server e che tu creda che sia quella corretta. Ma dovresti davvero fare attenzione a quali chiavi pubbliche fiducia. Per considerare attendibile una chiave pubblica, dovrebbe essere firmata digitalmente. Una chiave pubblica firmata è anche nota come certificato.

Si spera che questo chiarisca le domande sulla password lunga e chiavi pubbliche e ha abbastanza informazioni per approfondire in modo più significativo.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *