Operasi modulo tidak dapat dibalik (non-reversible).
Contoh: x % 5 = 4 → ada tak terbatas nilai x yang memenuhi.
Hasil modulo selalu:
≥ 0
< pembagi
Untuk a % n → hasil berada pada rentang 0 sampai n − 1.
Operasi modulo sangat penting dalam kriptografi modern, terutama untuk bilangan besar.
What’s 1001 ⊕ 1010?
0011
python3# Python 3.13.9 (tags/v3.13.9:8183fa5, Oct 14 2025, 14:09:13) [MSC v.1944 64 bit (AMD64)] on win32# Type "help", "copyright", "credits" or "license" for more information.# Ctrl click to launch VS Code Native REPL>>> print(118613842 % 9091)# 3565
RSA adalah algoritma kriptografi kunci publik (public-key encryption) yang digunakan untuk mengamankan pengiriman data melalui saluran yang tidak aman. Pada saluran seperti ini, diasumsikan bahwa pihak ketiga (penyerang) dapat melakukan penyadapan terhadap komunikasi.
Keamanan RSA bergantung pada kesulitan memfaktorkan bilangan besar.
Mengalikan dua bilangan prima besar merupakan proses yang relatif mudah, namun menemukan faktor-faktor prima dari hasil perkalian tersebut sangat sulit, terutama jika bilangan yang digunakan sangat besar.
Contoh sederhana:
113 × 127 = 14351 (mudah dihitung)
Namun, menentukan bahwa 14351 berasal dari 113 × 127 jauh lebih sulit.
Contoh lain dengan bilangan yang lebih besar:
Prima 1: 982451653031
Prima 2: 169743212279
Hasil perkalian:
166764499494295486767649
Walaupun komputer modern masih mampu memfaktorkan bilangan sebesar ini, bilangan dengan panjang lebih dari 600 digit sangat sulit untuk difaktorkan. Inilah alasan mengapa RSA menggunakan bilangan prima yang sangat besar dalam implementasi nyata (masing-masing sekitar 300 digit atau lebih).
Salah satu tantangan utama dalam enkripsi simetris adalah pembagian kunci rahasia.
Misalnya, Anda ingin mengirim dokumen yang dilindungi password kepada rekan bisnis untuk membahas strategi rahasia. Pertanyaannya adalah: bagaimana cara mengirim password tersebut dengan aman?
Jika password dikirim melalui saluran yang tidak aman, pihak penyerang dapat:
Menyadap isi komunikasi
Mengubah pesan
Mengambil password
Oleh karena itu, diperlukan mekanisme pertukaran kunci yang aman, meskipun menggunakan saluran komunikasi yang tidak aman.
Diffie-Hellman sering digunakan bersamaan dengan RSA:
Diffie-Hellman
Digunakan untuk key agreement
Menghasilkan shared secret
RSA
Digunakan untuk:
Digital signature
Autentikasi
Key transport
RSA membantu memastikan identitas pihak yang berkomunikasi, sehingga mencegah serangan Man-in-the-Middle (MITM), di mana penyerang berpura-pura menjadi Bob atau Alice.
pow adalah fungsi dalam Python yang digunakan untuk menghitung pangkat dengan operasi modulo. Fungsi ini memiliki tiga argumen: basis (base), eksponen (exponent), dan modulus (modulus). Sintaksnya adalah sebagai berikut:
p = 29g = 5a = 12# pow adalah fungsi pangkat dengan modulo# rumus: pow(base, exponent, modulus)# pow = (g^a) mod p# contoh: (5^12) mod 29# 5^12 = 244140625# 244140625 mod 29 = 28A = pow(g, a, p)print(A)
Consider p = 29, g = 5, a = 12. What is A?
7
p = 29g = 5b = 17B = pow(g, b, p)# urutanya (g^b) mod pprint(B)# 9
Consider p = 29, g = 5, b = 17. What is B?
9
p = 29a = 12B = 9b_key = pow(B, a, p)# urutanya (B^a) mod pprint(b_key)# 24
Knowing that p = 29, a = 12, and you have B from the second question, what is the key calculated by Bob? (key = Ba mod p)
24
p = 29b = 17A = 7a_key = pow(A, b, p)# urutanya (A^b) mod pprint(a_key)
Knowing that p = 29, b = 17, and you have A from the first question, what is the key calculated by Alice? (key = Ab mod p)
Saat pertama kali terhubung ke server via SSH, client akan menampilkan peringatan bahwa identitas server belum dikenal.
SSH meminta konfirmasi apakah kita mengenali fingerprint kunci publik server.
Algoritma seperti ED25519 digunakan untuk tanda tangan digital
Peringatan ini muncul karena ada kemungkinan Man-in-the-Middle (MITM) attack
Jika pengguna memilih yes, fingerprint server akan disimpan di known_hosts
Pada koneksi berikutnya, SSH akan menolak koneksi jika fingerprint berubah
Tujuannya adalah memastikan kita terhubung ke server yang benar.
ssh-keygen -t ed25519# Generating public/private ed25519 key pair.# Enter file in which to save the key (/home/strategos/.ssh/id_ed25519):# Enter passphrase (empty for no passphrase):# Enter same passphrase again:# Your identification has been saved in /home/strategos/.ssh/id_ed25519# Your public key has been saved in /home/strategos/.ssh/id_ed25519.pub# The key fingerprint is:# SHA256:4S4DQvRfp52UuNwg++nTcWlnITEJTbMcCU0N8UYC1do strategos@g5000# The key's random art image is:# +--[ED25519 256]--+# | . +XXB. |# | . . . oBBo |# | . . . = + o=o |# | . . * X .o.E |# | . . o S + o . |# | . . o .. + o |# | o +. + o |# | +. . |# | .. |# +----[SHA256]-----+
Namun, di dunia digital, tanda tangan fisik, cap, atau sidik jari tidak dapat digunakan. Oleh karena itu, dibutuhkan digital signature (tanda tangan digital).
Digital signature adalah mekanisme kriptografi untuk:
Memverifikasi keaslian (authenticity) dokumen
Menjamin keutuhan (integrity) data
Membuktikan siapa yang menandatangani
Digital signature menggunakan kriptografi kunci publik (asymmetric cryptography):
Dokumen ditandatangani menggunakan private key
Tanda tangan diverifikasi menggunakan public key
Karena hanya pemilik private key yang bisa membuat tanda tangan tersebut, maka tanda tangan digital dapat membuktikan identitas penandatangan. Di banyak negara, tanda tangan digital memiliki nilai hukum yang sama dengan tanda tangan fisik.
# gpg (GnuPG) 2.4.4; Copyright (C) 2024 g10 Code GmbH# This is free software: you are free to change and redistribute it.# There is NO WARRANTY, to the extent permitted by law.# Please select what kind of key you want:# (1) RSA and RSA# (2) DSA and Elgamal# (3) DSA (sign only)# (4) RSA (sign only)# (9) ECC (sign and encrypt) *default*# (10) ECC (sign only)# (14) Existing key from cardYour selection? 9# Please select which elliptic curve you want:# (1) Curve 25519 *default*# (4) NIST P-384# (6) Brainpool P-256Your selection? 1# Please specify how long the key should be valid.# 0 = key does not expire# <n> = key expires in n days# <n>w = key expires in n weeks# <n>m = key expires in n months# <n>y = key expires in n yearsKey is valid for? (0)# Key does not expire at allIs this correct? (y/N) y# GnuPG needs to construct a user ID to identify your key.Real name: strategosEmail address: strategos@tryhackme.thm# [...]# pub ed25519 2024-08-29 [SC]# AB7E6AA87B6A8E0D159CA7FFE5E63DBD5F83D5ED# uid Strategos <strategos@tryhackme.thm># sub cv25519 2024-08-29 [E]
Hashing dalam cyber security terutama digunakan untuk:
Penyimpanan password (autentikasi)
Menjaga integritas data
Autentikasi ≠ password manager
Autentikasi hanya perlu memverifikasi, bukan mengembalikan password asli.
Praktik Penyimpanan Password yang Tidak Aman:
Plaintext (teks asli)
Sangat berbahaya
Contoh: RockYou breach → 14+ juta password bocor (rockyou.txt)
Enkripsi yang sudah usang (deprecated)
Contoh: Adobe
Password bisa didekripsi kembali
Password hint disimpan plaintext (kadang isinya password)
Hashing tidak aman
Contoh: LinkedIn (2012)
Menggunakan SHA-1
Tanpa salt, sehingga mudah di-crack dengan rainbow table
Intinya:
Password tidak boleh disimpan plaintext, tidak dienkripsi, dan tidak di-hash dengan algoritma lemah tanpa salt.
Gunakan hashing modern + salt (bcrypt, Argon2, dll).
head -n 20 /usr/share/wordlists/rockyou.txt# 123456# [...]# qwerty
Offensive security hashing: mulai dari hash → identifikasi jenis hash → crack → dapatkan password.
Tool identifikasi hash (hashID, dll) tidak selalu akurat → konteks itu penting
(misalnya: hash dari web app → lebih mungkin MD5 daripada NTLM).
Linux password hashes:
Disimpan di /etc/shadow (hanya root bisa baca)
Format:
username:$prefix$options$salt$hash:...
y indicates the hash algorithm used, yescrypt
j9T is a parameter passed to the algorithm
76UzfgEM5PnymhQ7TlJey1 is the salt used
/OOSg64dhfF.TigVPdzqiFang6uZA4QA1pzzegKdVm4 is the hash value
Prefix menunjukkan algoritma hash
Prefix hash Linux (kuat → lemah):
$y$ → yescrypt (default modern)
$gy$ → gost-yescrypt
$7$ → scrypt
$2b$ / $2y$ / $2a$ → bcrypt
$6$ → sha512crypt
$md5 / $1$ → MD5-based (lama & lemah)
Contoh shadow file:
Ada algoritma, parameter, salt, dan hash
Windows password hashes:
Menggunakan NTLM (turunan MD4)
Disimpan di SAM
Bisa di-dump pakai tool seperti mimikatz
Hash terlihat mirip MD4/MD5, jadi konteks sangat krusial
Kesimpulan:
Jangan cuma mengandalkan tool
Analisis konteks + riset itu kunci
Referensi penting: Hashcat Example Hashes
man 5 crypt # yescrypt # yescrypt is a scalable passphrase hashing scheme designed by Solar Designer, which # is based on Colin Percival's scrypt. Recommended for new hashes. # Prefix # "$y$" # Hashed passphrase format # \$y\$[./A-Za-z0-9]+\$[./A-Za-z0-9]{,86}\$[./A-Za-z0-9]{43} # Maximum passphrase length # unlimited # Hash size # 256 bits
What is the hash size in yescrypt?
256
hashcat --help | grep Cisco # 2410 | Cisco-ASA MD5 | Operating System # 9200 | Cisco-IOS $8$ (PBKDF2-SHA256) | Operating System # 9300 | Cisco-IOS $9$ (scrypt) | Operating System # 5700 | Cisco-IOS type 4 (SHA256) | Operating System # 2400 | Cisco-PIX MD5 | Operating System # 500 | md5crypt, MD5 (Unix), Cisco-IOS $1$ (MD5) | Operating System
What’s the Hash-Mode listed for Cisco-ASA MD5?
Check the Hashcat Example Hashes page.
2410
What hashing algorithm is used in Cisco-IOS if it starts with $9$?
Hash tidak bisa didekripsi → hanya bisa di-crack dengan mencoba banyak password lalu membandingkan hash.
Salt tidak mencegah cracking, tapi:
Membuat rainbow table tidak efektif
Harus hash satu per satu per salt
Tools umum untuk cracking:
Hashcat (GPU & CPU)
John the Ripper (CPU)
GPU cracking:
GPU sangat cepat untuk hash tertentu
Algoritma seperti bcrypt sengaja dibuat lambat di GPU
VM kurang ideal untuk cracking:
Biasanya tidak akses GPU
Ada penurunan performa
Lebih baik jalankan Hashcat di host OS
John the Ripper:
Jalan di VM
Tetap lebih cepat di host OS
Hashcat basic syntax:
hashcat -m <hash_type> -a <attack_mode> hashfile wordlist
Contoh:
hashcat -m 3200 -a 0 hash.txt rockyou.txt
Intinya:
Salt = proteksi dari rainbow table, bukan dari cracking
GPU sangat berpengaruh kecuali hash yang memang dibuat lambat
Pilih tool & environment yang tepat untuk efisiensi
cd ~/Hashing-Basics/Task-6cat hash1.txt# $2a$06$7yoU3Ng8dHTXphAg913cyO6Bjs3K5lBnwq5FJyA6d01pMSrddr1ZG
jika dilihat di pola nya $2a$06$... berarti bcrypt dengan cost 06
hashcat -m 3200 -a 0 hash1.txt /usr/share/wordlists/rockyou.txt# $2a$06$7yoU3Ng8dHTXphAg913cyO6Bjs3K5lBnwq5FJyA6d01pMSrddr1ZG:85208520
Use hashcat to crack the hash, $2a$06$7yoU3Ng8dHTXphAg913cyO6Bjs3K5lBnwq5FJyA6d01pMSrddr1ZG, saved in ~/Hashing-Basics/Task-6/hash1.txt.
85208520
cat hash2.txt# 9eb7ee7f551d2f0ac684981bd1f1e2fa4a37590199636753efe614d4db30e8e1hashcat -m 1400 -a 0 hash2.txt /usr/share/wordlists/rockyou.txt# 9eb7ee7f551d2f0ac684981bd1f1e2fa4a37590199636753efe614d4db30e8e1:halloween
jika dilihat di pola nya 9eb7ee7f551d2f0ac684981bd1f1e2fa4a37590199636753efe614d4db30e8e1 berarti sha2-256
Use hashcat to crack the SHA2-256 hash, 9eb7ee7f551d2f0ac684981bd1f1e2fa4a37590199636753efe614d4db30e8e1, saved in saved in ~/Hashing-Basics/Task-6/hash2.txt.
halloween
cat hash3.txt# $6$GQXVvW4EuM$ehD6jWiMsfNorxy5SINsgdlxmAEl3.yif0/c3NqzGLa0P.S7KRDYjycw5bnYkF5ZtB8wQy8KnskuWQS3Yr1wQ0hashcat -m 1800 -a 0 hash3.txt /usr/share/wordlists/rockyou.txt# $6$GQXVvW4EuM$ehD6jWiMsfNorxy5SINsgdlxmAEl3.yif0/c3NqzGLa0P.S7KRDYjycw5bnYkF5ZtB8wQy8KnskuWQS3Yr1wQ0:spaceman
Use hashcat to crack the hash, $6$GQXVvW4EuM$ehD6jWiMsfNorxy5SINsgdlxmAEl3.yif0/c3NqzGLa0P.S7KRDYjycw5bnYkF5ZtB8wQy8KnskuWQS3Yr1wQ0, saved in ~/Hashing-Basics/Task-6/hash3.txt.
spaceman
cat hash4.txt# b6b0d451bbf6fed658659a9e7e5598fehashcat -m 0 -a 0 hash4.txt /usr/share/wordlists/rockyou.txt
Crack the hash, b6b0d451bbf6fed658659a9e7e5598fe, saved in ~/Hashing-Basics/Task-6/hash4.txt.
Hash adalah cara mengubah data dengan panjang bebas menjadi nilai dengan panjang tetap menggunakan algoritma tertentu. Proses ini menyembunyikan data asli dan hasilnya disebut hash value.
Contoh algoritma hash: MD4, MD5, SHA1, NTLM.
Input berbeda akan menghasilkan hash yang berbeda, tetapi panjang hash selalu tetap.
Jika menggunakan AttackBox atau VM bawaan, John sudah terpasang, jadi tidak perlu instalasi manual. Versi selain Jumbo bisa tidak memiliki tools penting seperti zip2john dan rar2john.
Selama ini, kita menggunakan wordlist mode pada John untuk melakukan brute-force hash sederhana maupun kompleks. Namun, John juga memiliki mode lain yang disebut Single Crack Mode.
Dalam mode ini, John hanya menggunakan informasi dari username untuk menebak kemungkinan password secara heuristik, dengan cara memodifikasi huruf dan angka yang terdapat pada username tersebut.
Single Crack Mode bekerja menggunakan teknik yang disebut word mangling.
Sebagai contoh, jika username adalah “Markus”, maka kemungkinan password yang dihasilkan antara lain:
Markus1, Markus2, Markus3, dan seterusnya
MArkus, MARkus, MARKus, dan variasi huruf besar lainnya
Markus!, Markus$, Markus*, dan simbol lain
John membangun wordlist berdasarkan informasi yang diberikan, lalu menerapkan mangling rules untuk memodifikasi kata awal menjadi berbagai variasi password yang relevan. Teknik ini memanfaatkan kebiasaan pengguna yang sering membuat password berdasarkan username atau informasi akun mereka.
John juga mendukung word mangling menggunakan GECOS field pada sistem UNIX dan Linux.
GECOS (General Electric Comprehensive Operating System) merupakan field kelima pada file /etc/passwd, yang dipisahkan dengan tanda titik dua :. Field ini berisi informasi umum pengguna, seperti nama lengkap, nomor kantor, dan nomor telepon.
John dapat memanfaatkan informasi dari GECOS, seperti nama lengkap atau direktori home, untuk menambahkan variasi kata ke dalam wordlist saat melakukan cracking pada hash /etc/shadow menggunakan single crack mode.
Setelah mempelajari Single Crack Mode pada John, kamu mungkin mulai memiliki gambaran tentang pola mangling yang sering digunakan pada password, atau pola password pribadi yang sering dipakai dan bisa direplikasi.
Kabar baiknya, John memungkinkan kita membuat aturan sendiri (Custom Rules), yang akan digunakan untuk menghasilkan password secara dinamis. Fitur ini sangat berguna ketika kita memiliki informasi tambahan tentang struktur password target.
Banyak organisasi menerapkan kebijakan kompleksitas password untuk mencegah serangan dictionary attack. Misalnya, password harus mengandung minimal:
Huruf kecil
Huruf besar
Angka
Simbol
Karena itu, password sederhana seperti polopassword biasanya akan ditolak. Sebagai gantinya, banyak pengguna membuat password seperti:
Polopassword1!
Pola ini sangat umum:
Huruf pertama kapital
Angka di akhir
Diikuti simbol
Meskipun password ini memenuhi syarat kompleksitas, pengguna cenderung konsisten dan mudah ditebak dalam penempatan simbol dan angka. Pola yang dapat diingat ini sering digunakan berulang kali, dan inilah yang bisa kita eksploitasi sebagai attacker.
Benar! John the Ripper dapat digunakan untuk memecahkan password pada file Zip yang dilindungi password. Sama seperti sebelumnya, kita menggunakan tool tambahan dalam paket John untuk mengubah file Zip ke format yang bisa dipahami oleh John, lalu menggunakan sintaks John yang sudah familiar.
Kita dapat menggunakan proses yang mirip dengan cracking file Zip untuk mendapatkan password pada arsip RAR.
File RAR merupakan file terkompresi yang dibuat menggunakan WinRAR, dan fungsinya sama seperti Zip, yaitu mengompres folder dan file.
Baik, tidak ada lagi arsip file 😄
Sekarang kita akan membahas satu penggunaan John lainnya yang cukup sering muncul dalam challenge CTF, yaitu memecahkan password SSH private key (id_rsa).
Secara default, SSH menggunakan password untuk autentikasi. Namun, SSH juga mendukung key-based authentication, di mana kita menggunakan private key (id_rsa) untuk login ke mesin remote.
Biasanya, private key ini dilindungi oleh password, dan di sinilah John the Ripper digunakan untuk memecahkan password tersebut agar kita bisa login ke SSH menggunakan key.
Seperti sebelumnya, kita membutuhkan tool konversi. Tool ini bernama ssh2john, yang berfungsi mengubah file id_rsa private key menjadi format hash yang dapat diproses oleh John.