El objetivo de este artículo no es teorizar sobre técnicas para deducir claves RSA o encontrar colisiones en algoritmos de resumen como MD5 o SHA, el enfoque es mucho más pragmático y está orientado a, tal vez, el eslabón más débil de un entorno PKI: los contenedores criptográficos PKCS12.

Las claves privadas de los certificados digitales pueden ir almacenadas en un tarjetas digitales “Smart Cards” y también estar almacenadas en ficheros (para su entrega, backup o similar), en este ultimo caso, el formato que, normalmente, se emplea se denomina PKCS12 y básicamente, grosso modo, se trata de un fichero donde va almacenado el certificado digital, su correspondiente clave privada y opcionalmente los certificados digitales de las CAs que forman parte de la PKI.
Ese fichero en formato PKCS12 está a su vez cifrado con una clave que es la que permite acceder al contenedor donde se encuentra la clave privada, y como cualquier otra clave de acceso, se puede atacar por fuerza bruta. Obviamente el éxito / fracaso de ese tipo de ataque va en función de la calidad del diccionario empleado y la robustez de la clave empleada para proteger el contenedor criptográfico.

Para realizar el ataque por fuerza bruta, vamos a emplear la herramienta Brute12, se puede descargar en formato binario ya compilado y su código fuente aquí.
Para que funcione correctamente has de tener instalado en tu equipo CAPICOM, una interface a la CryptoAPI de windows vía objetos COM/OLE.

Para poder realizar las pruebas necesitas tener un diccionario lo más amplio posible. Uno con mucha solera y tradición lo puedes obtener en la Web Openwall, contiene múltiples palabras en numerosos idiomas.
Una vez tengamos CAPICOM instalado y el diccionario procedemos a usar Brute12, para ello abrimos un terminal cmd.exe y nos situamos donde hayamos descomprimido el .zip descargado ejecutándolo de la siguiente forma:

Código:
D:\brute12>brute12.exe certificado.p12 diccionario.txt
Brute12 31032008
Código:
http://www.security-projects.com/?Brute12
[email protected]

Código:
[*]Start
The current date/time is: Mon Mar 31 12:43:12 2008
Words tested: 1000
The current date/time is: Mon Mar 31 12:43:14 2008
Words tested: 2000
The current date/time is: Mon Mar 31 12:43:16 2008
Words tested: 3000
The current date/time is: Mon Mar 31 12:43:17 2008
El proceso continuara hasta que encontremos la contraseña del certificado y obtengamos el siguiente mensaje con la contraseña:

Código:
PKCS12 Deciphered !!
password:1234
The current date/time is: Mon Mar 31 12:44:59 2008
Pese a la criticidad de este tipo de ficheros (almacenan credenciales criptográficas para accesos seguros) es increíble la cantidad de entradas que devuelve google con una búsqueda como: filetype12 OR filetypefx
Desde mi punto de vista exponer este tipo de ficheros de forma publica es análogo a publicar un fichero passwd o SAM


Enlaces:
http://www.security-projects.com/?Brute12
http://www.rsa.com/rsalabs/node.asp?id=2124
http://www.openwall.com/
http://msdn2.microsoft.com/en-us/library/ms995332.aspx