Java Language
Sécurité et cryptographie
Recherche…
Introduction
Les pratiques de sécurité en Java peuvent être séparées en deux grandes catégories définies de manière vague. Sécurité de la plate-forme Java et programmation Java sécurisée.
Les pratiques de sécurité de la plate-forme Java traitent de la gestion de la sécurité et de l’intégrité de la JVM. Il comprend des sujets tels que la gestion des fournisseurs JCE et les stratégies de sécurité.
Les pratiques de programmation Java sécurisées concernent les meilleurs moyens d'écrire des programmes Java sécurisés. Il inclut des sujets tels que l'utilisation de nombres aléatoires et la cryptographie, ainsi que la prévention des vulnérabilités.
Remarques
Bien que des exemples doivent être clairement établis, certains sujets doivent être couverts:
- Le concept / la structure du fournisseur JCE
- Élément de la liste
Le JCE
JCE (Java Cryptography Extension) est une infrastructure intégrée à la JVM qui permet aux développeurs d’utiliser facilement et en toute sécurité la cryptographie dans leurs programmes. Pour ce faire, il fournit une interface simple et portable aux programmeurs, tout en utilisant un système de fournisseurs JCE pour implémenter de manière sécurisée les opérations cryptographiques sous-jacentes.
Gestion des clés et des clés
Alors que JCE sécurise les opérations cryptographiques et la génération de clés, il appartient au développeur de gérer ses clés. Plus d'informations doivent être fournies ici.
L'une des meilleures pratiques couramment acceptées pour gérer les clés à l'exécution consiste à les stocker uniquement sous byte
tableaux d' byte
et jamais en tant que chaînes. Ceci est dû au fait que les chaînes Java sont immuables et ne peuvent pas être "effacées" ou "mises à zéro" manuellement en mémoire. Bien qu'une référence à une chaîne puisse être supprimée, la chaîne exacte restera en mémoire jusqu'à ce que son segment de mémoire soit récupéré et réutilisé. Un attaquant aurait une grande fenêtre dans laquelle ils pourraient vider la mémoire du programme et trouver facilement la clé. Au contraire, les tableaux d' byte
sont mutables et leur contenu peut être écrasé en place; C'est une bonne idée de "mettre à zéro" vos clés dès que vous n'en avez plus besoin.
Vulnérabilités Java courantes
Besoin de contenu
Problèmes de réseautage
Besoin de contenu
Aléatoire et vous
Besoin de contenu
Pour la plupart des applications, la classe java.utils.Random
est une source parfaitement fine de données "aléatoires". Si vous devez choisir un élément aléatoire dans un tableau ou générer une chaîne aléatoire ou créer un identifiant "unique" temporaire, vous devez probablement utiliser Random
.
Cependant, de nombreux systèmes cryptographiques reposent sur le caractère aléatoire pour leur sécurité, et le caractère aléatoire fourni par Random
n'est tout simplement pas de qualité suffisante. Pour toute opération cryptographique nécessitant une entrée aléatoire, utilisez plutôt SecureRandom
.
Hachage et validation
Plus d'informations nécessaires
Une fonction de hachage cryptographique fait partie d'une classe de fonctions possédant trois propriétés essentielles. cohérence, unicité et irréversibilité.
Consistance: Étant donné les mêmes données, une fonction de hachage renverra toujours la même valeur. C'est-à-dire que si X = Y, f (x) sera toujours égal à f (y) pour la fonction de hachage f.
Unicité: Deux entrées dans une fonction de hachage ne produiront jamais la même sortie. C'est-à-dire que si X! = Y, f (x)! = F (y), pour toute valeur de X et Y.
Irréversibilité: Il est difficile, voire impossible, d’inverser une fonction de hachage. C'est-à-dire que, étant donné seulement f (X), il ne devrait y avoir aucun moyen de trouver le X originel sans mettre toutes les valeurs possibles de X à travers la fonction f (force brute). Il ne devrait y avoir aucune fonction f1 telle que f1 (f (X)) = X.
De nombreuses fonctions ne possèdent pas au moins un de ces attributs. Par exemple, MD5 et SHA1 sont connus pour avoir des collisions, c'est-à-dire deux entrées ayant la même sortie, elles manquent donc d'unicité. Certaines fonctions actuellement considérées comme sécurisées sont SHA-256 et SHA-512.