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).

Silabus Kuliah

Banyak mahasiswa yang bertanya, “Buat apa sih belajar biner, oktal, dan heksadesimal? Toh sehari-hari kita pakai desimal.”

Suasana Kelas

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:

  • 0 adalah Control Field
  • 6 adalah panjang PIN (6 digit)
  • 435378 adalah PIN yang sebenarnya
  • F adalah padding (huruf F dalam heksadesimal = 15 dalam desimal)

Jadi PIN Field dalam heksadesimal adalah: 06435378FFFFFFFF

PIN Block Construction - Step 1

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 = 0
  • 0 XOR 1 = 1
  • 1 XOR 0 = 1
  • 1 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.

XOR Operation

Perhitungan Manual

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.

PVV Calculation - Step 1

PVV Calculation - Steps 2-3

Kenapa Harus Paham Konversi Sistem Bilangan?

Dari contoh di atas, kita bisa lihat bahwa:

  1. Representasi Data: PIN direpresentasikan dalam heksadesimal karena lebih kompak. 16 digit hex = 64 bit data. Kalau pakai desimal, butuh lebih banyak karakter.

  2. 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)
  3. Debugging: Pada waktu ada masalah di implementasi HSM, kita harus bisa trace setiap step perhitungan. Kalau tidak paham hex dan binary, susah untuk debug.

  4. 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.

  5. Interoperability: Standard internasional seperti ISO 9564 mendefinisikan format dalam heksadesimal. Kalau kita mau implement sesuai standard, ya harus paham hex.

Suasana Praktikum

Mahasiswa sedang praktik

Praktik perhitungan konversi

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:

  1. 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.

  2. 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.

  3. MAC Generation: Implementasi AES-CMAC dan HMAC-SHA256 untuk message authentication codes.

  4. Key Ceremony: Inisialisasi master key dengan multi-custodian menggunakan Shamir’s Secret Sharing (threshold 2-of-3).

  5. 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.