2008’de Bitcoin’in yaratılmasından bu yana blockchain yeni bir devrim yaratacak teknoloji olarak baş gösteriyor.
Blockchain, Bitcoin’in temel teknolojisi olarak çıkmasına rağmen, kullanım alanları IoT (Nesnelerin İnterneti), güvenlik sistemleri, borsa ve daha nicesine kadar uzanıyor. Şu anda birçok halka açık ve özel sektör bu teknolojiyle ilgileniyor. Bunun dışında, yazılım ve donanım gelişiminin sebebi olarak, IoT’nin başlangıcı görülmek istenir. IoT cihazlarının birbirleriyle iletişim kurması ve senkronize olması gerekir. Ancak binlerce veya on binlerce IoT cihazının bağlı olduğu durumlarda mevcut sunucu-alıcı modelinin birkaç engel ve sorun yaratabileceği düşünülüyor. Bu yüzden, IoT sistemi kurmak için Blockchain önerilir. Blockchain’i kullanarak IoT cihazları kontrol edilebilir ve yapılandırılabilir.
Açık anahtarların Ethereum’da, özel anahtarların da kişisel cihazlarda depolandığı RSA Açık Anahtar Kriptosistemleri’ni kullanarak anahtarları yönetiyoruz. Blockchain platformu olarak özellikle Ethereum’u kullanıyoruz çünkü akıllı kontrat kullanarak kendi yazdığımız Turing-tamamlanmış kodu Ethereum üzerinde çalıştırabiliyoruz. Böylece IoT cihazlarının yapılandırmasını kolaylıkla yönetebiliyoruz ve anahtar yönetim sistemi kurabiliyoruz. Hiç uğraşmadan hesabı anahtar yönetim sistemi olarak kullanabiliyor olsak da — ki çoğu Blockchain platformu buna izin veriyor — Ethereum kullanmayı seçiyoruz çünkü sistemi bu şekilde daha detaylı bir şekilde yönetebiliriz.
Kavramın ispatı için (proof of concept), binlerce cihazdan oluşan bütün bir IoT sistemi yerine birkaç IoT cihazı kullanıyoruz. Fakat, sonraki çalışmalarımızda Blockchain’i kullanarak tamamen ölçeklendirilmiş bir IoT sistemi kurmayı düşünüyoruz.
GİRİŞ
Satoshi Nakamoto tarafından 2008 yılında başlatılan Bitcoin’in çıkışından bu yana çoğu insan Bitcoin’e yatırım yaptı veya Bitcoin için tahminlerde bulundu. Bitcoin’in hali hazırda ekonomik, filozofik ve teknik önemi olsa bile blockchain ve dağıtık defter olmadan bunların hiçbir anlamı kalmazdı. Bitcoin’in bu başarısından sonra blockchain teknolojisi temelli birçok kripto para ortaya çıktı.
Kripto paraların yanında, birçok alan, blockchaine uyuyor. Bunun yanında, Bitcoin büyük bir başarı olmasına rağmen, birçok sınırlamaya sahip. Öncelikle, Bitcoin’in blok üretim periyodu 10 dakikadır ki bu işlem yapmak için uzun bir süre. İkinci olarak, UTXO (Harcanmamış İşlem Çıktıları) gibi işlemlerin kaydını tutmasına ve yazılım kodlarını desteklemesine rağmen, döngüleri kullanamıyor. Bir başka deyişle, Turing tamamlanmış değil. Bu kısıtlamalarla beraber, Ethereum burada rol oynuyor.
Ethereum, 12 saniyelik blok periyodu ile geliştiricilerin akıllı kontrat yapmasını sağlıyor. Bir başka deyişle, geliştiriciler, Ethereum’da çalışabilen bir program yazabiliyor. Blockchain üzerinde çalıştığı için geliştiriciler ve kullanıcılar, programın izin olmadan değiştirilemeyeceğini ve Ethereum üzerinde şeffaf olduğunu farz ediyor. Basitçe, Ethereum’u devasa olarak paylaşılmış bir bilgi işlem sistemi olarak düşünebiliriz.
Ethereum’u kullanarak IoT (Nesnelerin İnterneti) cihazlarını konfigüre edebiliriz. Kimlik doğrulaması yapmak için açık anahtar altyapısını yönetebiliriz. IoT cihazları, Ethereum’a davranışlarını güncellemek için güvenebilir.
IoT çağı başladığı için, birçok alan IoT’a uyum sağlıyor. Fabrika cihazları gibi birden çok cihazın bağlanması gereken yerler, bu teknolojiyi kullanmak için girişimlerde bulunuyor. Lâkin burada birkaç sorun var. Öncelikle, yüzden fazla cihaz birbirine bağlı olduğu için tüm cihazları birbiri ile senkronize etmek güç olacaktır. İkinci olarak, diğer birçok sunucu-alıcı modelinde olduğu gibi, eğer sunucu savunmasız durumdaysa, sunucuya güvenen tüm cihazların başı belaya girecektir. Ancak, blockchain’de IoT kullanmak, IoT cihazlarının dağıtık defter sayesinde birbiri ile kolaylıkla senkronize olmasını sağlayacaktır. Ayrıca blockchain, consensus (ortak görüş) algoritmasını kullanarak OPCODE sorunları gibi doğuştan sorunlar olmadığı sürece kendisine veri işlenmesini veya DOS (servisin reddi) saldırısına uğramayı zorlaştırır.
Tüm bu sebeplerden, IoT cihazlarını yönetmede Ethereum kullanmayı öneriyoruz. Ethereum’daki Akıllı Kontrat’ı kullanarak, IoT’daki nesnelerin davranışlarını belirleyen kodlar yazabiliriz. Ayrıca, akıllı kontratta, açık anahtar altyapısını oluşturabiliriz ki böylelikle saldıranlar Ethereum’daki yönetim sistemini ele geçiremez. Başlangıçta, içinde Raspberry Pi ve akıllı telefon olan bir kavram ispatı başlatıyoruz. Modeli tamamladığımızda Ethereum’da, tamamen ölçeklendirilmiş bir IoT sistemi kurmayı düşünüyoruz.
Ethereum
2013’te Vitalik Buterin tarafından önerilen Ethereum, dağıtık, halka açık, blockchain tabanlı işletim platformudur.
Önceki blockchain platformlarından (Bitcoin gibi) farklı olarak 12 saniye gibi bir işlem süresine sahip olması nedeniyle performansı şu andaki çoğu bilgisayardan yavaş olsa bile bir bilgisayar gibi çalışabilir. Ancak, kendine ait Solidity veya Serpent gibi dillere sahip olduğu için geliştiricilere program yazma veya derleme şansı tanır. Derlendiğinde, Ethereum Virtual Machine (Ethereum Sanal Makinesi)’nde çalışabilir. Diğer herhangi bir bilgi işlem ortamında olduğu gibi, derlenen kod, Ethereum Virtual Machine’de önce makine diline daha sonra da binary (ikili) koda çevrilir.
Özetle, Ethereum bilgi işlem sistemini blok zinciriyle birleştirmesi bakımından kendine özgüdür ve çağ açan bir platformdur çünkü geliştiricilere blockchainde çalışacak kodları yazma esnekliğini verir. Kodu kötü amaçla değiştirmek zor olacağından, kullanıcılar kodun çalışması gerektiği gibi çalışacağına güvenirler.
Son zamanlarda, DOS veya DAO gibi saldırılar gerçekleşmiş olmasına rağmen, bu saldırının sebebi akıllı kontratın açıklarından veya makine dilinin gaz fiyatından kaynaklanıyordu, Ethereum veya blok zincirinin sahip olduğu açıklardan değil.
Özetle, sistem bir kere sabit hale getirildiğinde ve sonrasında daha da oturaklı bir hal aldığında, bu sistem daha iyi bir hal alacaktır. Sistem sabitleştirildiği takdirde, birçok alanda kullanılabilecektir.
Ethereum’un kullanıcıların akıllı kontrat kodlarını okuyabilme iznine sahip olmasından kaynaklanan şeffaflığı, iddia veya kumar servislerinin bu platformda uygulanabilmesini sağlar. Oy kullanma servisleri yüksek güvenle kolay bir şekilde uygulanabilir. Bu yüzden, birçok şirket, endüstri ve insan Ethereum’dan kendi nasibini almaya çalışmaktadır.
Ethereum Kullanarak IoT Cihazlarını Yönetme
Bu kısımda, Ethereum kullanarak IoT cihazlarını nasıl yönetebileceğimizi söyleyeceğiz.
Senaryo
Daha önce de belirttiğimiz gibi, kavramın kanıtını oluşturmak için binlerce cihaz yerine birkaç IoT cihazı kullandık. Yani, bir akıllı telefon ve üç tane Raspberry Pi kullanıyoruz. Bu üç Raspberry Pi’yi elektrik kullanımını ölçen cihaz, ampul ve klima olarak kullanıyoruz çünkü gerçekten bir klima kullanırsak bu bize pahalıya patlayacaktır.
Akıllı telefon ile beraber, kullanıcı politikayı ayarlayabilir. Örneğin, kullanıcı cihazları elektrik kullanımı 150 kW’a ulaştığında güç tasarrufu moduna almayı seçebilir. Kullanıcı yapılandırmayı akıllı telefon kullanarak yaptığında, veriler Ethereum ağına gönderilir. Bu sırada, ampul veya klima gibi cihazlar Ethereum’dan politikayla ilgili değerleri periyodik olarak alır.
Aynı zamanda, ölçüm yapan cihaz, elektrik kullanımını kaydeder ve Ethereum’a gönderir. Toparlayacak olursak, üç farklı işlem de aynı anda gerçekleşmektedir. Aşağıdaki resim, bu senaryonun bir diyagramıdır.
Ethereum Modeli
Sunucu-alıcı modelinden farklı olarak, Ethereum dağıtık bir işletim sistemidir yani tüm katılımcı bireyler Ethereum’un blok zincirinin bir parçasını içermektedir. Yukarıdaki şema, kolaylık olarak sunucu-alıcı modeline benzese de, asıl model blok zincirine katkıda bulunan her birimin blok zincirini kısmen veya tamamen içermesi bakımından farklı gözüküyor.
Aşağıdaki şemada gösterildiği gibi, güncelleme veya işlem yapan her cihaz, servise gönderim yapmak yerine, Ethereum içeriyor.
Blockchain, katkı sağlayan cihazlarda kısmen bulunduğu için, işlemler, consensus algısıyla yapılır ve kaydedilir yani dışarıdan bir değişime izin verilmez. Bu karakteristiği anlamak bize birçok saldırıya dayanabilecek IoT sistemini kurmayı sağlar. Bize bu proje için birkaç cihaz verilmiş olmasına rağmen, yüzlerce cihazı senkronize etmek dahi mümkündür.
Akıllı Kontrat
Ethereum’un en önemli özelliklerinden biri de akıllı kontrattır. Bu kavram ilk kez 1994 yılında Nick Szabo tarafından tanıtılmıştır ve böylelikle akıllı kontrat, blok zincirine yeni bir soluk getirmiştir.
Ethereum, akıllı kontratı blok zincirinin üzerinde kullanır ve bu sayede geliştiriciler blok zinciri üzerinde bir program yazabilir. Yani Ethereum’u bir işletim platformu olarak kullanabiliriz.
Ethereum’da LLL, Solidity ve Serpent gibi yazılım dilleri vardır. Solidity ise en yaygın olarak kullanılan dil ve derleyicidir. Bu yüksek seviye dil geliştirildiğinde ilk önce byte kodlarına dönüştürülür. Bu byte kodları da Ethereum’a geçirilir. Ve byte kodları basit anlamda makine dili olduğu için, Ethereum düğümleri, karışılık veren kontrat geçerli hesaptan uygulandığında kodda yazan talimatları uygular.
Deneyimlemek için, üç tane akıllı kontrat yazdık. Bir tanesini, ölçüm yapan cihazın değerini takip etmesi için, diğer ikisini ise tüm ampullerin ve klimaların politika değerlerini kaydetmesi için yazdık. Geçerli hesabı doğrulamak için, her kontrata imza ve açık anahtar ekledik. Böylece, eğer kötü amaçlı saldıranlar akıllı kontrattaki depolamayı değiştirmeye çalışırsa, klimadaki veya ampuldeki işletim sistemleri saldırıyı tespit edecektir ve bu saldırıyı anında püskürtecektir.
Ölçüm Kontratı
Bir akıllı kontratta, ölçüm cihazı periyodik olarak elektrik kullanımını kaydeder. Yani, Ethereum hesabı içeren Raspberry Pi ölçüm cihazını izleyen ve verileri Ethereum’a gönderen bir IoT cihazı gibi davranır. Bu cihaz, gönderen kişinin kimliğini göstermek için, gönderen kişiden elektrik kullanımıyla beraber açık anahtarını ve imzasını almalıdır.
Yukarıdaki görselde de gördüğümüz gibi, burada gayet düz bir mantık vardır. Ethereum blok zincirini içeren ölçüm cihazı, value, publicKey ve signature’ın girdilerini basit bir şekilde imzalayıp gönderebilir. Her kontratın kendine özel bir adresi olduğu için veriyi nereye göndereceğimizi biliyoruz. “update” metodunu kullanmak için, girdi değerlerini şifrelememiz gerek ki bu değerler Ethereum Sanal Makinesi’nde çalışabilsin. Örneğin, eğer update(300, “deadbeef”, “babebabe”)’i çalıştırmak istersek önce onu binary’e çevirmemiz gerek. Şifrelemeyi gerçekleştirdiğimizde, aşağıdaki çıktıyı elde ederiz:
Şifrelemenin tam açıklaması bu makalede anlatılmamasına rağmen, Ethereum’un genel yapısını anlamak için şifrelemenin açıklamasının üzerinden geçebiliriz. “update(int,bytes,bytes)”ı çalıştırmak için onu Keccak-256 kullanarak hashlemeleyiz ve hashlenmiş çıktının ilk dört byte’ını almalıyız. Yani, Keccak256(“update(int,bytes,bytes)”)’ın çıktısının ilk dört byte’ı olan f1d38ccb bize lazımdır. 12c, 300’e denktir. “deadbeef” ve “babebabe” ise byte’larımızın girdileridir. Arada kalan değerler, byte’ların değerlerini ve ofset’leri belirtir.
Sonuç olarak ölçüm kontratı kullanmak, Ethereum hesabına bağlı olan ölçüm cihazının blok zincirine periyodik olarak klima ve ampul gibi diğer birimlerin alabileceği değerler göndermesini sağlayabilir.
Politika Kontratı:
Ölçüm cihazıyla beraber, birkaç politika da ayarlamamız gerek. Senaryoda belirtildiği gibi, klima ve ampul için politika kurmak istedik. Klimanın politikasını 150 kW olarak belirlediğimiz için, ölçüm cihazı 150 kW’a ulaştığında, klima anında normal moddan güç tasarrufu moduna geçecektir.
Aynı senaryo ampul için de geçerlidir. Ölçüm kontratında olduğu gibi, politikanın kaydedilmesi gerek. Lâkin kayıt için, ölçüm cihazı yerine akıllı telefon kullanıyoruz. Ethereum hesabının bulunduğu akıllı telefon, politikaları yöneten akıllı kontrata verileri gönderebilir.
Ethereum hesabı, politikayı açık anahtarla ve imzayla şifreleyince ardından da bu şifrelenmiş politikayı Ethereum’a gönderince, bu değerler kontrata kaydedilir.
Anahtar Yönetimi
Tüm bu kontratlar Ethereum üzerinde çalışıyor olduğu için, klima veya ampul gibi IoT cihazlarının hem ölçüm kontratından hem de politika kontratından değerler alması gerekir. Ölçüm kontratından gelen değerlerin girdilerinin geçerli olup olmadığını açık anahtar ve imza kullanarak kontrol ederler.
Daha net bir şekilde açıklayacak olursak, akıllı telefonun ve ölçüm cihazının gizli anahtarlarını sakladığı bir algoritma olan RSA algoritmasını kullanıyoruz. Bu IoT cihazları, politika kontratındaki değerleri de bu algoritmayla kontrol eder. Eğer, elektrik limiti aşılırsa, cihazlar güç tasarrufu moduna geçer. ECDSA sayesinde Ethereum hesaplarını açık anahtar altyapısı olarak kullanmak mümkün olsa bile, biz kendi küçük sistemimizi kullanmayı tercih ettik.
Simülasyon Sonuçları ve Tartışma
Ethereum üzerinde akıllı kontratlar kurduk. Akıllı kontratları kurduğumuzda, şifrelemeden sonra girdi sağlamaya başladık. Başarıyla Ethereum üzerinde değerleri kaydetmeye başladığımızda, Ethereum’dan verileri geri alabiliyorduk. Tamamlanmış prototipimiz buna benziyor:
Yukarıdaki figürde de görüldüğü üzere, IoT sistemini simüle etmek için Raspberry Pi’leri kullandık. Ethereum ağına periyodik olarak güncelleme gönderen ölçüm cihazını kurduk. Klima ve LED’in politikalarını kurmak için akıllı telefon kullandık. Bu iki cihaz da Ethereum’dan gelen politikalara göre yanıt vermektedir.
Geliştirme sürecinde, Ethereum blok zincirinde birkaç zayıflık tespit ettik. Birincisi, 12 saniyelik işlem süresine rağmen, Ethereum hâlâ birkaç alan için yeterince hızlı değil. Zamana duyarlı alanlar için bu teknolojiyi kullanmak çok zor olacaktır. İkincisi, ışık alıcısı bu noktada Ethereum’da desteklenmediği için, bir vekile veya tüm blok zincirini depolamak için büyük bir depolama alanına ihtiyacımız var. Vekil kullanmak kolay olabilir. Ama bu durumda güvenlikten taviz verilecektir çünkü bu vekil, üçüncü parti uygulama olacaktır.
Güvenlikten taviz vermediğimiz ikinci çözüm için de daha büyük bir alana ve daha fazla bütçeye ihtiyaç duyulacaktır-ki bu da küçük bir IoT sistemi için uygun değildir. Sonuç olarak, bu zayıflıkların çözümleri için gelecekte araştırma yapmamız gerekecektir.
Sonuç
Bu makalede, bir blok zinciri işletim platformu olan Ethereum’u kullanarak IoT cihazlarını yönetmenin bir yolunu size sunduk. Ölçüm cihazından ve akıllı telefondan gelen verileri kaydetmek için akıllı kontratlar yazıyoruz. Ölçüm cihazı, Ethereum hesabını kullanarak elektrik kullanımını; akıllı telefon da Ethereum hesabını kullanarak klima ve ampulün politikalarını gönderir. Klima ve ampul de güncellenmek için değerleri Ethereum üzerinde durmadan kontrol eder. Gerektiğinde, bu cihazlar normal moddan enerji tasarrufu moduna geçer.
Kavramın ispatı için, küçük sayıda cihazlarla başlayacağız. İlerideki çalışmalarımızda birden çok IoT cihazı içeren daha büyük çaplı bir sistem kurmak mümkündür. Bu deneyin başlamasıyla IoT üzerinde, bu teknolojinin kullanıcılarının bu teknolojiyi senkronizasyon sorunları ve DOS saldırıları için endişelenmeden etkili ve hızlı bir şekilde kullanmasını umuyoruz.
Yazar: Deha Doğan