Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial Internet of Things >> Technologie de l'Internet des objets

Utilisation de signatures numériques pour la vérification de l'intégrité des données sous Linux

Présentation

L'une des questions les plus importantes dans le monde d'aujourd'hui est la question de la confiance dans les données reçues. Par exemple, l'utilisateur А envoie les données D à l'utilisateur B par courrier électronique. Comment l'utilisateur B peut-il être sûr que les données reçues sont les mêmes que celles envoyées par l'utilisateur A ? Une façon possible de résoudre ce problème consiste à utiliser une signature numérique (DS). Les exigences suivantes s'appliquent à un DS :

Cet article considère un exemple d'implémentation DS pour la vérification de l'intégrité des fichiers binaires sous Linux (ELF 64 bits). Nous utiliserons un DS direct lorsque seuls un expéditeur et un destinataire communiquent (sans tiers/arbitre). Nous aurons besoin d'une clé de cryptage privée et d'une clé publique (certificat) pour cela. L'expéditeur crée les deux clés. L'utilisateur A signe un fichier exécutable et transmet le certificat à l'utilisateur B à l'aide de moyens de livraison sécurisés. Après cela, l'utilisateur A envoie un fichier signé à l'utilisateur B. L'utilisateur B exécute le fichier reçu; si le fichier binaire est corrompu, l'utilisateur B recevra un message indiquant que la vérification DS a échoué. Pour mettre en œuvre cette solution, nous aurons besoin d'un programme de signature de fichiers binaires et d'un code qui vérifie les DS.

Exemple d'implémentation DS

La mise en œuvre de DS comprend les étapes suivantes :

  1. Génération du fichier binaire source MD5 ;

  2. La création de deux clés :privée et publique (certificat).

  3. Signature de fichier binaire (ELF) :
    1 MD5 du fichier binaire est chiffré à l'aide de la clé privée ;
    3.2 ​​Le MD5 crypté est écrit dans un nouveau .sig section du fichier binaire ;
    3.3 Le certificat est enregistré dans le dossier ~/.ssh.

Tout cela peut être implémenté à l'aide des utilitaires Linux openssl, objcopy et md5sum. Vous trouverez ci-dessous un exemple de script sign_elf.sh qui signe les fichiers binaires ELF. (Remarque :la source sans numéros de ligne est incluse à la fin de cet article.)

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 si [ "$#" ="0" ]; then009 echo "Utilisation:sign_elfs.sh ... "010 exit 1;011 fi012 013 if [ ! -d "$REP_CLÉ" ] ; then014 # Le contrôle entrera ici si $DIRECTORY n'existe pas.015 mkdir "$KEY_DIR"016 fi017 018 # Créer une clé privée et un certificat019 openssl req -nodes -x509 -sha256 -newkey rsa:4096 -keyout "$PRIVATE_KEY" -out " $CERTIFICATE" -days 365 -subj "$SUBJECT"020 021 pour ELF_BIN dans $@ ; 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.md5"026 027 si [ ! -f "$ELF_BIN" ] || [ "x$ELF_BIN" ="x" ];then028 echo "Erreur :aucun fichier de ce type $ELF_BIN"029 exit 1030 fi031 032 # Supprimer .sig section033 objcopy --remove-section=.sig "$ELF_BIN"034 035 # Ajouter Section de 512 octets remplie de zéros036 rm -f dummy.txt037 touch dummy.txt038 truncate --size=512 dummy.txt039 objcopy --add-section .sig=dummy.txt --set-section-flags .sig=noload, en lecture seule "$ELF_BIN"040 041 # Créer un hachage MD5042 md5sum "$ELF_BIN" | awk '{ print $1 }'> "$KEY_DIR/$ELF_BIN_MD5"043 044 # Crypter le hachage MD5 à l'aide de la clé privée045 openssl dgst -sha256 -sign "$PRIVATE_KEY" -out "$KEY_DIR/$ELF_BIN_SIGNATURE" "$KEY_DIR_$ELF_BIN" 046 047 # Valider le hachage MD5 chiffré à l'aide du certificat048 openssl dgst -sha256 -verify <(openssl x509 -in "$CERTIFICATE" -pubkey -noout) -signature "$KEY_DIR/$ELF_BIN_SIGNATURE" "$KEY_DIR/$ELF_BIN_MD5"049 050 # Ajouter hachage MD5 crypté en binaire ELF dans .sig section051 echo "Ajouter une section .sig"052 objcopy --update-section .sig="$KEY_DIR/$ELF_BIN_SIGNATURE" --set-section-flags .sig=noload,readonly "$ELF_BIN " "$ELF_BIN"053 054 # Print .sig section055 echo "Vérifier la section .sig"056 objdump -sj .sig "$ELF_BIN"057 done058 059 rm -f dummy.txt060 061 ls -ls ~/.ssh


