Sono un autodidatta sull'uso della crittografia. Sono uno sviluppatore php e nel tempo libero sto costruendo un'app online che fornisce funzionalità di base cms per aiutarmi a capire meglio il design della crittografia. Sto usando la crittografia per proteggere i dati se rubati e averli accessibili al pubblico come quello che è successo ad adobe.
Le mie restrizioni per questa app sono:
-
Gli utenti finali useranno questa app e non ci si può fidare che ricordino la propria password in ogni momento, quindi la loro password non può essere utilizzata nel processo di crittografia poiché ci sarà un'alta probabilità che essi debbano reimpostare la password a qualche fase.
-
Non può permettersi il software di gestione delle chiavi del fornitore o hsm.
-
Non è possibile caricare utenti in una chiave durante l'accesso a cms per crittografare o decrittografare i dati durante la sessione. In effetti, gli utenti non avranno accesso alle chiavi utilizzate in quanto non possono essere considerate attendibili per mantenere le chiavi al sicuro. Inoltre gli utenti esterni come gli appaltatori avranno accesso a cms. Quindi tutte le chiavi gestite dall'app sotto le copertine.
I dati saranno archiviati in un db criptato. Il codice crittograferà i dati poiché non sto utilizzando la crittografia nativa di mysql.
I dati verranno crittografati utilizzando una chiave simmetrica.
La chiave simmetrica verrà archiviata su un altro server disattivato e accessibile solo tramite cms ip. Il cms quando ha bisogno di una particolare chiave simmetrica chiamerà il server che memorizza le chiavi simmetriche e passa un valore di hash che verrà usato per cercare la chiave simmetrica corretta. Quando si trova la chiave, invierà la chiave al cms e il cms memorizzerà la chiave in memcached.
Ora pensavo che avrei dovuto proteggere le chiavi simmetriche, quindi quello che pensavo dovessi fare è crittografare le chiavi simmetriche con la chiave pubblica asimmetrica e memorizzare la chiave simmetrica crittografata in un db sul server non cms, quindi quando il cms diventa la chiave utilizza la chiave privata memorizzata sul server cms per decrittografarla.
Yesh!
È come pollo / uovo!
Mi stavo chiedendo se qualcuno può darmi qualche indicazione su come farlo correttamente. Il mio obiettivo per questo progetto è proteggere i dati se il db viene rubato.
Penso che sia sbagliato memorizzare la chiave privata sul server cms perché se anche il server non cms che memorizza le chiavi simmetriche utilizzate per crittografare i dati viene violato anche tutte le chiavi sono disponibili.
L'app controllerà anche gli input per i tentativi di iniezione, Xss, usando la whitelist degli ip per accedere ai cms, crittografare i cookie di sessione, pulire i dati di input e altri fondamentali di sicurezza di base.