Belajar Cyber Security #13: Kriptografi Dasar — Simetris, Asimetris, Hash, dan Tanda Tangan Digital

Hari ini saya lanjut belajar kriptografi dasar — topik yang dulu terasa paling menakutkan karena penuh istilah rumit dan simbol matematika. Ternyata setelah dipakai ulang dengan cara saya sendiri, intinya cuma tiga konsep: enkripsi simetris, enkripsi asimetris, dan hash. Saya catat di sini supaya tidak lupa lagi, sekaligus menghubungkannya dengan TLS yang kita bahas di episode #12.

Tiga konsep, tiga pekerjaan berbeda

Kesalahan pemahaman saya dulu: menganggap semua “enkripsi” itu sama. Padahal ketiganya punya pekerjaan berbeda:

  1. Enkripsi simetris — satu kunci dipakai untuk mengunci dan membuka. Contoh: AES-256-GCM, ChaCha20-Poly1305.
  2. Enkripsi asimetris — pasangan kunci publik/privat. Contoh: RSA, X25519 (untuk key exchange), Ed25519 (untuk tanda tangan).
  3. Hash — satu arah, tanpa kunci. Contoh: SHA-256, SHA-3.

Ini berarti bagi saya: waktu baca berita keamanan, saya sekarang bisa bertanya “ini masuk kategori yang mana?” — dan jawabannya menentukan jenis serangan dan pertahanannya.

Simetris: cepat tapi masalah kuncinya

Enkripsi simetris itu seperti brankas dengan satu kunci: enkripsi dan dekripsi pakai kunci yang sama. Kelebihannya cepat — karena itu semua data besar (streaming video, backup, disk encryption) dienkripsi simetris. Kelemahannya klasik: bagaimana cara mengirim kunci ke pihak lain tanpa ketahuan orang lain? Kalau cara kirimnya aman, kenapa tidak sekalian kirim datanya?

Saya mengingat ini sebagai “masalah riddle”: solusinya ternyata memakai kriptografi asimetris untuk bertukar kunci simetris — persis yang dilakukan TLS handshake di episode #12.

Asimetris: kunci publik boleh dibagikan

Asimetris punya dua kunci yang berpasangan: publik untuk mengenkripsi (siapa saja boleh punya), privat untuk mendekripsi (wajib dirahasiakan). Prinsipnya sederhana: yang mengenkripsi dengan kunci publik hanya bisa dibuka dengan kunci privat yang cocok, dan sebaliknya untuk operasi tanda tangan.

Ini berarti bagi saya: kenapa sertifikat website itu penting — sertifikat pada dasarnya mengikat kunci publik ke identitas domain, supaya saya tidak salah kunci saat berbicara dengan “bank.example.com”. Kalau ada attacker memasang kunci publiknya sendiri (dengan sertifikat yang tidak valid), semua data yang saya kirim “terenkripsi dengan aman” justru berakhir di tangan attacker — persis ancaman man-in-the-middle.

Hash: sidik jari digital

Hash mengubah data apa pun jadi output berukuran tetap (SHA-256 selalu menghasilkan 32 byte). Sifatnya satu arah: dari hash tidak bisa menghitung balik isinya. Karena itu hash bukan alat enkripsi — tidak ada operasi “mendecrypt” SHA-256. Fungsinya beda: memverifikasi integritas.

  • Cek integritas file unduhan: bandingkan hash resmi dari situs vendor dengan hasil hitung lokal.
  • Password: yang disimpan di database adalah hash (bcrypt/Argon2, bukan SHA-256 polos — lihat episode #3).
  • Commit hash di git — output SHA-1/SHA-256 dari konten commit.

Digital signature: hash + asimetris

Tanda tangan digital menggabungkan ketiganya: pesan di-hash dulu, lalu hash itu dienkripsi (lebih tepatnya: di-sign) dengan kunci privat pengirim. Penerima memverifikasi dengan kunci publik pengirim dan membandingkan hasilnya. Ini memberi dua jaminan sekaligus: authenticity (pasti dari pemilik kunci privat) dan integrity (pesannya tidak berubah di jalan).

Saya nyaris keliru di sini waktu awal belajar: menganggap signing = enkripsi pesan penuh. Padahal yang ditandatangani biasanya hash-nya saja, karena lebih cepat — dan prinsip keamanannya sama.

Aturan praktis yang saya bawa

Prinsip utama dari OWASP Crypto Cheat Sheet yang saya catat: jangan pernah menulis algoritma kriptografi sendiri — gunakan library resmi bawaan bahasa/framework (libsodium, OpenSSL, cryptography.io). Algoritma AES atau ChaCha20 sudah lama dipublikasikan dan tidak bocor secara kriptografis; yang membuatnya aman adalah implementasinya benar dan kuncinya cukup panjang (saat ini AES-128 sudah dianggap aman, apalagi AES-256).


Artikel berikutnya saya lanjut ke hardening Linux — bagaimana menerapkan prinsip keamanan ini di server sungguhan. Kalau penasaran soal detail handshake TLS, tulisan saya di episode #12 membahasnya dari sisi praktis.

Sumber

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

Situs ini menggunakan Akismet untuk mengurangi spam. Pelajari bagaimana data komentar Anda diproses