Güvenli bir anahtarı katıştırılmış bir cihazın belleğinde saklama


10

Veri gönderme / alma ve bunları şifreli metin modunda (şifreli mod) saklanan gömülü bir aygıt üzerinde çalışıyorum. Anahtar depolamak için en iyi yaklaşım nedir (ARM CORTEX M serisi MCU kullandım)?

1-Anahtarları SRAM belleğinde ve her önyükleme sırasında saklamak, yerleşik MCU'ya anahtarlar enjekte etmek ve SRAM belleğinde saklamak. Bence en iyi yol, o zaman MCU algılama penetrasyonu (kurcalama sensörü veya ...) SRAM'yi hızlı bir şekilde silebilir ve kendini sıfırlayabilir. Dezavantajı: Saldırganın kurcalama ve cihaza erişme başarısı varsa, SRAM belleği ne kadar güvenlidir (kod madenciliğine karşı). MCU'larda bu bellek için herhangi bir güvenlik yeteneği bulamıyorum.

2-Anahtarları oluşturun ve MCU programlamada flash belleğe kaydedin. MCU flash belleğin kod madenciliğini önleyen CRP (kod okuma koruması) desteği ve dahili AES motoru ve RNG (rastgele sayı oluşturma) motorunun yardımıyla rastgele bir anahtar yapabilir ve flash belleği şifreleyebilir ve bu rastgele anahtarı OTP'de ( bir kez programlanabilir bellek-128 bit şifreli bir bellek), daha sonra kod yürütmede, flash belleği RNG anahtarıyla ve ilk anahtar ve kodlara erişerek çözeriz. Dezavantaj: Kalıcı olmayan bir bellekte saklanan anahtarlar, dış müdahaleler işe yaramaz ve saldırganın anahtarları benimsemek için çok zamanı olur.

3-EEPROM belleğinde saklanan anahtar, yukarıdaki 2 yaklaşımın kombinasyonu, geçici olmayan bellekte saklanan ancak kurcalama girişini algıladığında anahtar EEPROM silinebilir.

