Langsung ke konten utama
BiometrikMar 28, 2026

Membangun Sistem Verifikasi Biometrik: Pola Arsitektur untuk Persyaratan Baru Indonesia

OS
Open Soft Team

Engineering Team

Gambaran Arsitektur Sistem: Jawaban Singkat

Sistem verifikasi biometrik yang patuh untuk mandat SIM Indonesia memerlukan empat komponen inti: pengambilan biometrik (kamera + SDK), pemrosesan liveness (PAD di perangkat atau sisi server), pencocokan identitas (verifikasi 1:1 terhadap database IKD), dan penyimpanan aman (template terenkripsi dengan audit logging). Sistem harus melayani populasi lebih dari 270 juta orang, memproses verifikasi dalam kurang dari 3 detik, dan mematuhi Peraturan KOMDIGI No. 7/2026 serta persyaratan perlindungan data UU PDP.

Artikel ini menyediakan cetak biru arsitektural terperinci untuk membangun sistem tersebut, termasuk desain komponen, alur data, langkah keamanan, dan pola implementasi Rust.

Komponen Inti

1. Subsistem Pengambilan Biometrik

Subsistem pengambilan bertanggung jawab untuk memperoleh gambar wajah berkualitas tinggi dari pengguna. Kualitas secara langsung mempengaruhi akurasi hilir — gambar yang pencahayaannya buruk dan buram akan gagal verifikasi bahkan untuk pengguna yang sah.

Persyaratan:

  • Resolusi gambar minimum: 640x480 piksel (VGA) untuk area wajah
  • Deteksi wajah: Harus menemukan wajah dalam frame yang ditangkap dan memotong ke ukuran standar
  • Penilaian kualitas: Evaluasi pencahayaan, sudut pose, oklusi, dan blur sebelum melanjutkan
  • Format gambar: JPEG kualitas 80%+ atau PNG untuk pengambilan tanpa kehilangan
  • Metadata: Timestamp pengambilan (ISO 8601), identifier perangkat, koordinat GPS (dengan persetujuan pengguna), parameter kamera

Ambang Batas Kualitas (sesuai ISO/IEC 19794-5):

ParameterRentang yang Dapat Diterima
Sudut yaw-15° hingga +15°
Sudut pitch-10° hingga +10°
Sudut roll-8° hingga +8°
Jarak antar mata≥ 90 piksel
Pencahayaan100-250 lux pada wajah
Blur (varians Laplacian)> 100
Rasio area wajah> 20% dari frame

2. Subsistem Pemrosesan Liveness

Subsistem liveness menentukan apakah biometrik yang ditangkap berasal dari orang hidup. Untuk mandat Indonesia, ini harus memenuhi standar ISO/IEC 30107-3 Level 2.

Keputusan arsitektur: Edge vs Server

Untuk pasar Indonesia, pendekatan hybrid direkomendasikan:

  • Di perangkat (edge): Jalankan model liveness ringan (MobileFaceNet atau serupa, <30MB) untuk umpan balik langsung. Ini menangkap 90%+ serangan cetak dan layar dasar.
  • Sisi server: Jalankan model ensemble penuh untuk scoring liveness definitif. Ini menangkap serangan canggih termasuk masker 3D dan injeksi deepfake.

Pendekatan dua lapis menyediakan umpan balik cepat (di bawah 500ms di perangkat) sambil mempertahankan keamanan tinggi (sisi server menangkap apa yang terlewat edge).

3. Engine Pencocokan Biometrik

Engine pencocokan membandingkan template wajah yang diekstraksi dengan template referensi dalam database IKD. Untuk mandat SIM Indonesia, ini selalu verifikasi 1:1 (bukan identifikasi 1:N).

Pipeline Pencocokan:

  1. Preprocessing: Normalisasi alignment wajah, crop, resize ke dimensi input model (112x112 atau 160x160)
  2. Ekstraksi Fitur: Jalankan melalui deep neural network (ArcFace, CosFace, atau serupa) untuk menghasilkan vektor embedding berdimensi 128-512
  3. Perbandingan: Hitung cosine similarity atau jarak L2 antara embedding probe dan referensi
  4. Keputusan: Terapkan threshold — biasanya 0,4-0,6 cosine similarity tergantung model dan FAR yang diperlukan

Persyaratan Performa:

MetrikPersyaratan
Waktu verifikasi 1:1< 200ms (sisi server)
Throughput> 1.000 verifikasi/detik per node
FAR (False Accept Rate)< 0,001%
FRR (False Reject Rate)< 5%
Ukuran template< 2 KB

4. Subsistem Penyimpanan Aman dan Audit

