Sto progettando la procedura di aggiornamento per le telecamere IP. Mi chiedo se il mio attuale design sia abbastanza sicuro.
Ho un file binario che voglio ottenere su un dispositivo. Faccio un hash di questo file binario e criptico l'hash con la mia chiave privata (una firma). Ho messo questo file binario e l'hash crittografato in un file zip. Creo un hash MD5 del file zip. Ho messo la chiave pubblica, l'hash MD5 e il file zip pubblicamente disponibili.
Ho diversi dispositivi, alcuni dei quali sotto controllo client ostile, alcuni dei quali sotto controllo client amichevole.
I client amichevoli hanno un algoritmo di download come questo:
Alla ricezione di un comando, contenente gli URL, gli URL forniti vengono utilizzati per scaricare la chiave pubblica, l'hash MD5 e il file zip. Il file zip scaricato viene controllato per vedere se corrisponde all'hash MD5. Viene quindi estratto. Quindi la chiave crittografata viene decifrata con la chiave pubblica fornita. Un hash è costituito dal file binario e confrontato con la chiave decrittografata.
Se il controllo MD5 e il controllo hash del file binario hanno esito positivo, il binario viene eseguito con accesso root.
I client ostili hanno accesso all'intero dispositivo, quindi ogni segreto memorizzato sul dispositivo è noto a loro. Tuttavia, non hanno accesso al sistema in cui ho archiviato la chiave privata.
Da quello che posso vedere, il comando e la tempistica della stessa è potenzialmente ostile, gli URL sono potenzialmente ostili, quindi lo zip è potenzialmente ostile, come lo sono il binario e l'hash e MD5. L'hash MD5 è facilmente bypassato, ma serve solo come controllo dell'integrità dei file. L'hash crittografato del binario, tuttavia, è il mio principale punto di difesa.
Quando lo zip e il binario e l'hash crittografato e la chiave pubblica sono tutti sotto il controllo dell'attaccante, il mio sistema è ancora sicuro (cioè, un utente malintenzionato può far eseguire a un client amichevole un file binario non derivato da me)? Rompere la sicurezza è più facile da quando vengono forniti "testo cifrato" e "testo in chiaro" e la chiave pubblica? Se è più facile, è più facile da qualsiasi grandezza rilevante?