IoT Siber Güvenliği: ESP32 Onion Routing Simülasyonu ve Node Zinciri

Bu yazımızda, ESP32 Onion Routing kullanarak 3 düğümlü bir simülasyonu gerçekleştireceğiz. Onion Routing, internet trafiğini anonimleştirmek ve gizlilik sağlamak için kullanılan bir yöntemdir. Bu yöntemde veri paketleri, birden fazla katmanlı şifreleme aşamasından geçerek ağda yönlendirilir. Her düğüm (node), yalnızca bir sonraki hedefi bilir ve şifreli bir mesajın sadece kendi katmanını çözebilir. Önceki ESP32 içeriklerine buradan ulaşabilirsinizi. Ayrıca, IoT siber güvenliği içeriklerine de buradan ulaşabilirsiniz.

⚠️ Yasal Uyarı:

Bu içerik yalnızca eğitim ve bilgi amaçlı olarak hazırlanmıştır. İçerikte belirtilen yöntemlerin kötüye kullanımı yasalara aykırı olabilir ve sorumluluk tamamen kullanıcının kendisine aittir.

Her zaman yasalara uygun hareket etmeniz ve izinsiz girişimlerde bulunmamanız gerektiğini unutmayın. Yazar ve devreyakan.com, bu bilgilerin kötüye kullanılmasından doğabilecek yasal veya teknik sorunlardan sorumlu tutulamaz.

Onion Routing Nedir?

Onion Routing, adını bir soğanın katmanlarına benzer şekilde çalışmasından alır. Mesajın hedefe ulaşana kadar geçtiği her düğüm, sadece kendisi için ayrılmış bir şifreleme katmanını çözebilir. Bu yapı, hem gönderici hem de alıcı arasında yüksek seviyede anonimlik sağlar. Bu sayede mesajlar şifreleri katmanlar aracılığıyla taşınır.

ESP32 Onion Routing

Onion Routing’in temel avantajları:

  • Anonimlik: Her düğüm, yalnızca bir önceki ve bir sonraki düğümün bilgilerine sahiptir.
  • Güvenlik: Şifreleme sayesinde mesajın içeriği her aşamada gizli tutulur.
  • Esneklik: IoT gibi ağlarda uygulanabilir.

ESP32 Onion Routing Simülasyonu

Bu simülasyonda, ESP32 cihazlarını kullanarak bir ağ yapısı oluşturacağız. Her cihaz bir düğüm (node) görevi görecek:

  1. Node 1 (Başlangıç): Mesajı şifreler ve Node 2’ye gönderir.
  2. Node 2 (Ara Düğüm): Gelen mesajın sadece kendi şifreleme katmanını çözer ve Node 3’e iletir.
  3. Node 3 (Son Düğüm): Mesajı tamamen çözer ve orijinal içeriği alır.

Aşağıdaki adımlarda, her bir düğüm için kodları ve yapılandırmayı inceleyeceğiz.


Node Yapılandırması

IP Adresleri ve Anahtarlar

Her düğümün sabit bir IP adresi olacak:

  • Node 1: 192.168.1.10
  • Node 2: 192.168.1.20
  • Node 3: 192.168.1.30

Her düğüm, mesajın şifrelenmesi veya çözülmesi için bir şifreleme anahtarına sahiptir. Bu anahtarlar mesajın farklı katmanlarında kullanılır.


ESP32 Onion Routing Simülasyon Kodları

Node 1: Başlangıç Düğümü

Node 1, mesajı ilk şifreleme katmanına alır ve Node 2’ye gönderir.

#include <WiFi.h>
#include <Crypto.h>
#include <AES.h>

const char* ssid = "WiFi_ADI";
const char* password = "WiFi_SIFRESI";

WiFiClient client;

byte key1[16] = { /* 16-byte şifreleme anahtarı */ };

struct Layer {
  char ip[16];
  byte message[16];
};

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("WiFi'ye bağlanılıyor...");
  }
  Serial.println("WiFi bağlantısı başarılı!");

  String mesaj = "Gizli Mesaj";
  Layer layer1;
  strcpy(layer1.ip, "192.168.1.20"); 

  AES aes;
  aes.setKey(key1, sizeof(key1));
  aes.encryptBlock(layer1.message, (byte*)mesaj.c_str());

  if (client.connect("192.168.1.20", 1234)) {
    client.write((byte*)&layer1, sizeof(layer1));
    client.stop();
    Serial.println("Şifreli mesaj Node 2'ye gönderildi.");
  }
}

void loop() {}

Node 2: Ara Düğüm

Node 2, şifreleme katmanını çözer ve mesajı Node 3’e iletir.

#include <WiFi.h>
#include <Crypto.h>
#include <AES.h>

const char* ssid = "WiFi_ADI";
const char* password = "WiFi_SIFRESI";

WiFiServer server(1234);
WiFiClient client;

byte key2[16] = { /* 16-byte şifreleme anahtarı */ };

struct Layer {
  char ip[16];
  byte message[16];
};

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("WiFi'ye bağlanılıyor...");
  }
  Serial.println("WiFi bağlantısı başarılı!");
  server.begin();
}

void loop() {
  client = server.available();
  if (client) {
    Layer receivedLayer;
    client.readBytes((byte*)&receivedLayer, sizeof(receivedLayer));

    AES aes;
    aes.setKey(key2, sizeof(key2));
    byte decryptedMessage[16];
    aes.decryptBlock(decryptedMessage, receivedLayer.message);

    strcpy(receivedLayer.ip, "192.168.1.30"); 
    if (client.connect("192.168.1.30", 1234)) {
      client.write((byte*)&receivedLayer, sizeof(receivedLayer));
      client.stop();
      Serial.println("Şifre çözülmüş mesaj Node 3'e gönderildi.");
    }
  }
}

Node 3: Son Düğüm

Node 3, mesajın tüm şifreleme katmanlarını çözer ve orijinal mesajı gösterir.

#include <WiFi.h>
#include <Crypto.h>
#include <AES.h>

const char* ssid = "WiFi_ADI";
const char* password = "WiFi_SIFRESI";

WiFiServer server(1234);

byte key3[16] = { /* 16-byte şifreleme anahtarı */ };

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("WiFi'ye bağlanılıyor...");
  }
  Serial.println("WiFi bağlantısı başarılı!");
  server.begin();
}

void loop() {
  WiFiClient client = server.available();
  if (client) {
    byte encryptedMessage[16];
    client.readBytes(encryptedMessage, sizeof(encryptedMessage));

    AES aes;
    aes.setKey(key3, sizeof(key3));
    byte decryptedMessage[16];
    aes.decryptBlock(decryptedMessage, encryptedMessage);

    Serial.println("Gelen Mesaj: ");
    Serial.println((char*)decryptedMessage);
  }
}

Sonuç

Bu simülasyon ile ESP32 Onion Routing ağını başarıyla oluşturabilirsiniz. Bu yapı, IoT projelerinde güvenliği artırmak ve anonimlik sağlamak için bir başlangıç noktası sunar. Onion routing hakkında IEEE TCSP’de yayınlananmakaleye buradan ulaşabilirsiniz.

Uyarılar ve İyileştirme Önerileri

  • Gerçek Şifreleme Anahtarları: Kodda kullanılan anahtarlar güçlü bir şekilde oluşturulmalıdır.
  • Ağ Güvenliği: Yerel ağın güvenli olduğundan emin olun.

Yorum yapma özelliği, forum tarafından gelen istek sebebiyle kapatılmıştır. Lütfen tartışmalar ve sorularınız için topluluk forumumuza katılın.