Android BLE bağlantısına nasıl uygulama düzeyinde şifreleme eklerim?
Android Bluetooth Düşük Enerji dokümantasyon alışverişinde verilerinin duyarlı ise uygulama katmanı şifreleme on-top BLE bağlantının eklenmesi önerir:
Dikkat : Bir kullanıcı cihazını BLE kullanarak başka bir cihazla eşleştirdiğinde, iki cihaz arasında iletilen verilere kullanıcının cihazındaki tüm uygulamalar tarafından erişilebilir.
Bu nedenle, uygulamanız hassas verileri yakalarsa, bu verilerin gizliliğini korumak için uygulama katmanı güvenliği uygulamalısınız.
"Kendi şifrelememi döndürmekten" kaçınmak istediğimden, paketleri şifrelemek için üretime hazır bir yol arıyorum.
Bir katılımcıdan diğerine (QR kodu) bir mesaj (örn. Anahtar) alıp vermek için bant dışı bir kanalım var. Her iki katılımcı da, biri sunucu modunda (çevre birimi) ve diğeri istemci (merkezi) olarak çalışan Android cihazlardır.
Gürültü Protokolü Çerçevesine TLS'ye göre daha hafif bir alternatif olarak baktım , ancak bu hala çok fazla manuel çalışma (?) Gibi geliyor.
Kolay bir çözüm var mı? Görünüşe göre bu çözülmüş bir problem olmalı.
Yanıtlar
İlk olarak, bir tavsiye: StackExchange belirli ürünleri tavsiye etmek için değildir, bu yüzden burada nispeten genel olacağım. Bunu gelecekte kim okursa, yeni ve çok daha iyi alternatiflerin olduğu, hatta eski korumanın kırıldığı bir dünyada olabilir.
Önceden paylaşılan bir anahtar verildiğinde, minimum çabayla mesaj veya muhtemelen akış şifrelemesini (ve veri bütünlüğü gibi ilgili güvenlik gereksinimlerini) idare edecek birkaç üst düzey kripto kitaplığı vardır. Basitçe "kolay kripto kitaplığı" araması size bazı adaylar bulacaktır. Pek çok kişinin kendi kripto paranızı yuvarlamanıza karşı olan tavsiyeleri görmezden geldiğini ve bazılarının onu yayınladığını unutmayın, bu nedenle seçtiğiniz kütüphanenin uzmanlar tarafından ideal olarak gelişimiyle ilgisi olmayan bir şekilde gözden geçirildiğinden emin olmak istersiniz.
Ayrıca, kitaplığınızdan tam olarak ne istediğinizi (ve neye ihtiyacınız olduğunu) düşünmek isteyeceksiniz. Rasgele uzunlukta şifrelenmiş akışları (veya belleğe kolayca sığmayan çok büyük mesajları) desteklemesi mi gerekiyor, yoksa basit bir mesaj tabanlı protokol çalışır mı? Kitaplık, yükleme alanı veya RAM kullanımı açısından çok küçük mü olmalı? Belirli bir CPU'da çok hızlı mı? Herhangi bir başka kitaplıkla uyumlu mu? Uyumluluk nedenleriyle belirli şifreler veya diğer ilkeler kullanın (umarım değildir)? Belirli bir dilde mevcut mu?
2020 ortasından itibaren birkaç saygın örnek için LibSodium veya Monocypher'ı düşünün . Her ikisi de saygın, gözden geçirilmiş ve kullanım kolaylığına odaklanmıştır. Diğer alternatifler NaCl, LibHydrogen ve benzerleridir. Bunların hepsinin güvenliğe, hıza veya rahatlığa eşit şekilde odaklanmadığını unutmayın; Örneğin, TweetNaCl, orijinal NaCl ile karşılaştırıldığında, çok fazla hızdan ve potansiyel olarak bir miktar güvenlikten ödün vererek minimum kod boyutunu vurgular.