Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial Internet of Things >> Internet of Things-technologie

Digitale handtekeningen gebruiken voor gegevensintegriteitscontrole in Linux

Inleiding

Een van de belangrijkste vragen in de wereld van vandaag is de kwestie van vertrouwen in ontvangen gegevens. Gebruiker А stuurt bijvoorbeeld gegevens D naar gebruiker B via e-mail. Hoe kan gebruiker B er zeker van zijn dat de ontvangen gegevens dezelfde gegevens zijn die door gebruiker A zijn verzonden? Een mogelijke manier om dit probleem op te lossen is het gebruik van een digitale handtekening (DS). De volgende vereisten zijn van toepassing op een DS:

  • De inhoud van de handtekening moet afhangen van het ondertekende bericht;

  • De unieke informatie van de afzender moet worden gebruikt in een handtekening;

  • Het zou gemakkelijk moeten zijn om een ​​handtekening te maken;

  • Het zou onmogelijk moeten zijn om een ​​handtekening rekenkundig te vervalsen;

  • Een handtekening moet klein zijn.

In dit artikel wordt een voorbeeld van een DS-implementatie besproken voor het controleren van de integriteit van binaire bestanden in Linux (64-bits ELF). We zullen een directe DS gebruiken wanneer alleen een afzender en een ontvanger communiceren (zonder een derde partij/arbiter). Hiervoor hebben we een private encryptiesleutel en een publieke sleutel (certificaat) nodig. De afzender maakt beide sleutels aan. Gebruiker A tekent een uitvoerbaar bestand en geeft het certificaat door aan gebruiker B met behulp van veilige aflevermiddelen. Hierna stuurt gebruiker A een ondertekend bestand naar gebruiker B. Gebruiker B voert het ontvangen bestand uit; als het binaire bestand beschadigd is, ontvangt gebruiker B een bericht dat DS-verificatie is mislukt. Om deze oplossing te implementeren, hebben we een programma nodig voor het ondertekenen van binaire bestanden en een code die DS'en verifieert.

Voorbeeld van DS-implementatie

De implementatie van DS omvat de volgende stappen:

  1. Genereren van binair MD5-bronbestand;

  2. Het maken van twee sleutels:privé en openbaar (certificaat).

  3. Binaire bestandsondertekening (ELF):
    1 MD5 van het binaire bestand wordt versleuteld met behulp van de privésleutel;
    3.2 ​​De versleutelde MD5 wordt geschreven naar een nieuwe .sig sectie van het binaire bestand;
    3.3 Het certificaat wordt opgeslagen in de map ~/.ssh.

Dit alles kan worden geïmplementeerd met behulp van de Linux-hulpprogramma's openssl, objcopy en md5sum. Hieronder vindt u een voorbeeld van een script sign_elf.sh dat ELF-binaire bestanden ondertekent. (Opmerking:bron zonder regelnummers staat aan het einde van dit artikel.)

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=Nizjni Novgorod/L=Nizjni Novgorod/O=Auriga/OU=DEV/CN=www.auriga.com"007 008 if [ "$#" ="0" ]; then009 echo "Gebruik:sign_elfs.sh ... "010 exit 1;011 fi012 013 if [ ! -d "$KEY_DIR"]; then014 # Controle komt hier binnen als $DIRECTORY niet bestaat.015 mkdir "$KEY_DIR"016 fi017 018 # Maak privésleutel en certificaat019 openssl req -nodes -x509 -sha256 -newkey rsa:4096 -keyout "$PRIVATE_KEY" -out " $CERTIFICATE" -days 365 -subj "$SUBJECT"020 021 voor ELF_BIN in $@; 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_26.md5"0! -f "$ELF_BIN" ] || [ "x$ELF_BIN" ="x" ];then028 echo "Fout:geen dergelijk bestand $ELF_BIN"029 exit 1030 fi031 032 # Verwijder .sig section033 objcopy --remove-section=.sig "$ELF_BIN"034 035 # Toevoegen 512-byte sectie gevuld met nullen036 rm -f dummy.txt037 touch dummy.txt038 truncate --size=512 dummy.txt039 objcopy --add-section .sig=dummy.txt --set-section-flags .sig=noload, alleen-lezen "$ELF_BIN"040 041 # Maak MD5 hash042 md5sum "$ELF_BIN" | awk '{ print $1 }'> "$KEY_DIR/$ELF_BIN_MD5"043 044 # Versleutel de MD5-hash met de privésleutel045 openssl dgst -sha256 -sign "$PRIVATE_KEY" -out "$KEY_DIR/$ELF_BIN_SIGNATURE" "$KEY_DIR/$EL5" 046 047 # Valideer versleutelde MD5-hash met certificaat048 openssl dgst -sha256 -verify <(openssl x509 -in "$CERTIFICATE" -pubkey -noout) -handtekening "$KEY_DIR/$ELF_BIN_SIGNATURE" "$KEY_DIR/$ELF_BIN 050 #5" versleutelde MD5 hash in ELF binair in .sig sectie051 echo "Voeg .sig sectie toe"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 "Controleer .sig section"056 objdump -sj .sig "$ELF_BIN"057 done058 059 rm -f dummy.txt060 061 ls -ls ~/.ssh


