Tout ce que vous devez savoir sur le chiffrement en Java

Cet article vous fournira une connaissance détaillée et complète du chiffrement en Java et comment l'utiliser avec des exemples.

Le cryptage est la méthode qui consiste à utiliser des algorithmes mathématiques pour camoufler la signification d'une information afin que seules les parties autorisées puissent la déchiffrer. Dans cet article, nous aborderons le chiffrement et le déchiffrement dans dans l'ordre suivant:



Une introduction au chiffrement en Java

Le cryptage est mis en œuvre pour protéger nos données (comme les textes, les conversations et la voix), qu'elles soient sur un ordinateur ou qu'elles soient envoyées sur Internet. Les technologies de cryptage récentes sont des éléments essentiels de tout environnement informatique sécurisé.



Le rôle principal de la sécurité du chiffrement réside dans la capacité d'un algorithme à générer du texte chiffré (texte chiffré) qui est difficile à revenir à son texte brut d'origine. L'utilisation de clés crée également un autre niveau de sécurité pour les méthodes de protection de nos informations. Une clé est une information qui permet uniquement à ceux qui la détiennent d'encoder et de décoder un message.

Chiffrement et déchiffrement en Java



Algorithmes de chiffrement symétriques

Les algorithmes symétriques utilisent la même clé pour le cryptage et le décryptage. De tels algorithmes ne peuvent fonctionner qu'en mode bloc (qui fonctionne sur des blocs de données de taille fixe) ou en mode flux (qui fonctionne sur des bits ou des octets de données). Ces algorithmes sont également couramment utilisés pour des applications telles que le cryptage des données, le cryptage de fichiers et le cryptage des données transmises dans les réseaux de communication (comme TLS, e-mails, messages instantanés, etc.)

Algorithmes de chiffrement asymétriques (ou à clé publique)

Contrairement aux algorithmes symétriques, qui utilisent la même clé pour les opérations de cryptage et de décryptage, les algorithmes asymétriques utilisent deux clés identiques pour ces deux étapes. Ces algorithmes sont utilisés pour calculer les signatures numériques et les protocoles d'établissement de clés. Cependant, cela vient également avec un défi que deux clés doivent être utilisées, ce qui rend les choses plus complexes.



Afin de configurer en toute sécurité tout schéma de chiffrement de base, il est très important que tous ces paramètres (au minimum) soient correctement conçus:

  • Le choix du bon algorithme est important.
  • Choisir le bon mode de fonctionnement pour la tâche appropriée
  • Choisir le bon schéma de rembourrage selon les besoins
  • Choisir les bonnes clés et leurs tailles en conséquence
  • Corrigez l'initialisation avec CSPRING cryptographiquement sécurisé.

Il est très important d'être conscient de la configuration de tous ces paramètres en toute sécurité. Même une toute petite erreur de configuration peut mettre en péril un système de cryptage entier et l'ouvrir aux attaques de pirates informatiques et d'autres logiciels malveillants. Par conséquent, pour garder cette discussion simple, discutons uniquement des initialisations indépendantes de l'algorithme d'un Cipher. Au lieu de faire de tels cryptages par vous-même, il est toujours préférable de laisser les experts faire leur travail de configuration de configurations plus dépendantes de l'algorithme, comme les valeurs p et q de l'algorithme RSA, etc. douzaine, des classes sont utilisées.

L'introduction de hiérarchies de classes, de nombreux constructeurs / méthodes surchargés, etc., ajoutant de nombreuses complexités, ce qui le rend inutile. Je souhaite que Java ne complique pas les configurations de base et emploierait simplement une architecture plus simplifiée comme celle de Microsoft, où tous ces paramètres sont dans le périmètre d'une seule classe SymmetricAlgorithm et AsymmetricAlgorithm. Pour les trois premiers paramètres à spécifier (algorithme, mode de fonctionnement et schéma de remplissage), un objet Cipher utilise une chaîne de transformation.

  • Choisir le bon algorithme

Une chaîne de transformation comprend sans aucun doute le nom d'un algorithme cryptographique. Entre le cryptage symétrique et asymétrique, il existe 11 algorithmes (ne concernant pas les diverses combinaisons PBEWithAnd), qui peuvent être spécifiés conformément à la documentation standard des noms d'algorithmes. Sur eux, seuls deux (un pour chacun, chiffrement symétrique et asymétrique) sont en fait entièrement sécurisés.

Les algorithmes restants sont soit excessivement cassés (DES, RC2, etc.), soit des fissures ont commencé à apparaître (RC5), ce qui le rend cassable avec une puissance CPU suffisante - il peut déjà être cassé au moment où vous lisez ceci. Un développeur soucieux de la sécurité peut ne pas lire des tas de spécifications NIST, ni suivre les derniers événements et recherches dans la communauté de cryptographie. Ils pourraient ramasser les algorithmes cassés ou risqués, digérer ou générateur pseudo-aléatoire.

