• Arduino
    • Sensor
    • program Arduino
  • Project
  • Produk
  • IOT
Kamis, Oktober 2, 2025
mikroavr.com
No Result
View All Result
  • Login
  • Arduino
    • Sensor
    • program Arduino
  • Project
  • Produk
  • IOT
  • Arduino
    • Sensor
    • program Arduino
  • Project
  • Produk
  • IOT
No Result
View All Result
mikroavr
No Result
View All Result
Home Arduino

Enkripsi Data Lora pada Modul ESP32 Lora

Jimmi Sitepu by Jimmi Sitepu
Maret 1, 2020
0 0
0
Enkripsi Data Lora pada Modul ESP32 Lora
91
SHARES
2.4k
VIEWS
Share on FacebookShare on Twitter

Enkripsi

Enkripsi adalah menyamarkan data dengan menambah atau mencampur data dengan data data lain sehingga sulit di ketahui data nya tanpa ada nya key untuk membuka data itu. Data LoRa merupakan data publik jika dilihat cara kerja nya. Jika frequency nya berhasil kita dapatkan maka data LoRa yang ada bisa di baca jika tanpa menggunakan enkripsi.

Enkripsi Data Lora

Ada banyak logaritma enkripsi yang telah mendukung pada pemrograman Arduino. Mulai dari AES, AEAD algoritma, Hash, dan lain lain. Teman-teman bisa lihat list cryptographi Arduino pada web berikut ini.

READ ALSO

Membaca Sensor URM14 RS485 dengan ESP32 Arduino

4G GSM Modul Arduino SIM7600 Cocok Untuk ESP32, STM32 atau Arduino Mega

Cryptography Arduino library

Jika menggunakan protokol LoRawan yang ada, sesungguh nya data-data nya sudah ter enkripsi, tapi bagai manakah cara enkripsi data LoRa jika menggunakan protokol sendiri nya nanti? Yuk kita coba.

Enkripsi Data Sensor DHT21

Pada contoh kali kita akan enkripsi data suhu dan kelebaban dari sensor DHT21 pada Lora node ESP32 kemudian di kirim ke LoRa penerima, kemudian data yang ter enkripsi akan di dekripsi kembali untuk melihat data asli yang di terima. Dengan cara ini maka pihak ketiga yang ingin membaca data LoRa kita hanya akan mendapatkan data yang ter enkripsi. Tapi tidak mendapatkan data asli.

Alat dan Bahan

ESP32 LoRa Node
  1. Dua buah modul ESP32 Lora Custome, Pesan dengan click link ini
  2. Library Arduino LoRa, download dengan click link ini
  3. Library DHT, download dengan click link ini
  4. Library AESLib.h dengan click link ini

Untuk Proses instalasi hardware dan penjelasan program bisa teman-teman lihat pada video di bawah ini,

ESP32 LoRa Node Custome Mikroavr Bisa di lihat di link di bawah ini

click Tombol di bawah ini
ESP32 Lora Node Custome

Program Pengirim

Pada modul Lora ini dia akan membaca sensor DHT21 kemudian data di enkripsi dan kirim penerima (gateway). Program nya sebagai berikut.

ESP32 LoRa Gateway

 
#include "DHT.h"
#define DHTTYPE DHT21
#define DHTPIN 4
DHT dht(DHTPIN, DHTTYPE);

#include "AESLib.h"
AESLib aesLib;
  
#include "SPI.h"
#include "LoRa.h"

const int csPin = 5;          // LoRa radio chip select
const int resetPin = 26;        // LoRa radio reset
const int irqPin = 13;          // change for your board; must be a hardware interrupt pin

char cleartext[256];
char ciphertext[512];
// AES Encryption Key
byte aes_key[] = { 0x15, 0x2B, 0x7E, 0x16, 0x28, 0xAE, 0xD2, 0xA6, 0xAB, 0xF7, 0x15, 0x88, 0x09, 0xCF, 0x4F, 0x3C };
// General initialization vector (you must use your own IV's in production for full security!!!)
byte aes_iv[N_BLOCK] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
// Generate IV (once)

float h,t;
String strDHT;

void aes_init() {
  aesLib.gen_iv(aes_iv);
  // workaround for incorrect B64 functionality on first run...
  encrypt("HELLO WORLD!", aes_iv);
}

String encrypt(char * msg, byte iv[]) {  
  int msgLen = strlen(msg);
  char encrypted[2 * msgLen];
  aesLib.encrypt64(msg, msgLen, encrypted, aes_key,sizeof(aes_key) ,iv);  
  return String(encrypted);
}

/*String decrypt(char * msg, byte iv[]) {
  unsigned long ms = micros();
  int msgLen = strlen(msg);
  char decrypted[msgLen]; // half may be enough
  aesLib.decrypt64(msg, msgLen, decrypted, aes_key,sizeof(aes_key) ,iv);  
  return String(decrypted);
}
*/
void setup() {
  Serial.begin(115200);
  dht.begin();
  while (!Serial);
  aes_init();
  Serial.println("LoRa Sender");
  LoRa.setPins(csPin, resetPin, irqPin);
  if (!LoRa.begin(915E6)) {
    Serial.println("Starting LoRa failed!");
    while (1);
  }
}

