Ir al contenido

¡Se acercan los certificados de 47 días! ¿Estás preparado?

Actúa ahora →

¿Qué tan útiles son para usted los hashes del lado del cliente en la firma de código?

Algoritmo hash

Definamos brevemente qué es la firma de código .

La firma de código es un método para colocar una firma digital en un archivo, documento, software o ejecutable para comprobar su autenticidad y veracidad en cuanto a la funcionalidad y las características que ofrece. Esto también garantiza que la entidad de software (archivo, documento, software o ejecutable) no sea manipulada durante su transferencia.

La firma de código se puede implementar de dos maneras: firma del lado del cliente y firma del lado del servidor.

Ambos mencionaron métodos de firma de código que eran populares hasta que el ataque de SolarWinds salió a la luz y después de eso la firma del lado del cliente se convirtió en el tema de conversación, ya que no requiere cargar o mover los archivos de firma, lo que evita los ataques en los que el código malicioso también se firma como parte de la firma original del archivo o entidad.

Es hora de comprender primero la función hash:

El algoritmo hash es la función criptográfica que genera una salida de longitud fija, denominada resumen o valor hash, a partir de una entrada dada, que puede tener un tamaño arbitrario. La función hash tiene la propiedad de generar una salida única y unidireccional/irreversible, lo que significa que no se puede obtener el valor de entrada original mediante una operación hash inversa.

Veamos un ejemplo de algoritmo hash con una función hash simple:

SHA 256 editado

En el ejemplo anterior, se muestra una función hash criptográfica SHA-256 que convierte los datos arbitrarios en un valor hash de tamaño fijo de 256 bits.

El hash del lado del cliente se define como: calcular el hash del archivo localmente, en la máquina del desarrollador o en el servidor de compilación, y enviar solo ese hash (no el archivo en sí) al servicio de firma para su firma, de modo que el artefacto completo y, lo que es más importante, la clave privada nunca necesiten interactuar directamente a través de una conexión de red.

Puntos Clave

  • La elección no tiene que ver con la seguridad del hash, SHA-256 es SHA-256 en cualquier caso, sino con lo que tiene que salir del entorno de compilación: el artefacto completo (en el servidor) o solo su hash (en el cliente).
  • El hash del lado del cliente reduce el ancho de banda para artefactos grandes y reduce la superficie de ataque, ya que el archivo en sí nunca se carga a un servidor de firma compartido donde teóricamente podría ser interceptado o sustituido durante la transmisión.
  • Ninguno de los dos métodos requiere que la clave privada salga del HSM. La diferencia radica en la exposición del artefacto, no de la clave.

Hashing del lado del cliente frente a hash del lado del servidor

Hashing del lado del clienteHashing del lado del servidor
¿Qué se sube al servicio de firmas?Solo el hash (unos pocos bytes)El artefacto completo
Ancho de banda para archivos grandes (firmware, instaladores)MinimoEscalas con el tamaño del artefacto
Exposición de artefactos en tránsitoNinguno, el archivo nunca sale del entorno de compilación.El artefacto completo recorre la red hasta el servidor de firma.
Complejidad de implementaciónRequiere herramientas del lado del cliente para calcular y enviar el hash correctamente.Integración del cliente más sencilla; el servidor se encarga del hash.
Mejor ajusteArtefactos de gran tamaño, canalizaciones de CI/CD con ancho de banda limitado o de alto volumen.Configuraciones más sencillas donde el tamaño del artefacto y la exposición al tránsito son una preocupación menor.

Ahora, comprendamos en detalle la firma de código del lado del servidor.

Los siguientes pasos se realizan al firmar el código o cualquier ejecutable mediante firma del lado del servidor:

  1. Se genera un par de claves único y, en función de este par de claves, se crea una CSR (Solicitud de firma de certificado) es generado por un solicitante/desarrollador.
  2. El CSR se envía a CA (autoridad de certificación) con una plantilla de firma de código.
  3. La CA emite el certificado después de la validación y devuelve el certificado de firma de código con la clave pública al solicitante.
  4. El código/ejecutable que se va a firmar es cargado al servidor de firma de código por el solicitante.
  5. Una vez que se carga el código/ejecutable, el valor hash del código/ejecutable se calcula con la ayuda de cualquier función hash criptográfica y, dado que este valor hash se calcula en el lado del servidor, de ahí el nombre de hash del lado del servidor.
  6. El valor hash calculado se firma con la clave privada correspondiente emitida al solicitante, lo que da como resultado la firma digital.
  7. La firma digital, el certificado de firma de código y la información de la función hash ahora se combinan en un bloque de firma y se colocan en el software, que se envía al receptor/consumidor.
  8. Cuando se recibe el código/ejecutable, la computadora del consumidor primero verifica la autenticidad del certificado de firma de código.
  9. Una vez confirmada la autenticidad, el resumen se descifra con la clave pública del par de claves creado.
  10. La función hash se utiliza en el código/ejecutable para calcular el resumen.
  11. El resumen resultante se compara con el resumen enviado por el solicitante. Si los resúmenes coinciden, la instalación del software es segura.

