Encryption - Crypto 101


Istilah-Istilah Penting

- Ciphertext : Hasil dari enkripsi, yaitu data yang sudah dienkripsi.
- Cipher : Metode enkripsi atau dekripsi data. Ada cipher kriptografis modern dan cipher non-kriptografis seperti Caesar.
- Plaintext : Data sebelum dienkripsi, bisa berupa teks, Bisa berupa foto atau file lain.
- Encryption : Mengubah data menjadi teks sandi, menggunakan password.
- Encoding : BUKAN bentuk enkripsi, hanya bentuk representasi data seperti base64. Dapat langsung dibalik.
- Key : Informasi yang dibutuhkan untuk mendekripsi ciphertext menjadi plaintext.
- Passphrase : Terpisah dari key, frasa sandi mirip dengan password dan digunakan untuk melindungi key.
- Asymmetric encryption : Menggunakan kunci yang berbeda untuk encrypt dan decrypt.
- Symmetric encryption : Menggunakan kunci yang sama untuk encrypt dan decrypt.
- Brute force : Menyerang kriptografi dengan mencoba semua password atau setiap kunci yang berbeda.
- Cryptanalysis : Menyerang kriptografi dengan menemukan kelemahan dalam matematika yang mendasarinya
- Alice and Bob : Representasi dua orang yang ingin berkomunikasi, biasa digunakan dalam contoh kriptografi.
Catatan : Topik ini bersifat teoritis dan memberikan pemahaman dasar tentang kriptografi.


Mengapa Encryption Penting?

Kriptografi digunakan untuk melindungi kerahasiaan(confidentiality), memastikan integritas(integrity), dan memastikan keaslian(authenticity). Anda kemungkinan besar menggunakan kriptografi setiap hari, dan Anda hampir pasti membaca ini sekarang melalui koneksi terenkripsi.

- Saat masuk ke TryHackMe, kredensial Anda dikirim ke server. Kredensial ini dienkripsi, jika tidak, seseorang akan dapat mengambilnya dengan mengintip koneksi Anda.
- Saat Anda terhubung ke SSH , klien dan server Anda membuat terowongan terenkripsi sehingga tidak seorang pun dapat mengintip sesi Anda.
- Saat Anda terhubung ke bank Anda, ada sertifikat yang menggunakan kriptografi untuk membuktikan bahwa itu benar-benar bank Anda, bukan peretas.
- Saat Anda mengunduh sebuah berkas, bagaimana cara memeriksa apakah berkas tersebut diunduh dengan benar? Anda dapat menggunakan kriptografi di sini untuk memverifikasi checksum data.

Anda jarang harus berinteraksi langsung dengan kriptografi, tetapi ia secara diam-diam melindungi hampir semua yang Anda lakukan secara digital.
Setiap kali data pengguna yang sensitif perlu disimpan, data tersebut harus dienkripsi. Standar seperti PCI-DSS (Payment Card Industry Data Security Standard) menyatakan bahwa data harus dienkripsi baik saat tidak digunakan (dalam penyimpanan) DAN saat sedang dikirim. Jika Anda menangani detail kartu pembayaran, Anda harus mematuhi peraturan PCI ini. Data medis memiliki standar yang serupa. Dengan undang-undang seperti GDPR (General Data Protection Regulation) dan perlindungan data California, pelanggaran data sangat merugikan dan berbahaya bagi Anda sebagai konsumen atau bisnis.

JANGAN mengenkripsi kata sandi kecuali Anda menggunakan pengelola kata sandi. Kata sandi tidak boleh disimpan dalam bentuk teks biasa, dan Anda harus menggunakan hashing untuk mengelolanya dengan aman.


Crucial Crypto Maths

Ada sedikit matematika yang sering muncul dalam kriptografi. Operator Modulo. Hampir setiap bahasa pemrograman mengimplementasikan operator ini, atau menyediakannya melalui pustaka. Bila Anda perlu bekerja dengan angka besar, gunakan bahasa pemrograman. Python cocok untuk ini karena bilangan bulat tidak terbatas ukurannya, dan Anda dapat dengan mudah mendapatkan penerjemah.