void loop() {
  
  baca_dht21();
  Serial.println(cleartext);
  // Encrypt
  //sprintf(cleartext, "data : %i \n", 5);  
  byte enc_iv[N_BLOCK] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; // iv_block gets written to, provide own fresh copy...
  String encrypted = encrypt(cleartext, enc_iv);
  sprintf(ciphertext, "%s", encrypted.c_str());
  Serial.print("Ciphertext: ");
  Serial.println(encrypted);
  
   // send packet
  LoRa.beginPacket();
  LoRa.print(encrypted);
  LoRa.endPacket();

  // Decrypt
  //byte dec_iv[N_BLOCK] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; // iv_block gets written to, provide own fresh copy...
  //String decrypted = decrypt(ciphertext, dec_iv);  
  //Serial.print("Cleartext: ");
  //Serial.println(decrypted);  
  delay(3000);
}

void baca_dht21(){
  h = dht.readHumidity();
  t = dht.readTemperature();
  strDHT = String(h) + "," + String(t) + "#";
  strDHT.toCharArray(cleartext, strDHT.length()+1);
}

Penjelasan Penting

 byte aes_key[] = { 0x15, 0x2B, 0x7E, 0x16, 0x28, 0xAE, 0xD2, 0xA6, 0xAB, 0xF7, 0x15, 0x88, 0x09, 0xCF, 0x4F, 0x3C }; 

point penting pada program di atas adalah aes_key[]. Ini adalah key untuk membuka data yang ter enkripsi. Untuk mengenkripsi data maka key pada pengirim harus sama dengan key sebagai penerima. Berbeda satu bit saja maka data tidak akan bisa di dekripsi, penulis coba merubah key di atas seperti di bawah ini,

 byte aes_key[] = { 0x15, 0x2B, 0x7E, 0x16, 0x28, 0xAE, 0xD2, 0xA6, 0xAB, 0xF7, 0x15, 0x88, 0x09, 0xCF, 0x4F, 0x3D }; 

Fail Enkripsi

Dengan key yang cukup panjang di atas bisa di pastikan akan sangat sulit di dekripsi data Lora nya jika kita tidak tahu byte key si pengirim.

Program Penerima

Untuk Penerima LoRa kita menggunakan LoRa Gateway Custome. Sedikit berbeda dengan config pin pada Lora Node Custome. Untuk Program nya bisa dilihat di bawah ini.

#include "AESLib.h"
AESLib aesLib;
  
#include "SPI.h"
#include "LoRa.h"

const int csPin = 17;          // LoRa radio chip select
const int resetPin = 16;        // LoRa radio reset
const int irqPin = 27;          // change for your board; must be a hardware interrupt pin

char cleartext[256];
char ciphertext[512];
// AES Encryption Key
byte aes_key[] = { 0x15, 0x2B, 0x7E, 0x16, 0x28, 0xAE, 0xD2, 0xA6, 0xAB, 0xF7, 0x15, 0x88, 0x09, 0xCF, 0x4F, 0x3D};
// General initialization vector (you must use your own IV's in production for full security!!!)
byte aes_iv[N_BLOCK] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
// Generate IV (once)

int loopcount = 0;
String get_lora, buf_lora;
String decrypted, buf_decrypted;

void aes_init() {
  aesLib.gen_iv(aes_iv);
  // workaround for incorrect B64 functionality on first run...
  //encrypt("HELLO WORLD!", aes_iv);
}

/*String encrypt(char * msg, byte iv[]) {  
  int msgLen = strlen(msg);
  char encrypted[2 * msgLen];
  aesLib.encrypt64(msg, msgLen, encrypted, aes_key,sizeof(aes_key) ,iv);  
  return String(encrypted);
}
*/String decrypt(char * msg, byte iv[]) {
  unsigned long ms = micros();
  int msgLen = strlen(msg);
  char decrypted[msgLen]; // half may be enough
  aesLib.decrypt64(msg, msgLen, decrypted, aes_key,sizeof(aes_key) ,iv);  
  return String(decrypted);
}



void setup() {
  Serial.begin(115200);
  while (!Serial);

  Serial.println("LoRa Receiver");
  LoRa.setPins(csPin, resetPin, irqPin);
  if (!LoRa.begin(915E6)) {
    Serial.println("Starting LoRa failed!");
    while (1);
  }
}

