IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Sécurité Java Discussion :

Utiliser l'algorithme PBE avec AES et SHA


Sujet :

Sécurité Java

  1. #1
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut Utiliser l'algorithme PBE avec AES et SHA
    Bonjour,

    J'aimerais crypter un message avec un clé qui m'est fourni par l'utilisateur, mais je ne suis pas sûr que l'algorithme PBE soit assez sécurisé.

    Pour le moment, je fais ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    private static String encode(String message, String key) {
            try {
                PBEKeySpec keySpec = new PBEKeySpec(key.toCharArray());
     
                SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("PBEWithMD5AndDES");
                SecretKey secretKey = keyFactory.generateSecret(keySpec);
     
                Cipher cipher = Cipher.getInstance("PBEWithMD5AndDES");
                cipher.init(Cipher.ENCRYPT_MODE, secretKey);
     
                return new String(cipher.doFinal(message.getBytes()));
            } catch (Exception e) {
                e.printStackTrace();
            }
     
            return "Error";
        }
    Mais ici, j'utilise DES et MD5 qui sont tout de même des vieux algorithmes. J'aimerais faire le même avec SHA-256 et AES, mais j'ai pas trouvé comment le faire parce que la KeyFactory ne marche pas avec PBEWithSHAAndAES.

    Est-ce que c'est possible de choisir l'algorithme de hashage et celui de cryptage ?

    Et deuxième question, est-ce possible d'utiliser une clé non-ASCII ?

    Merci d'avance

    Baptiste

  2. #2
    Expert éminent sénior
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 413
    Points : 19 609
    Points
    19 609
    Par défaut
    PBE signifie Password Based Encryption. Ce n'est pas un algorithme de chiffrement à proprement parlé mais une méthodologie de sécurisation de clef privées.

    Le principe est d'ajouter un salt à la clef, de la hasher (d'où le MD5) un certain nombre de fois (plusieurs milliers) puis d'utiliser cette clef pour chiffrer et non la clef de départ.

    En gros c'est pour ralentir les attaques par dictionnaires.

    J'ai pas mon bouquin de BouncyCastle sous la main, je regarderais au boulot demain la méthode vu que je connais que la théorie et que j'ai jamais mis en pratique PBE mais pourquoi ne pas utiliser un chiffrement standard directement ?

    Plus d'infos sur le site de la JCA avec un exemple de code.

    Pour ton histoire de clef non-ASCII tu as ceci à lire.

    Pour les algos PBE disponibles il n'y a que ceux-ci à ce que je peux voir :

    PBEWithMD5AndDES
    PBEWithMD5AndTripleDES
    PBEWithSHA1AndDESede
    PBEWithSHA1AndRC2_40
    PBKDF2WithHmacSHA1

    et seulement pour le provider "SunJCE".

    BouncyCastle en rajoute peut être d'autres.

  3. #3
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Qu'est-ce que tu dis par algorithme standard ?

    Je ne suis pas bloqué sur PBE, j'ai juste besoin d'un algorithme me permettant d'encrypter un message avec une clé de manière sécurisée. Est-ce qu'il y a mieux à utiliser ?

  4. #4
    Expert éminent sénior
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 413
    Points : 19 609
    Points
    19 609
    Par défaut
    Qu'est-ce que tu dis par algorithme standard ?
    Je voulais dire que PBE n'est pas réellement un algorithme de chiffrement à proprement parler, c'est un mécanisme utilisant des algorithmes existants, une sorte de stratégie pour protéger les clefs privées des attaques par dictionnaires.
    Le mécanisme en question est bien spécial et standardisé et apparemment, la mise à jour vers AES n'a pas été faites. Du moins pas avec Java. Donc pour le moment, l'algorithme le plus sécurisé doit être PBEWithSHA1AndDESede.

    Après pour le choix c'est à toi de voir :
    - blinder le chiffrement du message -> AES standard (pas de PBE donc).
    - mieux sécuriser la clef -> PBEWithSHA1AndDESede

    Généralement on utilise PBE quand on enregistre un mot de passe dans une base de données.

  5. #5
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Je peux utiliser simplement AES pour crypter un message en utilisant un clé que je possède ?

    J'avais essayé, mais il avait pas accepté ma clé à cause de la longueur de la clé qui n'était pas bonne.

  6. #6
    Expert éminent sénior
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 413
    Points : 19 609
    Points
    19 609
    Par défaut
    Ben oué.

    Il suffit de créer une clef (un tableau de byte donc) de la longueur qui va bien. 3DES c'est 168bits de mémoire, donc un tableau de 21 bytes, AES je sais plus faut chercher.

  7. #7
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Citation Envoyé par Marco46 Voir le message
    Ben oué.

    Il suffit de créer une clef (un tableau de byte donc) de la longueur qui va bien. 3DES c'est 168bits de mémoire, donc un tableau de 21 bytes, AES je sais plus faut chercher.
    Donc, il faut que je répète ma clé pour remplir le tableau de bytes ? Ou mieux que j'utilise un système autoclave (sauf que je sais pas le décrypter )

    Ou il faut faire autrement ?

  8. #8
    Expert éminent sénior
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 413
    Points : 19 609
    Points
    19 609
    Par défaut
    Au final :

    Si tu veux utiliser AES directement, il te faut une clef de longueur fixe : soit 128, soit 192, soit 256 bits, c'est à dire soit 16 bytes, 24 bytes, soit 32 bytes. Se sont les 3 valeurs possibles pour une clef AES. Il s'agit de longueurs fixes. Donc pas 254 bits mais 256 bits pile poil.
    A toi de voir comment générer une clef de longueur adéquate avec le mot de passe.

    Soit tu utilises PBE, qui lui prend en entrée une chaine et dérive une clef compatible avec les algorithmes qu'il sait gérer.

    Généralement quand on veut envoyer un message chiffré à quelqu'un, ce quelqu'un à un certificat avec une clef publique. Je connais pas le cadre de ton chiffrement mais l'architecture est à prendre en compte.

    Je sais pas si je réponds à tes questions.

  9. #9
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Oui, tu as tout à fait répondu à mes questions

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Utiliser algorithme C++ avec un site Web
    Par olivier21c dans le forum C++
    Réponses: 6
    Dernier message: 31/12/2014, 09h23
  2. Probleme d'utilisation de directX 9 avec visual studio.net
    Par cranedoeuf dans le forum DirectX
    Réponses: 1
    Dernier message: 24/05/2004, 04h33
  3. comment utiliser de l'OpenGL avec du Java ?
    Par DjiZ dans le forum OpenGL
    Réponses: 3
    Dernier message: 14/01/2004, 15h21
  4. Utilisation simple d'@@IDENTITY avec asp
    Par Ajrarn dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 23/10/2003, 10h37
  5. Comment utiliser les styles XP avec Dev-C++?
    Par abraxas dans le forum Dev-C++
    Réponses: 3
    Dernier message: 05/10/2003, 19h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo