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 tester le PSS padding du Bouncycastle conformément au standard RFC ?


Sujet :

Sécurité Java

  1. #1
    Futur Membre du Club
    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
    Points : 5
    Points
    5
    Par défaut Comment tester le PSS padding du Bouncycastle conformément au standard RFC ?
    Bonjour à tous,

    dans le cadre de mon projet de fin d'étude, je teste les methodes de cryptage et decryptage symétrique et asymétrique du Bouncycastle.
    Je teste á présent le PSS padding qui est effectué par le PSSSigner avec la fonction de hachage SHA1.
    La signature est vérifiée par la méthode verifySignature, et SHA1 ne me permet pas de voir le padding.
    Je crois que je dois créer une fonction de hachage transparante, mais je ne sais pas trop comment l'implémenter.
    je n'ai que des zéros.

    voici mon code avec SHA1 où je démasque la signature:

    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
    29
    30
    RSABlindingParameters params = new RSABlindingParameters(pub, blindFactor);
            // creer le blindingE
            RSABlindingEngine rsaBlindingEngine = new RSABlindingEngine();
            //creer le blindingSigner
            PSSSigner blindingSigner = new PSSSigner(rsaBlindingEngine, new SHA1Digest(), 1);
            // creer le rsaSigner
            PSSSigner rsaSigner = new PSSSigner(new RSAEngine(), new SHA1Digest(), 1);
            // initialiser blindingSigner
            blindingSigner.init(true, new ParametersWithRandom(params,new SecureRandom()));
            blindingSigner.update(msg, 0, msg.length);
            // blinding Signature
            byte[] blindingSignature = blindingSigner.generateSignature();
            System.out.println("Signature masquée: " + emsa.arrayToString(blindingSignature));
            // creer le rsaEngine
            RSAEngine rsaEngine = new RSAEngine();
            // initialiser le rsaEngine
            rsaEngine.init(true, prv);
            byte[] blindedData = rsaEngine.processBlock(blindingSignature, 0, blindingSignature.length);
            //initialiser le rsaBlindingE pour demasquer la signature
            rsaBlindingEngine.init(false, params);
            byte[] signature = rsaBlindingEngine.processBlock(blindedData, 0, blindedData.length);
            System.out.println("Signature demasquée: " + emsa.arrayToString(signature));
            RSABlindedEngine rsaBlindedEngine = new RSABlindedEngine();
            rsaBlindedEngine.init(true, pub);
            byte[] dbMask = rsaBlindedEngine.processBlock(signature, 0, signature.length);
            System.out.println("Le dbMask       : " + emsa.arrayToString(dbMask));
            rsaSigner.init(false, pub);
            rsaSigner.update(msg, 0, msg.length);
            boolean verif = rsaSigner.verifySignature(signature);
            Assert.assertTrue(verif);
    Et voici mon output:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Signature masquée: 83 C9 08 E4 CF 0F AB DB F5 CC 07 FA 23 C9 2C 32 48 1E BA 4A 07 04 A5 75 CF 51 EC E1 B8 3A 44 F5 
    Signature demasquée: 41 FD 12 2C D4 3C 05 83 D8 DE 29 0B 2C 08 42 49 33 D9 66 2F 9A 68 F8 32 7F 37 BB D3 D9 E0 E7 7D 
    Le dbMask       : 45 C3 D9 CC 92 3E 10 05 E0 B5 CB FF FC 65 31 26 A0 9B F4 85 91 A3 77 88 93 64 27 D2 0B FB 29 BC

  2. #2
    Futur Membre du Club
    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
    Points : 5
    Points
    5
    Par défaut
    Bonjour à tous,

    je suis parvenue à résoudre mon problème autrement en utilisant une fonction qui fixe la randomisation, afin de pouvoir afficher
    EM = maskedDB || H || 0xbc.
    Pour pouvoir comparer le resultat, j'ai utilisé la fonction de hachage SHA1 pour hacher le message m, y ajouter le padding ,le salt et le hacher à nouveau afin d'obtenir H = H(M') conformément au standard RFC:

    https://tools.ietf.org/html/rfc3447#section-9.1

    Je ne sais cependant pas si la MGF est générée d'une manière bien définie, ou bien si chaque librairie l'implémente à sa facon.

    j'ai comparé le résultat attendu juste avec les valeurs à partir du 12ème byte du EM du bouncycastle, vu que la longueur de maskedDB est de 11.
    Je cherche à présent comment verifier le padding en retrouvant le message initial avec le bouncycastle.
    La methode verify du psssigner ne semble pas le faire. Elle verifie juste la signature.
    Quelqu'un aurait il une ébauche de solution svp.

    Voici mon code:
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    // créer un seed = salt
            byte[] salt = Hex.decode("01 02 03 04 05 06 AB BC CD DE");
            byte[] msg = Hex.decode("42");
            // initialise un blindFactorGenerator pour générer un blindFactor
            blindFactorGen.init(pub);
            // créer un blindfactor
            BigInteger blindFactor = blindFactorGen.generateBlindingFactor();
            RSABlindingParameters params = new RSABlindingParameters(pub, blindFactor);
            // creer le blindingE
            RSABlindingEngine rsaBlindingEngine = new RSABlindingEngine();
            //creer le blindingSigner
            PSSSigner blindingSigner = new PSSSigner(rsaBlindingEngine, new SHA1Digest(), 10);
            // creer le rsaSigner
            PSSSigner rsaSigner = new PSSSigner(new RSAEngine(), new SHA1Digest(), 10);
            // initialiser blindingSigner
            blindingSigner.init(true, new ParametersWithRandom(params,new FixRandom(salt)));
            blindingSigner.update(msg, 0, msg.length);
            // blinding Signature
            byte[] blindingSignature = blindingSigner.generateSignature();
            System.out.println("Signature masquée: " + emsa.arrayToString(blindingSignature));
            // creer le rsaEngine
            RSAEngine rsaEngine = new RSAEngine();
            // initialiser le rsaEngine
            rsaEngine.init(true, prv);
            byte[] blindedData = rsaEngine.processBlock(blindingSignature, 0, blindingSignature.length);
            //initialiser le rsaBlindingE pour demasquer la signature
            rsaBlindingEngine.init(false, params);
            byte[] signature = rsaBlindingEngine.processBlock(blindedData, 0, blindedData.length);
            System.out.println("Signature demasquée: " + emsa.arrayToString(signature));
            RSABlindedEngine rsaBlindedEngine = new RSABlindedEngine();
            rsaBlindedEngine.init(true, pub);
            byte[] EM = rsaBlindedEngine.processBlock(signature, 0, signature.length);
            System.out.println("Le EM       : " + emsa.arrayToString(EM));
            rsaSigner.init(false, pub);
            rsaSigner.update(msg, 0, msg.length);
            boolean verif = rsaSigner.verifySignature(signature);
            Assert.assertTrue(verif);
            digest.update(msg, 0, msg.length);
            byte[] mhash = new byte[digest.getDigestSize()];
            digest.doFinal(mhash,0);
            // le premier padding
            String padding1 = emsa.arrayToString(Hex.decode("00 00 00 00 00 00 00 00"));
            String nouveauM = padding1.concat(emsa.arrayToString(mhash)).concat(emsa.arrayToString(salt));
            byte[] Message = Hex.decode(nouveauM);
            digest.update(Message, 0, Message.length);
            byte[] H = new byte[digest.getDigestSize()];
            digest.doFinal(H, 0);
           System.out.println("Le H: " + emsa.arrayToString(H));
            System.out.println("Le nouveau M: " + nouveauM);
    et voici mon output:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Signature masquée: 5B AA BC DE 3C D0 AF F9 4F D7 50 BC 57 BD AA 5C 08 DC B5 09 B6 24 5C 97 B5 1B E7 DF 98 A1 00 47 
    Signature demasquée: 22 AD 87 C2 B6 D8 74 1A 1C 8B C7 47 3F A5 5A A5 51 50 57 9E 3E BB 41 A5 90 DA 4D D0 7B C5 9F 80 
    Le EM       : 1E 28 EE 5E F2 60 2C 11 A3 85 EF 6B 31 D0 13 71 D5 7E BF 6E 7D 61 9C B1 9E 59 A2 B8 16 2D 7D BC 
    Le H: 6B 31 D0 13 71 D5 7E BF 6E 7D 61 9C B1 9E 59 A2 B8 16 2D 7D 
    Le nouveau M: 00 00 00 00 00 00 00 00 AE 4F 28 1D F5 A5 D0 FF 3C AD 63 71 F7 6D 5C 29 B6 D9 53 EC 01 02 03 04 05 06 AB BC CD DE

Discussions similaires

  1. Comment tester si un champ est un nombre
    Par the kikouyou dans le forum Langage SQL
    Réponses: 13
    Dernier message: 17/07/2014, 14h57
  2. Comment tester si fichier est ouvert ?
    Par fusef dans le forum Langage
    Réponses: 7
    Dernier message: 11/08/2004, 18h51
  3. Réponses: 10
    Dernier message: 06/07/2004, 02h44
  4. comment tester si une fonction fait bien son travail
    Par access dans le forum Requêtes
    Réponses: 1
    Dernier message: 24/11/2003, 15h46
  5. Réponses: 10
    Dernier message: 18/11/2003, 18h01

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