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.
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.
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:
- Node 1 (Başlangıç): Mesajı şifreler ve Node 2’ye gönderir.
- Node 2 (Ara Düğüm): Gelen mesajın sadece kendi şifreleme katmanını çözer ve Node 3’e iletir.
- 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.