Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial Internet of Things >> Tecnologia da Internet das Coisas

Usando Assinaturas Digitais para Verificar Integridade de Arquivos Binários no Linux

Introdução

Ilustração do processo de assinatura digital

Em um mundo onde dados podem ser interceptados ou alterados, confiança na autenticidade de arquivos recebidos é primordial. Por exemplo, se o Usuário A envia um arquivo binário ao Usuário B via email, como B pode ter certeza de que o arquivo não foi adulterado? Assinaturas digitais (AD) fornecem uma solução confiável ao vincular os dados às credenciais únicas do remetente.

Este artigo demonstra uma implementação prática de AD para verificar a integridade de binários ELF de 64 bits no Linux. A abordagem usa um esquema de assinatura direta (sem árbitro terceirizado) e depende de uma chave privada para assinar e um certificado público para verificação.

Exemplo de Implementação de AD

Implementar a assinatura envolve os seguintes passos:

  1. Gerar um hash MD5 do binário de origem.
  2. Criar uma chave privada e um certificado público auto-assinado.
  3. Assinar o binário:
    • Criptografar o hash MD5 com a chave privada.
    • Armazenar o hash criptografado em uma nova seção .sig do arquivo ELF.
    • Salvar o certificado em ~/.ssh para verificação posterior.

Todo o processo pode ser automatizado usando openssl, objcopy e md5sum. Abaixo está um script de exemplo, sign_elf.sh, que automatiza a assinatura de binários ELF. (O código-fonte sem números de linha aparece ao final deste artigo.)

#!/bin/bash
KEY_DIR="$HOME/.ssh"
PRIVATE_KEY="$KEY_DIR/priv.key"
CERTIFICATE="$KEY_DIR/pub.crt"
SUBJECT="/C=BR/ST=Sao Paulo/L=Sao Paulo/O=MinhaEmpresa/OU=DEV/CN=www.minhaempresa.com"
if [ "$#" = "0" ]; then
  echo "Uso: sign_elf.sh [arquivos ELF]"
  exit 1
fi
[ ! -d "$KEY_DIR" ] && mkdir "$KEY_DIR"
# Gerar chave privada e 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 "Erro: arquivo não encontrado $ELF_BIN"
    exit 103
  fi
  # Remover seção .sig existente
  objcopy --remove-section=.sig "$ELF_BIN"
  # Adicionar seção .sig de 512 bytes preenchida com zeros
  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 do binário (com seção .sig)
  md5sum "$ELF_BIN" | awk '{ print $1 }' > "$KEY_DIR/$ELF_BIN_MD5"
  # Assinar o hash MD5 com a chave privada
  openssl dgst -sha256 -sign "$PRIVATE_KEY" -out "$KEY_DIR/$ELF_BIN_SIGNATURE" "$KEY_DIR/$ELF_BIN_MD5"
  # Verificar a assinatura imediatamente (opcional)
  openssl dgst -sha256 -verify <(openssl x509 -in "$CERTIFICATE" -pubkey -noout) -signature "$KEY_DIR/$ELF_BIN_SIGNATURE" "$KEY_DIR/$ELF_BIN_MD5"
  # Embutir o hash criptografado na seção .sig
  objcopy --update-section .sig="$KEY_DIR/$ELF_BIN_SIGNATURE" --set-section-flags .sig=noload,readonly "$ELF_BIN"
  # Exibir conteúdo da seção .sig para inspeção
  objdump -sj .sig "$ELF_BIN"
done
rm -f dummy.txt
ls -ls ~/.ssh
Figura 1. O processo de assinatura de um binário ELF. (Fonte: Auriga)

Detalhamento do Script

Linha 19 – Geração do Certificado

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

Após este passo, ~/.ssh/priv.key contém a chave privada e ~/.ssh/pub.crt o certificado. A chave privada criptografa dados; o certificado contém a chave pública necessária para verificação.

Loop sobre arquivos ELF

Cada binário especificado na linha de comando é processado sequencialmente. O script garante que qualquer seção .sig pré-existente seja removida antes de assinar novamente.

Gerenciamento de Seção

Cálculo do Hash

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

MD5 é computado sobre o binário, incluindo a seção .sig placeholder, e armazenado em binary_name.md5.

Assinando o Hash

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

O hash MD5 é criptografado com a chave privada, produzindo um arquivo de assinatura (ex.: binary_name.sha256).

Verificação (Opcional)

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

Esta etapa confirma que a assinatura corresponde ao hash usando a chave pública extraída do certificado.

Embutindo a Assinatura

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

O hash criptografado substitui o placeholder, finalizando o binário ELF assinado.

Executar o script em um conjunto de arquivos ELF produzirá binários assinados que podem ser distribuídos com segurança. O destinatário pode verificar integridade extraindo a seção .sig, descriptografando-a com o certificado público e comparando o hash resultante a um hash recém-computado do arquivo recebido.

Tecnologia da Internet das Coisas

  1. Impulsionando Sinergias IoT: Como o CoC de Conectividade da Bosch Molda um Futuro Conectado
  2. Preparando Suas Operações de Manufatura para IA com IoT
  3. Gêmeos Digitais: Desbloqueando IoT de Edge Inteligente na Manufatura – Parte 2
  4. Manutenção Preditiva: Aproveitando a Indústria 4.0 para Produção Ininterrupta
  5. Sua Fábrica Está Pronta para IoT? Um Guia Prático
  6. Seguros Digitais: 5 Tendências Revolucionando Como Compramos e Gerenciamos Coberturas
  7. Western Digital Lança Armazenamento 3D NAND 64-Camadas Rugged para Industrial IoT e Edge Computing
  8. Western Digital Lança Armazenamento 3D NAND 64-Camadas Rugged para IoT Industrial
  9. Por que Computação em Nuvem é Essencial para Armazenar Dados de IoT
  10. Aproveite a Indústria 4.0: Estratégias Comprovadas para Construir um Roteiro Digital Vencedor