Estación de trabajo criptográfica basada en estándares de clave pública. Funciones para analizar y ver la estructura ASN1

El trabajo principal al crear la utilidad cryptoarmpkcs no fue el desarrollo de código o una interfaz gráfica, sino el trabajo con estructuras ASN1 . En estas estructuras se almacenan certificados x509v3, firmas de documentos electrónicos (PKCS # 7, CMS), solicitudes de certificados (PKCS # 10, CSR), claves públicas y privadas, contenedores seguros PKCS # 12 / PFX, listas de certificados CRL revocados y marcas de tiempo. para firmas electrónicas, solicitudes y respuestas de OCSP y así sucesivamente. Constantemente tenía que mirar las estructuras existentes para comprender cómo lo hacían los demás, mirar las estructuras AN1 recién ensambladas por nosotros mismos. El proceso es claro. Pero como trabajo en Linux (ahora es Mageia, y también preparo código para Windows en Linux), las utilidades openssl y derdump del paquete NSS estaban disponibles a partir de las herramientas disponibles para analizar las estructuras ASN1. Personalmente, mis preferencias estaban del lado del derdump. Fue ella quien se convirtió en el prototipo de la utilidad derdump.tcl / tclderdump considerada aquí para ver las estructuras ASN1. Y si compara la salida de la utilidad derdump del paquete NSS y la utilidad derdump.tcl, difícilmente verá diferencias:



Las diferencias se relacionan con los nombres de oid. La utilidad tiene la siguiente sintaxis:

$dertcl.tcl < > <  | stdout> <1 | 0> <der | pem | hex> 

donde

  • <archivo de entrada>: indica la ruta al archivo con la estructura ASN1;
  • <archivo de salida>: indica el archivo donde se guardará el resultado del análisis: si stdout se especifica como el archivo de salida, el resultado se enviará a la salida estándar;
  • el tercer parámetro indica que es necesario mostrar información completa (1);
  • el cuarto parámetro establece el formato del archivo de entrada, donde der es un archivo binario, pem indica que el archivo contiene datos codificados en base64 con el encabezado "----- BEGIN ... -" y el avance "----- END ... -" como es habitual en openssl, y finalmente hexadecimal dice que el archivo contiene código hexadecimal. Además, puede contener caracteres especiales (\ r, \ n, \ t), espacios y caracteres "." y ":". De dónde provienen los símbolos de punto y colon se aclarará a continuación.

El formato hexadecimal fue vital para mí. De hecho, para analizar cualquier pieza del archivo analizado, tenía que traducirlo a forma binaria (codificación der) y volver a pasarlo por la utilidad. El formato hexadecimal hizo la vida mucho más fácil.

Por supuesto, usar código tcl puro (así como usar cualquier otro código de script, por ejemplo python) no es del todo cómodo. Por lo tanto, las utilidades están enmarcadas en distribuciones tclderdump para las plataformas Linux, Windows y OS X. Estas distribuciones son autosuficientes: usted las descarga y ejecuta.

Pero volvamos a la capacidad de ver las estructuras ASN1 almacenadas en hexadecimal. Además de las utilidades mencionadas anteriormente para ver estructuras ASN1, también hay una buena utilidad pyderasn escrita en Python, que usa caracteres de punto y dos puntos en la salida, y se decidió que también pueden estar presentes en código hexadecimal. El siguiente es el resultado de analizar el mismo certificado x509 v.3 con las utilidades derdump.tcl y pederasn:



Pero quería más, es decir, una interfaz gráfica y la capacidad de analizar bloques internos sobre la marcha. Se decidió agregar esta funcionalidad a la utilidad cryptoarmpkcs, especialmente porque tiene mucho que desarrollar, por ejemplo, encriptar documentos en el certificado del destinatario. Y aquí, una vez más, no puede prescindir de un visor de estructuras ASN1.

Para estos fines, se decidió reorientar el botón de función "Información de token". Reorientamos el botón y le asignamos la nueva función "Ver estructura ASN1", y aún puede obtener información sobre el token conectado moviendo el cursor sobre el nombre del token a la derecha de la etiqueta "Elegir token / tarjeta inteligente":



Todo es simple aquí. Seleccionamos el archivo con la estructura ASN1, indicamos en qué formato es, decidimos si necesitamos detalles adicionales y hacemos clic en el botón "Ver archivo ASN1":



Al comparar las capturas de pantalla derecha e izquierda, puede ver personalmente qué información adicional puede obtener cuando se presiona el botón "Información adicional". Para guardar la estructura en forma desmontada, simplemente haga clic en el botón "Guardar".

Si mantiene presionado el botón izquierdo del mouse, puede seleccionar el bloque que nos interesa. Y, si ahora está en el bloque seleccionado, presione el botón derecho del mouse, aparecerá un menú con los siguientes elementos:

  • copiar al portapapeles;
  • ver el bloque resaltado.

Y si selecciona el elemento "Ver bloque seleccionado", aparecerá una ventana con el bloque analizado:



Si hace clic en el botón "copiar al portapapeles", el bloque seleccionado se copiará en el portapapeles. El portapapeles se puede ver haciendo clic en el botón "ASN1-portapapeles". El usuario puede poner los datos en el portapapeles con sus propios fondos y luego verlos aquí.

Y dado que la utilidad a menudo se actualiza, se ha agregado la capacidad de obtener nuevas versiones de la utilidad directamente de ella. Para hacer esto, simplemente mueva el cursor del mouse sobre el campo "PKCS # 11, x509v3, PKCS # 10, PKCS # 7, CMS, PKCS # 12, ASN1", presione el botón derecho del mouse y seleccione "Acerca del programa" en el menú que aparece. En la ventana que aparece, simplemente seleccione la plataforma y presione el botón izquierdo del mouse:



Al recibir con éxito el kit de distribución, recibirá un mensaje correspondiente sobre dónde se guardó el archivo recibido:



PD: para aquellos que desean obtener utilidades por primera vez, esto todavía se puede hacer aquí:

Distribuciones para Linux, OS X y Windows

Source: https://habr.com/ru/post/473886/


All Articles