Kasım başında güvenlik danışmanımızla yaptığımız rutin gözden geçirmede masaya tek bir soru koydu: "Sahadaki 12 bin cihazın hepsinde aynı MQTT şifresi mi var?" Sessizlik. Aynı şifre değildi ama gerçek daha parlak da sayılmazdı: cihaz kimliği, seri numarasından türetilen bir kullanıcı adı ve üretim hattında CSV dosyasından yüklenen bir token'dı. O CSV dosyası üretim ortağımızın bir mühendisinin masaüstünde, bir kopyası mail ekinde, bir kopyası da paylaşımlı klasörde duruyordu. Yani filomuzun tamamının kimliği, bizim hiç denetlemediğimiz üç bilgisayarda geziyor demekti. O gün provisioning'i "üretim detayı" olmaktan çıkarıp mimari sorun ilan ettik.
Kimlik Dediğin Şey Nerede Doğar?
IoT'de kimlik tartışması genellikle "X.509 mü, token mı?" diye başlar; bence yanlış başlangıç. Asıl soru şu: cihazın sırrı ilk kez nerede ve kimin gözü önünde var oluyor? Bizim eski akışta sır, bulutta üretilip CSV ile fabrikaya taşınıyordu — yani en az dört sistemin ve birkaç insanın önünden geçiyordu. Hedef akışta sır hiçbir yere taşınmaz: cihaz kendi anahtar çiftini kendi içinde üretir, private key doğduğu silikonun dışına ömrü boyunca çıkmaz, dışarıya sadece imzalanmak üzere CSR gider. Bunu donanımda mümkün kılan şey secure element'ti; biz maliyet ve tedarik dengesinden ATECC608 sınıfı bir çip seçtik, cihaz başına maliyet artışı yaklaşık 1,1 dolar. Yönetim kuruluna bu rakamı savunurken tek slayt kullandım: tek bir toplu kimlik sızıntısının müşteri sözleşmelerindeki cezai karşılığı.
Üretim hattındaki akış şöyle kuruldu: cihaz ilk açılışta secure element içinde anahtar üretir, üretim istasyonundaki fikstür cihazdan CSR'ı alır ve bizim İzmir'deki HSM destekli ara CA'mıza iletir; CA, cihazın seri numarasını üretim emriyle eşleştirip 90 saniye içinde sertifikayı döner. Fabrikada hiçbir kalıcı sır yok, istasyonun kendisi de mTLS ile kimlik doğruluyor ve her imza işlemi denetim loguna düşüyor. Üretim ortağı değişse bile — ki iki yıl içinde bir kez değişti — kimlik zinciri bizim elimizde kalıyor.
İlk Yanlış Hipotez: "Sertifikayı 20 Yıllık Kes, Uğraşma"
Tasarım toplantılarında en çok direnç gören konu rotasyondu. "Cihaz ömrü 10 yıl, sertifikayı 20 yıllık kes, rotasyonla uğraşma" görüşü ekip içinde ciddi taraftar topladı ve itiraf edeyim, bir ara ben de ikna olmaya yakındım. Bizi bu fikirden döndüren şey teorik güvenlik tartışması değil, yaşadığımız somut bir olay oldu: ara CA'mızın ilk sürümünde bir konfigürasyon hatası fark ettik — imzalanan sertifikalarda bir uzantı yanlıştı ve bazı TLS yığınları bunu ileride reddedebilirdi. Sahada o CA'dan imzalı 3 bin 200 cihaz vardı. Sertifikalar 20 yıllık olsaydı bu hata 20 yıllık bir borç olurdu; rotasyon altyapımız olduğu için 6 haftada bütün filoyu yeni sertifikaya geçirdik. Rotasyon, sertifika eskidiği için değil, hata yapacağınız için gerekir. Kimlik altyapısında hata yapmayacağınızı varsayan her tasarım, hatayı kalıcılaştıran bir tasarımdır.
Rotasyon mekanizmasının kendisi görünüşte basit: cihaz, sertifika ömrünün üçte ikisini geçince yeni bir anahtar çifti üretir, mevcut kimliğiyle mTLS üzerinden CSR gönderir, yeni sertifikayı alır ve bir sonraki bağlantıdan itibaren onu kullanır. Şeytan detaylarda: eski sertifika, yeni sertifikayla ilk başarılı bağlantı kurulana kadar silinmez — aksi halde tam geçiş anındaki elektrik kesintisi cihazı kimliksiz bırakır. Bunu ilk pilotta 7 cihazda bizzat yaşadık; rotasyonun kendisi de A/B mantığıyla, geri dönülebilir olmak zorunda. Ayrıca rotasyon zamanlaması filoya yayılmış durumda; 12 bin cihazın aynı hafta CA'ya koşması, kendi kendine yapılmış bir DDoS olurdu. Bugün CA'mız günde ortalama 60-70 yenileme işliyor ve bu tempo panelde düz bir çizgi.
Saat Yoksa Sertifika da Yok
X.509'un IoT'deki en az konuşulan düşmanı saat. Sertifika doğrulaması "şu an geçerli mi?" sorusudur ve RTC pili bitmiş, saati 2000 yılına dönmüş bir cihaz için dünyadaki bütün sertifikalar "henüz geçerli değil"dir. Bu senaryoda cihaz TLS kuramaz, TLS kuramayınca NTP alamaz (bizim NTP trafiğimiz de doğrulamalıydı), NTP alamayınca saati düzelmez — kusursuz bir kilitlenme. Çözümümüz katmanlı: cihaz, son başarılı bağlantının zamanını flash'a yazar ve açılışta saat bundan eskiyse RTC'ye değil bu değere güvenir; yine de kuramıyorsa yalnızca sertifika zaman kontrolünü gevşeten ama sunucu kimliğini pinlenmiş kök üzerinden doğrulayan özel bir "saat kurtarma" endpoint'ine bağlanıp güvenli zamanı alır. Bu endpoint başka hiçbir işlem yapamaz. Kulağa kıyıda kalmış bir detay gibi geliyor; sahada RTC sorunlu cihaz oranımız yılda binde 4 ve bu mekanizma olmasa her biri teknisyen ziyareti demekti.
İptal Listesinin Sahadaki Hali
Bir de kimsenin ilk gün planlamadığı senaryo: cihaz çalındığında ya da bir müşteri sözleşmesi bittiğinde kimliği nasıl öldürürsünüz? Klasik cevap CRL/OCSP; gömülü dünyada ikisi de hantal. Biz iptali broker'ın önündeki kimlik doğrulama katmanına koyduk: her bağlantıda sertifikanın parmak izi, Redis'te tuttuğumuz iptal kümesine karşı kontrol edilir — maliyeti bağlantı başına 0,3 milisaniye. İptal kümesine yazan tek yer, envanter sistemimiz; bir cihaz "hurda" veya "kayıp" işaretlendiği anda kimliği 30 saniye içinde ölür. İlk yılın sonunda bu listede 41 cihaz vardı; ikisi gerçekten çalıntıydı ve biri, çalındıktan üç gün sonra başka bir şehirden bağlanmayı denedi. Bağlanamadı. O log satırını güvenlik raporuna koyarken, bir yıl önceki CSV dosyasını hatırlayıp ürperdiğimi itiraf ederim.
Sahadaki eski cihazlar ayrı bir bahis: 12 binlik filonun 4 bin 600'ü secure element'siz eski donanımdı ve onları geri çağırmak söz konusu değildi. Onlar için ara bir rejim kurduk: anahtar yine cihazda üretiliyor ama yazılımsal olarak, flash'ın okuma koruması açık bir bölgesinde saklanıyor; sertifika ömürleri yenilerin üçte biri ve broker tarafında bu cihazlar ayrı bir güven sınıfında etiketli — kritik komut kanalları onlara kapalı. Mükemmel değil; ama "hepsini değiştiremiyorsak hiçbir şey yapmayalım" tuzağından iyidir. Filo güvenliği ikili bir anahtar değil, kademeli bir risk haritasıdır.
Bütün bu dönüşüm — secure element, fabrika akışı, ara CA, rotasyon, iptal — dört ayda, iki mühendisin yarı zamanlı eforuyla tamamlandı. En pahalı kalemi yazılım değil, üretim hattı fikstürünün yeniden sertifikalandırılmasıydı. Geriye dönüp baktığımda en kritik kararın teknik değil kurumsal olduğunu görüyorum: kimlik altyapısının sahibi artık "üretim" değil, mimari ekip. Provisioning bir Excel işi olarak kaldığı sürece, en iyi kriptografi bile bir mail ekinin insafına emanettir. Kendi filonuzun kimlik hikayesi hâlâ bir CSV dosyasından geçiyorsa — ki gördüğüm projelerin yarısından fazlasında geçiyor — iletişim sayfasından ulaşın; fabrika akış şemamızı ve rotasyon durum makinesini çekinmeden paylaşırım.
Güvenlikte "cihaz kimliği" cümlesi kulağa bir özellik gibi gelir. Değildir. Cihazın doğumundan hurdaya ayrılmasına kadar süren bir yaşam öyküsüdür ve o öykünün her bölümünde aynı soru sorulur: bu sırrı şu anda kaç göz görebiliyor? Doğru cevap, her bölümde aynıdır: sıfır.