Ci sono molti modi per farlo.
Cifrò il JSON a livello di file intero invece di crittografare il contenuto al suo interno. L'alternativa è complicata e non offre vantaggi significativi in termini di sicurezza. Raccomando di utilizzare un codice AEAD (la mia raccomandazione attuale è AES-256 con GCM: alias AES / GCM / NoPadding con chiavi a 256 bit). Per utilizzare GCM devi essere su Java 8 o successivo. Per utilizzare AES-256 con Oracle JRE è necessario l'estensione Java Cryptography Extension (JCE ) File di criteri di giurisdizione di forza illimitata installati come documentati.
Dovresti assicurarti di impostare il tag di autenticazione per includere informazioni sulla posizione e l'uso (il vero nome file è un buon inizio) per rendere difficile rinominare o sostituire altre versioni (una forma di attacco replay a riposo).
Tuttavia, la crittografia del contenuto JSON non è una soluzione completa. Muove solo un po 'la palla. Se l'utente malintenzionato ha ancora accesso in testo normale alla chiave privata, non sarà efficace.
Per proteggere il testo in chiaro della chiave privata è possibile utilizzare un KMS (Key Management Service) su un sistema separato. Ciò mantiene la chiave privata di accesso alla memoria sulla macchina con il file JSON crittografato. Invia il contenuto del file crittografato al KMS per essere decrittografato al caricamento o viceversa nel negozio.
Con quelli esistenti è possibile proteggere efficacemente il file dagli attacchi offline (ad es. analisi delle immagini del disco, analisi delle immagini della macchina, furto di backup, furto di mezzi di comunicazione). Senza ulteriori difese, il contenuto del file è ancora soggetto agli attacchi online della memoria della macchina stessa.