0Pricing
Cryptology Academy · Pelajaran

PKCE: Mengamankan Klien Publik

Pahami Proof Key for Code Exchange dan cara mekanisme ini mencegah serangan penyadapan kode otorisasi.

PKCE: Mengamankan Klien Publik adalah pelajaran Cryptology Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Cryptology Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Cryptology Academy mencakup 4 pelajaran total.

Intersepsi Kode Otorisasi

Tanpa PKCE, aplikasi seluler rentan terhadap serangan intersepsi kode otorisasi. Ketika server otorisasi mengarahkan kode otorisasi ke skema URI khusus yang terdaftar untuk aplikasi, misalnya myapp://callback, aplikasi berbahaya apa pun pada perangkat yang sama yang mendaftarkan skema URI tersebut dapat mencegat pengalihan dan mencuri kode.

Cara Kerja Intersepsi

Serangannya berlangsung sebagai berikut: aplikasi berbahaya mendaftarkan skema URI khusus yang sama dengan aplikasi yang sah. Ketika server otorisasi mengarahkan kode ke myapp://callback, OS dapat menampilkan kedua aplikasi sebagai penangan. Jika pengguna memilih aplikasi berbahaya atau OS menjadikannya sebagai aplikasi bawaan, penyerang menerima kode otorisasi dan dapat menukarkannya dengan token tanpa mengetahui rahasia klien.

Verifikator Kode PKCE

PKCE (RFC 7636) menambahkan rahasia yang dibuat secara dinamis ke alur kode otorisasi. Sebelum memulai alur, klien membuat rangkaian karakter acak yang dihasilkan secara kriptografis, sepanjang 43–128 karakter, yang disebut verifikator kode. Rangkaian ini unik untuk setiap permintaan otorisasi dan tidak pernah dikirimkan sampai tahap pertukaran token.

Perhitungan Tantangan Kode

Klien menghitung tantangan kode dari verifikator: code_challenge = BASE64URL(SHA256(code_verifier)). Penggunaan SHA256 adalah metode yang diwajibkan dalam RFC 7636. Metode "plain", yang mengirimkan verifikator secara langsung, tidak direkomendasikan. Tantangan kode merupakan transformasi satu arah dari verifikator, sehingga mengetahui tantangan tersebut tidak mengungkapkan verifikator.

Menyertakan Tantangan Kode dalam Otorisasi

Permintaan otorisasi menyertakan dua parameter tambahan: "code_challenge=BASE64URL(SHA256(verifier))&code_challenge_method=S256". Server otorisasi menyimpan tantangan kode yang terkait dengan kode otorisasi yang diterbitkan. Tidak ada rahasia yang dikirim ke server yang dapat disadap pada tahap ini.

Pertukaran Token dengan Verifikator Kode

Selama pertukaran token (POST ke titik akhir token), klien menyertakan "code_verifier=ORIGINAL_RANDOM_STRING" bersama kode otorisasi. Server otorisasi menghitung BASE64URL(SHA256(code_verifier)) dan memverifikasi bahwa hasilnya cocok dengan code_challenge yang tersimpan. Hanya klien sah yang membuat verifikator tersebut yang dapat melewati pemeriksaan ini.

Mengapa Intersepsi Gagal dengan PKCE

Jika penyerang mencegat kode otorisasi, penyerang hanya menerima kode dan tantangan kode, yang bersifat publik. Untuk menukarkan kode dengan token, penyerang harus memberikan verifikator kode. Karena verifikator dibuat oleh klien yang sah dan tidak pernah dikirimkan sampai pertukaran token, yang berlangsung secara aman, penyerang tidak dapat menghitung atau memperoleh verifikator tersebut.

PKCE Mencegah Penyisipan Kode

PKCE juga mencegah serangan penyisipan kode otorisasi, saat penyerang mengganti kode yang valid dengan kode curian dalam pengalihan. Tantangan kode dari kode curian tidak cocok dengan pemverifikasi yang akan diberikan oleh klien korban, sehingga pertukaran token gagal. PKCE memberikan pertahanan berlapis terhadap beberapa vektor serangan secara bersamaan.

PKCE untuk Semua Klien

Meskipun RFC 7636 awalnya dijelaskan sebagai solusi untuk klien publik (yang tidak memiliki rahasia klien), OAuth Security BCP dan OAuth 2.1 mewajibkan PKCE untuk semua klien, termasuk klien rahasia yang memiliki rahasia klien. PKCE memberikan perlindungan yang independen dari autentikasi klien, sehingga bermanfaat secara universal.

PKCE dalam OAuth 2.1

OAuth 2.1 (draft-ietf-oauth-v2-1) menggabungkan praktik terbaik keamanan dari OAuth 2.0 Security BCP ke dalam satu dokumen. OAuth 2.1 mewajibkan PKCE untuk semua alur kode otorisasi, tidak lagi merekomendasikan alur implisit, dan mewajibkan rotasi token penyegaran. PKCE pada dasarnya merupakan dasar wajib untuk setiap implementasi OAuth 2.0 baru.

Catatan Implementasi

Mengimplementasikan PKCE dengan benar memerlukan: penggunaan pembangkit bilangan acak yang aman secara kriptografis untuk pemverifikasi (setidaknya 32 byte acak, kemudian dikodekan dalam base64url), penyimpanan pemverifikasi secara aman di klien (bukan di URL atau catatan), penggunaan metode S256 (bukan plain), serta penghapusan pemverifikasi setelah pertukaran token. Sebagian besar pustaka OAuth modern menangani PKCE secara otomatis.

Pemeriksaan Pemverifikasi Kode PKCE

Dalam PKCE, apa hubungan antara pemverifikasi kode dan tantangan kode?

Rangkuman Pelajaran: Keamanan PKCE

PKCE (RFC 7636) mencegah penyadapan kode otorisasi dengan mengikat setiap kode ke pemverifikasi kode yang dibuat secara dinamis dan hanya diketahui oleh klien yang sah. Pemverifikasi tersebut di-hash untuk menghasilkan tantangan kode (yang dikirimkan secara publik). Pertukaran token memerlukan pemverifikasi asli. PKCE mencegah serangan penyadapan maupun penyisipan. OAuth 2.1 mewajibkan PKCE untuk semua alur kode otorisasi.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “PKCE: Mengamankan Klien Publik” gratis?

Ya — teks lengkap “PKCE: Mengamankan Klien Publik” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Cryptology Academy, upgrade ke CoddyKit PRO. Kursus Cryptology Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “PKCE: Mengamankan Klien Publik”?

Pahami Proof Key for Code Exchange dan cara mekanisme ini mencegah serangan penyadapan kode otorisasi. Kamu berlatih Cryptology Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Cryptology Academy?

Tidak diperlukan pengalaman sebelumnya. Cryptology Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.

Berapa lama pelajaran “PKCE: Mengamankan Klien Publik” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Cryptology Academy ini?

Ya. Setiap pelajaran Cryptology Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Alur OAuth 2.0 dan Jenis Token
  2. PKCE: Mengamankan Klien Publik
  3. Klaim OpenID Connect dan Token ID
  4. Kerentanan OAuth dan Pola Serangan
← Kembali ke Cryptology Academy