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 :

Comment utiliser la fonction de hachage du bouncycastle et obtenir le DigestInfo?


Sujet :

Sécurité Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2016
    Messages : 20
    Par défaut Comment utiliser la fonction de hachage du bouncycastle et obtenir le DigestInfo?
    Bonjour à tous,

    dans le cadre de mon projet de fin d'étude, je teste la bibliothèque Bouncycastle sur les chiffrements symétriques et asymétrique, afin de savoir si elle est conforme au document RFC PKCS1.
    Je dois commencer avec le padding EMSA et pour ce faire, tester tous les points de 1 à 5.
    Le premier point étant que le message est haché par une fonction de hachage et doit renvoyer un message d'erreur au cas où le message M serait trop long, si j'ai bien compris.
    Je dois tester avec une fonction de hachage et j'ai choisi SHA-1.
    Mon problème est que je n'arrive pas à hacher un message avec la fonction SHA1Digest du Bouncycastle.
    Comment tester le point 1 et 2?
    Est ce que j' utilise la bonne méthode?

    9.2 EMSA-PKCS1-v1_5

    This encoding method is deterministic and only has an encoding
    operation.

    EMSA-PKCS1-v1_5-ENCODE (M, emLen)

    Option:
    Hash hash function (hLen denotes the length in octets of the hash
    function output)

    Input:
    M message to be encoded
    emLen intended length in octets of the encoded message, at least
    tLen + 11, where tLen is the octet length of the DER
    encoding T of a certain value computed during the encoding
    operation
    Output:
    EM encoded message, an octet string of length emLen

    Errors:
    "message too long"; "intended encoded message length too short"

    Steps:

    1. Apply the hash function to the message M to produce a hash value
    H:

    H = Hash(M).

    If the hash function outputs "message too long," output "message
    too long" and stop.

    2. Encode the algorithm ID for the hash function and the hash value
    into an ASN.1 value of type DigestInfo (see Appendix A.2.4) with
    the Distinguished Encoding Rules (DER), where the type DigestInfo
    has the syntax

    DigestInfo ::= SEQUENCE {
    digestAlgorithm AlgorithmIdentifier,
    digest OCTET STRING
    }

    The first field identifies the hash function and the second
    contains the hash value. Let T be the DER encoding of the
    DigestInfo value (see the notes below) and let tLen be the length
    in octets of T.

    3. If emLen < tLen + 11, output "intended encoded message length too
    short" and stop.

    4. Generate an octet string PS consisting of emLen - tLen - 3 octets
    with hexadecimal value 0xff. The length of PS will be at least 8
    octets.

    5. Concatenate PS, the DER encoding T, and other padding to form the
    encoded message EM as

    EM = 0x00 || 0x01 || PS || 0x00 || T.

    6. Output EM.
    https://tools.ietf.org/html/rfc3447#section-9.2

    J'ai parcouru le forum et je n'ai pas trouvé de solution.
    Toute aide est la bienvenue.
    Merci

  2. #2
    Expert éminent

    Avatar de Anomaly
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 379
    Billets dans le blog
    1
    Par défaut
    Bonjour et bienvenue.

    On ne sait pas de quelle technologie tu parles et tu as posté dans le mauvais forum. Si tu veux avoir une chance d'avoir une réponse, on a besoin de savoir avec quel outil et/ou langage tu travailles afin que je puisse déplacer ta discussion dans un forum plus approprié.

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2016
    Messages : 20
    Par défaut
    J' effectue les test en java avec junit et j'utilise IntelliJ IDEA.
    Merci

  4. #4
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2016
    Messages : 20
    Par défaut
    Bouncycastle est une bibliothèque cryptographique.

    https://github.com/bcgit/bc-java/tre...ycastle/crypto

  5. #5
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Normalement, Java simplifie le travail en donnant accès à des algorithmes de cryptage par une interface générale qui masque ainsi les implémentations concrètes (et peut fonctionner avec divers fournisseurs, dont BouncyCastle).
    On fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    String text = "Un texte à chiffrer";
    try {
       MessageDigest md = MessageDigest.getInstance("SHA-1"); //   on passe le nom de l'algorithme en paramètre
     
       md.update(text.getBytes());  // on passe le flux d'octets correspondant au message à chiffrer
       byte[] hash = md.digest(); // on récupère le hash
     
       System.out.println(Arrays.toString(hash));
     
    } catch (NoSuchAlgorithmException e) {
    	e.printStackTrace();
    }
    Mais tu n'auras aucun contrôle sur la sélection de la classe réelle d'implémentation de l'algorithme. On indique à Java par Security.addProvider(new BouncyCastleProvider()); la présence de BouncyCastle.

    Tu dois cependant pouvoir faire ça en direct avec l'implémentation SHA1Digest, avec quelque chose comme (non testé) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    String text = "Un texte à chiffrer";
    SHA1Digest sha1 = new SHA1Digest();
     
    byte[] message = text.getBytes();
    sha1.update(message, 0, message.length);  // on passe le flux d'octets correspondant au message à chiffrer
     
    byte[] hash = new byte[sha1.getDigestSize()]; // on crée un tableau pour récupérer le hash
    sha1.doFinal(hash, 0); // on récupère le hash
     
    System.out.println(Arrays.toString(hash));
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  6. #6
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2016
    Messages : 20
    Par défaut
    Salut Joel et merci pour ton aide.

    Ton code marche très bien. Je crée directement un byte-array pour mon message avec une fonction qui le rempli avec une valeur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public static byte[] createByteArr(int bLen){
            byte[] a = new byte[bLen];
     
            for(int i = 0; i < bLen; i++){
                a[i] = 0x42;
            }
            return a;
        }
    et je peux hasher le message:
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     // Cree un  byte-array
           byte[] message = createByteArr(40);
     
           // Génère une instance SHA1-digest du Bouncycastle
           SHA1Digest sha1 = new SHA1Digest();
     
           sha1.update(message, 0, message.length);
     
           // Byte-array pour generer mon hash
           byte[] hash = new byte[sha1.getDigestSize()];
     
           // et je l'enregistre
           sha1.doFinal(hash, 0);
     
           StringBuilder sb = new StringBuilder();
           for (byte b : message) {
               sb.append(String.format("%02X ", b));
           }
           System.out.println("Here the array-message: ");
           System.out.println(sb.toString());
     
     
           StringBuilder sb2 = new StringBuilder();
           for (byte b : hash) {
               sb2.append(String.format("%02X ", b));
           }
           System.out.println("Here the hash-message:");
           System.out.println(sb2.toString());
    Seulement je pense ne jamais recevoir le message d erreur du point 1: message too long
    Car le hachage se fait sur 20.
    Ci dessous le output.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Here the array-message: 
    42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 
    Here the hash-message:
    B1 99 18 69 24 05 EB D5 DA 3B 4A 87 83 ED 3B 23 F8 81 0D BA 
    BUILD SUCCESSFUL

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

Discussions similaires

  1. comment utiliser les fonctions d'une dll
    Par sebled dans le forum MFC
    Réponses: 3
    Dernier message: 24/02/2006, 16h59
  2. [Excel] Comment utiliser la fonction RECHERCHEV
    Par forsay1 dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 03/02/2006, 11h43
  3. Réponses: 3
    Dernier message: 31/12/2005, 23h09
  4. Comment utiliser la fonction NBR.JOURS.OUVRES?
    Par MEHCOOPER dans le forum Access
    Réponses: 9
    Dernier message: 20/10/2005, 12h50
  5. Réponses: 11
    Dernier message: 22/12/2003, 21h06

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