Cara aman untuk menyimpan kunci pribadi di aplikasi Android

Dec 21 2020

Apa cara yang paling tepat untuk menyimpan kunci pribadi untuk penandatanganan kode batang di aplikasi Android? Mungkin sebagian besar ahli di sini akan mengatakan - jangan lakukan itu, karena tidak aman ...

Tapi saya ingin memahami tingkat "ketidakamanan" dan risiko solusi yang diusulkan.

Smartphone Komoditas PS untuk mengasumsikan.

PS kita tidak bisa terlalu sering bertukar kunci. App Backend API dapat dirancang sesuai kebutuhan. Tetapi koneksi internet permanen dan varian penandatanganan di sisi server tidak dimungkinkan.

Jawaban

28 defalt Dec 21 2020 at 22:40

Semua perangkat android 7+ dilengkapi dengan Trusted Execution Environment (TEE) sebagai persyaratan wajib untuk lisensi aplikasi Google. Ini adalah keystore yang didukung perangkat keras yang menyediakan penyimpanan terisolasi dan pemrosesan data untuk blob kriptografi. Di Qualcomm Snapdragon dan Samsung Exynos SoCs, TEE didasarkan pada ARM Trustzone . Beberapa perangkat seperti Pixel dan iPhone memiliki TEE terpisah (Titan M Google dan chip T2 Apple) yang disebut strongbox . TEE terpisah lebih terisolasi daripada ARM Trustzone dan tidak bergantung pada SoC yang digunakan.

Anda bisa menggunakan API penyedia keystore android untuk

  • menghasilkan kunci pribadi

  • menghasilkan kunci rahasia

  • menandatangani dan memverifikasi data

  • impor kunci terenkripsi

  • otentikasi pengguna untuk penggunaan kunci

  • Verifikasi pasangan kunci yang didukung perangkat keras dengan Pengesahan Kunci

Setiap kunci yang disimpan dalam keystore dapat memiliki set parameter berikut:

  • alias - digunakan untuk mengidentifikasi kunci.
  • ukuran kunci (API 23).
  • tujuan - mengenkripsi / mendekripsi (API 23).
  • mode enkripsi, algoritme, dan padding (API 23).
  • haruskah kunci diautentikasi dengan keystore sebelum digunakan? (API 23).
  • durasi waktu kunci dapat digunakan setelah otentikasi berhasil (API 23).
  • haruskah kunci menjadi tidak valid pada pendaftaran sidik jari baru? (API 24)
  • haruskah keystore mengharuskan layar dibuka kuncinya sebelum melakukan operasi kriptografi? (API 28)
  • haruskah kunci dilindungi oleh modul keamanan perangkat keras StrongBox? (API 28)

Anda juga dapat menggunakannya untuk mengenkripsi token otentikasi untuk login, menyimpan kata sandi, dan mengenkripsi kunci yang mengenkripsi data sensitif aplikasi Anda yang besar.


"Haruskah kunci dilindungi oleh modul keamanan perangkat keras StrongBox? (API 28)" tampaknya sangat penting dalam hal tingkat keamanan secara keseluruhan.

Untuk Android 9+, aplikasi dapat menyetel preferensi untuk menyimpan kunci di brankas dengan menelepon setIsStrongBoxBacked(true). Jika terlontar StrongBoxUnavailableExceptionmaka aplikasi harus kembali ke keystore yang didukung perangkat keras. Strongbox kebal dari kerentanan saluran samping penting dalam CPU SoC yang dapat memengaruhi keystore yang didukung perangkat keras. Keamanan keystore yang didukung perangkat keras berada pada pembuat chip SoC: 'Lubang' celah di brankas seluler Qualcomm Secure World membocorkan data sensitif .

Praktik Terbaik Keamanan Hardware merekomendasikan StrongBox Keymaster . Modul tersebut berisi:

  • CPU-nya sendiri
  • Penyimpanan aman
  • Generator nomor acak yang sebenarnya.
  • Mekanisme tambahan untuk menahan gangguan paket dan sideload aplikasi yang tidak sah.

Sistem keystore Android

Seberapa amankah Autentikasi Keystore Android Anda? (Kedaluwarsa, dipublikasikan sebelum rilis Android 10)