Figuur 1. Het proces van het ondertekenen van ELF binair. (Bron:Auriga)

Laten we de details onderzoeken van wat dit script doet.

Lijn 19:

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

req — verzoek om certificaat aan te maken

-nodes — maak een persoonlijke leesbare tekstsleutel

-x509 — output — zelfondertekend certificaat

-sha256 — coderingsalgoritme

-newkey rsa:4096 — maak een nieuw certificaat en RSA-privésleutel, aantal bits — 4096

-keyout $PRIVATE_KEY — het pad naar het bestand waar de privésleutel naar wordt geschreven

-out $CERTIFICATE — het pad naar het bestand waar het certificaat is geschreven tot-days 365 — aantal dagen voor certificaatbevestiging

-subj $SUBJECT — nieuw certificaatonderwerp (moet de indeling /type0=value0/type1=value1/type2=… hebben). In ons geval is dit /C=RU/ST=Nizjni Novgorod/L=Nizjni Novgorod/O=Auriga/OU=DEV/CN=www.auriga.com, waarbij
     С — land
     ST — staat, regio, provincie
     L — locatie
     O — organisatie
     OU — organisatorische afdeling/eenheid
     CN — basistitel/containernaam

Het onderwerp wordt in detail beschreven in RFC-5280 (https://tools.ietf.org/html/rfc5280). Nadat deze opdracht is uitgevoerd, wordt een privésleutel gegenereerd, ~/.ssh/priv.key en certificaat ~/.ssh/pub.crt. De privésleutel wordt gebruikt om de gegevens te versleutelen en het certificaat wordt gebruikt voor het ontsleutelen van gegevens. Met behulp van één privésleutel is het mogelijk om een ​​aantal unieke certificaten te genereren voor het ontsleutelen van gegevens die met deze privésleutel zijn versleuteld.

Lijn 21:

voor ELF_BIN in $@; doen

Begin van lus voor alle binaire bestanden die zijn toegevoegd aan het sign_elf.sh-script.

Lijn 33:

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

Verwijder de .sig sectie uit ons binaire bestand. Dit moet worden uitgevoerd als het bestand al is ondertekend met ons script en we het opnieuw willen ondertekenen.

Lijnen 36+:

rm -f dummy.txt
touch dummy.txt
truncate –size=512 dummy.txt
objcopy –add-section .sig=dummy.txt –set -section-flags .sig=noload,alleen-lezen “$ELF_BIN

Maak een 512-byte tekstbestand en voeg het toe aan ons binaire bestand dat niet is geladen in de runtime .sig sectie alleen voor lezen, die gegevens uit het dummy.txt-bestand bevat.

Lijn 42:

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

Bereken MD5 van het binaire bestand (met .sig sectie) en schrijf het resultaat naar een tekstbestand, binaire_naam.md5.

Lijn 45:

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

Deze opdracht versleutelt het bestand met MD5 gemaakt door regel 42 met een privésleutel. Argumenten:

dgst — deze optie geeft aan dat we gegevens willen versleutelen (tekenen);

-sha256 — coderingsalgoritme;

-teken $PRIVATE_KEY — versleutel het bestand met behulp van de privésleutel $PRIVATE_KEY;

-out $KEY_DIR/$ELF_BIN_SIGNATURE — versleutelde gegevens worden opgeslagen in bestand $KEY_DIR/$ELF_BIN_SIGNATURE;

$KEY_DIR/$ELF_BIN_MD5 — tekstbestand met gegevens die moeten worden versleuteld.

Lijn 48:

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

Ondertekende bestandsverificatie. Aan de hand van deze regel kan worden begrepen dat we voor DS-verificatie gecodeerde gegevens nodig hebben, een certificaat dat ons helpt bij het uitvoeren van verificatie en gegevensverificatie. Dat wil zeggen, als

x — versleutelde gegevens,
y — certificaat,
z — verificatiegegevens,

dan

f(x,y) =z

Lijn 52:

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

Verwijder de oude .sig sectie en voeg een nieuwe toe aan het bestand $ELF_BIN (binaire_naam). Als gegevens voor de nieuwe .sig sectie, worden gegevens uit het ondertekende bestand $KEY_DIR/$ELF_BIN_SIGNATURE (~/.ssh/binary_name.sha256) gebruikt.


Internet of Things-technologie

  1. synergieën gebruiken voor een verbonden bedrijf
  2. Hoe u zich voorbereidt op AI met behulp van IoT
  3. Digital Twins kan de intelligente voorsprong zijn voor IoT in de productiesector – deel 2
  4. Onderhoud in de digitale wereld
  5. Is uw systeem klaar voor IoT?
  6. Digitale verzekeringen:5 digitale trends die de verzekeringssector vormgeven
  7. Western Digital introduceert nieuwe 3D NAND-producten voor IIoT 
  8. Western Digital introduceert nieuwe 3D NAND-producten voor IIoT 
  9. Voordelen van het gebruik van cloudcomputing voor het opslaan van IoT-gegevens
  10. Industrie 4.0-technologieën:tips voor het ontwikkelen van uw digitale strategie
  11. Neurale netwerken gebruiken voor snellere röntgenbeeldvorming