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 :

[BouncyCastle] Policy ? Invalid Key Exception


Sujet :

Sécurité Java

  1. #1
    Membre éclairé Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Par défaut [BouncyCastle] Policy ? Invalid Key Exception
    Bonjour,

    Voici le schéma de ce que je dois réaliser pour envoyer un mail chiffré un à organisme précis.


    De mon coté j'arrive à créer le MimeMessage sans soucis.
    Le schéma est complété par un texte qui raconte en fait que le MimeMessage doit être chiffré avec une clé privée 3DES de 128 bit, cette clé privée doit, elle, être chiffrée avec la clé publique RSA du certificat fourni, et le tout dans un CMS. Ce CMS doit ensuite être mise dans un SMIME et c'est ce dernier que l'on ajoute en pièce jointe au mail à envoyer.

    Voici mon code, il est simple...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SMIMEEnvelopedGenerator generator = new SMIMEEnvelopedGenerator();
    generator.addKeyTransRecipient(certificate);
     
    attachment = generator.generate(mimeMessage, SMIMEEnvelopedGenerator.DES_EDE3_CBC, 128, "BC");
     
    SMIMEUtil.toMimeBodyPart(attachment.getInputStream());
    ...mais l'organisme de son coté, lui, n'arrive pas a déchiffrer la pièce, message retourné :
    error:0607A082:digital envelope routines:EVP_CIPHER_CTX_set_key_length:invalid key length
    invalid key length me fait penser un a une erreur de "policy", mais comment savoir si c'est de mon coté que ca déconne et surtout, comment le corriger le cas échéant ?

    Merci d'avance

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut,

    Ta clef est surement trop longue pour les policy par défaut de Java. Il faut que tu télécharges Unlimited Strength Jurisdiction Policy Files (en bas de la page) et que tu remplaces les jar de ton JRE (pas jdk, attention ) Tout est explqué dans le readme

    A plus

  3. #3
    Membre éclairé Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Par défaut
    Citation Envoyé par George7 Voir le message
    Salut,

    Ta clef est surement trop longue pour les policy par défaut de Java. Il faut que tu télécharges Unlimited Strength Jurisdiction Policy Files (en bas de la page) et que tu remplaces les jar de ton JRE (pas jdk, attention ) Tout est explqué dans le readme

    A plus
    J'ai déjà fais ca de mon coté.
    D'ailleurs, si je ne l'avais pas j'aurais la même exception 'Invalid Key length' de mon coté.
    Or, je ne l'ai pas, mais l'organisme qui recoit mon message lui, lève cette exception.

  4. #4
    Membre éclairé Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Par défaut
    Est-ce que si, ma version java est une 1.5 et que j'utilise les "policy" d'une autre version (1.6 par exemple) cela peut-il poser problème, mais encore une fois, à mon destinataire ?

    Car de mon coté, pas de soucis, le mail par bien, et vu que je me mets en copie, je le recois bien avec un fichier évidemment illisible

    Sinon, y a-t-il possibilité de connaitre la clé privée que je met dans le CMS pour justement essayé de décrypter le message de mon coté ?

  5. #5
    Membre éclairé Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Par défaut
    Question plus "théorique"

    Quelle sont les différences entre SMIMESigned et un SMIMEEnvelopped
    et CMS du même nom ?

    car en fait, je suis dans le flou, il se peut que je m'oriente sur le mauvais objet pour réaliser ma problématique (même si j'ai déjà essayé les 2 visiblement)

    si quelqu'un à une piste, je suis vraiment preneur

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    171
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 171
    Par défaut
    Je m'égare peut-être mais où dans ton code spécifies-tu la clef DES ? Ne faut-il pas un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    generator.addKEKRecipient(...)

  7. #7
    Membre éclairé Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Par défaut
    Citation Envoyé par nprovost Voir le message
    Je m'égare peut-être mais où dans ton code spécifies-tu la clef DES ? Ne faut-il pas un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    generator.addKEKRecipient(...)
    Si tu pouvais t'égarer un peu plus...ca pourrait ptet m'aider
    tu veux dire quoi par la ?

    En fait, le morceau de code que j'ai mis, c'est le seul qui "fonctionne", dans le sens, dès que je modifie quelques choses avec, par exemple, une ligne ressemblant à la tienne, soit ca n'arrive pas a envoyer le message, soit une exception se lève en rapport avec la taille de la clé ou le provider.

    Alors ok, ce code fonctionne, mais ne remplie pas la tache qu'on lui demande...donc finalement, il sert à rien

    donc si tu pouvais détailler ton idée, ca pourrait ptet m'aider, je ne suis vraiment pas caller dans ce domaine, j'y vais a taton à chaque fois

    merci

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    171
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 171
    Par défaut
    Ben je ne vois pas à quel endroit tu précises la clef 3DES qui va servir à chiffrer le message MIME et qui sera elle-même chiffrée avec le certificat (si je comprends tout) ?

    Je ne maîtrise pas à fond BouncyCastle loin de là, mais je pense qu'il faut utiliser "addKEKRecipient" pour cela avec une SecretKey qui correspond à la clef DES

    En fait je pense que tu ne transmets aucune clef DES (?) => invalid size

  9. #9
    Membre éclairé Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Par défaut
    Citation Envoyé par nprovost Voir le message
    Ben je ne vois pas à quel endroit tu précises la clef 3DES qui va servir à chiffrer le message MIME et qui sera elle-même chiffrée avec le certificat (si je comprends tout) ?

    Je ne maîtrise pas à fond BouncyCastle loin de là, mais je pense qu'il faut utiliser "addKEKRecipient" pour cela avec une SecretKey qui correspond à la clef DES

    En fait je pense que tu ne transmets aucune clef DES (?) => invalid size
    tu aurais un exemple de code pour expliquer ce que tu "avances" fort judicieusement, car je me pose cette même question en fait...

    la je dois partir pour 3h de route (si pas de bouchon)
    si tu as une idée de code, n'hésites pas, je regarde ca en arrivant direct...

    merci d'avance

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    171
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 171
    Par défaut
    Je regarde ça

    Attention aux radars
    Plus exactement ce soir c'est radars ou bouchons

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    171
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 171
    Par défaut
    Quelque chose comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    byte[] key = ... // la clef
    SecretKeyFactory kf = SecretKeyFactory.getInstance("DESede", "BC");
    SecretKey skey = kf.generateSecret(new DESedeKeySpec(key));
    generator.addKEKRecipient(skey,...)

  12. #12
    Membre éclairé Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Par défaut
    Citation Envoyé par nprovost Voir le message
    Quelque chose comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    byte[] key = ... // la clef
    SecretKeyFactory kf = SecretKeyFactory.getInstance("DESede", "BC");
    Key skey = kf.generateSecret(new DESedeKeySpec(key));
    generator.addKEKRecipient(skey,...)
    ayé arrivé

    je vais regarder ca demain...mais le tableau de byte, c'est au pif, ou bien ca doit être qq chose de bien spécifique ?

    merci en tout cas

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    171
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 171
    Par défaut
    le tableau de bytes il contient les 128 bits de ta clef 3DES (16 octets)

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 419
    Par défaut
    La clef ne doit pas être générée. C'est BC qui fait ça tout seul comme un grand.

    Essaye avec les classes commençant par CMS plutôt que SMIME. Je suis quasi persuadé d'y être arrivé avec celles-là et pas avec les SMIME. Après c'est une question de construction de ton MimeBodyPart.

    Pour la différence entre CMS et S/MIME, là de tête je saurais pas te l'expliquer. Par contre me semble bien que CMS est une composante de S/MIME. C'est à dire que CMS c'est la norme de construction de BodyPart chiffrés, et S/MIME c'est le nom donné à l'extension de MIME supportant les fonctions de sécurité (chiffrement et signatures).
    Le mieux reste encore de lire les RFC, comme celle-ci.

  15. #15
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Marco46 Voir le message
    La clef ne doit pas être générée. C'est BC qui fait ça tout seul comme un grand.

    Essaye avec les classes commençant par CMS plutôt que SMIME. Je suis quasi persuadé d'y être arrivé avec celles-là et pas avec les SMIME. Après c'est une question de construction de ton MimeBodyPart.

    Pour la différence entre CMS et S/MIME, là de tête je saurais pas te l'expliquer. Par contre me semble bien que CMS est une composante de S/MIME. C'est à dire que CMS c'est la norme de construction de BodyPart chiffrés, et S/MIME c'est le nom donné à l'extension de MIME supportant les fonctions de sécurité (chiffrement et signatures).
    Le mieux reste encore de lire les RFC, comme celle-ci.
    J'appuie les dires de Marco (une fois de plus )
    En gros S/MIME c'est une extension de MIME basée sur PKCS#7 (CMS). Ça apporte quelques changements (je ne sais plus lesquels en détail, mais le lien de Marco les donne), mais on peut assimiler les standards on va dire.

  16. #16
    Membre éclairé Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Par défaut
    Citation Envoyé par Marco46 Voir le message
    La clef ne doit pas être générée. C'est BC qui fait ça tout seul comme un grand.

    Essaye avec les classes commençant par CMS plutôt que SMIME. Je suis quasi persuadé d'y être arrivé avec celles-là et pas avec les SMIME. Après c'est une question de construction de ton MimeBodyPart.

    Pour la différence entre CMS et S/MIME, là de tête je saurais pas te l'expliquer. Par contre me semble bien que CMS est une composante de S/MIME. C'est à dire que CMS c'est la norme de construction de BodyPart chiffrés, et S/MIME c'est le nom donné à l'extension de MIME supportant les fonctions de sécurité (chiffrement et signatures).
    Le mieux reste encore de lire les RFC, comme celle-ci.
    ok ok,

    mais je n'ai rien compris aux RFC
    par contre, le fait de passer par CMS au lieu de SMIME me pose un soucis.
    a savoir que pour générer un SMIME à partir d'un MIMEMessage, c'est super simple et prévu par le générateur.

    Alors que pour CMS, il faut avoir un fichier...et du coup, on ne respecte plus le schéma ci-dessus qui veut qu'on chiffre le MimeMessage et pas seulement le fichier...non ?

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    171
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 171
    Par défaut
    La clef ne doit pas être générée. C'est BC qui fait ça tout seul comme un grand.
    oui je vois. Le bout de code que j'ai retrouvé procédait différemment (sans les classes CMSEnveloped...). Je ne sais pas ce que cela vaut mais cela fonctionnait.
    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
     
    static final byte[] iv8 = { (byte) 0xc9, (byte) 0x36, (byte) 0x78,
    			(byte) 0x99, (byte) 0x52, (byte) 0x3e, (byte) 0xea, (byte) 0xf2 };
     
    Certificat cert; // certificat RSA de cryptage
     
    KeyGenerator keyGenerator = KeyGenerator.getInstance("DESede");
    SecretKey symkey = keyGenerator.generateKey();
    IvParameterSpec salt = new IvParameterSpec(iv8);
    Cipher c = Cipher.getInstance("DESede/CBC/NoPadding", "BC");
    c.init(Cipher.ENCRYPT_MODE, symkey, salt);
     
    // chiffrement de la clef symétrique par RSA
    Cipher pbb = Cipher.getInstance("RSA/ECB/PKCS1Padding", "BC");
    pbb.init(Cipher.WRAP_MODE, cert.getPublicKey());
     
    // chiffrement du fichier de données par la clef symétrique et sortie
    FileOutputStream fsout = new FileOutputStream(...);
    fsout.write(pbb.wrap(symkey)); 
    fsout.write(c.doFinal(...à_crypter...));
    fsout.write(salt.getIV());
    fsout.close();

  18. #18
    Invité de passage
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 1
    Par défaut
    Bonjour à tous,
    Je sais que le sujet est assez ancien mais je rencontre un problème similaire avec l'algorithme DES_EDE3_CBC et une clé de 128 bits.
    Si j'utilise la taille de clé par défaut (192 bits), je n'ai pas de problème.
    Mais avec la clé de 128 bit les données générées sont chiffrées, mais quand on les déchiffrent, on les correspond pas.

    Avais-tu finalement réussi à faire fonctionner S/MIME et l'algorithme DES_EDE3_CBC en 128 bits.

    Pour info, l'utilisation de la clé par défaut (192 bits) ne me convient pas car elle nécessite l'installation de "Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files", chose que tous les utilisateurs de l'application ne pourront pas forcément faire.

    Merci d'avance.

  19. #19
    Membre éclairé Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Par défaut
    J'avais finalement réussi, mais mon projet, dépendant de la sécurité sociale, a finalement été abandonné, car cette dernière était trop... "réactive" pour faire des tests et valider la librairie.
    Cette dernière fonctionnait, visiblement, parfaitement, le hic c'était la validité du contenu.

    en quoi consiste ton projet ?

    mais pour info, j'ai été obligé d'installer ce que tu sembles ne pas vouloir installer (de mémoire en tout cas, je ne sais plus si ça peut fonctionner sans)

Discussions similaires

  1. [Débutant] Invalid Operation Exception
    Par Shindaraa dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 14/08/2012, 14h37
  2. invalid Operation Exception
    Par petitours dans le forum C#
    Réponses: 7
    Dernier message: 27/10/2010, 14h38
  3. probleme de invalid parametre exception
    Par Asmod_D dans le forum C++
    Réponses: 12
    Dernier message: 09/04/2009, 17h05
  4. Réponses: 1
    Dernier message: 22/10/2008, 11h29
  5. [VBA-PP]Invalid Key pour l'ajout d'un noeud d'une treeview
    Par marsupilami34 dans le forum VBA PowerPoint
    Réponses: 4
    Dernier message: 28/08/2006, 17h14

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