Qual è il modo migliore per crittografare un oggetto JSON in Java?

0

Ho un array JSON:

JsonArray people;

Che contiene oggetti JSON che rappresentano persone.

Attualmente li sto salvando come testo normale in un file json .

try {
    OutputStream out = new FileOutputStream('storage.json');
    JsonWriter writer = Json.createWriter(out);
    writer.writeArray(people);
    writer.close();
} 

Tuttavia, voglio che questi file vengano crittografati in modo che siano inutili senza la chiave per decrittografarli.

Qual è il modo migliore per farlo? Devo crittografare l'oggetto dell'array JSON o posso semplicemente crittografare l'intero array prima di scriverlo? Quali sono le funzioni di crittografia Java più raccomandate che dovrei usare per fare questo?

    
posta Curious1 08.12.2015 - 07:41
fonte

2 risposte

3

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.

    
risposta data 29.12.2015 - 03:58
fonte
0

È meglio criptare l'intero file, quindi scrivere nel file normalmente. Lo stesso per la lettura. Ecco un esempio su StackOverflow.

link

    
risposta data 29.12.2015 - 21:13
fonte

Leggi altre domande sui tag