Les URI PKCS#11

Généralités

Une série de standards sont publiés sous l’égide de RSA Laboratories, Ces standards sont intitulés PKCS: Public-Key Cryptography Standards. Jusqu’à présent douze d’entre eux, numérotés de PKCS #1 à PKCS #15, ont été publiés, parmi lesquels les #2 et #4 sont obsolètes.

PKCS15: surcouche spécifique pour les cartes à puce.

d’autres ensembles d’algorithmes et de spécifications existent: citons par exemple PGP (Pretty Good Privacy), dont certains offrent des performances ou des niveaux de sécurité équivalents sinon meilleurs que ceux de PKCS.

La norme technique PKCS#11 décrit une interface d'accès à des fonctions cryptographiques (signer avec clé privée, décrypter message encodé avec clé publique)
il existe un plan d'URI standard pour accéder aux objets, spécifié dans la RFC 7512.

decrypte(crypté,certif) signe_moi(hash,certif)

Il faut indiquer quel certificat on utilise: il y a parfois plusieurs certificats dans une puce (TOKEN)

URL PKCS#11

paires attribut-valeur, séparées par des points-virgules.
les attributs: par exemple object, type et id L'attribut id a une valeur binaire (pourcent-encodée) les autres valeurs sont du texte en UTF-8. Il faut URL encoder les "/", "#" et "?" Le but de ces URI est limité à la récupération d'objets existants, on ne s'en sert pas pour créer de nouveaux objets. pkcs11:object=cle-de-machin;type=public;id=%69%95%3E%5C%F4%BD%EC%91

Exemples d'URI PKCS#11:

  • clé publique
    identifiée uniquement par son nom : pkcs11:object=my-pubkey;type=public.
  • certificat
    en indiquant le nom du dépôt matériel (token) utilisé, et l'id du certificat : pkcs11:token=The%20Software%20PKCS%2311%20Softtoken;manufacturer=Snake%20Oil,%20Inc.;model=1.0;object=my-certificate;type=cert;id=%69%95%3E%5C%F4%BD%EC%91.Notez
    clé privée
    en utilisant une nouvelle requête, module-name, qui permet d'indiquer la bibliothèque dynamique à charger pour parler au dépôt des clés (PKCS#11 est une API, pas un protocole, et il faut donc une bibliothèque différente par type de HSM ou smart card) :
    pkcs11:object=my-sign-key;type=private?module-name=snakeoil-pkcs11.
    Ici, sur une machine Unix, l'application PKCS#11 va donc tenter de charger la bibliothèque snakeoil-pkcs11.so.

    Les attributs

    Il est également possible d'ajouter des requêtes dans l'URI, après le point d'interrogation. Par exemple, si le dispositif de stockage réclame un PIN, on peut mettre quelque chose comme pkcs11:object=my-key;type=private?pin-source=file:/etc/dnssec/token_pin dans l'URI (ici, cela dit que le PIN se trouve dans le fichier /etc/dnssec/token_pin).

    Voir http://www.infradead.org/openconnect/pkcs11.html