Toujours pour:

  1. Algorithme symétrique: le chiffrement par bloc AES / AESWrap est utilisé.

  2. Algorithme asymétrique: RSA est utilisé.

  • Mode de fonctionnement

Le mode de fonctionnement fait partie de la transformation et n'est pertinent que pour les chiffrements par blocs. Lorsque nous utilisons des chiffrements asymétriques, utilisez ECB comme mode de fonctionnement, qui est essentiellement un piratage en coulisse, ce qui signifie ignorer cette valeur. Les fournisseurs Java comme SunJCE, SunPKCS11 utilisent par défaut le mode ECB pour les algorithmes symétriques et asymétriques. C'est peut-être une bonne chose pour les algorithmes asymétriques, mais une mauvaise idée pour les chiffrements par blocs.

Les fournisseurs pourraient être invités à effectuer des valeurs par défaut sécurisées en fonction de l'algorithme utilisé. Utilisez le chiffrement symétrique pour vous éviter des attaques de relecture ou des attaques en clair. Utilisez également une transformation, qui spécifie complètement un algorithme (c'est-à-dire avec son mode de fonctionnement et son remplissage). Ne faites jamais, jamais quelque chose comme celui mentionné ci-dessous.

Comme ci-dessus, l'algorithme AES serait utilisé avec le mode de fonctionnement ECB, rendant les attaques de relecture très faciles. Pour un nouveau développement, s'il y a la moindre possibilité de réorganiser l'ancien travail, nous devrions utiliser le mode de cryptage authentifié avec données associées (AEAD) (par exemple GCM et CCM). Nous avons une balise d'authentification d'une longueur totale de 128 bits. Si nous utilisons un mode non authentifié, nous utilisons CBC ou CTR avec un MAC pour authentifier le texte chiffré.

  • Choisir le schéma de rembourrage approprié

Les modes de chiffrement par blocs communs nécessitent que la longueur du texte brut soit un multiple de la taille de bloc de l'algorithme de chiffrement sous-jacent, ce qui est rarement le cas. Ainsi, nous avons besoin d'un certain rembourrage.Le programme Java nous fournit trois schémas différents pour le cryptage symétrique, l'un étant No Padding, ce qui est inacceptable, et l'autre étant ISO10126Padding qui est retiré depuis 2007).

Par conséquent, la seule option appropriée est l'utilisation de PKCS5Padding. Le mélange de certains modes de fonctionnement (par exemple le mode CBC) et du schéma de remplissage PKCS5Padding peut conduire à des attaques d'oracle de remplissage. Ne pas mentionner du tout un schéma de remplissage est plus dangereux que de fournir un schéma qui n'est sensible qu'à certains types d'attaques. Le mode de fonctionnement AEAD est le plus recommandé pour être sûr d'être protégé contre ces attaques.

  • Algorithmes asymétriques

Dans les algorithmes asymétriques, nous avons la possibilité de choisir parmi deux schémas de remplissage. Il est important de s'assurer que seuls les schémas OAEPWithAndPadding sont utilisés. En cas de résumé, veuillez utiliser SHA1 ou SHA256 / 384/512. Pour la fonction de génération de masque (MGF), veuillez utiliser le remplissage MGF1 comme spécifié. PKCS1Padding avec RSA est vulnérable aux attaques Ciphertext [6] depuis 1998.

Nous parlons ici de la manière correcte d'utiliser une transformation dans une méthode «Cipher.getInstance».

  • Cryptage symétrique

  • Cryptage asymétrique

Un niveau de sécurité de tout schéma de chiffrement est directement proportionnel à la taille de sa clé. La longueur de la clé doit être suffisamment longue pour que quelle que soit l'attaque par force brute, elle devienne impossible en même temps, elle doit également être suffisamment courte pour garder à l'esprit la faisabilité du calcul. De plus, nous devons essayer de considérer ce qui résiste encore aux avancées informatiques pour les 30 prochaines années.

est de troisième cycle et maîtrise la même chose

Avec cela, nous arrivons à la fin de l'article sur le chiffrement en Java. J'espère que vous avez une idée du cryptage et du décryptage et pourquoi il est utilisé en Java.

Vérifiez par Edureka, une entreprise d'apprentissage en ligne de confiance avec un réseau de plus de 250 000 apprenants satisfaits répartis dans le monde entier. Le cours de formation et de certification Java J2EE et SOA d'Edureka est conçu pour les étudiants et les professionnels qui souhaitent devenir développeur Java. Le cours est conçu pour vous donner une longueur d'avance dans la programmation Java et vous former aux concepts Java de base et avancés ainsi qu'à divers frameworks Java tels que Hibernate & Spring.

Vous avez une question pour nous? Veuillez le mentionner dans la section commentaires de ce blog «Chiffrement en Java» et nous vous répondrons dans les plus brefs délais.