Qual è il protocollo di trasferimento file sicuro più semplice da implementare (SFTP, FTPS, HTTPS, FTP su SSH, FTP su IPsec)

5

Devo selezionare un protocollo di trasferimento file sicuro, da implementare in un sistema di pre-avvio. Ho accesso alle librerie con le funzionalità di base della rete (IP, TCP, UDP, ecc ...). Potrei anche avere accesso alla libreria OpenSSL.

Ho bisogno di sapere quale sarebbe la più semplice da implementare, nel caso avessi la libreria OpenSSL disponibile, e anche se non lo faccio. Non ho un client SSH, quindi dovrei implementarlo in caso di utilizzo di SFTP.

Infine, mi piacerebbe davvero che qualcuno potesse darmi una dichiarazione giustificata su quale sia più facile da implementare (e con maggiore facilità intendo meno tempo) tra SSH o SSL / TLS.

    
posta Daniel J. García 22.09.2011 - 18:00
fonte

2 risposte

6

Se hai OpenSSL quindi usa SSL / TLS: il protocollo che è più semplice da implementare è quello che è già implementato. SSL offre solo un tunnel raw, quindi dovresti includere un qualche tipo di protocollo di gestione che organizza l'effettivo "trasferimento di file", ad es. HTTP. HTTP all'interno di SSL è noto come HTTPS: è standard, quindi il duro lavoro di specificare il protocollo è già stato fatto.

Senza OpenSSL, raccomanderei comunque SSL / TLS personalmente per il seguente motivo: l'ho fatto (client e server SSL per sistemi embedded, ognuno dei quali si inserisce in meno di 20 kB di codice). Quindi so che è fattibile. Inoltre, ci sono altre librerie SSL / TLS destinate ai piccoli sistemi, ad es. CyaSSL o axTLS .

Reimplementare il protocollo SSH non dovrebbe essere molto più difficile del reimplementing di SSL, ma la specifica SSH è più grande (inizia da RFC 4251 , che descrive l'architettura, e il protocollo effettivo è distribuito su diverse RFC successive, d'altra parte, SSL / TLS si inserisce nel singolo RFC 5246 ). Questo è ovviamente un modo non molto oggettivo di scegliere un protocollo, ma non è del tutto sconosciuto per entrambi.

Per SSL / TLS, suggerisco quanto segue:

  • Usa TLS 1.2 e non preoccuparti delle versioni precedenti (controlli il client e il server, quindi puoi applicare una versione specifica). TLS 1.2 richiede l'implementazione di una sola funzione di hash, mentre le versioni precedenti richiedevano sia MD5 che SHA-1.

  • Utilizza una suite di crittografia singola (ad esempio TLS_RSA_WITH_AES_128_CBC_SHA256 ). Questo semplifica un po 'le cose e ti permette di codificare cose come la dimensione del blocco o la lunghezza del MAC.

  • Usa lo scambio di chiavi RSA e sistema il tuo sistema come "client": questo consente di utilizzare RSA solo in modalità di crittografia, che è notevolmente più semplice da implementare rispetto alla decrittografia. Inoltre, il client non ha bisogno di archiviare una chiave privata asimmetrica, il che è positivo poiché la memorizzazione sicura delle chiavi è difficile.

  • Non provare a decodificare i certificati. Nel normale SSL / TLS, il server invia la sua chiave pubblica al client come parte di una catena di certificati X.509; il client dovrebbe convalidare la catena per quanto riguarda una chiave pubblica hard-coded. Basta tagliare l'intermediario e inserire la chiave pubblica del server nel client (la convalida della catena di certificati X.509 può essere eseguita - anche in 6 kB di codice - ma è estremamente difficile).

In ogni caso, senza una biblioteca crittografica a portata di mano, dovrai reimplementare alcuni algoritmi di base, e questo è noto per non essere facile (specialmente se vuoi evitare attacchi side-channel , che sono sempre una preoccupazione per i sistemi embedded). Avrai anche bisogno di accedere a una fonte sicura di crittografia casuale: su un sistema di pre-avvio, ciò potrebbe risultare difficile. Ma è estremamente importante per sicurezza.

    
risposta data 22.09.2011 - 22:29
fonte
1

Voterò per SCP. Molto semplice, sicuro e molte opzioni da personalizzare. sftp è nella stessa barca, oltre ad essere leggermente più complicato.

    
risposta data 22.09.2011 - 18:25
fonte

Leggi altre domande sui tag