Saat mempelajari pembagian untuk pertama kalinya, Anda mungkin diajarkan untuk menggunakan sisa pembagian dalam jawaban Anda. X % Y adalah sisa pembagian X dengan Y.

Contoh :
25% 5 = 0 (5 x 5 = 25 sehingga habis dibagi tepat tanpa sisa)
23 % 6 = 5 (23 tidak dapat dibagi 6, akan ada sisa 5)

Practical
1. Berapa 30 % 5  Python 3.8.5 (default, Jul 20 2020, 23:11:29)
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 30 % 5
//0
2. Berapa 25 % 7 >>> 25 % 7
//4
3. Berapa 118613842 % 9091 >>> 118613842 % 9091
//3565


Types of Encryption

Dua kategori utama Encryption adalah symmetric dan asymmetric.

Symmetric encryption menggunakan kunci yang sama untuk mengenkripsi dan mendekripsi data. Contoh enkripsi simetris adalah DES (Broken) dan AES . Algoritme ini cenderung lebih cepat daripada kriptografi asimetris, dan menggunakan kunci yang lebih kecil (kunci 128 atau 256 bit umum untuk AES , kunci DES panjangnya 56 bit).

Asymmetric encryptionmenggunakan sepasang kunci, satu untuk mengenkripsi dan yang lainnya dalam pasangan tersebut untuk mendekripsi. Contohnya adalah RSA dan Kriptografi Kurva Eliptik. Biasanya kunci-kunci ini disebut sebagai kunci publik dan kunci privat. Data yang dienkripsi dengan kunci privat dapat didekripsi dengan kunci publik, dan sebaliknya. Kunci privat Anda harus dirahasiakan, oleh karena itu dinamakan demikian. Enkripsi asimetris cenderung lebih lambat dan menggunakan kunci yang lebih besar, misalnya RSA biasanya menggunakan kunci 2048 hingga 4096 bit.


RSA - Rivest Shamir Adleman

RSA didasarkan pada masalah matematika yang sulit untuk menghitung faktor-faktor dari sejumlah besar. Sangat cepat untuk mengalikan dua bilangan prima, misalnya 17x23 = 391, tetapi cukup sulit untuk menghitung dua bilangan prima mana yang dikalikan bersama untuk menghasilkan 14351 (113x127 sebagai referensi).

Ada beberapa alat yang sangat bagus untuk mengalahkan tantangan RSA di CTF, dan favorit saya adalah https://github.com/Ganapati/RsaCtfTool yang sangat berhasil bagi saya. Saya juga cukup berhasil dengan https://github.com/ius/rsatool.

Variabel kunci yang perlu Anda ketahui tentang RSA di CTF adalah p, q, m, n, e, d, dan c. - “p” dan “q” adalah bilangan prima besar, “n” adalah hasil kali p dan q.
- key publik adalah n dan e.
- key privat adalah n dan d.
- “m” digunakan untuk mewakili pesan (dalam bentuk teks biasa).
- “c” mewakili teks terenkripsi (ciphertext).
CTF yang melibatkan RSA - Tantangan Crypto CTF sering kali menyajikan Anda dengan serangkaian nilai ini, dan Anda perlu memecahkan enkripsi dan mendekripsi pesan untuk mengambil tanda tersebut.

Practical
1. p = 4391, q = 6659. Berapakah n?
 Python 3.8.5 (default, Jul 20 2020, 23:11:29)
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 4391 * 6659
//29239669


Establishing Keys Using Asymmetric Cryptography

- Penggunaan asymmetric cryptography yang sangat umum adalah pertukaran key symmetric encryption.
- Asymmetric encryption cenderung lebih lambat, jadi untuk hal-hal seperti HTTPS, symmetric encryption lebih baik

