Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial Internet of Things >> Tecnología de Internet de las cosas

Uso de firmas digitales para verificar integridad de archivos binarios en Linux

Introducción

Uso de firmas digitales para verificar integridad de archivos binarios en Linux

En un mundo donde los datos pueden ser interceptados o alterados, la confianza en la autenticidad de los archivos recibidos es primordial. Por ejemplo, si el Usuario A envía un archivo binario al Usuario B por email, ¿cómo puede B estar seguro de que el archivo no fue manipulado? Las firmas digitales (FD) proporcionan una solución fiable al vincular los datos a las credenciales únicas del remitente.

Este artículo demuestra una implementación práctica de FD para verificar la integridad de binarios ELF de 64 bits en Linux. El enfoque usa un esquema de firma directa (sin árbitro de terceros) y se basa en una clave privada para firmar y un certificado público para verificar.

Ejemplo de implementación de FD

Implementar la firma implica los siguientes pasos:

  1. Generar un hash MD5 del binario origen.
  2. Crear una clave privada y un certificado público autofirmado.
  3. Firmar el binario:
    • Cifrar el hash MD5 con la clave privada.
    • Almacenar el hash cifrado en una nueva sección .sig del archivo ELF.
    • Guardar el certificado en ~/.ssh para verificación posterior.

Todo el proceso puede automatizarse usando openssl, objcopy y md5sum. A continuación se muestra un script de ejemplo, sign_elf.sh, que automatiza la firma de binarios ELF. (El código fuente sin números de línea aparece al final del artículo.)

#!/bin/bash KEY_DIR="$HOME/.ssh" PRIVATE_KEY="$KEY_DIR/priv.key" CERTIFICATE="$KEY_DIR/pub.crt" SUBJECT="/C=RU/ST=Nizhni Novgorod/L=Nizhniy Novgorod/O=Auriga/OU=DEV/CN=www.auriga.com" if [ "$#" = "0" ]; then echo "Usage: sign_elfs.sh [ELF files]" exit 1 fi [ ! -d "$KEY_DIR" ] && mkdir "$KEY_DIR" # Generar clave privada y certificado openssl req -nodes -x509 -sha256 -newkey rsa:4096 -keyout "$PRIVATE_KEY" -out "$CERTIFICATE" -days 365 -subj "$SUBJECT" for ELF_BIN in "$@"; do ELF_BASE_NAME="${ELF_BIN##*/}" ELF_BIN_SIGNATURE="$ELF_BASE_NAME.sha256" ELF_BIN_MD5="$ELF_BASE_NAME.md5" if [ ! -f "$ELF_BIN" ]; then echo "Error: no such file $ELF_BIN" exit 103 fi # Eliminar sección .sig existente objcopy --remove-section=.sig "$ELF_BIN" # Añadir sección .sig de 512 bytes rellena de ceros rm -f dummy.txt touch dummy.txt truncate --size=512 dummy.txt objcopy --add-section .sig=dummy.txt --set-section-flags .sig=noload,readonly "$ELF_BIN" # Calcular hash MD5 del binario (con sección .sig) md5sum "$ELF_BIN" | awk '{ print $1 }' > "$KEY_DIR/$ELF_BIN_MD5" # Firmar el hash MD5 con la clave privada openssl dgst -sha256 -sign "$PRIVATE_KEY" -out "$KEY_DIR/$ELF_BIN_SIGNATURE" "$KEY_DIR/$ELF_BIN_MD5" # Verificar la firma inmediatamente (opcional) openssl dgst -sha256 -verify <(openssl x509 -in "$CERTIFICATE" -pubkey -noout) -signature "$KEY_DIR/$ELF_BIN_SIGNATURE" "$KEY_DIR/$ELF_BIN_MD5" # Embeber el hash cifrado en la sección .sig objcopy --update-section .sig="$KEY_DIR/$ELF_BIN_SIGNATURE" --set-section-flags .sig=noload,readonly "$ELF_BIN" # Mostrar el contenido de la sección .sig para inspección objdump -sj .sig "$ELF_BIN" done rm -f dummy.txt ls -ls ~/.ssh
Uso de firmas digitales para verificar integridad de archivos binarios en Linux
Figura 1. El proceso de firma de un binario ELF. (Fuente: Auriga)

El script realiza las siguientes tareas en detalle:

Línea 19 – Generación del certificado

openssl req -nodes -x509 -sha256 -newkey rsa:4096 -keyout "$PRIVATE_KEY" -out "$CERTIFICATE" -days 365 -subj "$SUBJECT"

Tras este paso, ~/.ssh/priv.key contiene la clave privada y ~/.ssh/pub.crt el certificado. La clave privada cifra datos; el certificado contiene la clave pública necesaria para verificación.

Bucle sobre archivos ELF (Línea 21)

Cada binario especificado en la línea de comandos se procesa secuencialmente. El script asegura que cualquier sección .sig preexistente se elimine antes de firmar de nuevo.

Gestión de secciones (Líneas 33–40)

Cálculo del hash (Línea 42)

md5sum "$ELF_BIN" | awk '{ print $1 }' > "$KEY_DIR/$ELF_BIN_MD5"

Se computa MD5 sobre el binario, incluyendo la sección .sig placeholder, y se almacena en nombre_binario.md5.

Firma del hash (Línea 45)

openssl dgst -sha256 -sign "$PRIVATE_KEY" -out "$KEY_DIR/$ELF_BIN_SIGNATURE" "$KEY_DIR/$ELF_BIN_MD5"

El hash MD5 se cifra con la clave privada, produciendo un archivo de firma (ej. nombre_binario.sha256).

Verificación (Opcional) (Línea 48)

openssl dgst -sha256 -verify <(openssl x509 -in "$CERTIFICATE" -pubkey -noout) -signature "$KEY_DIR/$ELF_BIN_SIGNATURE" "$KEY_DIR/$ELF_BIN_MD5"

Este paso confirma que la firma coincide con el hash usando la clave pública extraída del certificado.

Incrustación de la firma (Línea 52)

objcopy --update-section .sig="$KEY_DIR/$ELF_BIN_SIGNATURE" --set-section-flags .sig=noload,readonly "$ELF_BIN"

El hash cifrado reemplaza al placeholder, finalizando el binario ELF firmado.

Ejecutar el script sobre un conjunto de archivos ELF producirá binarios firmados que pueden distribuirse de forma segura. El destinatario puede verificar la integridad extrayendo la sección .sig, descifrándola con el certificado público y comparando el hash resultante con uno recién calculado del archivo recibido.

Tecnología de Internet de las cosas

  1. Aproveche la Industria 4.0: Estrategias probadas para construir una hoja de ruta digital ganadora
  2. Redes neuronales aceleran la reconstrucción de imágenes de rayos X
  3. Impulsando sinergias IoT: Cómo el CoC de Conectividad de Bosch moldea un futuro conectado
  4. Preparando sus operaciones de fabricación para la IA con IoT
  5. Gemelos digitales: desbloqueando el IoT de borde inteligente en manufactura – Parte 2
  6. Mantenimiento Predictivo: Aprovechar Industria 4.0 para Producción Ininterrumpida
  7. ¿Está tu planta de fabricación lista para IoT? Guía práctica
  8. Seguros digitales: 5 tendencias que revolucionan cómo compramos y gestionamos coberturas
  9. Western Digital lanza almacenamiento 3D NAND robusto de 64 capas para Industrial IoT y Edge Computing
  10. Western Digital lanza almacenamiento 3D NAND robusto de 64 capas para Industrial IoT
  11. Por qué la computación en la nube es esencial para almacenar datos IoT