Semua data biometrik harus disimpan dan ditransmisikan sesuai persyaratan UU PDP dan KOMDIGI:

  • Enkripsi template: AES-256-GCM untuk template saat at rest
  • Manajemen kunci: Hardware Security Module (HSM) atau cloud KMS untuk kunci enkripsi
  • Transmisi: TLS 1.3 dengan certificate pinning untuk semua data biometrik dalam transit
  • Log audit: Log semua event verifikasi yang immutable, append-only
  • Siklus hidup data: Template dipertahankan hanya selama durasi verifikasi; log disimpan 5 tahun

Kepatuhan Spesifik Indonesia: UU PDP

Undang-Undang Pelindungan Data Pribadi Indonesia (UU PDP, UU No. 27 Tahun 2022) mengklasifikasikan data biometrik sebagai data pribadi yang bersifat spesifik, yang memerlukan perlindungan yang ditingkatkan:

Kewajiban Pengendali Data

KewajibanImplementasi
Dasar hukumPersetujuan eksplisit + kepatuhan regulasi (mandat KOMDIGI)
Pembatasan tujuanData biometrik digunakan semata-mata untuk verifikasi registrasi SIM
Minimisasi dataSimpan template, bukan gambar mentah; hapus tangkapan setelah pemrosesan
AkurasiPastikan template terkini; re-verifikasi setiap 5 tahun
Pembatasan penyimpananLog: 5 tahun; Template: durasi aktivasi SIM + 1 tahun
Integritas & kerahasiaanEnkripsi AES-256, kontrol akses, notifikasi pelanggaran dalam 72 jam
AkuntabilitasPemeliharaan catatan pemrosesan, pelaksanaan DPIA, penunjukan DPO

Transfer Data Lintas Batas

UU PDP melarang mentransfer data pribadi spesifik (termasuk biometrik) ke luar Indonesia kecuali:

  1. Negara tujuan memiliki undang-undang perlindungan data yang setara (KOMDIGI mengelola daftar negara yang disetujui)
  2. Binding corporate rules berlaku
  3. Persetujuan eksplisit dari subjek data diperoleh

Implikasi praktis: Semua infrastruktur pemrosesan biometrik harus di-host di data center Indonesia. Penyedia cloud harus menawarkan deployment region Jakarta (AWS ap-southeast-3, GCP asia-southeast2, Azure Southeast Asia).

Skalabilitas: Menangani 270+ Juta Populasi

Indonesia memiliki 275,5 juta penduduk (estimasi sensus 2025) dan 345+ juta SIM card aktif. Sistem verifikasi biometrik harus berskala untuk menangani:

  • Puncak registrasi baru: 500.000 per hari selama periode peluncuran awal
  • Gelombang re-verifikasi: 200+ juta SIM eksisting harus di-re-verifikasi sebelum Juli 2027
  • Kondisi stabil: 50.000-100.000 verifikasi per hari untuk SIM baru dan penggantian

Arsitektur Horizontal Scaling

                    [Load Balancer]
                    /      |      \
                   /       |       \
            [Node 1]  [Node 2]  [Node N]
            (Rust)    (Rust)    (Rust)
               |         |         |
               +----+----+----+----+
                    |         |
              [PostgreSQL]  [Redis Cache]
              (Primary +     (Cache template,
               Replika)       rate limiting)
                    |
              [Gateway IKD]
              (Rate-limited,
               circuit-breaker)

Perencanaan Kapasitas

KomponenSpesifikasiJustifikasi
Node API8-16 instance (4 vCPU, 16GB RAM)1.000 verifikasi/dtk/node
PostgreSQLPrimary + 2 read replica (8 vCPU, 64GB RAM)Penulisan log audit + pembacaan template
RedisCluster 3 node (4 vCPU, 32GB RAM)Caching template, rate limiting
Object StorageS3-compatible (min 10 TB)Gambar tangkapan terenkripsi saat pemrosesan
HSM2 instance (active-passive)Manajemen kunci enkripsi
Jaringan1 Gbps dedicated, <10ms latency ke IKDPersyaratan verifikasi real-time

Perbandingan: Pemrosesan Edge vs Cloud

FaktorEdge (Di Perangkat)Cloud (Sisi Server)Rekomendasi
Latensi<500ms1-3 detik (tergantung jaringan)Edge untuk UX
Akurasi92-95% (model terbatas)98-99,5% (model penuh)Cloud untuk keputusan
KeamananRentan terhadap gangguan SDKKontrol penuh atas pemrosesanCloud untuk kepatuhan
BandwidthMinimal (hanya hasil)100-500 KB per verifikasiEdge untuk daerah rural
BiayaNol biaya marginal$0,01-0,05 per verifikasiEdge pada skala
Kompatibilitas perangkatMemerlukan SDK per platformPerangkat apa pun dengan kameraCloud untuk universalitas
Siklus updateReview App Store (1-7 hari)Deployment server instanCloud untuk agilitas
Kemampuan offlineYa (hanya liveness)TidakEdge untuk gap konektivitas