Metaphor time
Bayangkan Anda memiliki kode rahasia dan petunjuk tentang cara menggunakan kode rahasia tersebut. Jika Anda ingin mengirimkan petunjuk tersebut kepada teman Anda tanpa ada yang dapat membacanya, yang dapat Anda lakukan adalah meminta kunci kepada teman Anda.
Hanya mereka yang memiliki kunci untuk gembok ini, dan kami berasumsi Anda memiliki kotak yang tidak bisa dihancurkan yang dapat Anda kunci dengannya.
Jika Anda mengirim petunjuk dalam kotak terkunci kepada teman Anda, mereka dapat membukanya setelah kotak tersebut sampai kepada mereka dan membaca petunjuk tersebut.
Setelah itu, Anda dapat berkomunikasi dalam kode rahasia tanpa risiko dimata-matai orang.

Dalam metafora ini, kode rahasia melambangkan kunci enkripsi simetris, gembok melambangkan kunci publik server, dan kunci melambangkan kunci privat server.
Anda hanya menggunakan kriptografi asimetris satu kali, jadi cepat, dan sekarang Anda dapat berkomunikasi secara pribadi dengan enkripsi simetris.

The Real World
Pada kenyataannya, Anda memerlukan sedikit kriptografi untuk memverifikasi bahwa orang yang Anda ajak bicara adalah orang yang mereka katakan, yang dilakukan dengan menggunakan tanda tangan dan sertifikat digital. Anda dapat menemukan lebih banyak detail tentang cara kerja HTTPS (salah satu contoh di mana Anda perlu bertukar kunci) dari posting blog yang luar biasa ini. https://robertheaton.com/2014/03/27/how-does-https-actually-work/


Digital signatures and Certificates

Digital signatures adalah cara untuk membuktikan keaslian berkas, untuk membuktikan siapa yang membuat atau mengubahnya. Dengan menggunakan kriptografi asimetris, Anda membuat tanda tangan dengan kunci pribadi Anda dan tanda tangan tersebut dapat diverifikasi menggunakan kunci publik Anda.
Bentuk tanda tangan digital yang paling sederhana adalah mengenkripsi dokumen dengan kunci pribadi Anda, dan kemudian jika seseorang ingin memverifikasi tanda tangan ini, mereka akan mendekripsinya dengan kunci publik Anda dan memeriksa apakah filenya cocok.

Certificates juga merupakan penggunaan utama kriptografi kunci publik, yang terkait dengan Digital signatures.
Sertifikat tersebut memiliki rantai kepercayaan, dimulai dengan root CA (otoritas sertifikat). Root CA secara otomatis dipercaya oleh perangkat, OS, atau browser Anda sejak diinstal.


SSH Authentication

- Secara default, SSH diautentikasi menggunakan nama pengguna dan kata sandi dengan cara yang sama seperti Anda masuk ke mesin fisik.
- SSH dikonfigurasikan dengan autentikasi kunci publik dan privat. (Kunci SSH adalah kunci RSA)
- SSH Private Keys :
Dengan menggunakan alat seperti John the Ripper , Anda dapat menyerang kunci SSH yang terenkripsi untuk mencoba menemukan passphrase, yang menyoroti pentingnya menggunakan secure passphrase dan menjaga kerahasiaan key Private Anda.

- File authorized_keys di direktori ~/.ssh menyimpan key publik yang diizinkan untuk mengakses server jika autentikasi kunci diaktifkan.
- Untuk otentikasi berbasis key, gunakan ssh -i keyName user@host
Menggunakan kunci SSH untuk mendapatkan shell yang lebih baik
- Kunci SSH adalah cara yang sangat baik untuk “memperbarui” shell terbalik, dengan asumsi pengguna telah mengaktifkan login
- Anda dapat menambahkan kunci publik Anda sendiri ke ~/.ssh/authorized_keys berkas tersebut.
- Meninggalkan kunci SSH di authorized_keys pada kotak dapat menjadi pintu belakang yang berguna, dan Anda tidak perlu berurusan dengan masalah apa pun dari shell terbalik yang tidak stabil seperti Control-C atau kurangnya pelengkapan tab.

Practical
2. Pecahkan kata sandi dengan John The Ripper dan rockyou, apa frasa sandi untuk kuncinya?
$ locate ssh2jhon
$ python /usr/share/john/ssh2john.py ssh_id_rsa > rsa.txt

