BAB 06 - KRIPTOGRAFI
PENGANTAR BAB
Setelah memahami fondasi etika dan hukum di Bab 05, kita memasuki salah satu bab paling teknis dan paling penting di seluruh kurikulum Cyber Security: Kriptografi. Kriptografi adalah tulang punggung keamanan digital modern - tanpa kriptografi, tidak ada HTTPS, tidak ada WhatsApp yang aman, tidak ada Bitcoin, tidak ada password yang aman.
Kata "kriptografi" berasal dari bahasa Yunani: kryptos (tersembunyi) + graphein (menulis). Secara harfiah: "tulisan tersembunyi". Ilmu ini sudah ada sejak 4000 tahun lalu (Mesir Kuno), tapi baru menjadi fondasi teknologi modern di era digital.
Bab ini akan membawa Anda dari konsep dasar hingga implementasi praktis. Anda akan belajar bukan hanya teori, tapi juga cara menggunakan tools kriptografi seperti OpenSSL, hash verification, dan memahami cara kerja HTTPS di browser Anda setiap hari.
- Memahami konsep dasar kriptografi dan sejarahnya
- Membedakan plaintext, ciphertext, kunci, dan algoritma
- Memahami proses enkripsi dan dekripsi
- Membedakan kriptografi simetris dan asimetris
- Memahami hash function dan kegunaannya
- Memahami digital signature dan sertifikat digital
- Menerapkan kriptografi dalam praktik (OpenSSL, verifikasi hash, dll)
KONSEP DASAR KRIPTOGRAFI
Definisi Kriptografi
"Cryptography is the study of mathematical techniques related to aspects of information security such as confidentiality, data integrity, entity authentication, and data origin authentication."
- Schneier, B. (1996). Applied Cryptography, 2nd Ed. Wiley.
"Cryptographic techniques are fundamental to information security. They provide confidentiality, integrity, authentication, and non-repudiation."
- Stallings, W. (2020). Cryptography and Network Security, 8th Ed. Pearson.
"Cryptography is the discipline that embodies principles, means and methods for transforming data in order to hide its information content, prevent its undetected modification and/or prevent its unauthorized use."
4 Tujuan Kriptografi (CIAA)
CONFIDENTIALITY
Kerahasiaan - data hanya bisa dibaca oleh pihak yang berwenang.
INTEGRITY
Keutuhan - data tidak bisa diubah tanpa terdeteksi.
AUTHENTICATION
Autentikasi - memverifikasi identitas pengirim/penerima.
NON-REPUDIATION
Penyangkalan - pengirim tidak bisa menyangkal telah mengirim pesan.
Sejarah Singkat Kriptografi
- ~2000 SM - Hieroglif Mesir (tulisan tersembunyi pertama)
- ~500 SM - Scytale Sparta (transposisi dengan tongkat)
- ~50 SM - Caesar Cipher (Julius Caesar) - substitusi geser 3 huruf
- Abad 9 - Al-Kindi menemukan analisis frekuensi (pemecah kode pertama)
- 1467 - Vigenere Cipher (polyalphabetic, dianggap "unbreakable" selama 300 tahun)
- 1918 - Enigma machine (Jerman) - mesin elektromekanis
- 1940s - Alan Turing memecahkan Enigma (Bletchley Park) - awal komputer modern
- 1949 - Claude Shannon: "Communication Theory of Secrecy Systems" - fondasi teori
- 1973 - Lucifer (IBM) - calon DES
- 1977 - DES (Data Encryption Standard) diadopsi NIST
- 1976 - Diffie-Hellman: kriptografi kunci publik pertama
- 1977 - RSA (Rivest, Shamir, Adleman) - algoritma asimetris paling terkenal
- 1991 - PGP (Pretty Good Privacy) oleh Phil Zimmermann
- 2001 - AES (Advanced Encryption Standard) menggantikan DES
- 2009 - Bitcoin menggunakan kriptografi untuk cryptocurrency
- 2016 - Signal Protocol - end-to-end encryption untuk messaging
- 2022 - NIST mengumumkan standar post-quantum cryptography
Cabang-Cabang Kriptografi
| CABANG | FOKUS | CONTOH |
|---|---|---|
| Enkripsi | Menyembunyikan isi pesan | AES, RSA, ChaCha20 |
| Hash Function | Sidik jari data (one-way) | SHA-256, bcrypt |
| Digital Signature | Autentikasi & non-repudiation | RSA signature, ECDSA |
| Steganografi | Menyembunyikan keberadaan pesan | Menyisipkan data di gambar |
| Cryptanalysis | Memecahkan kriptografi | Brute force, side-channel attack |
Bayangkan Anda ingin mengirim surat rahasia:
- Enkripsi = menulis surat dengan kode rahasia
- Hash = membubuhkan sidik jari di amplop (untuk cek keutuhan)
- Digital signature = tanda tangan di atas amplop (untuk autentikasi)
- Steganografi = menulis pesan dengan tinta tak terlihat
Kriptografi modern menggabungkan semua teknik ini untuk keamanan berlapis.
- Schneier, B. (1996). Applied Cryptography, 2nd Ed. Wiley.
- Stallings, W. (2020). Cryptography and Network Security, 8th Ed. Pearson.
- Kahn, D. (1996). The Codebreakers. Scribner.
- Singh, S. (1999). The Code Book. Fourth Estate.
PLAINTEXT & CIPHERTEXT
Dua istilah paling fundamental dalam kriptografi: plaintext (pesan asli) dan ciphertext (pesan terenkripsi). Memahami keduanya adalah kunci memahami seluruh proses kriptografi.
Definisi
- Plaintext (M): Pesan asli yang bisa dibaca manusia. Juga disebut cleartext atau message.
- Ciphertext (C): Pesan yang telah diacak melalui algoritma enkripsi. Tidak bisa dibaca tanpa kunci dekripsi.
Contoh: Caesar Cipher
Cipher paling terkenal dalam sejarah, digunakan Julius Caesar untuk berkomunikasi dengan jenderalnya. Menggunakan substitusi dengan geseran 3 huruf:
Caesar Cipher (shift = 3) # Alfabet asli: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z # Alfabet cipher (geser 3): D E F G H I J K L M N O P Q R S T U V W X Y Z A B C # Contoh: Plaintext : HELLO WORLD Ciphertext: KHOOR ZRUOG # Cara kerja: H + 3 = K E + 3 = H L + 3 = O L + 3 = O O + 3 = R (spasi tetap spasi) W + 3 = Z ... dst
Implementasi Python Caesar Cipher
Python def caesar_encrypt(plaintext, shift): """Enkripsi plaintext dengan Caesar cipher.""" result = "" for char in plaintext: if char.isalpha(): # Tentukan offset (A=65 untuk uppercase, a=97 untuk lowercase) offset = 65 if char.isupper() else 97 # Geser karakter shifted = (ord(char) - offset + shift) % 26 + offset result += chr(shifted) else: result += char # Karakter non-alpha tetap return result def caesar_decrypt(ciphertext, shift): """Dekripsi = enkripsi dengan shift negatif.""" return caesar_encrypt(ciphertext, -shift) # Contoh penggunaan pesan = "HELLO WORLD" kunci = 3 terenkripsi = caesar_encrypt(pesan, kunci) print(f"Ciphertext: {terenkripsi}") # Output: Ciphertext: KHOOR ZRUOG terdekripsi = caesar_decrypt(terenkripsi, kunci) print(f"Plaintext : {terdekripsi}") # Output: Plaintext : HELLO WORLD
Kelemahan Caesar Cipher
Caesar cipher hanya punya 25 kemungkinan kunci (shift 1-25). Bisa dipecahkan dengan:
- Brute force: coba semua 25 kemungkinan (hitungan detik)
- Analisis frekuensi: huruf paling umum di bahasa Inggris adalah 'E'. Jika ciphertext banyak huruf 'H', kemungkinan shift = 3
Inilah mengapa Caesar cipher TIDAK AMAN untuk penggunaan modern. Tapi konsepnya (substitusi) adalah fondasi cipher modern.
Python - Brute Force Caesar def crack_caesar(ciphertext): """Coba semua 25 kemungkinan kunci.""" for shift in range(1, 26): decrypted = caesar_decrypt(ciphertext, shift) print(f"Shift {shift:2d}: {decrypted}") # Contoh: crack_caesar("KHOOR ZRUOG") # Shift 1: JNGNQ YQTNF # Shift 2: IMFMP XPSME # Shift 3: HELLO WORLD <-- BACA INI! # Shift 4: GDKKN VNQKC # ... dst
Perbedaan Plaintext vs Ciphertext
| ASPEK | PLAINTEXT | CIPHERTEXT |
|---|---|---|
| Keterbacaan | Bisa dibaca manusia | Tidak bisa dibaca tanpa kunci |
| Bentuk | Teks, gambar, audio asli | Data acak (bytes) |
| Ukuran | Sesuai data asli | Bisa sedikit lebih besar (padding) |
| Keamanan | Tidak aman di transmisi | Aman di transmisi (jika kunci aman) |
| Contoh | "RahasiaBank123" | "xK9#mP@2$vL5..." |
Plaintext seperti bahasa yang Anda mengerti (Indonesia). Ciphertext seperti bahasa asing yang tidak Anda mengerti (misal, Mandarin). Untuk membaca bahasa asing, Anda butuh kamus (kunci dekripsi). Tanpa kamus, teks Mandarin hanya kumpulan simbol yang tidak bermakna.
- Singh, S. (1999). The Code Book - Chapter 1: "The Code Breakers"
- Kahn, D. (1996). The Codebreakers. Scribner.
- NIST - SP 800-175B: Guide to Cryptographic Standards
ENKRIPSI & DEKRIPSI
Enkripsi dan dekripsi adalah dua sisi dari mata uang yang sama. Enkripsi mengubah plaintext menjadi ciphertext, dekripsi mengembalikannya. Keduanya membutuhkan kunci (key) dan algoritma (cipher).
Definisi Formal
- Enkripsi (E): Proses transformasi plaintext menjadi ciphertext menggunakan algoritma dan kunci.
C = E(K, M) - Dekripsi (D): Proses transformasi ciphertext kembali menjadi plaintext.
M = D(K, C) - Algoritma (Cipher): Prosedur matematis untuk enkripsi/dekripsi. Contoh: AES, RSA.
- Kunci (Key): Nilai rahasia yang menentukan bagaimana algoritma bekerja.
Notasi Matematis
Notasi Kriptografi # Enkripsi: C = E(K, M) # C = Ciphertext # E = Algoritma Enkripsi # K = Kunci (Key) # M = Plaintext (Message) # Dekripsi: M = D(K, C) # M = Plaintext (harus sama dengan plaintext asli) # D = Algoritma Dekripsi # K = Kunci # C = Ciphertext # Sifat fundamental: D(K, E(K, M)) = M # Dekripsi(enkripsi(pesan)) = pesan asli
Peran Kunci (Key)
Kunci adalah rahasia utama dalam kriptografi. Algoritma biasanya bersifat publik (diketahui semua orang), tapi kunci harus dirahasiakan.
"Sistem kriptografi harus aman meskipun semua hal tentang sistem, kecuali kunci, adalah pengetahuan publik."
Artinya: keamanan tidak boleh bergantung pada kerahasiaan algoritma, tapi pada kerahasiaan kunci. Ini prinsip fundamental kriptografi modern - algoritma seperti AES, RSA, SHA-256 semuanya publik.
Ukuran Kunci & Keamanan
| UKURAN KUNCI | JUMLAH KEMUNGKINAN | WAKTU BRUTE FORCE | STATUS |
|---|---|---|---|
| 56 bit (DES) | 2^56 ≈ 7.2 × 10^16 | ~24 jam (GPU modern) | TIDAK AMAN |
| 128 bit (AES-128) | 2^128 ≈ 3.4 × 10^38 | Miliaran tahun | AMAN |
| 192 bit (AES-192) | 2^192 ≈ 6.3 × 10^57 | Tak terbayangkan | SANGAT AMAN |
| 256 bit (AES-256) | 2^256 ≈ 1.2 × 10^77 | Mustahil dengan teknologi saat ini | MILITARY-GRADE |
Bayangkan brankas bank:
- Algoritma = cara kerja mekanisme brankas (publik, semua tahu cara kerjanya)
- Kunci = kombinasi angka (rahasia, hanya pemilik yang tahu)
- Enkripsi = memasukkan barang ke brankas & mengunci
- Dekripsi = membuka brankas dengan kombinasi & mengambil barang
Bahkan jika pencuri tahu cara kerja brankas, tanpa kombinasi, ia tidak bisa membukanya. Itulah kekuatan kriptografi.
Mode Operasi Enkripsi
Untuk data besar, enkripsi blok (seperti AES) perlu mode operasi:
| MODE | KARAKTERISTIK | STATUS |
|---|---|---|
| ECB | Setiap blok dienkripsi independen. Pola terlihat. | TIDAK AMAN |
| CBC | Blok sebelumnya mempengaruhi blok sekarang. | OK (dengan IV) |
| CTR | Counter mode, bisa paralel. | DIANJURKAN |
| GCM | Authenticated encryption (enkripsi + autentikasi). | STANDAR MODERN |
- NIST FIPS 197 - Advanced Encryption Standard (AES)
- NIST SP 800-38A - Block Cipher Modes of Operation
- NIST SP 800-38D - GCM Mode (Galois/Counter Mode)
- Stallings, W. (2020). Cryptography and Network Security, Ch. 3-4.
KRIPTOGRAFI SIMETRIS
Kriptografi simetris (symmetric-key cryptography) menggunakan kunci yang SAMA untuk enkripsi dan dekripsi. Ini adalah jenis kriptografi paling cepat dan paling banyak digunakan untuk mengenkripsi data dalam jumlah besar.
Algoritma Simetris Populer
| ALGORITMA | TAHUN | UKURAN BLOK | UKURAN KUNCI | STATUS |
|---|---|---|---|---|
| DES | 1977 | 64 bit | 56 bit | USANG |
| 3DES | 1999 | 64 bit | 168 bit | DEPREKASI |
| AES-128 | 2001 | 128 bit | 128 bit | STANDAR |
| AES-192 | 2001 | 128 bit | 192 bit | STANDAR |
| AES-256 | 2001 | 128 bit | 256 bit | MILITARY-GRADE |
| Blowfish | 1993 | 64 bit | 32-448 bit | LEGACY |
| Twofish | 1998 | 128 bit | 128-256 bit | OPEN SOURCE |
| ChaCha20 | 2008 | Stream | 256 bit | MODERN (mobile) |
AES (Advanced Encryption Standard)
AES adalah standar enkripsi simetris paling banyak digunakan di dunia. Dikembangkan oleh Joan Daemen & Vincent Rijmen (Belgia), diadopsi NIST tahun 2001 menggantikan DES.
Karakteristik AES:
- Block cipher - memproses data per blok 128 bit
- Key size: 128, 192, atau 256 bit
- Number of rounds: 10, 12, atau 14 (tergantung key size)
- Setiap round: SubBytes, ShiftRows, MixColumns, AddRoundKey
- Cepat di hardware & software modern (AES-NI instruction di CPU)
Proses Enkripsi AES (simplified):
AES-256 Encryption Flow # Input: 128-bit plaintext + 256-bit key Round 0: AddRoundKey # XOR dengan round key Round 1-13: 1. SubBytes # Substitusi non-linear (S-box) 2. ShiftRows # Geser baris 3. MixColumns # Campur kolom (diffusion) 4. AddRoundKey # XOR dengan round key Round 14 (final): 1. SubBytes 2. ShiftRows 3. AddRoundKey # Tidak ada MixColumns di final round # Output: 128-bit ciphertext
Praktik: Menggunakan AES dengan OpenSSL
Bash - OpenSSL AES # Enkripsi file dengan AES-256-CBC $ openssl enc -aes-256-cbc -salt -pbkdf2 \ -in rahasia.txt -out rahasia.enc Enter pass phrase: ******** Verifying - Enter pass phrase: ******** # Dekripsi file $ openssl enc -d -aes-256-cbc -pbkdf2 \ -in rahasia.enc -out rahasia-decrypt.txt Enter pass phrase: ******** # Enkripsi dengan password di command line (TIDAK DISARANKAN!) $ openssl enc -aes-256-cbc -pbkdf2 \ -in data.txt -out data.enc \ -pass pass:"MySecretPassword123!" # Enkripsi string langsung $ echo "Hello World" | openssl enc -aes-256-cbc -pbkdf2 \ -pass pass:"kunci123" | base64 U2FsdGVkX1+... # Dekripsi string $ echo "U2FsdGVkX1+..." | base64 -d | openssl enc -d \ -aes-256-cbc -pbkdf2 -pass pass:"kunci123" Hello World
Kelebihan & Kekurangan
| KELEBIHAN | KEKURANGAN |
|---|---|
| Cepat - 100-1000x lebih cepat dari asimetris | Distribusi kunci sulit - bagaimana mengirim kunci secara aman? |
| Efisien - cocok untuk data besar | Tidak ada non-repudiation |
| Standar industri - AES, ChaCha20 | Skalabilitas - n orang butuh n(n-1)/2 kunci |
| Hardware acceleration - AES-NI | Kunci sama = trust mutual |
Masalah Distribusi Kunci
Masalah terbesar kriptografi simetris: bagaimana Alice dan Bob berbagi kunci rahasia tanpa pihak ketiga (Eve) mengetahuinya?
Alice ingin mengirim kotak rahasia ke Bob:
- Alice mengunci kotak dengan kunci rahasia
- Tapi bagaimana cara mengirim kunci ke Bob?
- Jika dikirim via kurir, kurir bisa menyalin kunci
- Jika dikirim via email, email bisa disadap
- Jika dikirim via pos, pos bisa dibuka
Inilah "key distribution problem" - masalah yang tidak bisa dipecahkan oleh kriptografi simetris. Solusinya? Kriptografi asimetris (sub-bab 6.5)!
Implementasi Python: AES dengan cryptography library
Python - AES Encryption # Install: pip install cryptography from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes from cryptography.hazmat.backends import default_backend import os def aes_encrypt(plaintext, key): """Enkripsi AES-256-GCM.""" # Generate IV (Initialization Vector) acak iv = os.urandom(12) # 96 bit untuk GCM # Buat cipher cipher = Cipher( algorithms.AES(key), modes.GCM(iv), backend=default_backend() ) encryptor = cipher.encryptor() # Enkripsi ciphertext = encryptor.update(plaintext) + encryptor.finalize() tag = encryptor.tag # Authentication tag return iv + ciphertext + tag def aes_decrypt(encrypted_data, key): """Dekripsi AES-256-GCM.""" iv = encrypted_data[:12] tag = encrypted_data[-16:] ciphertext = encrypted_data[12:-16] cipher = Cipher( algorithms.AES(key), modes.GCM(iv, tag), backend=default_backend() ) decryptor = cipher.decryptor() return decryptor.update(ciphertext) + decryptor.finalize() # Contoh penggunaan key = os.urandom(32) # 256-bit key pesan = b"Rahasia negara: menyerang fajar!" terenkripsi = aes_encrypt(pesan, key) print(f"Ciphertext: {terenkripsi.hex()}") terdekripsi = aes_decrypt(terenkripsi, key) print(f"Plaintext : {terdekripsi.decode()}")
- NIST FIPS 197 - Advanced Encryption Standard (AES)
- Daemen, J. & Rijmen, V. (2002). The Design of Rijndael. Springer.
- NIST SP 800-38D - GCM Mode Recommendation
- Schneier, B. (1996). Applied Cryptography - Ch. 13 (DES, AES)
KRIPTOGRAFI ASIMETRIS
Kriptografi asimetris (public-key cryptography) adalah revolusi terbesar dalam sejarah kriptografi. Ditemukan tahun 1976 oleh Diffie-Hellman, ia memecahkan masalah distribusi kunci yang menghantui kriptografi simetris selama puluhan tahun.
Ide Revolusioner
Menggunakan sepasang kunci:
- Public Key (kunci publik) - dibagikan ke semua orang, untuk enkripsi
- Private Key (kunci privat) - dirahasiakan, untuk dekripsi
Kedua kunci ini berbeda secara matematis, tapi saling terkait. Apa yang dienkripsi dengan public key, hanya bisa didekripsi dengan private key yang sesuai.
Algoritma Asimetris Populer
| ALGORITMA | TAHUN | DASAR MATEMATIS | UKURAN KUNCI | STATUS |
|---|---|---|---|---|
| RSA | 1977 | Faktorisasi bilangan prima | 2048-4096 bit | STANDAR |
| Diffie-Hellman | 1976 | Logaritma diskrit | 2048+ bit | KEY EXCHANGE |
| ECC | 1985 | Elliptic curves | 256-521 bit | MODERN |
| DSA | 1991 | Logaritma diskrit | 1024-3072 bit | SIGNATURE |
| Ed25519 | 2011 | Edwards curves | 256 bit | MODERN (SSH) |
RSA: Cara Kerja (Simplified)
RSA (Rivest-Shamir-Adleman) adalah algoritma asimetris paling terkenal. Dasarnya: faktorisasi bilangan prima itu sulit.
RSA Mathematics (Simplified) # GENERASI KUNCI: 1. Pilih dua bilangan prima besar: p, q # Contoh kecil: p = 61, q = 53 2. Hitung n = p × q # n = 61 × 53 = 3233 3. Hitung φ(n) = (p-1) × (q-1) # φ(n) = 60 × 52 = 3120 4. Pilih e (public exponent), biasanya 65537 # Syarat: 1 < e < φ(n), gcd(e, φ(n)) = 1 # Contoh: e = 17 5. Hitung d (private exponent) - modular inverse dari e # d × e ≡ 1 (mod φ(n)) # d = 2753 # PUBLIC KEY = (n, e) = (3233, 17) - DIBAGIKAN # PRIVATE KEY = (n, d) = (3233, 2753) - DIRAHASIAKAN # ENKRIPSI (pakai public key): c = m^e mod n # Contoh: m = 65 (pesan), c = 65^17 mod 3233 = 2790 # DEKRIPSI (pakai private key): m = c^d mod n # Contoh: m = 2790^2753 mod 3233 = 65 (pesan asli!)
Keamanan RSA bergantung pada kesulitan memfaktorkan bilangan besar:
- Diberikan n = p × q, sangat sulit menemukan p dan q jika n besar
- RSA 2048-bit = n dengan 617 digit - butuh waktu miliaran tahun untuk difaktorkan
- Tapi komputer kuantum (algoritma Shor) bisa memfaktorkan dalam hitungan jam!
Inilah mengapa dunia sedang mempersiapkan post-quantum cryptography.
Hybrid Cryptography: Terbaik dari Dua Dunia
Dalam praktiknya, hampir semua sistem modern menggunakan kombinasi simetris + asimetris:
- Asimetris hanya untuk pertukaran kunci awal (lambat tapi aman)
- Simetris untuk enkripsi data aktual (cepat untuk data besar)
- Kombinasi ini dipakai di: HTTPS/TLS, SSH, PGP, Signal, WhatsApp
Praktik: Generate RSA Key dengan OpenSSL
Bash - RSA Key Generation # Generate private key RSA 2048-bit $ openssl genrsa -out private-key.pem 2048 # Extract public key dari private key $ openssl rsa -in private-key.pem -pubout -out public-key.pem # Lihat isi private key $ cat private-key.pem -----BEGIN PRIVATE KEY----- MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC... ... -----END PRIVATE KEY----- # Enkripsi file dg public key $ openssl rsautl -encrypt -inkey public-key.pem -pubin \ -in rahasia.txt -out rahasia.enc # Dekripsi dg private key $ openssl rsautl -decrypt -inkey private-key.pem \ -in rahasia.enc -out rahasia-decrypt.txt # Generate key dg password (lebih aman) $ openssl genrsa -aes256 -out private-protected.pem 4096 Enter pass phrase: ********
Perbandingan Simetris vs Asimetris
| ASPEK | SIMETRIS | ASIMETRIS |
|---|---|---|
| Jumlah kunci | 1 (sama untuk enkripsi & dekripsi) | 2 (public + private) |
| Kecepatan | Sangat cepat (100-1000x) | Lambat |
| Ukuran kunci | 128-256 bit | 2048-4096 bit (RSA) |
| Distribusi kunci | Sulit (butuh channel aman) | Mudah (public key bisa publik) |
| Skalabilitas | Buruk (n(n-1)/2 kunci) | Baik (2n kunci untuk n user) |
| Non-repudiation | Tidak | Ya (dengan digital signature) |
| Penggunaan | Enkripsi data besar | Key exchange, signature |
| Contoh | AES, ChaCha20 | RSA, ECC, Ed25519 |
Bayangkan kotak pos di depan rumah Anda:
- Slot surat = public key (siapa saja bisa masukkan surat)
- Kunci kotak = private key (hanya Anda yang bisa buka)
- Tetangga bisa masukkan surat (enkripsi dg public key)
- Tapi hanya Anda yang bisa buka & baca (dekripsi dg private key)
Itulah kriptografi asimetris - public key untuk menerima, private key untuk membaca.
- Rivest, R., Shamir, A., Adleman, L. (1978). A Method for Obtaining Digital Signatures. CACM.
- Diffie, W. & Hellman, M. (1976). New Directions in Cryptography. IEEE Trans. IT.
- NIST FIPS 186-4 - Digital Signature Standard (DSS)
- NIST SP 800-56A - Key Establishment Schemes
- Stallings, W. (2020). Cryptography and Network Security, Ch. 8-10.
HASH FUNCTION
Hash function adalah fungsi matematika satu arah (one-way) yang mengubah data ukuran berapa pun menjadi string dengan panjang tetap. Hash adalah "sidik jari digital" - unik untuk setiap data, tapi tidak bisa dibalik.
Definisi
Hash function kriptografis H adalah fungsi yang memetakan input berukuran arbitrer ke output berukuran tetap, dengan sifat:
- Pre-image resistance: Dari hash, tidak bisa menemukan input asal
- Second pre-image resistance: Diberikan input, tidak bisa menemukan input lain dengan hash sama
- Collision resistance: Tidak bisa menemukan dua input berbeda dengan hash sama
- Avalanche effect: Perubahan kecil di input = perubahan besar di output
Algoritma Hash Populer
| ALGORITMA | TAHUN | PANJANG OUTPUT | STATUS |
|---|---|---|---|
| MD5 | 1992 | 128 bit (32 hex) | BROKEN - JANGAN PAKAI |
| SHA-1 | 1995 | 160 bit (40 hex) | BROKEN - JANGAN PAKAI |
| SHA-256 | 2001 | 256 bit (64 hex) | STANDAR |
| SHA-384 | 2001 | 384 bit (96 hex) | STANDAR |
| SHA-512 | 2001 | 512 bit (128 hex) | STANDAR |
| SHA-3 | 2012 | 224-512 bit | MODERN |
| bcrypt | 1999 | Variable | PASSWORD HASHING |
| Argon2 | 2015 | Variable | PASSWORD HASHING (terbaru) |
Praktik: Hash di Command Line
Bash - Hash Commands # Hash string dengan MD5 $ echo -n "hello" | md5sum 5d41402abc4b2a76b9719d911017c592 - # Hash string dengan SHA-256 $ echo -n "hello" | sha256sum 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 - # Hash file $ sha256sum dokumen.pdf a1b2c3d4e5f6... dokumen.pdf # Verifikasi hash (bandingkan dg file .sha256) $ sha256sum -c checksums.sha256 dokumen.pdf: OK # Avalanche effect - bandingkan hash "hello" dan "hello." $ echo -n "hello" | sha256sum 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 $ echo -n "hello." | sha256sum c0535e4be2b79ffd93291305436bf889314e4a3faec05ecffcbb7df31ad9e51a # Perhatikan: hanya tambah 1 karakter (titik), tapi hash BERBEDA TOTAL!
Hash untuk Password
JANGAN PERNAH menyimpan password plaintext atau hash sederhana (MD5/SHA) di database! Gunakan password hashing khusus:
- Rainbow table: tabel hash yang sudah dihitung sebelumnya - bisa reverse lookup
- Brute force cepat: GPU bisa hitung miliaran hash/detik
- Tidak ada salt: password sama = hash sama
Solusi: Password Hashing dengan Salt + Stretching
- Salt: random string ditambahkan ke password sebelum hash - mencegah rainbow table
- Stretching/Work factor: hash diulang ribuan kali - memperlambat brute force
- Memory-hard: butuh banyak RAM - mencegah GPU attack
Python - Password Hashing # Install: pip install bcrypt import bcrypt # Hash password password = b"MySecretPassword123!" salt = bcrypt.gensalt(rounds=12) # 2^12 = 4096 rounds hashed = bcrypt.hashpw(password, salt) print(f"Hash: {hashed}") # Output: b'$2b$12$KIXfQvH...' # Verifikasi password bcrypt.checkpw(b"MySecretPassword123!", hashed) # True bcrypt.checkpw(b"WrongPassword", hashed) # False # Argon2 (lebih modern) # pip install argon2-cffi from argon2 import PasswordHasher ph = PasswordHasher() hash = ph.hash("MySecretPassword123!") ph.verify(hash, "MySecretPassword123!") # True
Kegunaan Hash Function
PASSWORD STORAGE
Simpan hash, bukan plaintext. bcrypt, Argon2.
FILE INTEGRITY
Verifikasi file tidak berubah (checksum).
BLOCKCHAIN
Bitcoin mining = mencari hash dengan pola tertentu.
DIGITAL FINGERPRINT
Identifikasi unik file/data.
DIGITAL SIGNATURE
Hash pesan dulu, lalu tanda tangani (efisien).
HASH TABLE
Struktur data untuk lookup cepat.
Hash function seperti sidik jari:
- Setiap orang punya sidik jari unik (seperti hash unik untuk data)
- Dari sidik jari, tidak bisa merekonstruksi wajah orang (one-way)
- Dua orang berbeda tidak mungkin punya sidik jari sama (collision resistant)
- Perubahan kecil (luka kecil) = sidik jari tetap terdeteksi (avalanche)
Tapi ingat: sidik jari bukan enkripsi - tidak bisa dibalik!
- NIST FIPS 180-4 - Secure Hash Standard (SHS)
- NIST FIPS 202 - SHA-3 Standard
- RFC 2898 - PBKDF2 (Password-Based Key Derivation)
- PHC (Password Hashing Competition) - Argon2 Winner (2015)
- OWASP - Password Storage Cheat Sheet
DIGITAL SIGNATURE
Digital signature (tanda tangan digital) adalah mekanisme kriptografi yang memberikan autentikasi (siapa pengirim), integritas (pesan tidak diubah), dan non-repudiation (pengirim tidak bisa menyangkal). Ini adalah padanan digital dari tanda tangan basah di dokumen fisik.
Cara Kerja
Digital signature menggunakan kriptografi asimetris secara terbalik:
- Menandatangani: pakai private key pengirim
- Memverifikasi: pakai public key pengirim
Langkah-langkah Detail
- Alice membuat pesan M
- Alice menghitung hash H(M) dengan SHA-256
- Alice menandatangani: S = Sign(H(M), PrivateKeyAlice)
- Alice mengirim (M, S) ke Bob
- Bob menghitung hash H(M) dari pesan yang diterima
- Bob memverifikasi: Verify(S, PublicKeyAlice) = H(M)?
- Jika cocok: signature valid, pesan asli dari Alice, tidak diubah
Sertifikat Digital & CA
Masalah: bagaimana Bob yakin public key yang dia terima benar-benar milik Alice? Eve bisa saja mengirim public key-nya sendiri dan mengaku sebagai Alice. Solusinya: Certificate Authority (CA).
Sertifikat digital adalah dokumen elektronik yang mengikat identitas seseorang/organisasi dengan public key-nya, ditandatangani oleh CA terpercaya.
- CA (Certificate Authority): pihak ketiga terpercaya (Let's Encrypt, DigiCert, Comodo)
- CSR (Certificate Signing Request): permintaan sertifikat dari pemohon
- Chain of Trust: root CA -> intermediate CA -> end entity certificate
Praktik: Membuat Digital Signature dengan OpenSSL
Bash - Digital Signature # 1. Generate key pair $ openssl genrsa -out alice-private.pem 2048 $ openssl rsa -in alice-private.pem -pubout -out alice-public.pem # 2. Alice membuat pesan $ echo "Perjanjian rahasia antara Alice dan Bob" > pesan.txt # 3. Alice hitung hash & tanda tangani $ openssl dgst -sha256 -sign alice-private.pem \ -out pesan.sig pesan.txt # 4. Alice kirim (pesan.txt + pesan.sig + alice-public.pem) ke Bob # 5. Bob verifikasi signature $ openssl dgst -sha256 -verify alice-public.pem \ -signature pesan.sig pesan.txt Verified OK # Jika pesan diubah, verifikasi gagal: $ echo "Perjanjian DIUBAH" >> pesan.txt $ openssl dgst -sha256 -verify alice-public.pem \ -signature pesan.sig pesan.txt Verification Failure
Penerapan Digital Signature
HTTPS/TLS
Sertifikat SSL/TLS website ditandatangani oleh CA.
DOKUMEN RESMI
e-KTP, e-Paspor, kontrak elektronik.
CODE SIGNING
Software ditandatangani developer (Windows, macOS).
EMAIL (S/MIME, PGP)
Email terenkripsi & terverifikasi.
CRYPTOCURRENCY
Transaksi Bitcoin ditandatangani dg private key.
E-COURT
Dokumen pengadilan elektronik di Indonesia.
Enkripsi vs Digital Signature
| ASPEK | ENKRIPSI | DIGITAL SIGNATURE |
|---|---|---|
| Tujuan | Kerahasiaan | Autentikasi & integritas |
| Kunci untuk proses | Public key penerima | Private key pengirim |
| Kunci untuk reverse | Private key penerima | Public key pengirim |
| Menjawab pertanyaan | "Siapa yang bisa baca?" | "Siapa yang kirim? Utuh?" |
| Confidentiality | Ya | Tidak |
| Non-repudiation | Tidak | Ya |
Dalam dokumen fisik:
- Tanda tangan = membuktikan siapa yang tanda tangani (autentikasi)
- Meterai = membuktikan dokumen resmi & tidak diubah (integritas)
- Saksi = tidak bisa menyangkal (non-repudiation)
Digital signature = versi digital dari semua ini, dengan keamanan matematis yang jauh lebih kuat.
- RFC 5280 - Internet X.509 Public Key Infrastructure Certificate
- NIST FIPS 186-4 - Digital Signature Standard (DSS)
- CA/Browser Forum - Baseline Requirements for SSL Certificates
- Let's Encrypt - Free SSL/TLS Certificates (letsencrypt.org)
PENERAPAN KRIPTOGRAFI
Setelah memahami teori, saatnya melihat bagaimana kriptografi digunakan dalam teknologi sehari-hari. Anda mungkin tidak menyadarinya, tapi kriptografi bekerja di balik layar setiap detik saat Anda online.
1. HTTPS / TLS (Web Security)
HTTPS (HTTP over TLS) adalah fondasi keamanan web modern. Setiap website yang Anda kunjungi dengan https:// menggunakan kriptografi.
Kriptografi dalam TLS 1.3:
- Key exchange: ECDHE (Elliptic Curve Diffie-Hellman Ephemeral)
- Authentication: RSA atau ECDSA signature pada sertifikat
- Bulk encryption: AES-256-GCM atau ChaCha20-Poly1305
- Hash: SHA-256 atau SHA-384
Bash - Cek TLS di website # Lihat detail TLS/SSL website $ openssl s_client -connect abdurrozak.my.id:443 -tls1_3 # Output (simplified): CONNECTED(00000003) --- SSL handshake has read 4567 bytes and written 456 bytes Verification: OK --- New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384 Server public key is 2048 bit Secure Renegotiation IS NOT supported --- Certificate chain 0 s:CN = abdurrozak.my.id i:C = US, O = Let's Encrypt, CN = R3 --- # Cek sertifikat website $ echo | openssl s_client -connect google.com:443 2>/dev/null | \ openssl x509 -noout -text
2. End-to-End Encryption (Messaging)
WhatsApp, Signal, iMessage menggunakan Signal Protocol - protokol E2E paling aman saat ini.
- Double Ratchet Algorithm: kunci berubah setiap pesan (forward secrecy)
- X3DH (Extended Triple Diffie-Hellman): key exchange awal
- Curve25519: elliptic curve untuk kriptografi cepat
- AES-256 + HMAC-SHA256: enkripsi & autentikasi
- Forward secrecy: jika kunci hari ini bocor, pesan kemarin tetap aman
- E2E (WhatsApp/Signal): hanya pengirim & penerima yang bisa baca. Server provider TIDAK bisa baca.
- Enkripsi di transit (Gmail): Google mengenkripsi saat transit, tapi Google bisa baca email Anda di server mereka.
3. Cryptocurrency (Bitcoin)
Bitcoin menggunakan tiga jenis kriptografi secara bersamaan:
- ECDSA (Elliptic Curve): untuk tanda tangan transaksi (otentikasi pemilik)
- SHA-256: untuk mining (proof-of-work) & alamat
- Merkle Tree: struktur data untuk verifikasi efisien
Python - Bitcoin Address Generation (Simplified) # Install: pip install ecdsa base58 import hashlib import ecdsa import base58 # 1. Generate private key (random 256-bit) private_key = ecdsa.SigningKey.generate(curve=ecdsa.SECP256k1) print(f"Private Key: {private_key.to_string().hex()}") # 2. Derive public key public_key = private_key.get_verifying_key() print(f"Public Key : {public_key.to_string().hex()}") # 3. Bitcoin address = SHA256 + RIPEMD160 + Base58Check sha256_hash = hashlib.sha256(public_key.to_string()).digest() ripemd160 = hashlib.new('ripemd160') ripemd160.update(sha256_hash) address_hash = ripemd160.digest() # Add version byte (0x00 for mainnet) versioned = b'\x00' + address_hash # Checksum (4 bytes of double SHA256) checksum = hashlib.sha256(hashlib.sha256(versioned).digest()).digest()[:4] bitcoin_address = base58.b58encode(versioned + checksum) print(f"Bitcoin Address: {bitcoin_address.decode()}") # Contoh output: 1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa
4. PGP/GPG (Email Encryption)
PGP (Pretty Good Privacy) oleh Phil Zimmermann (1991) - sistem enkripsi email end-to-end. Menggunakan web of trust (bukan CA).
Bash - GPG Basic Usage # Generate key pair $ gpg --full-generate-key # Pilih RSA 4096, masukkan nama & email, set passphrase # List keys $ gpg --list-keys $ gpg --list-secret-keys # Export public key (untuk dibagikan) $ gpg --armor --export alice@example.com > alice-public.asc # Import public key teman $ gpg --import bob-public.asc # Enkripsi file untuk Bob $ gpg --encrypt --recipient bob@example.com rahasia.txt # Output: rahasia.txt.gpg # Dekripsi file (hanya Bob yang bisa) $ gpg --decrypt rahasia.txt.gpg > rahasia.txt # Tanda tangani file $ gpg --sign --detach-sign dokumen.pdf # Output: dokumen.pdf.sig # Verifikasi signature $ gpg --verify dokumen.pdf.sig dokumen.pdf
5. Password Manager
Password manager seperti Bitwarden, 1Password, KeePass menggunakan kriptografi untuk menyimpan password Anda dengan aman:
- Master password di-hash dengan PBKDF2/Argon2 (ribuan iterasi)
- Encryption key diturunkan dari master password
- Semua data dienkripsi dengan AES-256-GCM
- Zero-knowledge: provider tidak bisa baca data Anda
6. Disk Encryption
Full disk encryption melindungi seluruh isi hard drive:
- BitLocker (Windows) - AES-128/256
- FileVault (macOS) - AES-128/256
- LUKS (Linux) - AES, Serpent, Twofish
Bash - LUKS Disk Encryption (Linux) # Format partition dg LUKS $ sudo cryptsetup luksFormat /dev/sdb1 # WARNING! Data akan terhapus. Ketik YES untuk konfirmasi. # Buka encrypted partition $ sudo cryptsetup open /dev/sdb1 my-encrypted Enter passphrase: ******** # Mount $ sudo mkfs.ext4 /dev/mapper/my-encrypted $ sudo mount /dev/mapper/my-encrypted /mnt/secure # Tutup $ sudo umount /mnt/secure $ sudo cryptsetup close my-encrypted # Cek status $ sudo cryptsetup status my-encrypted /dev/mapper/my-encrypted is active and is in use. type: LUKS1 cipher: aes-xts-plain64 key location: dm-crypt mode: read/write
Ringkasan Penerapan
| TEKNOLOGI | KRIPTOGRAFI YANG DIGUNAKAN |
|---|---|
| HTTPS/TLS | ECDHE + RSA/ECDSA + AES-GCM + SHA-256 |
| WhatsApp/Signal | X3DH + Double Ratchet + Curve25519 + AES-256 |
| Bitcoin | ECDSA (secp256k1) + SHA-256 + RIPEMD-160 |
| SSH | Ed25519/RSA + ChaCha20-Poly1305 |
| PGP/GPG | RSA/ECC + AES-256 + SHA-256 |
| Password Manager | Argon2/PBKDF2 + AES-256-GCM |
| Disk Encryption | AES-XTS / Serpent-Twofish-AES |
| WiFi WPA3 | SAE (Simultaneous Authentication of Equals) + AES-GCMP |
Praktik Komprehensif: Verifikasi File Download
Setiap kali Anda download software penting, VERIFIKASI HASH-nya:
Bash - Verifikasi File Download # Contoh: download Ubuntu ISO $ wget https://releases.ubuntu.com/24.04/ubuntu-24.04-desktop-amd64.iso # Download file SHA256SUMS resmi $ wget https://releases.ubuntu.com/24.04/SHA256SUMS # Download signature file $ wget https://releases.ubuntu.com/24.04/SHA256SUMS.gpg # Import kunci GPG Ubuntu $ gpg --keyserver keyserver.ubuntu.com --recv-keys \ 843938DF228D22F7B3742BC0D94AA3F0AFE21DFA # Verifikasi signature file SHA256SUMS $ gpg --verify SHA256SUMS.gpg SHA256SUMS gpg: Good signature from "Ubuntu CD Image Automatic Signing Key" # Verifikasi hash ISO $ sha256sum -c SHA256SUMS 2>&1 | grep ubuntu ubuntu-24.04-desktop-amd64.iso: OK # Jika OK, file asli dan tidak dimodifikasi!
Kriptografi seperti listrik:
- Anda tidak melihatnya, tapi ada di mana-mana
- Saat berfungsi, Anda tidak menyadarinya
- Saat tidak ada, Anda baru sadar betapa pentingnya
- Tanpanya, teknologi modern tidak bisa berjalan
Setiap kali Anda buka browser, kirim WhatsApp, transfer bank, login ke email - kriptografi bekerja untuk Anda.
Masa Depan: Post-Quantum Cryptography
Komputer kuantum (dengan algoritma Shor) bisa memecahkan RSA dan ECC dalam hitungan jam. NIST telah mengumumkan standar post-quantum cryptography tahun 2022:
- CRYSTALS-Kyber (ML-KEM): key encapsulation
- CRYSTALS-Dilithium (ML-DSA): digital signature
- SPHINCS+ (SLH-DSA): signature berbasis hash
- FALCON (FN-DSA): signature berbasis lattice
Organisasi mulai migrasi sekarang karena serangan "harvest now, decrypt later" - penyerang menyimpan data terenkripsi hari ini untuk didekripsi nanti dengan komputer kuantum.
- RFC 8446 - The Transport Layer Security (TLS) Protocol Version 1.3
- Signal Foundation - Signal Protocol Documentation (signal.org/docs)
- Nakamoto, S. (2008). Bitcoin: A Peer-to-Peer Electronic Cash System
- Zimmermann, P. - PGP Source Code & Documentation (gnupg.org)
- NIST - Post-Quantum Cryptography Standardization (FIPS 203, 204, 205)
- OWASP - Cryptographic Storage Cheat Sheet
DIAGNOSTIK KOMPETENSI
Uji pemahaman Anda tentang Bab 06! Target minimal: 70% untuk melanjutkan ke Bab 07.
- Total 10 pertanyaan pilihan ganda
- Klik opsi untuk menjawab - feedback langsung
- Benar = HIJAU, salah = MAGENTA
- Penjelasan muncul setelah menjawab
- Klik "LIHAT HASIL AKHIR" untuk skor final
-
- Schneier, B. (1996). Applied Cryptography, 2nd Ed. Wiley.
- Stallings, W. (2020). Cryptography and Network Security, 8th Ed.
- NIST FIPS 197 - AES Standard
- NIST FIPS 180-4 - Secure Hash Standard (SHS)
- NIST FIPS 186-4 - Digital Signature Standard
- RFC 8446 - TLS 1.3
- RFC 5280 - X.509 Certificates
- Signal Foundation - Signal Protocol
- Nakamoto, S. (2008). Bitcoin Whitepaper
- NIST - Post-Quantum Cryptography Standards (2024)