👨‍💻
Sammi
  • Hello
  • About Me
    • Links
    • My Daily Uses
  • PostgreSQL → Partitioning
  • Belajar System Programming Menggunakan Go
    • Mengingat Kembali Tentang Concurrency dan Parallelism
  • Memory Management
  • Explore
    • Testing 1: Load and performance testing
    • Data Structure 1: Bloom Filter
    • System Design 1: Back of The Envelope Estimation
    • System Design 2: A Framework For System Design Interviews
    • System Design 3: Design a URL Shortener
    • Belajar RabbitMQ
  • Belajar Kubernetes
  • Notes
    • Permasalahan Penggunaan JWT dan Solusinya dengan PASETO
    • First Principle Thinking
    • The Over-Engineering Pendulum
    • Data-Oriented Programming
  • CAP Theorem
  • Go Series: Safer Enum
  • Go Series: Different types of for loops in Golang?
  • Go Series: Mutex & RWMutex
  • Setup VM Production Ready Best Practice
  • BEHAVIOUR QUESTION
  • Invert, always invert
  • Mengapa Tidak Menggunakan Auto-Increment ID?
  • I Prefix dan Impl Suffix
  • ACID
  • MVCC Di Postgres
  • Implicit Interface di Go
  • Transaction di Postgres
  • Kriteria Kolom yang Cocok Dijadikan Index
  • Misc
    • Go Project
    • Talks
    • Medium Articles
  • PostgreSQL
    • Introduction
  • English
    • Vocab
Powered by GitBook
On this page
  1. Notes

Permasalahan Penggunaan JWT dan Solusinya dengan PASETO

Permasalahan Penggunaan JWT dan Solusinya dengan PASETO

Pengantar

Dalam pengembangan aplikasi web dan mobile saat ini, token-based authentication menjadi metode yang sangat populer untuk mengelola otentikasi pengguna. Salah satu jenis token yang paling sering digunakan adalah JSON Web Token (JWT). Meskipun banyak digunakan, standar JWT memiliki beberapa kelemahan serius dari sisi keamanan, yang telah terbukti berbahaya.

Artikel ini akan mengulas secara menyeluruh mengenai permasalahan keamanan JWT, dan bagaimana PASETO (Platform Agnostic Security Token) hadir sebagai solusi yang lebih aman dan sederhana.


Cara Kerja Otentikasi Berbasis Token

Pada dasarnya, otentikasi token bekerja sebagai berikut:

  1. Login: Klien (pengguna) mengirimkan username dan password ke server.

  2. Token Diterbitkan: Jika data benar, server menghasilkan dan menandatangani token, lalu mengirimkan token itu kembali kepada klien.

  3. Akses Resource: Klien menggunakan token tersebut untuk mengakses resource lain dengan menyisipkannya ke dalam header permintaan (request).

  4. Validasi Token: Server memverifikasi token dan memberikan respon sesuai jika token valid.


Struktur dan Mekanisme JWT

JWT terdiri dari tiga bagian yang dipisahkan oleh tanda titik (.):

  1. Header: Berisi tipe token (JWT) dan algoritma penandatanganan (misalnya, HS256).

  2. Payload: Menyimpan data pengguna seperti username, exp (waktu kedaluwarsa), dan jti (ID token).

  3. Signature: Merupakan tanda tangan digital untuk memverifikasi keaslian token.

Namun, penting untuk dicatat bahwa payload hanya di-encode (base64), bukan dienkripsi, sehingga siapa pun bisa membaca isi token tanpa membutuhkan kunci rahasia.


Permasalahan Keamanan pada JWT

  1. Terlalu Banyak Pilihan Algoritma: JWT mendukung banyak algoritma, termasuk yang sudah diketahui rentan (contoh: RSA PKCSv1.5 yang rentan terhadap padding oracle attack). Ini membingungkan developer dan membuka celah kesalahan konfigurasi.

  2. Header Dapat Dimanipulasi: Informasi algoritma disimpan di header token. Penyerang bisa mengubah algoritma menjadi "none" untuk melewati proses verifikasi signature jika implementasi server tidak hati-hati.

  3. Serangan Algoritma Simetris Palsu: Misalnya, server menggunakan RS256 (asymmetric), tapi penyerang membuat token palsu dengan header alg: HS256 (symmetric) dan menandatanganinya menggunakan public key server. Jika server tidak memverifikasi algoritma yang digunakan, maka token palsu itu bisa dianggap valid.

  4. Payload Tidak Aman: Karena payload hanya di-encode, bukan dienkripsi, informasi sensitif bisa dibaca oleh siapa saja yang memegang token.


Solusi: Menggunakan PASETO

PASETO hadir untuk menggantikan JWT dengan desain yang lebih aman dan lebih mudah digunakan. Perbedaan utamanya meliputi:

  1. Tanpa Pilihan Algoritma: Developer hanya memilih versi PASETO (v1 atau v2). Setiap versi sudah memiliki algoritma kriptografi yang kuat dan tetap.

  2. Payload Aman: Untuk penggunaan lokal (dengan kunci simetris), PASETO mengenkripsi dan mengautentikasi seluruh isi token menggunakan AEAD (Authenticated Encryption with Associated Data), bukan hanya base64 encoding.

  3. Tanpa Header Algoritma: Karena tidak ada bagian algoritma di token, penyerang tidak bisa mengganti algoritma seperti di JWT.

  4. Desain Lebih Modern:

    • Versi 1: Menggunakan AES-CTR + HMAC-SHA384 (simetris) dan RSA-PSS + SHA384 (asimetris).

    • Versi 2: Menggunakan XChaCha20 + Poly1305 (simetris) dan Ed25519 (asimetris), yang lebih modern dan efisien.

  5. Struktur Token: PASETO memiliki struktur:

    • Versi (v2)

    • Tujuan (local/public)

    • Payload (dienkripsi atau di-encode tergantung tujuannya)

    • (Opsional) Footer untuk metadata publik


Kesimpulan

JWT, meskipun populer, memiliki banyak kelemahan desain yang membuka potensi serangan jika tidak digunakan dengan sangat hati-hati. PASETO menyederhanakan banyak aspek ini, sekaligus meningkatkan keamanan secara signifikan. Bagi pengembang yang ingin membangun aplikasi dengan otentikasi yang aman dan minim risiko kesalahan konfigurasi, beralih ke PASETO adalah pilihan yang bijak.

PreviousBelajar KubernetesNextFirst Principle Thinking

Last updated 5 days ago