Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Industrial Internet of Things >> Teknologi Internet of Things

Menggunakan tanda tangan digital untuk pemeriksaan integritas data di Linux

Pengantar

Salah satu pertanyaan terpenting di dunia saat ini adalah pertanyaan tentang kepercayaan pada data yang diterima. Misalnya, pengguna mengirimkan data D ke pengguna B melalui email. Bagaimana pengguna B dapat yakin bahwa data yang diterima adalah data yang sama dengan yang dikirimkan oleh pengguna A? Salah satu cara yang mungkin untuk mengatasi masalah ini adalah menggunakan tanda tangan digital (DS). Persyaratan berikut berlaku untuk DS:

Artikel ini membahas contoh implementasi DS untuk pemeriksaan integritas file biner di Linux (ELF 64-bit). Kami akan menggunakan DS langsung ketika hanya pengirim dan penerima yang berkomunikasi (tanpa pihak ketiga/arbiter). Kami akan membutuhkan kunci enkripsi pribadi dan kunci publik (sertifikat) untuk ini. Pengirim membuat kedua kunci. Pengguna A menandatangani file yang dapat dieksekusi dan memberikan sertifikat kepada pengguna B dengan bantuan sarana pengiriman yang aman. Setelah ini, pengguna A mengirimkan file yang ditandatangani ke pengguna B. Pengguna B menjalankan file yang diterima; jika file biner rusak, pengguna B akan menerima pesan bahwa verifikasi DS telah gagal. Untuk mengimplementasikan solusi ini, kita memerlukan program untuk menandatangani file biner dan kode yang memverifikasi DS.

Contoh penerapan DS

Implementasi DS mencakup langkah-langkah berikut:

  1. Pembuatan file biner sumber MD5;

  2. Pembuatan dua kunci:privat dan publik (sertifikat).

  3. Penandatanganan file biner (ELF):
    1 MD5 dari file biner dienkripsi dengan bantuan kunci pribadi;
    3.2 ​​MD5 terenkripsi ditulis ke .sig . baru bagian dari file biner;
    3.3 Sertifikat disimpan ke folder ~/.ssh.

Semua ini dapat diimplementasikan dengan bantuan utilitas Linux openssl, objcopy, dan md5sum. Di bawah ini Anda dapat menemukan contoh skrip sign_elf.sh yang menandatangani file biner ELF. (Catatan:sumber tanpa nomor baris disertakan di akhir artikel ini.)

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 "Penggunaan:sign_elfs.sh ... "010 exit 1;011 fi012 013 jika [ ! -d "$KEY_DIR"]; kemudian014 # Kontrol akan masuk di sini jika $DIRECTORY tidak ada.015 mkdir "$KEY_DIR"016 fi017 018 # Buat kunci pribadi dan sertifikat019 openssl req -nodes -x509 -sha256 -newkey rsa:4096 -keyout "$PRIVATE_KEY" -out " $SERTIFIKAT" -hari 365 -subj "$SUBJECT"020 021 untuk ELF_BIN di $@; 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 jika [ !026 027 -f "$ELF_BIN" ] || [ "x$ELF_BIN" ="x" ];then028 echo "Error:tidak ada file $ELF_BIN"029 exit 1030 fi031 032 # Hapus .sig section033 objcopy --remove-section=.sig "$ELF_BIN"034 035 # Tambahkan Bagian 512-byte diisi dengan zeros036 rm -f dummy.txt037 sentuh dummy.txt038 truncate --size=512 dummy.txt039 objcopy --add-section .sig=dummy.txt --set-section-flags .sig=noload, readonly "$ELF_BIN"040 041 # Buat MD5 hash042 md5sum "$ELF_BIN" | awk '{ print $1 }'> "$KEY_DIR/$ELF_BIN_MD5"043 044 # Enkripsi hash MD5 menggunakan private key045 openssl dgst -sha256 -sign "$PRIVATE_KEY" -out "$KEY_DIR/$ELF_BIN_SIGNATURE" "$KEY_DIR/$ELF_BIN_MD5" 046 047 # Validasi hash MD5 terenkripsi menggunakan certificate048 openssl dgst -sha256 -verify <(openssl x509 -in "$CERTIFICATE" -pubkey -noout) -signature "$KEY_DIR/$ELF_BIN_SIGNATURE" "$KEY_DIR/$ELF_BIN_MD5"049 050 hash MD5 terenkripsi menjadi biner ELF menjadi .sig section051 echo "Tambahkan .sig section"052 objcopy --update-section .sig="$KEY_DIR/$ELF_BIN_SIGNATURE" --set-section-flags .sig=noload,readonly "$ELF_BIN " "$ELF_BIN"053 054 # Cetak .sig bagian055 echo "Periksa bagian .sig"056 objdump -sj .sig "$ELF_BIN"057 done058 059 rm -f dummy.txt060 061 ls -ls ~/.ssh