Pendekatan hybrid yang direkomendasikan untuk Indonesia:

  1. Edge: Validasi kualitas tangkapan + pemeriksaan liveness pasif (umpan balik langsung)
  2. Cloud: Validasi liveness aktif + ekstraksi template + verifikasi IKD (keputusan otoritatif)

Keamanan: Perlindungan Template dan Enkripsi

Perlindungan Template Biometrik

Template biometrik mentah bersifat sensitif — jika dicuri, tidak bisa diganti seperti kata sandi. Implementasikan biometrik yang dapat dibatalkan menggunakan transformasi non-invertible:

use aes_gcm::{Aes256Gcm, KeyInit, Nonce};
use aes_gcm::aead::Aead;
use rand::RngCore;

/// Enkripsi template biometrik untuk penyimpanan
fn encrypt_template(
    template: &[f32],
    key: &[u8; 32],
) -> Result<EncryptedTemplate, CryptoError> {
    let cipher = Aes256Gcm::new_from_slice(key)
        .map_err(|_| CryptoError::InvalidKey)?;

    // Generate nonce acak (96 bit untuk GCM)
    let mut nonce_bytes = [0u8; 12];
    rand::thread_rng().fill_bytes(&mut nonce_bytes);
    let nonce = Nonce::from_slice(&nonce_bytes);

    // Serialisasi template ke bytes
    let template_bytes: Vec<u8> = template
        .iter()
        .flat_map(|f| f.to_le_bytes())
        .collect();

    // Enkripsi dengan AES-256-GCM
    let ciphertext = cipher
        .encrypt(nonce, template_bytes.as_ref())
        .map_err(|_| CryptoError::EncryptionFailed)?;

    Ok(EncryptedTemplate {
        nonce: nonce_bytes.to_vec(),
        ciphertext,
        algorithm: "AES-256-GCM".to_string(),
        created_at: chrono::Utc::now(),
    })
}

Pipeline Verifikasi End-to-End dalam Rust

use axum::{extract::State, Json};
use serde::{Deserialize, Serialize};
use uuid::Uuid;
use chrono::Utc;

#[derive(Deserialize)]
struct VerificationRequest {
    nik: String,
    facial_image_base64: String,
    device_id: String,
    liveness_score: f64,
    capture_metadata: CaptureMetadata,
}

#[derive(Serialize)]
struct VerificationResponse {
    transaction_id: Uuid,
    verified: bool,
    confidence: f64,
    processing_time_ms: u64,
    timestamp: chrono::DateTime<Utc>,
}

async fn verify_biometric(
    State(state): State<AppState>,
    Json(req): Json<VerificationRequest>,
) -> Result<Json<VerificationResponse>, AppError> {
    let start = std::time::Instant::now();
    let transaction_id = Uuid::new_v4();

    // Langkah 1: Validasi format NIK (16 digit)
    if !is_valid_nik(&req.nik) {
        return Err(AppError::InvalidNik);
    }

    // Langkah 2: Decode dan validasi gambar
    let image_bytes = base64::decode(&req.facial_image_base64)
        .map_err(|_| AppError::InvalidImage)?;
    let quality = assess_image_quality(&image_bytes)?;
    if quality.score < 0.7 {
        return Err(AppError::InsufficientImageQuality(quality));
    }

    // Langkah 3: Validasi liveness sisi server
    let liveness = state.liveness_engine
        .validate(&image_bytes)
        .await?;
    if liveness.score < 0.95 || liveness.is_attack {
        return Err(AppError::LivenessCheckFailed);
    }

    // Langkah 4: Ekstraksi template biometrik
    let template = state.biometric_engine
        .extract_template(&image_bytes)
        .await?;

    // Langkah 5: Verifikasi terhadap IKD (dengan circuit breaker)
    let ikd_result = state.ikd_circuit_breaker
        .call(state.ikd_client.verify(
            &req.nik, &template
        ))
        .await?;

    // Langkah 6: Catat audit trail
    let elapsed = start.elapsed().as_millis() as u64;
    state.audit_logger.log_verification(
        transaction_id, &req.nik,
        ikd_result.verified, ikd_result.confidence,
        elapsed, &req.capture_metadata,
    ).await?;

    // Langkah 7: Hapus gambar mentah dari memori secara aman
    drop(image_bytes);

    Ok(Json(VerificationResponse {
        transaction_id,
        verified: ikd_result.confidence >= 0.95,
        confidence: ikd_result.confidence,
        processing_time_ms: elapsed,
        timestamp: Utc::now(),
    }))
}

