Ricerca…


introduzione

Le pratiche di sicurezza in Java possono essere separate in due categorie ampie e vagamente definite; Sicurezza della piattaforma Java e programmazione Java sicura.

Le pratiche di sicurezza della piattaforma Java si occupano della gestione della sicurezza e dell'integrità della JVM. Include argomenti come la gestione dei provider JCE e le politiche di sicurezza.

Le pratiche di programmazione Java sicure riguardano i modi migliori per scrivere programmi Java sicuri. Include argomenti come l'uso di numeri casuali e crittografia e la prevenzione delle vulnerabilità.

Osservazioni

Mentre gli esempi dovrebbero essere chiaramente fatti, alcuni argomenti che devono essere trattati sono:

  1. Il concetto / struttura del fornitore JCE
  2. Elemento dell'elenco

Il JCE

Java Cryptography Extension (JCE) è un framework integrato in JVM per consentire agli sviluppatori di utilizzare in modo semplice e sicuro la crittografia nei loro programmi. Lo fa fornendo un'interfaccia semplice e portatile ai programmatori, mentre utilizza un sistema di JCE Provider per implementare in modo sicuro le operazioni crittografiche sottostanti.

Chiavi e gestione delle chiavi

Mentre JCE protegge le operazioni di crittografia e la generazione delle chiavi, è compito dello sviluppatore gestire effettivamente le proprie chiavi. Maggiori informazioni devono essere fornite qui.

Una best practice comunemente accettata per la gestione delle chiavi in ​​fase di esecuzione è quella di archiviarle solo come array di byte e mai come stringhe. Questo perché le stringhe Java sono immutabili e non possono essere "cancellate" o "azzerate" manualmente in memoria; mentre un riferimento a una stringa può essere rimosso, la stringa esatta rimarrà in memoria fino a quando il suo segmento di memoria non viene raccolto e riutilizzato. Un utente malintenzionato avrebbe una grande finestra in cui è possibile scaricare la memoria del programma e trovare facilmente la chiave. Al contrario, gli array di byte sono mutabili e possono avere il loro contenuto sovrascritto sul posto; è una buona idea azzerare le tue chiavi non appena non ne hai più bisogno.

Vulnerabilità comuni di Java

Ha bisogno di contenuti

Preoccupazioni di rete

Ha bisogno di contenuti

Casualità e tu

Ha bisogno di contenuti

Per la maggior parte delle applicazioni, la classe java.utils.Random è una fonte perfetta di dati "casuali". Se devi scegliere un elemento casuale da un array, o generare una stringa casuale, o creare un identificatore "univoco" temporaneo, dovresti probabilmente usare Random .

Tuttavia, molti sistemi crittografici si affidano alla casualità per la loro sicurezza e la casualità fornita da Random non è semplicemente di qualità sufficientemente alta. Per qualsiasi operazione di crittografia che richiede un input casuale, è consigliabile utilizzare SecureRandom .

Hashing e convalida

Più informazioni necessarie

Una funzione hash crittografica è un membro di una classe di funzioni con tre proprietà vitali; coerenza, unicità e irreversibilità.

Coerenza: dati gli stessi dati, una funzione di hash restituirà sempre lo stesso valore. Cioè, se X = Y, f (x) sarà sempre uguale a f (y) per la funzione hash f.

Unicità: non ci saranno mai due input per una funzione hash nello stesso output. Cioè, se X! = Y, f (x)! = F (y), per qualsiasi valore di X e Y.

Irreversibilità: è difficile, se non impossibile, "invertire" una funzione hash. Cioè, dato solo f (X), non dovrebbe esserci modo di trovare l'X originale in corto di mettere ogni possibile valore di X attraverso la funzione f (forza bruta). Non dovrebbe esserci alcuna funzione f1 tale che f1 (f (X)) = X.

Molte funzioni non hanno almeno uno di questi attributi. Ad esempio, MD5 e SHA1 sono noti per avere collisioni, cioè due ingressi che hanno lo stesso output, quindi mancano di unicità. Alcune funzioni che si ritiene attualmente siano sicure sono SHA-256 e SHA-512.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow