PKCS

De nos jours, lorsqu’on utilise de la cryptographie, nous sommes jamais très loin d’un des Public Key Cryptographic Standards (PKCS), il en existe 15. Ces standards sont définit par la compagnie RSA Security (fondé par le R de RSA : Ron Rivest). En voici d’abord la liste :

  • PKCS #1: RSA Cryptography Standard
  • PKCS #3: Diffie-Hellman Key Agreement Standard
  • PKCS #5: Password-Based Cryptography Standard
  • PKCS #7: Cryptographic Message Syntax Standard
  • PKCS #8: Private-Key Information Syntax Standard
  • PKCS #10: Certification Request Syntax Standard
  • PKCS #11: Cryptographic Token Interface Standard
  • PKCS #12: Personal Information Exchange Syntax Standard
  • PKCS #13: Elliptic Curve Cryptography Standard
  • PKCS #14: Pseudorandom Number Generation Standard
  • PKCS #15: Cryptographic Token Information Format Standard

Si vous savez compter vous remarquerez qu’il en manque. Mais il faut simplement savoir que PKCS 2, 4 et 6 sont obsolètes car intégrés à PKCS #1 dans ses dernières versions. PKCS 9 est également en passe de devenir obsolète.

Nous n’allons pas tous les étudier : mais nous focaliser sur ceux qui nous paraissent les plus intéressants dans la vie de tous les jours.

PKCS #1: RSA Cryptography Standard

PKCS#1 spécifie les recommandations pour implémenter l’algorithme RSA, notamment les primitives cryptographiques pour le chiffrement et la signature. Autrement dit, PKCS#1 définit précisement (structures ASN.1) les modalités  d’utilisation de l’algorithme RSA. Cela permet d’assurer un minimum d’interopérabilité entre le programme qui chiffre/signe la donnée et celui qui déchiffre/vérifie la donnée.

PKCS #5: Password-Based Cryptography Standard

Il s’agit de la description d’une méthode pour chiffrer une chaîne d’octets à partir d’une clé secrète dérivée d’un mot de passe. Ce standard a vocation à être utilisé pour le chiffrement des clés privées .

Il est aussi connu sous le doux nom de PBKDF2 pour Password Based Key Derivation Function 2.  Précisons ici que PBKDF1 existe mais est considéré comme obsolète et ne doit donc plus être utilisé si ce n’est pour des raisons de compatibilité.
Voici un peu le détail du  fonctionnement de PBKDF2

The PBKDF2 key derivation function has five input parameters:

Clé Dérivé = PBKDF2(PRF, Mot de passe, Salt, iter, dkLen)

Où :

  • Mot de passe est le mot de passe maitre à partir du quel on dérive la clé
  • Salt : un sel cryptographique
  • Iter : le nombre d’itération désiré
  • dkLen : Longueur de la clé dérivée
  • PRF est une fonction pseudo-aléatoire (généralement un HMAC-SHA1)

 PKCS #7: Cryptographic Message Syntax Standard

Parfois simplement connue sous le sigle CMS, PKCS#7 est la standardisation d’une syntaxe pour une enveloppe et une signature numérique de données : Autrement dit, cela précise non pas comment chiffrer ou signer une information, mais également comment joindre la signature et/ou les informations nécessaires à son déchiffrement.

Il est notamment important de préciser que cette syntaxe est récursive : Ainsi une enveloppe peut-elle être enveloppée à son tour, ou signée à nouveau.

Le CMS est notamment utilisée dans le S/MIME (chiffrement de messagerie) : Nous aurons probablement l’occasion d’y revenir.
La syntaxe est très complète et inclut par exemple des attributs optionnels tels la date, les certificats, les CRLs, etc.

PKCS #8: Private-Key Information Syntax Standard

Pas grand chose à dire ici, le titre est suffisament explicite : PKCS#8 précise la syntaxe ASN1. de représentation des clés privées (en clair et chiffrée).

PrivateKeyInfo ::= SEQUENCE {
version                 Version,
privateKeyAlgorithm     PrivateKeyAlgorithmIdentifier,
privateKey              PrivateKey,
attributes              [0] IMPLICIT     Attributes OPTIONAL
}

PKCS #10: Certification Request Syntax Standard

Là encore rien d’obscure : PKCS#10 formalise la description de la syntaxe pour les requêtes de certification (certification requests) vers l’autorité de certification

PKCS #11: Cryptographic Token Interface Standard

PKCS#11 définit une API connue sous le nom de « Cryptoki » permettant la communication avec des « tokens » cryptographiques comme les cartes à puce, les « token USB » ou les HSM.

Les fonctions fournissent entre autre les services de :

  • Stockage des clés publiques/privées, des certificats, des valeurs d’authentification (PIN), et d’autres types de données.
  • Chiffrement et déchiffrement
  • Signature et vérification
  • Génération des clés
  • Génération des nombres aléatoires

Firefox supporte cette API (et possède également un soft-token qui émule une carte à puce).

PKCS #12: Personal Information Exchange Syntax Standard

Ce standard est une généralisation et une extension de PKCS#8. Il est une évolution d’un standard de Microsoft : PFX.

Il précise la syntaxe de transfert des informations d’identité personnelle
(Clé privée et certificat associé)

Les informations sont ainsi protégées en confidentialité et intégrité.

Il s’agit du format exigé pour intégrer la clé privé sous forme logicielle dans les différentes applications « clientes ».

Et donc ?

Bon nous avons fait le tour des principaux PKCS, reste maintenant à expliquer comment concrètement tous ces standards s’articulent entre eux dans la pratique. Voici donc un petit schéma qui vous résume tout cela :

PKCS

Publicités

A propos JoMendes

Amateur de mathématiques et d'hexadécimal. Je m'intéresse de près ou de loin suivant mon niveau à tous les sujets de sécurité de l'information.
Cet article, publié dans Cryptographie Asymétrique, est tagué , , . Ajoutez ce permalien à vos favoris.

Un commentaire pour PKCS

  1. Ping : Protection des messages par SMIME | Cryptobourrin

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s