0Pricing
Cryptology Academy · Pelajaran

HMAC dalam API: Penandatanganan Permintaan

Implementasikan penandatanganan permintaan berbasis HMAC dan pencegahan serangan pemutaran ulang.

HMAC dalam API: Penandatanganan Permintaan adalah pelajaran Cryptology Academy gratis di CoddyKit. Ini adalah pelajaran 3 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.

Selamat Datang

Penandatanganan permintaan berbasis HMAC digunakan oleh AWS, GitHub, Stripe, dan Twilio untuk mengautentikasi panggilan API. Dalam pelajaran ini, kita membangun sistem penandatanganan permintaan yang lengkap.

Mengapa Penandatanganan Permintaan API?

Kunci API di URL dapat tercatat di server proksi, riwayat peramban, dan catatan server. Penandatanganan permintaan menyertakan seluruh isi permintaan dalam MAC—memastikan muatan tidak diubah dan kunci tidak terekspos sendirian.

AWS Signature Version 4

AWS SigV4 menghitung: 1. Permintaan kanonis (metode + URL + header + hash isi) 2. String yang akan ditandatangani (tanggal + wilayah + layanan + hash permintaan kanonis) 3. Kunci penandatanganan = HMAC(HMAC(HMAC(HMAC('AWS4'+secret, date), region), service), 'aws4_request') 4. Tanda tangan = HMAC(signing_key, string_to_sign)

Verifikasi Webhook GitHub

GitHub menandatangani setiap muatan webhook: X-Hub-Signature-256: sha256=HMACHEX Verifikasi: import hmac expected = 'sha256=' + hmac.new(secret, payload, 'sha256').hexdigest() hmac.compare_digest(expected, received_signature)

Ancaman Serangan Pemutaran Ulang

Jika penyerang menangkap permintaan bertanda tangan yang valid, permintaan itu dapat dikirim ulang berkali-kali. Transfer senilai $100 yang ditandatangani sekali dapat diputar ulang 1000 kali. HMAC saja NOT mencegah pemutaran ulang.

Pencegahan Pemutaran Ulang Berbasis Cap Waktu

Sertakan cap waktu dalam pesan yang ditandatangani. Tolak permintaan yang lebih lama dari 5 menit. Stripe mengirimkan X-Stripe-Signature dengan cap waktu. GitHub menggunakan X-GitHub-Delivery (UUID), bukan pendekatan berbasis cap waktu.

Pencegahan Pemutaran Ulang Berbasis Nilai Sekali Pakai

Sertakan nilai acak unik dalam setiap permintaan. Server menyimpan nilai yang sudah digunakan (di Redis dengan TTL). Tolak setiap permintaan yang menggunakan nilai yang pernah dilihat sebelumnya. Cara ini lebih andal daripada cap waktu untuk sistem terdistribusi.

Implementasi Penandatanganan Permintaan

import hmac, hashlib, time, os def sign_request(secret, method, path, body, timestamp=None): ts = timestamp or str(int(time.time())) payload = f'{method}\n{path}\n{ts}\n' + hashlib.sha256(body).hexdigest() sig = hmac.new(secret.encode(), payload.encode(), 'sha256').hexdigest() return ts, sig

Verifikasi di Sisi Server

def verify_request(secret, method, path, body, ts, received_sig): # Check timestamp freshness if abs(time.time() - int(ts)) > 300: # 5 minutes return False # Recompute and compare _, expected = sign_request(secret, method, path, body, ts) return hmac.compare_digest(expected, received_sig)

JWT dengan HMAC (HS256)

JWT HS256 menggunakan HMAC-SHA256 dengan rahasia bersama. Server menandatangani sekaligus memverifikasinya. Keterbatasannya: pihak mana pun yang memiliki kunci dapat memalsukan token. Untuk kepercayaan asimetris (autentikasi pihak ketiga), gunakan RS256 atau ES256.

Strategi Rotasi Kunci

Rotasikan kunci HMAC secara berkala: buat kunci baru, dukung kunci lama dan baru selama jendela transisi (24 jam), lalu nonaktifkan kunci lama. AWS SigV4 menurunkan kunci dari rahasia bertanggal agar rotasi harian dapat dilakukan.

Pemeriksaan Singkat

Mengapa penandatanganan permintaan HMAC saja tidak cukup untuk mencegah serangan pemutaran ulang?

Ringkasan

Penandatanganan permintaan HMAC dengan perlindungan terhadap pemutaran ulang telah diimplementasikan. Selanjutnya, kita membandingkan CMAC dan Poly1305 sebagai alternatif MAC berbasis sandi blok.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “HMAC dalam API: Penandatanganan Permintaan” gratis?

Ya — teks lengkap “HMAC dalam API: Penandatanganan Permintaan” 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 “HMAC dalam API: Penandatanganan Permintaan”?

Implementasikan penandatanganan permintaan berbasis HMAC dan pencegahan serangan pemutaran ulang. 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 3 dari 4.

Berapa lama pelajaran “HMAC dalam API: Penandatanganan Permintaan” 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. Konsep MAC & Serangan Perluasan Panjang
  2. Konstruksi HMAC & Pembuktian Keamanan
  3. HMAC dalam API: Penandatanganan Permintaan
  4. CMAC & Poly1305: MAC Berbasis Sandi Blok
← Kembali ke Cryptology Academy