Bagaimana cara menambahkan enkripsi tingkat aplikasi ke koneksi Android BLE?

Aug 17 2020

The Android Bluetooth Energi Rendah dokumentasi merekomendasikan menambahkan enkripsi lapisan aplikasi on-top koneksi BLE jika data yang dipertukarkan sensitif:

Perhatian : Saat pengguna memasangkan perangkat mereka dengan perangkat lain menggunakan BLE, data yang dikomunikasikan antara dua perangkat dapat diakses oleh semua aplikasi di perangkat pengguna.

Karena alasan ini, jika aplikasi Anda menangkap data sensitif, Anda harus menerapkan keamanan lapisan aplikasi untuk melindungi privasi data tersebut.

Karena saya ingin menghindari "menggulung enkripsi saya sendiri", saya mencari cara siap produksi untuk mengenkripsi paket.

Saya memiliki saluran out-of-band untuk bertukar satu pesan (misalnya kunci) dari satu peserta ke peserta lainnya (kode QR). Kedua peserta adalah perangkat Android, satu beroperasi dalam mode server (periferal), dan satu lagi sebagai klien (pusat).

Saya melihat Kerangka Protokol Kebisingan sebagai alternatif yang lebih ringan untuk TLS, tapi rasanya masih banyak pekerjaan manual (?).

Apakah ada solusi yang mudah? Sepertinya ini masalah yang harus diselesaikan.

Jawaban

1 CBHacking Aug 18 2020 at 05:26

Pertama, sepatah kata nasihat: StackExchange bukan untuk merekomendasikan produk tertentu, jadi saya akan menjadi relatif umum di sini. Siapa pun yang membaca ini di masa depan mungkin berada di dunia di mana ada alternatif baru dan jauh lebih baik, atau bahkan di mana pelindung lama ditemukan telah rusak.

Ada beberapa pustaka kripto tingkat tinggi yang - dengan kunci yang dibagikan sebelumnya - akan menangani pesan atau mungkin enkripsi aliran (dan persyaratan keamanan terkait seperti integritas data) dengan sedikit usaha. Cukup mencari "perpustakaan kripto yang mudah" akan menemukan beberapa kandidat untuk Anda. Perhatikan bahwa banyak orang mengabaikan saran untuk tidak menggulirkan crypto Anda sendiri, dan beberapa dari mereka mempublikasikannya, jadi Anda ingin memastikan perpustakaan yang Anda pilih ditinjau dengan baik oleh para ahli, idealnya tidak terkait dengan perkembangannya.

Anda juga ingin mempertimbangkan apa yang sebenarnya Anda inginkan (dan butuhkan) dari perpustakaan Anda. Apakah itu perlu mendukung aliran terenkripsi dengan panjang sewenang-wenang (atau pesan sangat besar yang tidak mudah masuk ke dalam memori), atau akankah protokol berbasis pesan yang sederhana berfungsi? Haruskah pustaka berukuran sangat kecil, saat menginstal footprint atau penggunaan RAM? Sangat cepat, pada CPU tertentu? Kompatibel dengan pustaka tertentu lainnya? Gunakan cipher tertentu atau primitif lainnya untuk alasan kepatuhan (saya harap tidak)? Tersedia dalam bahasa tertentu?


Untuk beberapa contoh terkenal pada pertengahan 2020, pertimbangkan LibSodium atau Monocypher . Keduanya dihormati, ditinjau, dan difokuskan pada kemudahan penggunaan. Alternatif lainnya adalah NaCl, LibHydrogen, dan sebagainya. Perhatikan bahwa tidak semua fokus ini sama pada keamanan, kecepatan, atau kenyamanan; misalnya, TweetNaCl menekankan ukuran kode minimal, mengorbankan banyak kecepatan dan kemungkinan keamanan dalam prosesnya, dibandingkan dengan NaCl asli.