Kesalahan Umum Kripto Python & Pola Aman
Hindari kunci yang ditulis langsung, mode ECB, perbandingan waktu tak konstan, dan lainnya.
Kesalahan Umum Kripto Python & Pola Aman adalah pelajaran Cryptology Academy gratis di CoddyKit. Ini adalah pelajaran 4 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.
Kesalahan Kriptografi yang Paling Berbahaya
Kriptografi mudah digunakan secara keliru. Kesalahan umum Python meliputi kunci yang ditanamkan langsung, mode ECB, perbandingan yang tidak berlangsung dalam waktu konstan, keacakan yang lemah, penggunaan ulang kunci atau nonce, serta membuat kriptografi sendiri.
Kesalahan 1: Kunci yang Ditanamkan Langsung
Jangan pernah menyematkan kunci dalam kode sumber. Kunci tersebut akhirnya tersimpan dalam riwayat git, log, dan pesan kesalahan. Gunakan variabel lingkungan atau KMS:
# WRONG
SECRET_KEY = b"my_secret_key_12" # visible in git!
# RIGHT
import os
SECRET_KEY = os.environb.get(b"SECRET_KEY") or os.urandom(32)
# Or load from KMS at startupKesalahan 2: Mode ECB
AES-ECB mengenkripsi setiap blok secara independen — blok plaintext yang identik menghasilkan blok ciphertext yang identik. Serangan "penguin ECB" mengungkap pola dalam gambar dan data terstruktur. Selalu gunakan GCM atau CBC dengan IV acak.
# WRONG — never use ECB
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
cipher = Cipher(algorithms.AES(key), modes.ECB()) # insecure!
# RIGHT
from cryptography.hazmat.primitives.ciphers.aead import AESGCM
aesgcm = AESGCM(key) # authenticated encryptionKesalahan 3: Perbandingan MAC yang Tidak Berlangsung dalam Waktu Konstan
Menggunakan == untuk membandingkan MAC membocorkan informasi waktu. Selalu gunakan hmac.compare_digest:
import hmac
# WRONG — leaks timing
if received_mac == expected_mac:
pass
# RIGHT — constant-time
if hmac.compare_digest(received_mac, expected_mac):
passKesalahan 4: Pembuatan Bilangan Acak yang Lemah
Jangan pernah menggunakan modul random untuk keperluan kriptografis — modul tersebut bukan CSPRNG. Gunakan secrets atau os.urandom:
import random, secrets, os
# WRONG
key = bytes([random.randint(0, 255) for _ in range(32)]) # predictable!
# RIGHT
key = os.urandom(32) # OS CSPRNG
token = secrets.token_bytes(32) # secrets module wrapperKesalahan 5: Penggunaan Ulang IV atau Nonce
Menggunakan ulang IV dengan CBC atau nonce dengan GCM merusak keamanan. Buat IV atau nonce acak yang baru untuk setiap enkripsi dan simpan bersama ciphertext:
import os
from cryptography.hazmat.primitives.ciphers.aead import AESGCM
key = AESGCM.generate_key(bit_length=256)
aesgcm = AESGCM(key)
# WRONG — fixed nonce
nonce = b"\x00" * 12 # reuse breaks GCM!
# RIGHT — fresh nonce every time
nonce = os.urandom(12)
ciphertext = aesgcm.encrypt(nonce, b"data", None)Kesalahan 6: Menggunakan MD5 atau SHA-1 untuk Keamanan
MD5 dan SHA-1 telah rusak secara kriptografis dalam hal ketahanan terhadap kolisi. Jangan pernah menggunakannya untuk tanda tangan digital, sidik jari sertifikat, atau HMAC. Gunakan SHA-256 atau SHA-3-256.
Kesalahan 7: Membuat Kriptografi Sendiri
Menerapkan primitif kriptografis dari awal hampir selalu menimbulkan bug yang sulit dideteksi. Gunakan paket cryptography, PyNaCl, atau PyCA. Jangan pernah menerapkan AES, RSA, atau ECDSA sendiri.
Pola Aman: PyNaCl untuk Kriptografi Tingkat Tinggi
PyNaCl membungkus pustaka NaCl/libsodium — API yang memiliki opini desain tertentu dan sulit disalahgunakan:
# pip install PyNaCl
import nacl.secret
import nacl.utils
key = nacl.utils.random(nacl.secret.SecretBox.KEY_SIZE)
box = nacl.secret.SecretBox(key)
encrypted = box.encrypt(b"my secret message")
decrypted = box.decrypt(encrypted)
print("Decrypted:", decrypted) # Uses XSalsa20-Poly1305Pola Aman: Pencirian Kata Sandi dengan Argon2
Gunakan argon2-cffi untuk pencirian kata sandi — jangan pernah menggunakan SHA-256 atau bcrypt secara langsung:
# pip install argon2-cffi
from argon2 import PasswordHasher
ph = PasswordHasher(time_cost=3, memory_cost=65536, parallelism=4)
hash_val = ph.hash("user_password")
print("Hash:", hash_val[:40], "...")
# Verify
try:
ph.verify(hash_val, "user_password")
print("Password correct")
except Exception:
print("Wrong password")Pengosongan Kunci
Setelah menggunakan kunci di memori, kosongkan isinya untuk mengurangi jendela waktu serangan pengambilan dump memori. GC Python membuat hal ini sulit — gunakan ctypes atau PyNaCl yang menanganinya secara otomatis.
Pemeriksaan Pengetahuan
Fungsi Python mana yang harus digunakan sebagai pengganti == saat membandingkan MAC kriptografis?
Ringkasan Pelajaran
Hindari kunci yang ditanamkan langsung, mode ECB, == untuk perbandingan MAC, modul random, dan penggunaan ulang nonce. Gunakan os.urandom/secrets untuk keacakan, AESGCM untuk enkripsi, serta hmac.compare_digest untuk verifikasi. PyNaCl dan argon2-cffi menyediakan API tingkat tinggi yang aman untuk kriptografi simetris dan kata sandi.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Kesalahan Umum Kripto Python & Pola Aman” gratis?
Ya — teks lengkap “Kesalahan Umum Kripto Python & Pola Aman” 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 “Kesalahan Umum Kripto Python & Pola Aman”?
Hindari kunci yang ditulis langsung, mode ECB, perbandingan waktu tak konstan, dan lainnya. 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 4 dari 4.
Berapa lama pelajaran “Kesalahan Umum Kripto Python & Pola Aman” 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
- Ikhtisar Pustaka Kriptografi Python
- Enkripsi & Dekripsi AES-GCM dalam Python
- Pasangan Kunci RSA & ECDSA dalam Python
- Kesalahan Umum Kripto Python & Pola Aman