Saltar al contenido principal
patrón hexagonal morado

La firma de códigos es el proceso de firma digital de archivos y secuencias de comandos ejecutables mediante una herramienta de firma y un certificado digital. Este proceso se basa en una tecnología llamada infraestructura de clave pública (PKI).

El código de firma requiere una herramienta de firma específica, como SignTool de Microsoft, Jarsigner de Java o incluso OpenSSL, según el tipo de archivo para firmar. La firma en sí es una operación criptográfica que vincula el contenido del archivo a un certificado digital.

La firma de código protege a su empresa, a sus socios y a los usuarios finales de la manipulación del software cuando se descargan archivos de programas ejecutables, especialmente los procedentes de canales no seguros como Internet. Como proveedor de soluciones de firma de código, Entrust puede ayudarlo a implementar soluciones de firma de código eficientes y de alta seguridad que protejan a su empresa y a sus clientes de ataques que falsifican o modifican aplicaciones.

¿Cuál es el propósito del firmar códigos digitalmente?

Hay dos razones principales para firmar códigos digitalmente:

  1. Para proporcionar a los usuarios la identidad de la organización que publica el archivo firmado
  2. Para proporcionar un medio para verificar la integridad del archivo, es decir, que no se corrompió ni alteró maliciosamente desde que se firmó

¿Cuáles son los certificados de firma de código?

Los certificados de firma de código son utilizados por los desarrolladores de software para firmar digitalmente aplicaciones, controladores, ejecutables y programas de software. Esto verifica para los usuarios finales que el código no ha sido comprometido o hackeado por un tercero. Para vincular las claves públicas con su usuario asociado (propietario de la clave privada), las infraestructuras de claves públicas (PKI) utilizan certificados digitales.

Mejores prácticas para la firma de código

Las mejores prácticas para los certificados de firma de código incluyen:

  • Controlar el acceso a las claves privadas
  • Proteger las claves privadas con un módulo de seguridad de hardware (HSM) de nivel 3 FIPS-140-2
  • Código del sello de tiempo
  • Comprender la diferencia entre la firma de la prueba y la firma de la liberación
  • Autentificar el código que se firmará
  • Distribuir el riesgo en varios certificados
  • Revocar los certificados comprometidos

Entrust ofrece una gama completa de certificados de firma de código y un método integral para gestionarlos, incluidos certificados TLS/SSL, certificados de correo electrónico seguro, certificados de firma de documentos y certificados de dispositivos móviles.

¿Cómo funciona la firma de código?

Para implementar la firma de código, el editor del software necesita generar un par de claves públicas privadas y enviar la clave pública a una autoridad de certificación, junto con una solicitud para emitir un certificado de firma de código. La autoridad de certificación verifica la identidad del editor de software y autentifica la solicitud de certificado firmado digitalmente del editor. Una vez que este proceso de investigación y verificación de claves se ha completado con éxito, la autoridad de certificación agrupa la identidad del editor con la clave pública y firma el paquete. Esto crea el certificado de firma de código.

ilustración de firma de código

Obtenga más información sobre la implementación de la firma de código en este libro blanco.

Métodos de firma digital

Varias plataformas de aplicaciones admiten la firma de código y proporcionan diferentes herramientas para realizarla. A continuación se presenta una lista de los tipos de firma de código más comunes:

  • Adobe AIR
  • Biblioteca para desarrolladores de Apple Mac OS X
  • Firefox XPI
  • Java
  • Microsoft

Pasos para los usuarios finales

Hay cinco pasos sencillos que los usuarios deben seguir para determinar si el software es de confianza:

  1. Compruebe si tenía previsto instalar el software.
  2. Compruebe el nombre del archivo para ver si indica el software que pensaba instalar. En el ejemplo anterior, el usuario está instalando Adobe Reader 10, lo que el nombre parece indicar.
  3. Compruebe el nombre del editor para ver si coincide con quien cree que escribió el software. Esto puede ser difícil, ya que el sitio de descarga de software puede ser diferente del sitio del editor.
  4. Compruebe el certificado de firma de código para ver si el nombre del editor está en el certificado.
  5. Compruebe si el certificado fue emitido por una CA de confianza pública.

Características de la firma de código

Los certificados validados por la organización (OV) muestran la organización y la ubicación en el certificado. No admiten la firma en modo kernel de Windows. Los certificados de validación ampliada (EV) muestran la jurisdicción y el tipo de organización, además de la organización y la ubicación. Los certificados EV también facilitan la firma en modo kernel de Windows para Vista, Windows 7, Windows 8, Windows 8.1 y Windows 10. Elegir la solución de certificado de firma de código que mejor se adapte a las necesidades de su organización es complicado, pero Entrust está aquí para ayudarlo.

Soluciones de la firma de código