void loop() {
  // try to parse packet
  int packetSize = LoRa.parsePacket();
  if (packetSize) {
    // received a packet
    Serial.print("data encrypted: '");

    // read packet
    while (LoRa.available()) {
      //Serial.print((char)LoRa.read());
      buf_lora += String((char)LoRa.read());
    }
    get_lora = buf_lora;
    buf_lora = "";
    // print RSSI of packet
    Serial.print(get_lora);
    Serial.print("' with RSSI ");
    Serial.println(LoRa.packetRssi());

    
    // Decrypt
    get_lora.toCharArray(ciphertext, get_lora.length()+1);
    byte dec_iv[N_BLOCK] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; // iv_block gets written to, provide own fresh copy...
    decrypted = decrypt(ciphertext, dec_iv);  
    Serial.print("data Decrypted: ");
    Serial.println(decrypted);
  }
}

Untuk Hasil penerima bisa dilihat pada gambar di bawah ini.

Dekripsi Data LoRa

Oke Teman-teman, dengan metode ini setidak nya data LoRa yang kita bangun akan sangat sulit di ambil oleh orang lain. Semoga Tutorial ini bermanfat

Thanks

Share91Tweet
Previous Post

ESP32 LoRa Node 923MhZ dengan ADC yang lebih Baik dan Stabil

Next Post

LoRa Shield Arduino Support Arduino Uno, Arduino mega dan Arduino Mega128

Jimmi Sitepu

Jimmi Sitepu

Hobbyist Embedded System, Robotic, IOT and write all about them. So we have nice quote "Learning and Sharing"

Related Posts

sensor URM14 Arduino
ESP32

Membaca Sensor URM14 RS485 dengan ESP32 Arduino

Juli 7, 2022
4G GSM Modul Arduino SIM7600 Cocok Untuk ESP32, STM32 atau Arduino Mega
Arduino

4G GSM Modul Arduino SIM7600 Cocok Untuk ESP32, STM32 atau Arduino Mega

Juni 13, 2022
Mendapatkan Waktu Akurat dengan NTP GPS
ESP32

Mendapatkan Waktu Akurat dengan NTP GPS

Mei 8, 2022
Custome GPS Logger Arduino dengan Akeses Internet SIM7600 4G
IOT

Custome GPS Logger Arduino dengan Akeses Internet SIM7600 4G

April 14, 2022
Tutorial Menggunakan Weather Station DFRobot SEN0186 dengan Arduino ESP32
Arduino

Tutorial Menggunakan Weather Station DFRobot SEN0186 dengan Arduino ESP32

Maret 9, 2022
ethernet arduino
Arduino

Arduino Ethernet Tutorial, Project dengan Arduino Uno dan Mega

Februari 24, 2022
Next Post
LoRa Shield Arduino Support Arduino Uno, Arduino mega dan Arduino Mega128

LoRa Shield Arduino Support Arduino Uno, Arduino mega dan Arduino Mega128

Merubah ATmega128 menjadi Arduino ATmega128

Merubah ATmega128 menjadi Arduino ATmega128

Please login to join discussion

Tulisan Terbaru

sensor URM14 Arduino

Membaca Sensor URM14 RS485 dengan ESP32 Arduino

Juli 7, 2022
4G GSM Modul Arduino SIM7600 Cocok Untuk ESP32, STM32 atau Arduino Mega

4G GSM Modul Arduino SIM7600 Cocok Untuk ESP32, STM32 atau Arduino Mega

Juni 13, 2022
Mendapatkan Waktu Akurat dengan NTP GPS

Mendapatkan Waktu Akurat dengan NTP GPS

Mei 8, 2022
Custome GPS Logger Arduino dengan Akeses Internet SIM7600 4G

Custome GPS Logger Arduino dengan Akeses Internet SIM7600 4G

April 14, 2022
Tutorial Menggunakan Weather Station DFRobot SEN0186 dengan Arduino ESP32

Tutorial Menggunakan Weather Station DFRobot SEN0186 dengan Arduino ESP32

Maret 9, 2022
ethernet arduino

Arduino Ethernet Tutorial, Project dengan Arduino Uno dan Mega

Februari 24, 2022

Browse by Category

  • Arduino
  • Ebook
  • ESP32
  • IOT
  • jasa
  • Komponen
  • PCB
  • Produk
  • program Arduino
  • Project
  • Rangkaian
  • Sensor
  • Tips
  • Uncategorized

Recent News

sensor URM14 Arduino

Membaca Sensor URM14 RS485 dengan ESP32 Arduino

Juli 7, 2022
4G GSM Modul Arduino SIM7600 Cocok Untuk ESP32, STM32 atau Arduino Mega

4G GSM Modul Arduino SIM7600 Cocok Untuk ESP32, STM32 atau Arduino Mega

Juni 13, 2022
  • About US
  • Blog
  • MIKROAVR

© 2020 mikroavr.com - Learning and sharing.

Welcome Back!

Sign In with Google
OR

Login to your account below

Forgotten Password?

Retrieve your password

Please enter your username or email address to reset your password.

Log In

Add New Playlist

No Result
View All Result
  • About US
  • Blog
  • MIKROAVR

© 2020 mikroavr.com - Learning and sharing.