Langsung ke konten
AFM Studio
  • Halaman

    AFM Studio
  • Karya
  • Lab
  • Tentang
  • CV
  • Kontak
  • Proyek

    AksaraPerpustakaan pengetahuan Otorita IKN yang bisa dicari, dengan server memeriksa akses setiap pembaca di tiga tingkat
  • Daily TaqwaSistem presensi salat anti-manipulasi untuk ~2.000 pegawai OIKN di Masjid Negara IKN
  • Lantara v2Mesin perizinan Otorita IKN tempat administrator menambah jenis izin baru dari layar, tanpa developer
  • eKiosk IKNDua ruang kendali untuk Nusantara: konten kios dan pelacakan bus live dengan estimasi kedatangan yang menilai dirinya sendiri
  • E-Monev IKNPlatform pemantauan pembangunan Nusantara selama 23 tahun, melacak progres triwulan setiap unit terhadap 24 KPI
  • JDIH OIKNPortal dokumen hukum publik OIKN, dengan alur penerbitan terkendali dan ringkasan AI yang tidak pernah keluar dari server
  • Jejak PenanamanAplikasi absen acara penanaman pohon IKN yang membuktikan peserta hadir di lokasi lewat selfie ber-geofence
  • Dashboard SAKTIPipeline malam dan dashboard yang menggantikan unduhan anggaran manual di keenam satker OIKN
  • DoseRxKalkulator dosis untuk 127 obat yang membulatkan dosis ke tablet dan sirup yang dijual apotek Indonesia
  • CubiqPelatih speedcubing dengan timer setara kompetisi dan solver buatan sendiri untuk 8 puzzle utama
  • ScimotionPerpustakaan sains interaktif berisi 86 artikel, masing-masing dijelaskan bersama animasi yang bisa dikendalikan pembaca
  • WA Daily Scrum BotBot WhatsApp yang menagih laporan standup tim 14 orang dan menandai tugas yang macet berhari-hari

↑ ↓ untuk berpindah · Enter untuk membuka · Esc untuk menutup

Linkage

Laboratorium interaktif yang mengenali ulang orang di data sintetis, bukti bahwa menghapus nama tidak membuat data anonim

Tangkapan layar
serangan re-identifikasi, diskor terhadap kebenaran
6
kasus memasangkan pertahanan dengan serangannya
5
record sintetis digambar pada 60 fps
200.000
cara memuat dataset asli
0
Di halaman ini

Masalahnya

Instansi pemerintah dan perusahaan merilis data "anonim" dengan menghapus nama dan nomor identitas, lalu menganggap urusannya selesai. Kenyataannya tidak begitu. Yang mengenali seseorang adalah gabungan data biasa, seperti kecamatan, tanggal lahir, dan jenis kelamin, yang masing-masing tampak tidak sensitif. Sebuah studi terkenal menemukan 87% penduduk Amerika Serikat unik berdasarkan kode pos, jenis kelamin, dan tanggal lahir. Studi ulang kemudian mendapat 63%, dan sampai sekarang kedua angka itu belum pernah didamaikan.

Pengelola data biasanya mengenal masalah ini sebagai kutipan. Mereka membaca "87%" tapi tidak bisa menilai apakah angka itu berlaku untuk data yang akan mereka rilis. Saya ingin menggantinya dengan alat ukur: jalankan serangannya sendiri, lihat berapa orang yang berhasil dikenali, pasang pertahanan standar, lalu saksikan serangan berikutnya menembus pertahanan itu.

Yang saya bangun

Aplikasi ini hanya bekerja pada populasi buatannya sendiri

Alat yang menerima dataset asli lalu membantu mengenali ulang orang-orang di dalamnya adalah alat re-identifikasi, apa pun bunyi teks pengantarnya. Karena itu Linkage membangkitkan populasi sintetis sendiri di browser dan menyimpan kebenaran tentang siapa pemilik setiap record. Dengan begitu aplikasi bisa memberi tahu, misalnya, bahwa Anda mengenali 340 dari 500 target, lalu menunjukkan 160 yang gagal. Tidak ada cara untuk memuat berkas atau menempelkan data, dan sebuah tes memindai situs hasil build lalu menggagalkan build kalau cara itu muncul.

Mengecek data sendiri cukup dengan deskripsi kolom

Pengelola data tetap perlu menilai rilis mereka sendiri. Penilai skema hanya menerima deskripsi tiap kolom: nama, tipe, dan jumlah nilai berbeda di dalamnya. Input-nya tidak punya tempat untuk baris data, dan hal itu dicek oleh tes. Hasilnya berupa perkiraan keunikan, lengkap dengan asumsinya: kolom dianggap saling bebas, sehingga kolom yang berkorelasi membuat hasilnya tampak lebih aman dari kenyataannya.

Setiap serangan melaporkan skor