Gambar 1. Proses penandatanganan ELF biner. (Sumber:Auriga)

Mari kita jelajahi detail dari apa yang dilakukan skrip ini.

Baris 19:

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

req — permintaan pembuatan sertifikat

-nodes — buat kunci plaintext pribadi

-x509 — keluaran — sertifikat yang ditandatangani sendiri

-sha256 — algoritma enkripsi

-newkey rsa:4096 — buat sertifikat baru dan kunci privat RSA, jumlah bit — 4096

-keyout $PRIVATE_KEY — jalur ke file tempat kunci privat ditulis

-out $CERTIFICATE — jalur ke file tempat sertifikat ditulis hingga hari 365 — jumlah hari untuk pengakuan sertifikat

-subj $SUBJECT — subjek sertifikat baru (harus memiliki format /type0=value0/type1=value1/type2=…). Dalam kasus kami, ini adalah /C=RU/ST=Nizhni Novgorod/L=Nizhniy Novgorod/O=Auriga/OU=DEV/CN=www.auriga.com, di mana
     С — negara
     ST — negara bagian, wilayah, provinsi
     L — lokasi
     O — organisasi
     OU — departemen/unit organisasi
     CN — judul dasar/nama wadah

Subjek dijelaskan secara rinci dalam RFC-5280 (https://tools.ietf.org/html/rfc5280). Setelah perintah ini dijalankan, kunci pribadi akan dibuat, ~/.ssh/priv.key dan sertifikat ~/.ssh/pub.crt. Kunci pribadi akan digunakan untuk mengenkripsi data, dan sertifikat akan digunakan untuk dekripsi data. Dengan menggunakan satu kunci pribadi, dimungkinkan untuk menghasilkan sejumlah sertifikat unik untuk mendekripsi data yang dienkripsi dengan kunci pribadi ini.

Baris 21:

untuk ELF_BIN di $@; lakukan

Awal loop untuk semua file biner yang ditambahkan ke skrip sign_elf.sh.

Baris 33:

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

Hapus .sig bagian dari file biner kami. Ini perlu dilakukan jika file sudah ditandatangani dengan skrip kami dan kami ingin menandatanganinya kembali.

Baris 36+:

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

Buat file teks 512-byte dan tambahkan ke file biner kita yang tidak dimuat pada runtime .sig bagian hanya untuk membaca, yang berisi data dari file dummy.txt.

Baris 42:

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

Hitung MD5 dari file biner (dengan .sig section) dan tulis hasilnya ke file teks, binary_name.md5.

Baris 45:

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

Perintah ini mengenkripsi file dengan MD5 yang dibuat oleh baris 42 dengan kunci pribadi. Argumen:

dgst — opsi ini menunjukkan bahwa kita ingin mengenkripsi (menandatangani) data;

-sha256 — algoritma enkripsi;

-sign $PRIVATE_KEY — mengenkripsi file dengan bantuan kunci pribadi $PRIVATE_KEY;

-keluar $KEY_DIR/$ELF_BIN_SIGNATURE — data terenkripsi disimpan ke file $KEY_DIR/$ELF_BIN_SIGNATURE;

$KEY_DIR/$ELF_BIN_MD5 — file teks berisi data yang akan dienkripsi.

Baris 48:

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

Verifikasi file yang ditandatangani. Dapat dipahami dengan mengacu pada baris ini bahwa untuk verifikasi DS kita memerlukan data terenkripsi, sertifikat yang akan membantu kita melakukan verifikasi dan verifikasi data. Artinya, jika

x — data terenkripsi,
y — sertifikat,
z — data verifikasi,

lalu

f(x,y) =z

Baris 52:

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

Hapus .sig . yang lama bagian dan tambahkan yang baru ke file $ELF_BIN (binary_name). Sebagai data untuk .sig new baru bagian, data dari file yang ditandatangani $KEY_DIR/$ELF_BIN_SIGNATURE (~/.ssh/binary_name.sha256) digunakan.


Teknologi Internet of Things

  1. Menggunakan sinergi untuk perusahaan yang terhubung
  2. Bagaimana Anda bersiap untuk AI menggunakan IoT
  3. Digital Twins dapat menjadi keunggulan cerdas untuk IoT di sektor manufaktur – Bagian 2
  4. Pemeliharaan di dunia digital
  5. Apakah sistem Anda siap untuk IoT?
  6. Asuransi Digital:5 tren digital yang membentuk industri asuransi
  7. Western Digital Memulai Produk 3D NAND Baru untuk IIoT 
  8. Western Digital Memulai Produk 3D NAND Baru untuk IIoT 
  9. Manfaat Menggunakan Cloud Computing untuk Menyimpan Data IoT
  10. Teknologi Industri 4.0:Kiat untuk Mengembangkan Strategi Digital Anda