Funzionalità di accesso sicuro con bassa potenza della CPU

1

Sto sviluppando un programma che contiene una funzione di login in C ++. Il problema è che non so come svilupparlo nella mia situazione. Voglio eseguire il software su un Raspberry Pi, ha solo una CPU con clock su 1 GHZ e 512 MB di memoria. La memoria non causerà un problema, ma la CPU lo fa.

Il problema è che non posso sfruttare molta potenza della CPU sulla crittografia, ovviamente crittografo tutte le password, ma non riesco a crittografare la connessione. Questo perché penso che l'HTTPS sia pesante. Nessun HTTPS non è un problema reale perché i dati non sono classificati, ma voglio assicurarmi che nessun altro possa acquisire le azioni di connessione e preforme.

Questo è ciò che ho progettato fino ad ora:

Le funzioni di login convalidano l'utente, se viene fornito un nome utente e una password corretti, l'utente ottiene un numero cifrato univoco. L'utente deve inviare questo numero ogni volta per accedere al proprio account.

Il problema:

Il problema è che ognuno può catturare il numero univoco dell'utente, e potrebbe usare questo numero per accedere al proprio account. Come posso sviluppare una funzione di login senza questo problema? Posso utilizzare l'IP dell'utente nel numero crittografato, ma questo non è sicuro quando l'hacker ha accesso alla rete dei target.

Oltre a ciò, l'utente invia le sue credenziali sulla rete. Immagino di poter preformare anche parte del client di crittografia, ma questo non è molto utile per la mia CPU perché ho bisogno di fare più cicli di crittografia sul mio server.

    
posta Laurence 21.12.2012 - 14:05
fonte

5 risposte

7

HTTPS non è troppo pesante per un RPi - sono sorprendentemente potenti e SSL è molto leggero in termini di utilizzo della CPU e della memoria. L'ho visto implementato su microcontrollori Atmega da 40 MHz.

Se non mi credi, considera il fatto che puoi usare SSH in un RPi senza problemi.

    
risposta data 21.12.2012 - 14:08
fonte
3

SSL sarà piuttosto pesante su un processore PI ARM rispetto alle connessioni HTTP vaniglia. Quando i normali processori del server erano a 1 GHz, ho verificato le prestazioni di SSL con vari acceleratori hardware SSL al momento. In genere, SSL scendeva al 15% delle prestazioni di HTTP vanilla per apache, IIS ecc.

comunque. È l'handshake SSL, cioè alla connessione, che utilizza la CPU. Quindi, se puoi minimizzare questo, l'utilizzo complessivo della CPU diventerà meno problematico.

Ci sono due strategie:

  1. mappa il modello di prestazioni per la tua app. Se i client creano continuamente nuove connessioni SSL, potrebbero verificarsi problemi di prestazioni. Forse consideri di mantenere sessioni più lunghe tra le richieste e questo ridurrà il carico.
  2. Utilizza SSL reciprocamente assicurato, io..e con certificati lato client. Ciò riduce il carico della CPU sulla connessione per avvicinarsi a quello del testo in chiaro di Vanilla HTTP.

SSH sembra funzionare abbastanza bene con il mio Pi (ma non applicabile in questo scenario)

    
risposta data 21.12.2012 - 14:17
fonte
3

Conosco un processore PowerPC a 50 MHz che gestisce un server SSL e gestisce abitualmente 70 client simultanei; Ho scritto il codice me stesso. SSL è non pesante. Inoltre, tossisco e strillo quando sento parlare di un processore da 1 GHz "lento": un Raspberry Pi sarebbe stato una stazione di gioco totalmente rad nel 2001 e Internet esisteva già in quel momento ...

Se hai del feticcio sui cicli della CPU, allora la buona idea è ancora non per progettare il tuo protocollo. Invece, utilizza un SSL configurato correttamente (ad es. Con curve ellittiche per la crittografia asimmetrica).

    
risposta data 27.12.2012 - 20:08
fonte
1

In pratica stai implementando un sistema di sessione. Ulteriori informazioni su come proteggerlo su link e link . Fondamentalmente vuoi impedire gli attacchi di hijacking e replay di sessione. Una delle difese è quella di associare la sessione a un indirizzo IP del client e richiedere una nuova autorizzazione se l'indirizzo IP cambia. Cerca di più sul Web, la parola chiave è "session hijacking".

Per la massima sicurezza, è necessario utilizzare HTTPS. È possibile ridurre al minimo la quantità di risorse utilizzate da HTTPS (SSL / TLS) durante l'handshake utilizzando i certificati RSA a 1024 bit anziché gli standard 2048-bit. Per la crittografia simmetrica, usa RC4 invece di AES, perché RC4 usa meno CPU, il che probabilmente è il motivo per cui Google lo sta usando, anche se dovrebbe cambiare presto con il supporto AES-NI.

    
risposta data 21.12.2012 - 17:07
fonte
0

In alternativa puoi configurare un proxy che permetta ai client in entrata di connettersi al proxy tramite HTTPS, e quindi il proxy può eseguire la crittografia / decrittografia e ottenere i dati effettivi dal Pi - questo permette al Pi di concentrarsi sul aspetti non correlati alla sicurezza di esso e scaricare il HTTPS se questo è davvero il problema - si noti che questo richiede una rete "sicura" tra il Pi e il proxy se ne avete bisogno per essere veramente sicuro.

    
risposta data 27.07.2014 - 19:18
fonte

Leggi altre domande sui tag