Ben daha iyi bir öneri var için LPC18S57FBD208 (1MB flash bellek ile korteks m3, 180MHZ, 136KB SRAM, 16KB EEPROM ve 7 "TFT LCD ve AES 128 bit kripto motoru sürmek için gereken bir TFT LCD denetleyici) düşünün?

Yanıtlar:


18

Bu seçeneklerin hiçbiri diğerlerinden daha iyi veya daha kötü değildir, çünkü hepsi çok güvensizdir. Seçenek 4 ile gidiyorum.

  1. SRAM, anahtarları saklamak için en güvenli yerdir, ancak bunları asla dış dünyadan enjekte etmemelisiniz. Önyükleme sırasında DAİMA işlemci içinde oluşturulmaları gerekir. Başka bir şey yapmak anında gerisini geçersiz kılar - otomatik olarak güvensizdir.

  2. Anahtarları kalıcı bellekte saklamayın, bu konuda haklısınız. EEPROM'u veya flash belleği okumayı korumanız önemli değildir. Bu kod okuma koruma sigortası kolayca tersine çevrilebilir. Bir saldırganın sadece dekapajı gerekir (içindeki silikon kalıbı açığa çıkarmak için siyah epoksi ambalajını çıkarın veya kimyasal olarak aşındırın). Bu noktada, kalıbın uçucu olmayan bellek hücreleri olan kısmını kaplayabilirler (bu bölümler çok düzenlidir ve bireysel bellek hücreleri görülmek için çok küçük olsa da, daha büyük yapı olabilir) ve küçük bir şey UV'ye opak bu bölüm üzerinde maskelenir. Daha sonra saldırgan çip üzerinde 5-10 dakika boyunca bir UV ışığı parlatabilir ve CRP sigortası da dahil olmak üzere tüm sigortaları sıfırlayabilir. OTP belleği artık herhangi bir standart programcı tarafından okunabilir.

Ya da, iyi finanse edilirlerse (örneğin, bu anahtarların birine 1000 dolardan fazla değerinde olması), sadece birkaç elektron mikroskop tipi ile bellek hücrelerini doğrudan okuyabilirler.

Güvende olmak için anahtarlar gizlenmemeli, silinmelidir.

  1. Hayır, yukarıdaki aynı nedenlerden dolayı.

Şimdi, seçenek 4'e geçin:

  1. Sadece şifreleme kullanın. Anahtar dağıtımı çözülmüş bir sorundur. Bu yüzden hazır olan çözümü kullanın. Çip, yeterli miktarda entropi kaynağı sağlamak için RNG'sini kullanmalı ve çeşitli diğer hususlar göz önünde bulundurulmalıdır ve önyükleme yükleyicisi, genel amaçlı olması gereken gerekli gizli anahtarları üreten programa doğrudan önyükleme yapmalıdır. kaydeder ve silinene kadar kalacakları doğrudan SRAM'a taşınır.

Ancak bir sorun var, bu CPU dışında hiçbir şeyin gizli anahtarın ne olduğu hakkında hiçbir fikri yok. Sorun değil: açık anahtarlı şifreleme kullanın. OTP belleğinde sakladığınız şey genel anahtarınızdır. Bu anahtar herkes tarafından okunabilir, yığın değişimine gönderebilir, bir petrol tankerinin yanına 5 ayak yüksekliğinde boyayabilirsiniz, önemli değil. Açık anahtarlı şifreleme ile ilgili en güzel şey asimetrik olmasıdır. Bir şeyi şifrelemenin anahtarı şifresini çözemez, bu özel anahtar gerektirir. Tersine, ortak anahtar tarafından şifrelenen bir şeyin şifresini çözme anahtarı, bir şeyi şifrelemek için kullanılamaz. Böylece, CPU gizli anahtarlar üretir, gizli anahtarları ŞİFRELEME için depolanmış genel anahtarınızı kullanır ve USB veya RS232 veya istediğiniz her şeyi gönderir. Gizli anahtarı okumak için özel anahtarınız gerekir, saklanması, gönderilmesi veya çip ile hiç ilgilenmesi gerekmeyen. Gizli anahtarınız özel anahtarınızla (başka bir yerde, yonga dışında) şifresi çözüldükten sonra, hazırsınız. Ortak anahtar dışında herhangi bir şey saklamak zorunda kalmadan, tamamen çip içinde ÜRETİLEN güvenli bir şekilde iletilmiş gizli bir anahtarınız var - daha önce belirtildiği gibi, okunması hiç korunmaya gerek yok.

Bu sürece resmi olarak anahtar müzakere denir ve her şey bunu kullanır. Bugün birkaç kez kullandın. Bununla başa çıkmak için birçok kaynak ve kütüphane mevcuttur. Lütfen, anahtarları hiçbir zaman 'enjekte etmeyin'.

Bahsedilmesi gereken son bir şey: Tüm bunlar tartışmalı çünkü AES anahtarı, güç kaynağına oturan ve mevcut çekmedeki küçük değişiklikleri ve CPU'daki uçların neden olduğu değişiklikler arasındaki zamanlamayı ölçen yan kanal saldırıları kullanılarak kolayca kurtarılabilir. kayıt olarak. Bu, AES'in (veya kullanılabilecek çok küçük olası şifreleme algoritmalarından herhangi birinin) nasıl çalıştığı bilgisiyle birleştiğinde, anahtarın kurtarılması nispeten kolay ve ucuzdur. Anahtarın okunmasına izin vermez, ancak anahtar alanını 255 olası anahtar gibi gülünç derecede küçük bir şeye daraltabilir. Çip ayrıca yukarı yönlü olduğu için onu algılayamaz.

Bu , 'güvenli' kripto işlemcilerde AES-256 şifreli önyükleme yükleyicilerini yendi ve o kadar da zor değil. Bildiğim kadarıyla, bu saldırı için gerçek bir donanım karşı önlemi yok. Ancak, şifreleme algoritmalarının kendisidir ve bitleri çevirmek için CPU'ya nasıl ihtiyaç duydukları, bu da bu güvenlik açığına neden olmaktadır. Yan kanal dirençli veya yan kanal geçirmez algoritmaların geliştirilmesi gerektiğini (ve umarım) şüpheleniyorum.

Şu anda olduğu gibi, bir anahtarın gömülü bir cihazda güvenli bir şekilde nasıl saklanacağına (veya sadece geçici bir anahtar kullanacağına) ilişkin gerçek cevap: yapamazsınız.

Ancak en azından seçenek 4'teki anahtar anlaşmasını kullanarak her seferinde yeni bir anahtar oluşturursanız, bir yan kanal saldırısı yalnızca kullanımda olan bir kanalın anahtarını tehlikeye atabilir ve yalnızca verileri şifrelerken gücü izlemek için zamanları varsa . Dahili olarak oluşturulan yeni anahtarlarla sık sık görüşürseniz, bu yararlı miktarlarda güvenlik sağlayabilir.

Anahtarlar oluşturun ve bunları mümkün olduğunca kısa bir süre için saklayın.


Gerçekten sevgili Metacollin beni temizlediğin için teşekkürler.Ancak projem birçok okuyucudan (mcu içerir) ve birçok hedef MCU'dan oluşuyor, Her okuyucu hedeflerden herhangi birini okuyabilmeli ve hedeflerden herhangi biri okuyucular tarafından okunabilmelidir. Bu veri taşımak için benzersiz bir anahtar ile anlaşmak gerektiğini düşünüyorum. ve cevabınıza dayanarak, örneğin LPC18S57 güvenli korteks m3 ve STM32F429 genel korteks m4 ve hatta LPC1788 genel korteks m3 (daha ucuz seçim) arasında çok fazla fark olmadığını düşünüyorum, ama çok gizli bir proje yapmıyorum bunu olabildiğince güvenli.
Mahmoud Hosseinipour

2
"AES anahtarı kolayca kurtarılabilir" ifadeniz en azından tartışmalıdır. Mevcut tüketimine bağlı olarak işlemcide ne olduğunu bulma tekniğinin arkasındaki prensibi anlıyorum. Ancak, CPU'nun üzerinde çalıştığı tek şey şifreleme ve şifre çözme olduğunu varsayar. Ancak, uygulamaların çoğunda aynı anda bir grup görev üzerinde çalışan sadece 1 cpu vardır. Bir blok AES şifreleme sırasında onlarca veya yüzlerce kesinti meydana gelebilir, bu da mevcut zirvelere dayanarak anahtarı bulmayı imkansız hale getirir.
16:20

2
Eğer anahtar flaşta saklanmayacaksa, o zaman anahtar üreten kod için de aynı şey geçerlidir ... sadece op kodlarını montajcıya çevirmek zorundasınız ve sonra kod ne kadar karmaşık olursa olsun anahtarınız var.
Lundin

The wonderful thing about private key cryptography is that it is asymmetric. Gönderinizden bunu bildiğiniz açık olsa da, yukarıdaki alıntıda diğer okuyucular için ... s / private / public'den bahsedeceğim.
Radian

Yöntem 4'ü kullanarak iki cihaz arasında bir kanalı güvence altına alabilirsiniz, ancak bir tür paylaşılan sırrı olmadan iletişim kurduğunuz cihazın orijinalliğini garanti edemezsiniz. Kullanım durumunuz kimlik doğrulaması gerektiriyorsa, tek bir paylaşılan sırrı flaşta saklıyorsanız, anahtar değişiminden daha iyi durumda değilsiniz. Daha iyi bir güvenliğe ihtiyacınız varsa, bir kripto çip kullanılmalıdır.
Greg
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.