Monitoring dan Observabilitas

Sistem biometrik produksi harus memiliki monitoring komprehensif:

MetrikAmbang Batas AlertTujuan
Tingkat keberhasilan verifikasi< 90%Deteksi masalah sistem atau gelombang serangan
Rata-rata waktu pemrosesan> 3 detikKepatuhan SLA
Tingkat penolakan liveness> 15%Deteksi kampanye serangan atau masalah SDK
Latensi gateway IKD> 2 detikDegradasi infrastruktur
Status circuit breaker IKDOpenRespons insiden segera
Kegagalan enkripsi template> 0Masalah HSM atau manajemen kunci
Kegagalan penulisan log audit> 0Risiko kepatuhan

Pertanyaan yang Sering Diajukan

Bahasa pemrograman apa yang paling cocok untuk sistem verifikasi biometrik?

Rust adalah pilihan sangat baik untuk pipeline verifikasi inti berkat jaminan keamanan memori, abstraksi zero-cost, dan performa tinggi. Engine pencocokan biometrik mendapat manfaat dari kemampuan Rust melakukan operasi vektor yang dioptimalkan SIMD tanpa jeda garbage collection. Python tetap dominan untuk pelatihan model ML dan prototyping. Untuk SDK mobile, Kotlin (Android) dan Swift (iOS) diperlukan, dengan C/C++ untuk inti biometrik lintas platform.

Bagaimana menangani skala 270+ juta populasi dalam database pencocokan?

Karena mandat SIM Indonesia menggunakan verifikasi 1:1 (bukan identifikasi 1:N), skala database dapat dikelola. Setiap query verifikasi mencari satu NIK dan membandingkan terhadap satu template yang disimpan. Bottleneck bukan ukuran database tetapi throughput konkuren. Dengan indexing yang tepat pada field NIK, PostgreSQL menangani 10.000+ lookup per detik pada hardware sederhana.

Apa perbedaan antara AES-256-GCM dan AES-256-CBC untuk enkripsi template?

AES-256-GCM sangat direkomendasikan dibanding CBC karena menyediakan kerahasiaan dan autentisitas dalam satu operasi (Authenticated Encryption with Associated Data). GCM mendeteksi jika ciphertext telah dimanipulasi, sementara CBC tidak — membuat CBC rentan terhadap serangan padding oracle. GCM juga lebih cepat pada CPU modern dengan dukungan instruksi AES-NI. Spesifikasi teknis KOMDIGI mewajibkan enkripsi terotentikasi, menjadikan GCM pilihan alami.

Bisakah verifikasi biometrik bekerja dengan infrastruktur e-KTP yang ada?

e-KTP (kartu tanda penduduk elektronik) mengandung chip dengan data biometrik (sidik jari dan foto wajah). Namun, mandat SIM secara spesifik menggunakan platform digital IKD bukan membaca dari chip e-KTP fisik. IKD menyediakan database terpusat dan terkini yang dapat diakses via API, sementara pembacaan chip e-KTP memerlukan hardware NFC dan tidak praktis untuk registrasi SIM volume tinggi.

Apa strategi disaster recovery yang direkomendasikan?

Implementasikan setup multi-region active-passive dalam Indonesia: primer di Jakarta (AWS ap-southeast-3 atau data center lokal) dengan failover di Surabaya atau Batam. Gunakan replikasi streaming PostgreSQL dengan RPO kurang dari 1 menit dan RTO kurang dari 15 menit. Kunci HSM harus direplikasi ke site DR.

Bagaimana memastikan keadilan dan mencegah bias dalam pengenalan wajah?

Pengujian bias sangat penting untuk populasi beragam Indonesia. Uji sistem di seluruh tipe warna kulit Fitzpatrick III sampai VI, kedua gender, semua kelompok usia (18-80+), dan dengan aksesori umum (hijab, kacamata, masker). Proses sertifikasi KOMDIGI mencakup pengujian paritas demografis — sistem harus mencapai variasi akurasi dalam 2% di seluruh kelompok demografis.

Apa yang terjadi saat kebocoran data biometrik?

Berdasarkan UU PDP, kebocoran yang melibatkan data biometrik memerlukan: notifikasi kepada otoritas perlindungan data dalam 72 jam, notifikasi kepada individu yang terdampak tanpa penundaan yang tidak semestinya, dan laporan insiden terperinci. Template yang dikompromikan harus dicabut dan didaftarkan ulang — inilah mengapa biometrik yang dapat dibatalkan (transformasi template non-invertible) sangat penting.