Mengamankan Biometrik Dengan Secure Biometrik

Implementasi Biometrik Aman di Flutter

Untuk Flutter (baik Android maupun iOS), biometric_storage adalah plugin yang memungkinkan penggunaan autentikasi biometrik untuk menulis dan membaca data terenkripsi ke perangkat.

Implementasi di balik layar menerapkan praktik terbaik dan menggunakan SecAccessControl dengan SecAccessControlCreateFlags yang tepat untuk membatasi akses dengan Touch ID atau Face ID.

Langkah pertama adalah membuat objek akses di mana kita akan menulis dan membaca data setelah autentikasi biometrik:

Mendapatkan File Penyimpanan Biometrik

Kode di bawah ini adalah untuk mengambil file penyimpanan biometrik. Setiap penyimpanan benar-benar terpisah dan memiliki enkripsi serta kunci biometriknya sendiri.

Future _getStorageFile() async {
    final authStorage = await BiometricStorage().getStorage(
        'authenticated_storage',
        options: StorageFileInitOptions(
            /// Selalu panggil ini dengan authenticationRequired=true dan 
            /// authenticationValidityDurationSeconds = -1 untuk memastikan implementasi yang aman.
            authenticationValidityDurationSeconds: -1,
            authenticationRequired: true,
            androidBiometricOnly: true,
        ),
    );
    return authStorage;
}

Menulis Data ke Penyimpanan Aman

Kode di bawah ini untuk menulis data ke penyimpanan yang dilindungi biometrik:

Future createBioProtectedEntry(context) async {
    if (await _checkAuthenticate() == false) {
        showAlertDialog(context, const Text("Tidak bisa menggunakan autentikasi biometrik di perangkat ini."));
        return;
    }
    _storageFile = await _getStorageFile();
    await _storageFile?.write(_my_secret_data);
}

Membaca Data dari Penyimpanan Aman

Kode di bawah ini untuk membaca data dari penyimpanan yang dilindungi biometrik:

Future readBioProtectedEntry(context) async {
    if (await _checkAuthenticate() == false) {
        showAlertDialog(context, const Text("Tidak bisa menggunakan autentikasi biometrik di perangkat ini."));
        return;
    }
    if (_storageFile == null) {
        showAlertDialog(context, const Text("Aktifkan autentikasi terlebih dahulu."));
        return;
    }
    final data = await _storageFile?.read();
    showAlertDialog(context, Text(data!));
}

Comments

Popular posts from this blog

Membuat Virtual IP