$ john rsa.txt --wordlist=/usr/share/wordlists/rockyou.txt
//delicious


Explaining Diffie Hellman Key Exchange

What is Key Exchange?
Key Exchange memungkinkan 2 orang/pihak untuk membuat satu set kunci kriptografi umum tanpa seorang pengamat dapat memperoleh kunci-kunci ini. Umumnya, untuk membuat symmetric keys umum.

Sumber Daya Tambahan
Video yang bagus jika Anda menginginkan penjelasan visual tersedia di sini. https://www.youtube.com/watch?v=NmM9HA2MQGI

DH Key Exchange sering digunakan bersama kriptografi kunci publik RSA, untuk membuktikan identitas orang yang Anda ajak bicara dengan tanda tangan digital. Hal ini mencegah seseorang menyerang koneksi dengan serangan man-in-the-middle attack.


PGP, GPG and AES

PGP
PGP adalah singkatan dari Pretty Good Privacy. Ini adalah software yang menerapkan encryption untuk mengencrypting files, melakukan penandatanganan digital.

GPG
GnuPG atau GPG adalah implementasi Open Source PGP dari proyek GNU. Anda mungkin perlu menggunakan GPG untuk decrypt berkas dalam CTF.
Dengan PGP/ GPG , key privat dapat dilindungi dengan passphrases dengan cara yang sama seperti key privat SSH . Jika kunci dilindungi passphrases, Anda dapat mencoba memecahkan passphrases ini menggunakan John The Ripper dan gpg2john.
Halaman manual untuk GPG dapat ditemukan online di sini.

AES
AES, terkadang disebut Rijndael berdasarkan nama penciptanya, merupakan singkatan dari Advanced Encryption Standard. Ini merupakan pengganti DES yang memiliki kunci pendek dan kelemahan cryptographic lainnya.

AES dan DES keduanya beroperasi pada blok data (blok adalah serangkaian bit berukuran tetap).
AES rumit untuk dijelaskan, dan tampaknya tidak sering muncul. Jika Anda ingin mempelajari cara kerjanya, berikut video bagus dari Computer phile https://www.youtube.com/watch?v=O4xNJsjtN6E

Practical
2. Anda memiliki kunci pribadi, dan berkas yang dienkripsi dengan kunci publik. Dekripsikan berkas tersebut. Apa kata rahasianya?
$ gpg --import tryhackme.key

$ gpg message.gpg
$ cat message
//Pineapple


The Future - Quantum Computers and Encryption

Quantum computers akan segera menjadi masalah bagi banyak jenis encryption.

Asymmetric and Quantum
Meskipun kecil kemungkinan kita akan memiliki komputer kuantum yang cukup canggih hingga sekitar tahun 2030, begitu komputer ini ada, enkripsi yang menggunakan RSA atau Elliptical Curve Cryptography akan sangat cepat dipecahkan. Ini karena komputer kuantum dapat memecahkan masalah matematika yang menjadi dasar kekuatan algoritma ini dengan sangat efisien.

AES/DES and Quantum
AES dengan kunci 128 bit juga kemungkinan besar akan dipecahkan oleh komputer kuantum dalam waktu dekat, tetapi AES 256 bit tidak dapat dipecahkan semudah itu. Triple DES juga rentan terhadap serangan dari komputer kuantum.

Current Recommendations
NSA merekomendasikan penggunaan RSA-3072 atau yang lebih baik untuk enkripsi asimetris dan AES -256 atau yang lebih baik untuk enkripsi simetris. Saat ini ada beberapa kompetisi yang sedang berlangsung untuk algoritma kriptografi yang aman untuk kuantum, dan kemungkinan besar kita akan memiliki standar enkripsi baru sebelum komputer kuantum menjadi ancaman bagi RSA dan AES .

Jika Anda ingin mempelajari lebih lanjut tentang ini, NIST memiliki sumber daya yang merinci masalah dengan enkripsi saat ini dan solusi yang diusulkan saat ini. https://doi.org/10.6028/ NIST . IR .8105



tags