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 comprobar la integridad de los datos en Linux

Introducción

Una de las cuestiones más importantes en el mundo actual es la cuestión de la confianza en los datos recibidos. Por ejemplo, el usuario А envía los datos D al usuario B por correo electrónico. ¿Cómo puede el usuario B estar seguro de que los datos recibidos son los mismos datos que envió el usuario A? Una forma posible de resolver este problema es utilizando una firma digital (DS). Los siguientes requisitos se aplican a un DS:

Este artículo considera un ejemplo de implementación de DS para la verificación de la integridad de archivos binarios en Linux (ELF de 64 bits). Usaremos un DS directo cuando solo un remitente y un destinatario se estén comunicando (sin un tercero / árbitro). Necesitaremos una clave de cifrado privada y una clave pública (certificado) para esto. El remitente crea ambas claves. El usuario A firma un archivo ejecutable y pasa el certificado al usuario B con la ayuda de medios de entrega seguros. Después de esto, el usuario A envía un archivo firmado al usuario B. El usuario B ejecuta el archivo recibido; si el archivo binario está dañado, el usuario B recibirá un mensaje de que la verificación de DS ha fallado. Para implementar esta solución, necesitaremos un programa para firmar archivos binarios y un código que verifique los DS.

Ejemplo de implementación de DS

La implementación de DS incluye los siguientes pasos:

  1. Generación de archivo binario de origen MD5;

  2. La creación de dos claves:privada y pública (certificado).

  3. Firma de archivos binarios (ELF):
    1 MD5 del archivo binario se cifra con la ayuda de la clave privada;
    3.2 ​​El MD5 cifrado se escribe en un nuevo .sig sección del archivo binario;
    3.3 El certificado se guarda en la carpeta ~ / .ssh.

Todo esto se puede implementar con la ayuda de las utilidades de Linux openssl, objcopy y md5sum. A continuación puede encontrar un ejemplo de un script sign_elf.sh que firma archivos binarios ELF. (Nota:la fuente sin números de línea se incluye al final de este artículo).

 001 #! / bin / bash002 003 KEY_DIR ="$ HOME / .ssh" 004 PRIVATE_KEY ="$ KEY_DIR / priv.key" 005 CERTIFICATE ="$ KEY_DIR / pub.crt" 006 SUBJECT ="/ C =RU / ST =Nizhni Novgorod / L =Nizhniy Novgorod / O =Auriga / OU =DEV / CN =www.auriga.com "007 008 if [" $ # "=" 0 "]; then009 echo "Uso:sign_elfs.sh ..." 010 salida 1; 011 fi012 013 if [! -d "$ KEY_DIR"]; then014 # El control ingresará aquí si $ DIRECTORY no existe.015 mkdir "$ KEY_DIR" 016 fi017 018 # Crear clave privada y certificado019 openssl req -nodes -x509 -sha256 -newkey rsa:4096 -keyout "$ PRIVATE_KEY" -out " $ CERTIFICATE "-days 365 -subj" $ SUBJECT "020 021 para ELF_BIN en $ @; do022 ELF_BASE_NAME ="$ {ELF_BIN ## * /}" 023 # ELF_BIN_OLD ="$ ELF_BIN.old" 024 ELF_BIN_SIGNATURE ="$ ELF_BASE_NAME.sha256" 025 ELF_BIN_MD5 ="$ ELF_BASE_NAME 0.md5" -f "$ ELF_BIN"] || ["x $ ELF_BIN" ="x"]; then028 echo "Error:no existe tal archivo $ ELF_BIN" 029 exit 1030 fi031 032 # Eliminar .sig section033 objcopy --remove-section =.sig "$ ELF_BIN" 034035 # Agregar Sección de 512 bytes llena de ceros036 rm -f dummy.txt037 touch dummy.txt038 truncate --size =512 dummy.txt039 objcopy --add-section .sig =dummy.txt --set-section-flags .sig =noload, solo lectura "$ ELF_BIN" 040 041 # Crear MD5 hash042 md5sum "$ ELF_BIN" | awk '{print $ 1}'> "$ KEY_DIR / $ ELF_BIN_MD5" 043044 # Cifrar el hash MD5 usando la clave privada045 openssl dgst -sha256 -sign "$ PRIVATE_KEY" -out "$ KEY_DIR / $ ELF_BIN_SIGNATURE" "$ KEY_BIN" 046047 # Validar hash MD5 cifrado usando certificado 048 openssl dgst -sha256 -verify <(openssl x509 -in "$ CERTIFICATE" -pubkey -noout) -signature "$ KEY_DIR / $ ELF_BIN_SIGNATURE" "$ KEY_DIR / $ ELF_BIN_BIN_M50" hash MD5 encriptado en binario ELF en .sig section051 echo "Agregar sección .sig" 052 objcopy --update-section .sig ="$ KEY_DIR / $ ELF_BIN_SIGNATURE" --set-section-flags .sig =noload, readonly "$ ELF_BIN "" $ ELF_BIN "053054 # Imprimir sección .sig055 echo" Verificar sección .sig "056 objdump -sj .sig" $ ELF_BIN "057 done058 059 rm -f dummy.txt060 061 ls -ls ~ / .ssh 


