com
Bab 5
Kriptografi
Latihan Lab
5.01 Enkripsi Kunci Simetris
5.02 Enkripsi Kunci Asimetris
5.03 Hashing
5.04 Pertukaran Kunci Diffie-Hellman
Analisis Lab
Kuis Istilah Kunci
Kriptografi menyediakan integritas, yang memastikan bahwa tidak ada bagian dari pesan
yang berubah saat transit, baik secara tidak sengaja maupun jahat. Pesan yang dikirim harus
sama persis dengan pesan yang diterima. Integritas file saat istirahat memastikan bahwa file
tidak diubah secara tidak sengaja, berbahaya, atau saat tidak sah. Perubahan yang tidak sah,
misalnya, mungkin melibatkan file yang diubah oleh karyawan yang berwenang yang tidak
sesuai dengan kebijakan manajemen perubahan.
Pesan atau file dalam plaintext dalam bentuk yang dapat dibaca manusia. Plaintext juga
mengacu pada data apa pun, termasuk file biner, dalam bentuk yang dapat dilihat atau digunakan
tanpa harus mengubahnya menjadi representasi yang berbeda. Ketika sebuah pesan dikirim
sebagai teks biasa melalui saluran yang tidak aman, penyerang bisa mendapatkan salinan dan
memahami pesan tersebut, seperti yang bisa dilakukan oleh penerima yang dituju. Saluran yang
tidak aman dapat berupa kabel atau nirkabel, dan dapat dibatasi pada infrastruktur Wi-Fi atau
mencakup interkoneksi Internet.
Plaintext dan kunci, string 1s dan 0s, dimasukkan ke dalam cipher, yang merupakan
algoritma enkripsi yang mengubah plaintext menjadi output yang tidak dapat dibaca yang
dikenal sebagai ciphertext. Ketika sebuah pesan dikirim sebagai ciphertext melalui saluran
yang tidak aman, penyerang bisa mendapatkan salinannya, tetapi ciphertext akan terlihat
seperti bit dan byte acak dan tidak akan berisi informasi yang berguna atau berarti bagi
penyerang. Berbeda dengan penyerang, penerima yang dituju memiliki kunci, dan
memasukkan kunci dengan ciphertext ke dalam cipher untuk mengubah ciphertext kembali
menjadi plaintext asli.
Sebuah algoritma saja tidak cukup; plaintext yang dimasukkan ke dalam algoritma
menghasilkan ciphertext sebagai output. Algoritma terkenal dan tidak pernah dirahasiakan.
Mereka tersedia untuk dipelajari dan dianalisis oleh siapa saja. Jadi untuk apa?
menghentikan siapa pun dari sekadar mengembalikan ciphertext ke dalam
algoritme untuk menghasilkan plaintext asli? Tidak. Kerahasiaan, kerahasiaan,
terletak pada kunci, yang merupakan input kedua ke algoritma, selain teks
biasa. Selalu ada dua input untuk algoritma: plaintext dan kunci.
Ciphertext diproduksi sebagai output, namun, tanpa kunci yang diperlukan untuk
dekripsi, penyerang tidak bisa begitu saja memasukkan ciphertext kembali ke dalam
algoritma untuk menghasilkan plaintext. Kurangnya kunci inilah yang membatasi dekripsi
ciphertext yang tidak sah. Karena itu, sangat penting untuk melindungi kunci setiap saat.
Kerahasiaan sepenuhnya terletak pada kuncinya.
Untuk membuat algoritma enkripsi yang kuat, Anda harus membuangnya ke publik
dan membiarkan banyak cryptanalyst mencoba menemukan kekurangan di dalamnya.
Merahasiakannya dan melakukan semua pekerjaan itu sendiri bukanlah jalan terbaik.
Sekarang, dengan logika murni, jika satu-satunya cara untuk membuat algoritma aman
adalah membiarkan orang menyodok dan mendorongnya, itu tidak bisa dirahasiakan.
Bagaimana jika algoritma dikompromikan? Setiap lokasi di mana algoritme
diimplementasikan perlu diubah, dan itu sulit dilakukan. Lebih mudah mengganti kunci
daripada algoritme. Jika Anda menduga ada kunci yang disusupi, Anda bisa memilih kunci
yang berbeda. Bahkan, Anda bahkan dapat mengganti kunci pada interval waktu tertentu
untuk membatasi dampak kebocoran potensial. Beralih algoritma enkripsi setiap tahun, di
sisi lain, tidak praktis. Selanjutnya, jika algoritma itu akan dilindungi, itu harus ada sebagai
kode sumber di suatu tempat. Bagaimana jika lokasi itu diretas? Sekarang semua sistem
yang menerapkan algoritme dan bergantung pada kerahasiaan algoritme perlu diubah
dengan cepat. Itu tidak praktis.
60 MENIT
Algoritma enkripsi kunci simetris dapat masuk ke dalam salah satu dari dua kategori:
stream cipher atau block cipher. Stream cipher mengenkripsi dan mendekripsi satu bit pada
satu waktu, sedangkan cipher blok mengenkripsi dan mendekripsi kelompok bit (dikenal
sebagai blok) pada suatu waktu. Meskipun cipher blok lebih lambat dari cipher aliran karena
overhead tambahan, sebagian besar algoritma enkripsi kunci simetris yang digunakan saat
ini, pada kenyataannya, adalah cipher blok.
A5/1 adalah stream cipher yang digunakan oleh standar Global System for Mobile
Communications (GSM) untuk komunikasi seluler. ChaCha adalah stream cipher yang
digunakan Google pada perangkat Android dalam mode yang dikenal sebagai Adiantum.
DES dan 3DES yang sudah usang termasuk dalam kategori cipher blok. AES adalah cipher
blok yang sebenarnya sangat efisien dalam perangkat lunak.
Sandi sederhana, seperti XOR, sangat menguntungkan bagi pembuat malware karena
berbagai alasan. Pertama, ukuran instruksi yang dibutuhkan untuk cipher XOR secara
signifikan lebih kecil daripada cipher lainnya. Ini membuat cipher XOR bagus untuk digunakan
pada perangkat dengan batasan ukuran, seperti perangkat yang disematkan, dan lingkungan
dengan keterbatasan ruang, seperti mengeksploitasi shellcode. Kedua, mereka sebenarnya
lebih sulit untuk dideteksi dalam biner malware daripada cipher yang lebih canggih seperti
AES, yang meninggalkan banyak artifak dalam penggunaannya. Akhirnya, mereka tidak
memerlukan overhead yang tinggi, dan ini memungkinkan mereka untuk berjalan dengan
efisien. Pembuat malware yang menggunakan sandi sederhana, seperti XOR, tahu bahwa
biner mereka akan terdeteksi mengandung enkripsi dan bahkan mungkin dibalik dan
didekripsi oleh analis malware. Namun, musuh ini hanya ingin cara cepat untuk menggagalkan
analisis dasar untuk mengidentifikasi tindakan malware, membantu malware untuk
menghindari deteksi oleh firewall, sistem deteksi intrusi (IDS), atau sistem pencegahan intrusi
(IPS). Selain itu, sandi XOR sangat umum digunakan sebagai bagian dari algoritma kriptografi
yang lebih besar dan lebih canggih seperti AES.
Tujuan pembelajaran
Dalam kegiatan ini, Anda akan belajar menggunakan XOR cipher untuk mengenkripsi plaintext
menjadi ciphertext dan mendekripsi ciphertext menjadi plaintext. Di akhir lab ini
berolahraga, Anda akan dapat
Dalam hal ini, 01001010 akan dianggap sebagai plaintext, salah satu input ke
algoritma enkripsi. Namun, saya tidak ingin mengirimkan bitstream asli ini. Saya ingin
mengenkripsi dan mengirimkan ciphertext sebagai gantinya. Kunci yang saya buat
secara acak adalah 01100010. Sekarang saya memasukkan teks biasa dan kunci ke
dalam algoritma enkripsi. Algoritma yang saya pilih adalah cipher XOR.
Ingat logika Boolean dan tabel kebenaran Anda? Jika ada dua input, dan bit
pertama atau kedua adalah 1, output 1 dihasilkan, seperti yang ditunjukkan
padaTabel 5-1.
TMAMPU 5-1 Logis ATAU
Kriptografi umumnya menggunakan turunan dari Logical OR—Logis XOR (eksklusif
OR, huruf kedua dalam kata eksklusif adalah asal X dalam XOR). Menggunakan XOR, 1
dihasilkan sebagai output jika bit pertama atau kedua adalah 1, tetapi tidak keduanya,
seperti yang ditunjukkan padaTabel 5-2.
• Ketika dua bit input sama (0, 0 atau 1, 1), hasilnya adalah 0.
• Ketika dua bit input berbeda (0, 1 atau 1, 0), hasilnya adalah 1. Pola lain,
yang berkaitan dengan bit flips, dapat dilihat pada Tabel 5-2:
• Saat Anda melakukan XOR dengan bit 0 sebagai bit kedua, bit pertama
tidak berubah.
• Saat Anda XOR dengan 1 bit sebagai bit kedua, bit pertama membalik (0 ke 1
atau 1 sampai 0).
Pola-pola ini menghasilkan peluang besar. Cipher XOR menyajikan peluang 50/50
bit 0 berubah menjadi 0 atau 1, dan peluang 50/50 bit 1 berubah menjadi 0 atau 1.
Ketika saya menerapkan algoritma ke plaintext dan kunci, hasil yang dihasilkan
disebut teks sandi, keluaran gobbledygook campur aduk yang akan dilihat oleh MITM,
tetapi tidak dapat dipahami. MengonversiJ untuk ciphertext terlihat seperti ini:
Jika saya mengirim seseorang baik ciphertext dan kunci, mereka dapat menerapkan algoritma yang
sama untuk mendekripsi:
1a, 1b
Langkah 1 Sekarang giliran Anda untuk berlatih mendekripsi ciphertext! Bayangkan seseorang baru saja
mengirimi Anda 9 byte ini:
Orang ini memberi tahu Anda bahwa byte adalah karakter ASCII/Unicode, dienkripsi
dengan cipher XOR, menggunakan kunci byte tunggal 01101100, yang berulang untuk
setiap byte plaintext/ciphertext.
2a, 2b
Langkah 2 Sekarang Anda akan mengirim dan menerima pesan dan kunci terenkripsi XOR
dan kemudian mendekripsi pesan terenkripsi dengan kunci yang Anda terima.
A. Berpasangan dengan teman sekelas. Pilih kata yang terdiri dari tiga hingga lima
huruf dan temukan nilai ASCII/Unicode-nya. Munculkan kunci XOR byte tunggal
simetris. Enkripsi surat Anda dengan sandi XOR dan kunci yang Anda pilih.
Berikan pasangan Anda ciphertext dan kunci untuk mendekripsi.
B. Dekripsi ciphertext yang Anda terima dari mitra Anda dengan kunci yang
diterima dari mitra Anda.
Langkah 3 Untuk gambaran umum tentang seberapa terlibatnya AES, lihat dokumentasi resmi
AES di https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.197.pdf. Anda akan melihat bahwa
XOR, seperti yang disebutkan, adalah bagian dari AES.
Situs web berikut memiliki visual yang bagus dari berbagai mode operasi:
www.highgo.ca/2019/08/08/the-difference-in-five-modes-in-theaes-
encryption-algorithm/.
Catatan, seperti yang terlihat di situs web, XOR digunakan di semua mode kecuali yang pertama.