Mejores prácticas para almacenar certificados digitales

2

Estoy creando una aplicación en la que ciertos archivos confidenciales deben estar firmados digitalmente antes de ser almacenados en el sistema de archivos utilizando la codificación ASN.1, para que puedan verificarse con un certificado digital (el correspondiente a la clave privada utilizada para firmando) en un momento posterior cuando son accedidos. Estoy usando la biblioteca Bouncy Castle para Java.

Hay un desacuerdo entre los miembros de mi equipo con respecto al mejor lugar para almacenar el certificado digital, y me gustaría saber cuál es la mejor práctica:

  • Almacenar el contenido del archivo, la firma y el certificado empaquetados juntos en un CMSSignedData objeto. De esta manera, el procedimiento de verificación solo necesita recibir el objeto CMSSignedData, ya que todos los datos necesarios para realizar la verificación están presentes en un solo objeto.
  • Almacenar solo la firma y el contenido del archivo en un CMSSignedData, y almacenar el certificado en otro lugar. Usando este enfoque, se necesita algo de trabajo extra para administrar el certificado y relacionar cada archivo firmado con el certificado necesario para realizar la verificación.

Me preocupa el primer enfoque, creo que alguien podría empaquetar y guardar el contenido del archivo, un certificado diferente del mío y una firma generada con la clave privada correspondiente a ese certificado, y la verificación tendrá éxito, porque la El procedimiento de verificación no recibió el certificado "original", sino uno falso.

¿Qué recomiendas? ¿Ve alguna deficiencia o problemas potenciales en alguna de las alternativas mencionadas anteriormente? ¿Cuál es la mejor práctica o debo utilizar un enfoque completamente diferente?

    
pregunta Óscar López 19.05.2012 - 04:10
fuente

1 respuesta

5

El primer enfoque es mejor. Tus preocupaciones están fuera de lugar. En el ejemplo que da, la verificación debería tener éxito. Los datos fueron firmados por el certificado que afirma haber sido firmado por.

Si firmo algún documento, es muy importante que solo parezca que tenga mi firma si no se ha manipulado. Pero si puede manipularlo pero luego tiene que poner su firma en eso, está bien. Tú hiciste firmar su contenido. No lo hice, pero no parece tener la firma mi . Así que eso está bien.

Aún debe decidir qué significa esa firma significa después de decidir que es básicamente válida. Pero eso debería considerarse un paso separado.

El diseño debe basarse en el principio de seguridad fundamental de que un atacante no confiable no puede obtener la clave privada correspondiente a la clave pública autorizada por cualquier certificado que el sistema acepte como válido. En general, se basará en el nombre común del certificado y la identidad de la autoridad que lo firmó.

Puede almacenar de forma segura los datos, el certificado y la firma juntos. Esto le permitirá validar los datos y la firma. Lo importante es que usted decida correctamente qué significa esa validación mirando el certificado.

    
respondido por el David Schwartz 19.05.2012 - 14:19
fuente

Lea otras preguntas en las etiquetas