La cartera de soluciones de firma de código de Entrust combina los módulos de seguridad de hardware (HSM) nShield resistentes a la manipulación con la solución Code Signing Gateway de Entrust Professional Services. El Code Signing Gateway administra el flujo de trabajo de la autorización, acepta solicitudes, notifica a los aprobadores por correo electrónico, administra los tiempos de espera, reconoce las aprobaciones, registra la actividad y entrega un código firmado al área de preparación. La solución utiliza los HSM nShield de Entrust y la raíz de la confianza, y protege todas las claves de firma en un HSM con certificación FIPS 140-2. Esto evita la posible pérdida de claves de firma valiosas, las claves de la autenticidad e integridad de su código. Esto les permite a los clientes firmar su propio código de software. Las características incluyen las siguientes:

  • Filtro de Microsoft Smartscreen
  • Integraciones de terceros
  • Integraciones ilimitadas
  • Sellado de tiempo
  • Estado del editor identificado
  • Reducción del cuadro de advertencia

Nuestra amplia experiencia en las mejores prácticas de firma de código y en las normas de diligencia respalda las soluciones de firma de código de Entrust.

¿Cómo proporciona la firma de códigos la identidad de la organización que publica el archivo firmado?

Una firma digital crea un vínculo criptográfico entre un archivo y un certificado digital; este último representa una organización. Se puede considerar el certificado como un sello de goma digitalizado; contiene detalles sobre la organización, como su nombre legal, dirección de correo electrónico, dirección física y país. Por lo tanto, la firma del código corresponde a la aplicación de un sello digital al código, que mostrará los datos de la organización.

Los datos de una firma de código se pueden comprobar cada vez que se abre el archivo firmado. En la mayoría de los casos, esto lo hacen automáticamente los sistemas operativos, mostrando el nombre de la organización contenido en el certificado utilizado para la firma.

Aviso de control de cuentas de usuario

¿Cómo proporciona la firma de códigos un medio para verificar la integridad del archivo?

Cada firma de código se crea según el contenido del archivo. Sin entrar en demasiados detalles técnicos, una herramienta de firma calculará una versión condensada del archivo para firmar (que llamamos hash) y firmará esta versión condensada utilizando el certificado digital proporcionado. A continuación, este hash firmado se incrusta en el archivo en un lugar dedicado a alojar firmas digitales.

Una vez que se comience a distribuir el archivo firmado, los sistemas operativos y las aplicaciones relevantes detectarán la presencia de la firma. Calcularán automáticamente el hash del archivo (sin incluir el hash firmado en el cálculo) y lo compararán con el hash firmado incrustado en el archivo. Si ambos son iguales, la verificación se aprueba. Si el hash calculado es diferente del hash firmado, falla. Una verificación fallida significa que el contenido del archivo se modificó después de realizar la firma (como resultado de un error o de una intención maliciosa).

La confiabilidad de este mecanismo se basa en la fuerza del algoritmo utilizado para calcular el hash: cuanto más largo sea el hash, mejor. Uno de los estándares utilizados actualmente es SHA-256, un algoritmo que produce hashes de 256 bits.

¿Cuáles son los beneficios de la firma de códigos?

Hay varios beneficios de firmar códigos digitalmente:

  • Aumenta la confianza del usuario en su software. El código firmado prueba que el archivo no solo pertenece a la organización esperada, sino que también garantiza que no se ha manipulado (para introducir malware, por ejemplo).
  • Mejora su reputación como desarrollador de software. Cuanto más software firmado usted publique, mejor será su reputación. Por ejemplo, el código de Microsoft firma su software para garantizar que sus clientes descarguen los archivos correctos. El software firmado también es útil para los antivirus y los detectores de malware. Si firma su software, se podrán marcar versiones sospechosas y sin firmar de su software.
  • Se evitan avisos y bloqueos de sistemas operativos. De hecho, estos esperan que todos los editores de software firmen sus archivos ejecutables. Si usted publica software sin firmar y sus usuarios lo inician, existe una gran posibilidad de que vean un mensaje de advertencia del sistema operativo. MacOS es conocido por negarse a iniciar archivos sin firmar, lo que obliga al usuario a pasar por alto la seguridad para continuar con la instalación.

Aviso de mensaje de advertencia

Un mensaje de advertencia para la instalación de software sin firmar en Microsoft Windows 10.

Aviso de mensaje de bloqueo

Un mensaje de bloqueo para la instalación de software sin firmar en MacOS.

Para los dispositivos IoT que usan firmware, una de las mejores formas de garantizar actualizaciones seguras es crear el firmware con el requisito de aceptar solo archivos actualizados que estén firmados con sus certificados de firma de código internos (privados).

¿Cuál es la diferencia entre la firma de códigos públicos y la firma de códigos privados?

