git usa le chiavi utente ssh o le chiavi di deploy del repository per la crittografia?

1

In questa domanda Ho chiesto, perché la chiave SSH-Host mostrata durante la connessione a un repository gitlab non corrisponde a quella mostrata nell'istanza pagina di configurazione . Tuttavia, la risposta accettata dice che un attacco man-in-the-middle sembra molto improbabile (e sono d'accordo su questo).

Tuttavia, per interesse, supponiamo che ci sia stato un simile attacco. Questo sembra essere prevenibile se git utilizza le chiavi di distribuzione del repository o le chiavi ssh dell'utente per crittografare la connessione. Cioè, perché posso accedere a gitlab tramite una connessione https (che quindi so di essere sicuro) e posizionare le chiavi lì. Pertanto, un utente malintenzionato non sarebbe in grado di decrittografare le trasmissioni di dati.

La mia domanda è quindi: git usa le chiavi utente ssh o le chiavi di distribuzione del repository per la crittografia?

    
posta HerpDerpington 12.07.2018 - 16:50
fonte

2 risposte

4

tl; dr : No, non funzionerà. Il fatto che il server conosca la tua chiave pubblica non autentica il server, anche se cerchi di mantenere segreta la chiave pubblica.

This seems to be preventable if git uses the repository's deploy keys or the user's ssh-keys for encrypting the connection

Diversi problemi qui:

  1. git non ha un concetto come "chiave di distribuzione del repository", fa parte di GitLab. Sembra essere semplicemente una chiave pubblica configurata per consentire l'accesso in sola lettura al repository, destinato all'uso nella distribuzione del codice (potresti già capirlo, ma la tua domanda non mi è completamente chiara).
  2. Usando la tua chiave ssh per connettersi a qualcosa autentica tu provando che hai la chiave privata. Non autentica il server. Questo è il motivo per cui le chiavi host sono necessarie.
  3. Le chiavi ssh non vengono utilizzate per crittografare la connessione, solo per autenticare una connessione sicura già stabilita (stabilire la connessione protetta è una parte separata del protocollo ssh)

Le chiavi pubbliche sono chiamate pubbliche per un motivo, dovresti mai presumere che sia privato anche se lo hai appena generato per aggiungerlo a GitLab su HTTPS e non usalo da qualsiasi altra parte.

L'autenticazione

ssh comporta l'invio della chiave pubblica al server per vedere se è consentita (chiamata "chiave blob pubblica" in RFC 4252 sezione 7 ). Questo viene fatto dopo aver stabilito una connessione sicura in modo che non possa essere intercettato, ma non importa se la sessione è stata stabilita con un server malevolo. Un impostore potrebbe semplicemente rispondere con "Perché sì, io accetterò quella chiave per autenticare quell'utente!" e fartelo pensare che è il server legittimo. Il solo modo corretto per autenticare un server con ssh è utilizzando la sua chiave host.

    
risposta data 12.07.2018 - 17:56
fonte
1

No. Git non crittografa direttamente alcun dato e dipende dal livello di trasporto per la crittografia dei dati in transito. (SSH o HTTPS nella maggior parte dei casi).

    
risposta data 12.07.2018 - 17:37
fonte

Leggi altre domande sui tag