Figure 1. Le processus de signature du binaire ELF. (Source :Auriga)

Explorons les détails de ce que fait ce script.

Ligne 19 :

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

req — demande de création de certificat

-nodes — crée une clé privée en texte clair

-x509 — sortie — certificat auto-signé

-sha256 — algorithme de chiffrement

-newkey rsa:4096 — crée un nouveau certificat et une clé privée RSA, nombre de bits — 4096

-keyout $PRIVATE_KEY — le chemin d'accès au fichier dans lequel la clé privée est écrite

-out $CERTIFICATE — le chemin d'accès au fichier où le certificat est écrit to-days 365 — nombre de jours pour l'accusé de réception du certificat

-subj $SUBJECT — nouveau sujet de certificat (doit avoir le format /type0=value0/type1=value1/type2=…). Dans notre cas, il s'agit de /C=RU/ST=Nizhni Novgorod/L=Nizhniy Novgorod/O=Auriga/OU=DEV/CN=www.auriga.com, où
     С — pays
     ST — état, région, province
     L — emplacement
     O — organisation
     OU — département/unité de l'organisation
     CN — titre de base/nom du conteneur

Le sujet est décrit en détail dans la RFC-5280 (https://tools.ietf.org/html/rfc5280). Une fois cette commande exécutée, une clé privée sera générée, ~/.ssh/priv.key et le certificat ~/.ssh/pub.crt. La clé privée sera utilisée pour chiffrer les données et le certificat sera utilisé pour le déchiffrement des données. En utilisant une clé privée, il est possible de générer un certain nombre de certificats uniques pour déchiffrer les données qui ont été chiffrées avec cette clé privée.

Ligne 21 :

pour ELF_BIN dans $@ ; faire

Début de boucle pour tous les fichiers binaires ajoutés au script sign_elf.sh.

Ligne 33 :

objcopy –remove-section=.sig "$ELF_BIN"

Supprimez le .sig section de notre fichier binaire. Cela doit être effectué si le fichier a déjà été signé avec notre script et que nous voulons le re-signer.

Lignes 36+ :

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

Créez un fichier texte de 512 octets et ajoutez-le à notre fichier binaire non chargé sur le runtime .sig section uniquement pour la lecture, qui contient les données du fichier dummy.txt.

Ligne 42 :

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

Calculer le MD5 du fichier binaire (avec .sig section) et écrivez le résultat dans un fichier texte, nom_binaire.md5.

Ligne 45 :

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

Cette commande crypte le fichier avec MD5 créé par la ligne 42 avec une clé privée. Arguments :

dgst — cette option indique que nous voulons chiffrer (signer) les données ;

-sha256 — algorithme de chiffrement ;

-sign $PRIVATE_KEY — chiffre le fichier à l'aide de la clé privée $PRIVATE_KEY ;

-out $KEY_DIR/$ELF_BIN_SIGNATURE — les données chiffrées sont enregistrées dans le fichier $KEY_DIR/$ELF_BIN_SIGNATURE ;

$KEY_DIR/$ELF_BIN_MD5 — fichier texte contenant les données à chiffrer.

Ligne 48 :

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

Vérification du fichier signé. On peut comprendre en faisant référence à cette ligne que pour la vérification DS, nous avons besoin de données cryptées, d'un certificat qui nous aidera à effectuer la vérification et la vérification des données. C'est-à-dire si

x - données chiffrées,
y - certificat,
z - données de vérification,

puis

f(x,y) =z

Ligne 52 :

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

Supprimez l'ancien .sig section et ajoutez-en une nouvelle au fichier $ELF_BIN (nom_binaire). En tant que données pour le nouveau .sig section, les données du fichier signé $KEY_DIR/$ELF_BIN_SIGNATURE (~/.ssh/binary_name.sha256) sont utilisées.


Technologie de l'Internet des objets

  1. Utiliser les synergies pour une entreprise connectée
  2. Comment vous préparer pour l'IA à l'aide de l'IoT
  3. Les jumeaux numériques peuvent être la périphérie intelligente de l'IoT dans le secteur manufacturier – Partie 2
  4. Maintenance dans le monde numérique
  5. Votre système est-il prêt pour l'IoT ?
  6. Assurance numérique :5 tendances numériques qui façonnent le secteur de l'assurance
  7. Western Digital lance de nouveaux produits 3D NAND pour l'IIoT 
  8. Western Digital lance de nouveaux produits 3D NAND pour l'IIoT 
  9. Avantages de l'utilisation du cloud computing pour stocker des données IoT