Keenam serangan tidak bisa menyatakan sebuah record dapat dikenali tanpa hitungan pendukungnya: dicoba, benar, salah, dan gagal. Untuk setiap target, serangan juga melaporkan berapa kandidat yang tersisa. Serangan yang menyempitkan 500.000 record menjadi tiga sudah mengerjakan sebagian besar tugasnya meski belum tuntas, dan layar menunjukkan hal itu.

Setiap kasus berakhir dengan serangan berikutnya

Ada lima kasus berskenario. Masing-masing menjalankan serangan, memasang pertahanan yang menghentikannya, lalu menjalankan serangan yang lolos dari pertahanan itu. Rantainya berjalan dari linkage ke k-anonymity, homogenitas, l-diversity, skewness, differencing, dan akhirnya differential privacy beserta anggarannya. Untuk differential privacy, saya menurunkan besar derau yang dibutuhkan tiap jenis kueri dan menampilkan cara hitungnya, karena memakai satu nilai untuk semua kueri diam-diam merusak jaminannya.

200.000 orang dalam satu layar

Tampilan utama menggambar 200.000 record sintetis pada 60 frame per detik dan mengelompokkannya ke dalam kelas berisi orang-orang yang tampak identik di data. Saat data digeneralisasi, kelas-kelas itu melebur di layar. Posisi setiap record saya kunci kecuali kelasnya sendiri berubah, supaya peleburannya mudah dibaca. Ada juga pembedah NIK yang menunjukkan bahwa 16 digit NIK memuat tiga data yang sama, yaitu wilayah, tanggal lahir, dan jenis kelamin. Jadi menyamarkan digit terakhirnya justru menyembunyikan satu-satunya bagian yang tidak berbahaya.

Hasilnya

Linkage sudah live dan terbuka untuk umum, sebagai versi pertama yang utuh tanpa backend dan tanpa akun. Selain lima kasus, ada sandbox bebas berisi dua belas instrumen, termasuk pencarian generalisasi terkecil yang memenuhi target, digambar dari catatan asli pencarian itu tentang apa saja yang diujinya. Seluruh aplikasi diunduh sebesar 113,8 KB terkompresi. Aplikasi ini melaporkan apa yang ditemukan serangan tanpa mendramatisirnya: tidak ada kata "terekspos", "korban", atau ucapan selamat. Saya membangunnya sendiri dalam delapan hari pada September 2026.

Di balik layarDetail teknis untuk engineer
  • src/engine/ tidak meng-import apa pun, termasuk React, DOM, atau Date. Setiap hasil adalah fungsi dari seed dan konfigurasi, dites terhadap implementasi rujukan brute-force.
  • Tidak ada FileReader, input berkas, drag-and-drop, atau jalur tempel. tests/no-file-input.test.ts mencari API itu di bundle hasil build; tests/assessor-purity.test.ts memastikan di level tipe dan runtime bahwa input penilai tidak punya values, sample, atau rows.
  • Serangan: linkage, homogenitas, pengetahuan latar, skewness, differencing, dan join data pendukung. Masing-masing mengembalikan candidateCount per target.
  • Bangku DP: sensitivitas per kueri yang diturunkan (count 1, sum sebesar rentang clamp-nya), mekanisme Laplace dan Gaussian, serta meteran anggaran sekuensial. dp.test.ts mencocokkan sampel Laplace dengan densitas analitiknya.
  • Pencarian lattice memangkas ke atas berdasarkan monotonisitas dan mencatat prunedBy serta urutan uji order; lattice.test.ts memastikan hasilnya sama dengan pencarian menyeluruh.
  • Field memakai Canvas 2D, tiga typed array paralel, indeks grid untuk hit testing dengan satu listener, dan penataan yang deterministik. tests/performance.test.ts memastikan jalur 200.000 record selesai di bawah 2 detik.
  • Metode Sweeney dan Golle sama-sama direkonstruksi pada populasi yang kebenarannya diketahui, dan selisih 87% dan 63% ditampilkan sebagai soal yang belum terjawab.
  • Seed, parameter generator, vektor generalisasi, target k, dan ε disimpan di URL. Progres kasus dan tema tetap lokal.
  • Dua dependensi runtime, React 18.3 dan React DOM. Vite 5.4 dengan plugin internal linkage-metadata, CSS biasa, animasi requestAnimationFrame buatan sendiri, tanpa library grafik atau UI.
  • scripts/bundle-budget.mjs menggagalkan CI di atas 250 KB gzip; ukuran saat ini 113,8 KB, termasuk 44,3 KB untuk React.
  • 328 tes di 20 berkas (sekitar 24 detik), 18 view ditambah 6 layar kasus, 30 modul engine.
  • Sekitar 13.300 baris di src/ dan 80 commit dari 4 sampai 11 September 2026, berpasangan dengan Claude Code.

Tangkapan layar

Linkage
K-Anonymity
Class Inspector

Sedang merekrut, atau membangun hal serupa?

Saya terbuka untuk posisi full-time dan proyek freelance tertentu.