Los certificados de firma de código son emitidos por autoridades de certificación (CA), que son motores de emisión de certificados. La mayoría de las organizaciones poseen una o varias CA “privadas” (internas) y pueden emitir todo tipo de certificados digitales, incluidos los certificados de firma de código. Sin embargo, las firmas generadas con estos certificados solo son de confianza dentro del entorno interno de la organización.

Si bien esto es perfecto para muchos casos de uso que involucran aplicaciones internas e IoT, el uso de una CA privada no funcionará si usted piensa distribuir su código fuera de su entorno, donde no se reconoce su CA.

Los certificados de firma de código emitidos por CA de confianza pública, como Entrust, generarán firmas que serán reconocidas y de confianza para todos los sistemas operativos y aplicaciones principales del mundo. Las organizaciones de CA públicas (también llamadas simplemente CA públicas) como Entrust siguen estándares de emisión de certificados estrictos, deben someterse a auditorías periódicas y deben solicitar la confianza de cada uno de los sistemas operativos o proveedores de aplicaciones principales, como Microsoft, Apple, Google o Mozilla.

Ante el código firmado, los sistemas operativos y las aplicaciones comprueban la CA emisora del certificado utilizado para la firma. Si la CA emisora no está en su “lista de confianza” (también llamada almacén raíz), no se confiará en la firma y la verificación fallará. De ahí la importancia de obtener certificados de firma de código de confianza pública al publicar software en Internet.

¿Cuál es la diferencia entre la firma de códigos OV y la firma de códigos EV?

Si bien las organizaciones pueden incluir cualquier detalle que deseen en sus certificados de firma de código privados, los certificados públicos solo deben contener información que haya sido verificada minuciosamente por la CA pública antes de emitir el certificado.

Una CA pública puede emitir dos categorías de certificados de firma de código de confianza pública: OV y EV. Estas categorías corresponden al nivel de verificación de la organización que realiza la CA pública antes de emitir el certificado, y también al requisito de almacenamiento del certificado (en concreto, de su clave privada).

  • OV (validación de la organización): Este es un método de validación estándar de una organización realizado por CA. Se trata de controles de la empresa (¿Existe la empresa? ¿Está al día? ¿Dónde se encuentra?) y una verificación de la persona que solicita el certificado en nombre de la organización (¿Realmente es un empleado de la organización?).
  • EV (validación extendida): Como el nombre indica, este es un proceso de validación extendido que requiere una verificación adicional de la información de la organización, así como del solicitante del certificado. La CA requerirá más información y más papeleo, y procederá con una o varias llamadas a la organización y al solicitante antes de emitir el certificado. El almacenamiento seguro es obligatorio para los certificados de firma de código EV, lo que significa que se necesitará un token USB seguro o un módulo de seguridad de hardware (HSM) para almacenar el certificado y su clave privada.

Entrust puede proporcionar tokens USB o HSM nShield para todos los pedidos de firma de código, ya sean certificados OV o EV.

Obtenga más información sobre los HSM de firma de código.

¿Cómo funciona el fechado con un certificado de firma de código?

En el contexto de una firma de código, el fechado es el proceso de aplicar un sello digital que incluye la fecha y la hora exactas a una firma de código.

El fechado es un paso crucial, pero a menudo olvidado, de la firma de código. De hecho, las firmas tienen una fecha de caducidad, que corresponde a la fecha de caducidad del certificado de firma de código que se utilizó para la firma. Una firma caducada causará una verificación fallida cuando se cargue el código firmado, lo que generaría mensajes de advertencia e incluso impediría la ejecución del código.

Los certificados privados pueden tener una vida útil muy larga (más de 10 años) si es necesario, lo que suele ser suficiente porque es posible que el código firmado ya no se use después de un período tan largo. Sin embargo, los certificados de firma de código públicos actualmente son válidos por un máximo de tres años, y existe una gran posibilidad de que su código aún esté disponible al final de este período. El fechado de una firma de código le dará otros 9 o 10 años de validez (dependiendo del período de validez del certificado fechado utilizado). Puede volver a aplicar una nueva fecha cuando la actual esté a punto de caducar para extender aún más la validez de su firma de código y evitar advertencias/bloqueos.

El fechado también es útil en caso de que necesite revocar su certificado de firma de código si ha sido comprometido. La revocación se puede antedatar a la fecha y hora en que cree que el certificado se vio comprometido. Si todas sus firmas se fecharon, solo las firmas generadas antes de la fecha de revocación seguirán siendo válidas. Cualquier firma de código sin fecha dejará de ser válida cuando el certificado caduque o se revoque.

El fechado se puede realizar mediante certificados de fechado privados de una CA interna. No obstante, para el código que debe compartirse externamente, se debe usar un servicio de fechado público, que será reconocido y de confianza para todos los sistemas operativos y aplicaciones principales. La mayoría, si no todas, las CA públicas, incluida Entrust, ofrecen un servicio público de fechado, disponible a través de una URL exclusiva.