Solución de firma de código empresarial

Obtenga una solución para todas sus necesidades criptográficas de firma de código de software con nuestra solución de firma de código.

Comprendamos en detalle la firma del lado del cliente.

Los siguientes pasos se realizan al firmar el código o cualquier ejecutable mediante firma del lado del cliente:

  1. Se genera un par de claves único y, en función de este par de claves, un solicitante/desarrollador genera una CSR (solicitud de firma de certificado).
  2. La CSR se envía a la CA (autoridad de certificación) con una plantilla de firma de código.
  3. La CA emite el certificado después de la validación y devuelve el certificado de firma de código con la clave pública al solicitante.
  4. El valor hash del código/ejecutable se calcula mediante una función hash criptográfica en el cliente. Dado que este valor hash se calcula en el lado del cliente, de ahí el nombre "hashing del lado del cliente".
  5. El solicitante carga únicamente el valor hash, es decir, el resumen del código/ejecutable que se va a firmar, en el servidor de firma de código.
  6. El valor hash calculado se firma con la clave privada correspondiente emitida al solicitante, lo que da como resultado la firma digital.
  7. La información de la firma digital y la función hash se envía de vuelta al cliente.
  8. La firma digital, el certificado de firma de código y la información de la función hash ahora se combinan en un bloque de firma y se colocan en el software en el extremo del solicitante/desarrollador.
  9. Cuando el consumidor recibe el código/ejecutable, su computadora primero verifica la autenticidad del certificado de firma de código.
  10. Una vez confirmada la autenticidad, el resumen se descifra con la clave pública del par de claves creado.
  11. La función hash se utiliza en el código/ejecutable para calcular el resumen.
  12. El resumen resultante se compara con el resumen enviado por el solicitante. Si los resúmenes coinciden, la instalación del software es segura.

Preguntas frecuentes

¿El hash del lado del cliente hace que la clave privada sea más segura?

No directamente. En ambos casos, la clave privada debe permanecer en un HSM y nunca salir de él. Lo que cambia el hash del lado del cliente es si el artefacto completo viaja a través de la red para llegar al servicio de firma, no cómo se protege la clave en sí.

¿El hash del lado del cliente es siempre la mejor opción?

No es una regla general; depende del tamaño del artefacto y del volumen del pipeline. Para imágenes de firmware grandes o pipelines de CI/CD de alto volumen, es importante evitar la carga completa de artefactos. Para necesidades de firma más pequeñas y de menor frecuencia, la integración más sencilla del cliente que ofrece el hash del servidor puede ser la opción más práctica.

¿Qué enfoque utiliza una plataforma de firma digital empresarial como CodeSign Secure?

El hash del lado del cliente, que consiste en calcular el resumen localmente y enviar solo ese al servicio de firma respaldado por HSM, es el enfoque estándar para la firma integrada en CI/CD empresarial, ya que mantiene los artefactos grandes completamente fuera de la ruta de red de la infraestructura de firma.

Conclusión

La firma de código se ha convertido en un requisito fundamental para los desarrolladores de software, ya que garantiza la confianza de los usuarios para instalar el software sin preocupaciones. Si bien ambos métodos de firma de código se utilizan actualmente en la industria, el ataque a SolarWinds transformó radicalmente el panorama de la firma de código. Ahora, la firma del lado del cliente es la opción preferida, dado que ofrece una ventaja significativa en la generación remota de firmas digitales, reduce el consumo de ancho de banda al requerir únicamente la carga del valor hash y evita los ataques de código malicioso firmado, al no requerir la transferencia de archivos de código dentro del entorno.

Recursos: www.encryptionconsulting.com/education-center/what-is-code-signing/