¿Qué es PKCS#11?

Nick Smith | | 3 minute read
PKCS#11 PKI

Con tantos estándares vigentes relativos a las tarjetas inteligentes, es importante comprender qué significa cada uno y qué relevancia tienen. En este artículo le ofreceremos una perspectiva sobre algunos estándares clave y la función que desempeñan dentro del ecosistema de las tarjetas inteligentes.

PKCS#11 es una API independiente de ninguna plataforma que puede emplearse para gestionar y utilizar hardware criptográfico de seguridad. Los dispositivos que tiene ese hardware a menudo se denominan tokens criptográficos, de ahí el nombre "Cryptoki" (de Cryptographic Token Interface).

El hardware criptográfico de seguridad puede incluir:

  • Dongles USB
  • Tarjetas inteligentes
  • Módulos de seguridad de hardware (HSMs).

PKCS#11 API le permite gestionar (crear, modificar, borrar) objetos criptográficos integrados en el token, incluyendo:

  • Teclas para RSA
  • Certificados X.509
  • Claves simétricas (p.ej., AES, 3DES)
  • Claves de Criptografía de curva elíptica (ECC)

Las aplicaciones de software pueden llamar a la API, que utilizará estos objetos para:

  • Encriptado/desencriptado
  • Cálculo y verificación de firmas digitales

PKCS#11 en software de aplicación

PKCS#11 compendia los detalles específicos de la comunicación que subyace entre la aplicación y el hardware criptográfico. A continuación se muestra una pila típica de software que usa PKCS#11.

Pila que emplea una librería PKCS#11, middleware y hardware de token PKI criptográfico

La aplicación llama a la PKCS#11 API, que contiene o bien una librería específica del proveedor o una librería PKCS#11 común, que incluye la función necesaria para comunicarse el hardware de una gran variedad de proveedores (p.ej., OpenSC).

Generalmente la implementación de PKCS#11 empleará PC/SC para comunicarse con el hardware criptográfico. PC/SC es una especificación para la integración de tarjetas inteligentes en entornos informáticos. La ayuda para PC/SC está incorporada en Windows desde la edición XP y existe una implementación gratuita disponible para Linux y Mac.

Desarrollo del software PKCS#11

PKCS#11 es fundamentalmente una API en C con archivos de encabezamiento de referencia disponibles desde OASIS (el comité técnico de OASIS PKCS11 asumió el mantenimiento de la norma PKCS#11 procedente de RSA Security en 2013).

Los puertos y las funciones de envoltura existen también para otros lenguajes, incluyendo:

  • C/C++
    • Los archivos de encabezamiento de referencia están disponibles desde OASIS. La PKI SDK de Microcosm incluye los archivos de encabezamiento, un código en C de muestra y binarios en Windows.
  • Java
    • Proveedor Sun PKCS#11 (in package sun.security.pkcs11.SunPKCS11) que se incluye en Java SE.
    • Función de envoltura IAIK PKCS#11.
    • Se incluyen ejemplo de uso de ambos en la PKI SDK de Microcosm.
  • C# y VB.NET
    • Hay funciones de envoltura, pero Microcosm no aprueba ninguno en particular. Una búsqueda rápida en Google nos proporcionará varias opciones.
  • Javascript
    • pkcs11.js le permite llamar a token criptográficos directamente desde una página web utilizando Javascript. Se incluye como parte de la PKI SDK de Microcosm.

Más información sobre la PKI de Microcosm