3

J'ai la tâche de transférer de petits messages binaires (1 ou 2 kb) entre une application de bureau et des périphériques mobiles. Les messages doivent être cryptés asymétriquement (RSA par exemple). D'après ce que j'ai appris il faut utiliser un système de chiffrement hybride pour ce genre de tâche:Faut-il utiliser la syntaxe de message cryptographique (CMS) pour cette tâche?

  1. Générer clé
  2. symétrique aléatoire
  3. Chiffrer texte brut avec clé symétrique (en utilisant AES par exemple)
  4. Encrypt clé symétrique avec clé publique
  5. transmission du texte de chiffrement et crypté clé symétrique

Je voudrais inventer un pas propre format pour stocker le texte chiffré et la clé symétrique cryptée. J'ai donc trébuché sur la norme CMS (syntaxe de message cryptographique). Au premier coup d'œil, il ressemble exactement à ce dont j'ai besoin. Si j'ai bien compris la norme, elle incorpore le texte chiffré et la clé symétrique cryptée ainsi que des informations sur les algorithmes utilisés.

Quelqu'un peut-il dire si l'on devrait utiliser la norme CMS pour la tâche décrite? Le support CMS d'OpenSSL est-il suffisant pour mes besoins?

Cheers, Christian

Répondre

4

CMS prend définitivement en charge la séquence d'opérations que vous recherchez. En revanche, le format CMS lui-même et l'API OpenSSL sont assez complexes. Un problème mineur est que CMS fonctionne principalement en termes de certificats X.509 plutôt que de clés publiques. Vous pouvez gérer cela dans votre système soit en déployant une PKI, soit en utilisant simplement des certificats auto-signés (qui sont essentiellement équivalents au passage de clés RSA nues, mais qui ont l'avantage d'être un format générique pour lier la clé et les métadonnées ce qui est parfois très utile d'avoir de toute façon). OpenSSL n'a pratiquement aucune documentation sur l'API CMS; La meilleure référence que j'ai pu trouver est cms.c dans le répertoire apps/de la distribution source OpenSSL; le code est structuré comme une fonction principale de 1000 lignes, ce qui est un peu dérangeant, mais il effectue un cryptage avec une clé publique, donc vous pouvez probablement l'utiliser comme guide.

+0

En attendant, j'ai implémenté le CMS en utilisant OpenSSL. Cela fonctionne comme un charme. –

+0

Voici la documentation 'openssl cms': http://www.openssl.org/docs/apps/cms.html. Exemple de code en Java avec BouncyCastle: http://security.stackexchange.com/questions/1453/whats-the-standard-way-to-encrypt-a-file-with-a-public-key-in-java –

Questions connexes