Figura 1. El proceso de firma del binario ELF. (Fuente:Auriga)

Exploremos los detalles de lo que hace este script.

Línea 19:

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

req - solicitud de creación de certificado

-nodes:crea una clave privada de texto sin formato

-x509 - salida - certificado autofirmado

-sha256 - algoritmo de cifrado

-newkey rsa:4096 - crea un nuevo certificado y clave privada RSA, número de bits - 4096

-keyout $ PRIVATE_KEY:la ruta al archivo donde se escribe la clave privada

-out $ CERTIFICATE:la ruta al archivo donde se escribe el certificado hasta los días 365:número de días para el reconocimiento del certificado

-subj $ SUBJECT - nuevo asunto del certificado (debe tener el formato / type0 =value0 / type1 =value1 / type2 =…). En nuestro caso, esto es / C =RU / ST =Nizhni Novgorod / L =Nizhniy Novgorod / O =Auriga / OU =DEV / CN =www.auriga.com, donde
С - país
ST - estado, región, provincia
L - ubicación
O - organización
OU - departamento / unidad organizativa
CN - título básico / nombre del contenedor

El tema se describe en detalle en RFC-5280 (https://tools.ietf.org/html/rfc5280). Después de ejecutar este comando, se generará una clave privada, ~ / .ssh / priv.key y certificado ~ / .ssh / pub.crt. La clave privada se utilizará para cifrar los datos y el certificado se utilizará para descifrar los datos. Usando una clave privada, es posible generar varios certificados únicos para descifrar los datos que fueron encriptados con esta clave privada.

Línea 21:

para ELF_BIN en $ @; hacer

Inicio del ciclo para todos los archivos binarios agregados al script sign_elf.sh.

Línea 33:

objcopy –remove-section =.sig “$ ELF_BIN”

Quite el .sig sección de nuestro archivo binario. Esto debe realizarse si el archivo ya estaba firmado con nuestro script y queremos volver a firmarlo.

Líneas 36+:

rm -f dummy.txt
touch dummy.txt
truncar –size =512 dummy.txt
objcopy –add-section .sig =dummy.txt –set -section-flags .sig =noload, solo lectura “$ ELF_BIN

Cree un archivo de texto de 512 bytes y agréguelo a nuestro archivo binario no cargado en el tiempo de ejecución .sig sección solo para lectura, que contiene datos del archivo dummy.txt.

Línea 42:

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

Calcule MD5 del archivo binario (con .sig sección) y escriba el resultado en un archivo de texto, nombre_binario.md5.

Línea 45:

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

Este comando cifra el archivo con MD5 creado por la línea 42 con una clave privada. Argumentos:

dgst:esta opción indica que queremos cifrar (firmar) datos;

-sha256 - algoritmo de cifrado;

-sign $ PRIVATE_KEY - encripta el archivo con la ayuda de la clave privada $ PRIVATE_KEY;

-out $ KEY_DIR / $ ELF_BIN_SIGNATURE:los datos cifrados se guardan en el archivo $ KEY_DIR / $ ELF_BIN_SIGNATURE;

$ KEY_DIR / $ ELF_BIN_MD5:archivo de texto que contiene los datos que se van a cifrar.

Línea 48:

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

Verificación de archivo firmado. Se puede entender por referencia a esta línea que para la verificación de DS necesitamos datos encriptados, un certificado que nos ayudará a realizar la verificación y verificación de datos. Es decir, si

x - datos cifrados,
y - certificado,
z - datos de verificación,

entonces

f (x, y) =z

Línea 52:

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

Elimina el .sig antiguo sección y agregue uno nuevo al archivo $ ELF_BIN (binary_name). Como datos para el nuevo .sig sección, se utilizan datos del archivo firmado $ KEY_DIR / $ ELF_BIN_SIGNATURE (~ / .ssh / binary_name.sha256).


Tecnología de Internet de las cosas

  1. Uso de sinergias para una empresa conectada
  2. Cómo prepararse para la IA utilizando IoT
  3. Los gemelos digitales pueden ser la ventaja inteligente para IoT en el sector de fabricación - Parte 2
  4. Mantenimiento en el mundo digital
  5. ¿Su sistema está listo para IoT?
  6. Seguros digitales:5 tendencias digitales que dan forma a la industria de seguros
  7. Western Digital presenta nuevos productos 3D NAND para IIoT
  8. Western Digital presenta nuevos productos 3D NAND para IIoT
  9. Beneficios de usar la computación en la nube para almacenar datos de IoT
  10. Tecnologías de la industria 4.0:consejos para desarrollar su estrategia digital
  11. Uso de redes neuronales para obtener imágenes de rayos X más rápidas