Konversi Sistem Bilangan dalam Enkripsi PIN Block
Di kuliah kemarin, saya memberikan materi tentang konversi antar sistem bilangan dan representasi data. Materi ini adalah bagian dari Sub-CPMK 3 yang mencakup kuliah, latihan praktik, dan simulasi. Durasi keseluruhan adalah 150 menit (60 menit kuliah, 90 menit praktik).
Banyak mahasiswa yang bertanya, “Buat apa sih belajar biner, oktal, dan heksadesimal? Toh sehari-hari kita pakai desimal.”
Nah, pada kesempatan ini saya akan jelaskan dengan contoh kasus nyata: enkripsi PIN di sistem perbankan menggunakan Hardware Security Module (HSM).
Latar Belakang
Pada waktu kita melakukan transaksi ATM, kita memasukkan PIN (Personal Identification Number) yang biasanya 6 digit. PIN ini harus dikirim ke bank untuk diverifikasi. Tentunya PIN tidak boleh dikirim begitu saja dalam bentuk plain text. Harus dienkripsi dulu.
Proses enkripsi PIN ini melibatkan konversi sistem bilangan yang kita pelajari. Mari kita lihat bagaimana PIN diproses menjadi PIN Block sesuai standar ISO 9564-1:2002.
Konstruksi PIN Block
Misalnya kita punya data berikut:
PAN : 1234567890123456
PIN : 435378
PVV : 1433
Di mana:
- PAN (Primary Account Number) adalah nomor kartu ATM/debit
- PIN adalah kode rahasia 6 digit
- PVV (PIN Verification Value) adalah nilai hash untuk verifikasi offline
Step 1: Format PIN Field
Format PIN Field adalah 0L[PIN][F...] dengan total 16 digit heksadesimal:
0 6 435378 F F F F F F F F
Penjelasan:
0adalah Control Field6adalah panjang PIN (6 digit)435378adalah PIN yang sebenarnyaFadalah padding (huruf F dalam heksadesimal = 15 dalam desimal)
Jadi PIN Field dalam heksadesimal adalah: 06435378FFFFFFFF
Step 2: Format PAN Field
Format PAN Field adalah 0000[12 rightmost PAN digits excluding check digit]
Dari PAN 1234567890123456, kita ambil 12 digit paling kanan tidak termasuk check digit terakhir:
0 0 0 0 456789012345
Hasilnya: 0000456789012345
Step 3: XOR Operation
Sekarang kita lakukan operasi XOR antara PIN Field dan PAN Field. Operasi XOR adalah operasi bitwise yang hasilnya:
0 XOR 0 = 00 XOR 1 = 11 XOR 0 = 11 XOR 1 = 0
Dalam contoh sederhana:
5 XOR 4
5 : 0101
4 : 0100
----xor
0001 => 1
Untuk PIN Block kita:
PIN Field: 06435378FFFFFFFF
PAN Field: 0000456789012345
---------------- XOR
Pinblock : 0643161F76FEDCBA
Hasil XOR ini adalah PIN Block yang siap dienkripsi. Perhatikan bahwa hasil operasi XOR dalam heksadesimal ini sudah menyembunyikan PIN asli kita. Tanpa mengetahui PAN, orang tidak bisa mendapatkan PIN dari PIN Block ini.
PIN Verification Value (PVV)
PVV digunakan untuk verifikasi PIN secara offline tanpa perlu mendekripsi PIN Block. Cara kerjanya:
Step 1: Concatenate PIN + PAN
Gabungkan PIN dengan PAN:
PIN: 435378
PAN: 1234567890123456
Combined: 4353781234567890123456
Step 2: Apply SHA-256 Hash
Hash gabungan tadi menggunakan SHA-256:
SHA-256(4353781234567890123456)
Hasilnya adalah hash 64 karakter heksadesimal. Kenapa heksadesimal? Karena setiap byte (8 bit) biasanya direpresentasikan sebagai 2 digit heksadesimal. SHA-256 menghasilkan 256 bit = 32 byte = 64 digit hex.
Step 3: Extract First 4 Digits
Ambil 4 digit numerik pertama dari hash:
1433
Nilai inilah yang menjadi PVV. Pada waktu verifikasi, HSM akan menghitung ulang PVV dari PIN yang diinput user dan membandingkannya dengan PVV yang tersimpan. Kalau cocok, PIN benar.
Kenapa Harus Paham Konversi Sistem Bilangan?
Dari contoh di atas, kita bisa lihat bahwa:
-
Representasi Data: PIN direpresentasikan dalam heksadesimal karena lebih kompak. 16 digit hex = 64 bit data. Kalau pakai desimal, butuh lebih banyak karakter.
-
Operasi Bitwise: XOR operation bekerja di level bit. Kita harus paham bagaimana heksadesimal dikonversi ke biner untuk memahami XOR. Contohnya:
F(hex) =1111(binary)5(hex) =0101(binary)F XOR 5=1111 XOR 0101=1010=A(hex)
-
Debugging: Pada waktu ada masalah di implementasi HSM, kita harus bisa trace setiap step perhitungan. Kalau tidak paham hex dan binary, susah untuk debug.
-
Security: Enkripsi dan hashing bekerja di level byte. Satu byte = 8 bit = 2 digit hex. Kalau kita tidak paham representasi ini, kita tidak akan mengerti bagaimana algoritma enkripsi bekerja.
-
Interoperability: Standard internasional seperti ISO 9564 mendefinisikan format dalam heksadesimal. Kalau kita mau implement sesuai standard, ya harus paham hex.
Suasana Praktikum
Dalam sesi praktik, mahasiswa diminta untuk menghitung secara manual konversi sistem bilangan dan operasi XOR. Ini penting untuk memastikan mereka benar-benar paham konsepnya, bukan hanya copy-paste kode.
HSM Simulator untuk Learning
Untuk membantu mahasiswa memahami konsep HSM dan PIN Block encryption, saya membuat aplikasi HSM Simulator yang bisa digunakan untuk pembelajaran. Aplikasi ini dibuat dengan Spring Boot 3.5.6, Java 21, PostgreSQL 17, dan Tailwind CSS.
Screenshot-screenshot di atas diambil dari aplikasi simulator ini. Aplikasi ini mengimplementasikan:
-
Key Management: Generate dan manage berbagai jenis key seperti LMK (Local Master Key), TMK (Terminal Master Key), TPK (Terminal PIN Key), dan zone keys untuk komunikasi antar bank.
-
PIN Operations: Support multiple format PIN sesuai ISO 9564-1:2002 (ISO-0, ISO-1, ISO-3, ISO-4) dengan encryption, verification, dan translation antar encryption domain.
-
MAC Generation: Implementasi AES-CMAC dan HMAC-SHA256 untuk message authentication codes.
-
Key Ceremony: Inisialisasi master key dengan multi-custodian menggunakan Shamir’s Secret Sharing (threshold 2-of-3).
-
Banking Infrastructure: Simulasi four-party payment network dengan role ISSUER, ACQUIRER, SWITCH, dan PROCESSOR.
Aplikasi ini tidak untuk production use, murni untuk edukasi. Tujuannya adalah agar mahasiswa bisa melihat langsung bagaimana perhitungan PIN Block dilakukan step-by-step, bukan sekedar dapat hasil akhir saja.
Source code lengkap tersedia di GitHub. Silahkan di-fork dan dimodifikasi sesuai kebutuhan pembelajaran.
Penutup
Jadi, apakah konversi sistem bilangan itu penting?
Kalau kita kerja di bidang yang berhubungan dengan:
- Security dan Cryptography
- Low-level programming
- Embedded systems
- Network protocols
- Hardware interfacing
Maka jawabannya: sangat penting.
Bahkan untuk high-level programming, pemahaman tentang binary dan hexadecimal akan membantu kita:
- Debug masalah yang melibatkan bitwise operation
- Memahami dokumentasi API yang menggunakan hex values
- Optimize kode yang melibatkan bit manipulation
- Memahami bagaimana data disimpan dan ditransmisikan
Seperti halnya database transaction yang saya bahas di artikel sebelumnya, pengetahuan fundamental seperti ini termasuk kategori yang fatal kalau tidak dipahami, terutama untuk sistem yang berhubungan dengan security dan finansial.
Kalau sampai ada bug di implementasi PIN Block yang menyebabkan PIN bisa bocor, kira-kira siapa yang mau tanggung jawab?
Silahkan dijawab sendiri lah.








