Importance of Cryptography
Tujuan utama kriptografi adalah untuk memastikan komunikasi yang aman di hadapan pihak yang bermusuhan. Istilah aman mencakup kerahasiaan dan integritas data yang dikomunikasikan. Kriptografi dapat didefinisikan sebagai praktik dan studi tentang teknik untuk komunikasi yang aman dan perlindungan data di mana kita mengharapkan kehadiran pihak yang bermusuhan dan pihak ketiga. Dengan kata lain, pihak yang bermusuhan ini seharusnya tidak dapat mengungkapkan atau mengubah isi pesan.
Kriptografi digunakan untuk melindungi kerahasiaan, integritas, dan keaslian. Di era ini, Anda menggunakan kriptografi setiap hari, dan Anda hampir pasti membaca ini melalui koneksi terenkripsi. Pertimbangkan skenario berikut di mana Anda akan menggunakan kriptografi:
- Saat Anda masuk ke sebuah website, kredensial Anda dienkripsi dan dikirim ke server sehingga tidak ada yang dapat mengambilnya dengan mengintip koneksi Anda.
- Saat Anda terhubung melalui SSH, klien SSH Anda dan server membuat terowongan terenkripsi sehingga tidak ada yang dapat menguping sesi Anda.
- Saat Anda melakukan perbankan online, browser Anda memeriksa sertifikat server jarak jauh untuk memastikan bahwa Anda berkomunikasi dengan server bank Anda dan bukan server penyerang. Saat Anda mengunduh file, bagaimana Anda memeriksa apakah file tersebut telah diunduh dengan benar? Kriptografi menyediakan solusi melalui fungsi hash untuk memastikan bahwa file Anda identik dengan file aslinya.
Seperti yang Anda lihat, Anda jarang berinteraksi langsung dengan kriptografi, tetapi solusi dan implikasinya ada di mana-mana di dunia digital. Pertimbangkan kasus di mana sebuah perusahaan ingin menangani informasi kartu kredit dan memproses transaksi terkait. Saat menangani kartu kredit, perusahaan harus mengikuti dan menerapkan Standar Keamanan Data Industri Kartu Pembayaran (PCI DSS). Dalam hal ini, PCI DSS memastikan tingkat keamanan minimum untuk menyimpan, memproses, dan mengirimkan data yang terkait dengan kredit kartu. Jika Anda memeriksa PCI DSS untuk Organisasi Besar (buka di tab baru), Anda akan mengetahui bahwa data harus dienkripsi baik saat disimpan (saat diam) maupun saat dikirimkan (saat bergerak).
Sama seperti penanganan detail kartu pembayaran yang memerlukan kepatuhan terhadap PCI DSS, penanganan catatan medis memerlukan kepatuhan terhadap standar masing-masing. Tidak seperti kartu kredit, standar untuk penanganan catatan medis bervariasi dari satu negara ke negara lain. Contoh undang-undang dan peraturan yang perlu dipertimbangkan saat menangani rekam medis meliputi HIPAA (Health Insurance Portability and Accountability Act) dan HITECH (Health Information Technology for Economic and Clinical Health) di AS, GDPR (General Data Protection Regulation) di Uni Eropa, dan DPA (Data Protection Act) di Inggris. Meskipun daftar ini tidak lengkap, hal ini memberikan gambaran tentang persyaratan hukum yang harus dipertimbangkan oleh penyedia layanan kesehatan tergantung pada negara mereka. Undang-undang dan peraturan ini menunjukkan bahwa kriptografi merupakan kebutuhan yang harus ada, namun biasanya tersembunyi dari akses langsung pengguna.
PLaintext to Ciphertext
Mari kita mulai dengan sebuah ilustrasi sebelum memperkenalkan istilah-istilah kunci. Kita mulai dengan teks biasa yang ingin kita enkripsi. Teks biasa adalah data yang dapat dibaca; bisa berupa apa saja, mulai dari sapaan sederhana “halo”, foto kucing, informasi kartu kredit, atau catatan kesehatan medis. Dari perspektif kriptografi, semua ini adalah pesan “teks biasa” yang menunggu untuk dienkripsi. Teks biasa dilewatkan melalui fungsi enkripsi bersama dengan kunci yang tepat; fungsi enkripsi mengembalikan teks sandi. Fungsi enkripsi adalah bagian dari sandi; sandi adalah algoritma untuk mengubah teks biasa menjadi teks sandi dan sebaliknya.

Untuk memulihkan teks asli, kita harus meneruskan teks terenkripsi bersama dengan kunci yang tepat melalui fungsi dekripsi, yang akan memberi kita teks asli. Hal ini ditunjukkan pada ilustrasi di bawah ini.

Kita baru saja memperkenalkan beberapa istilah baru, dan kita perlu mempelajarinya untuk memahami teks apa pun tentang kriptografi. Istilah-istilah tersebut tercantum di bawah ini:
- Plaintext adalah pesan atau data asli yang dapat dibaca sebelum dienkripsi. Ini bisa berupa dokumen, gambar, file multimedia, atau data biner lainnya.
- Ciphertext adalah versi pesan yang diacak dan tidak dapat dibaca setelah enkripsi. Idealnya, kita tidak dapat memperoleh informasi apa pun tentang plaintext asli kecuali perkiraan ukurannya.
- Cipher adalah algoritma atau metode untuk mengubah plaintext menjadi ciphertext dan sebaliknya. Cipher biasanya dikembangkan oleh seorang matematikawan.
- Key adalah rangkaian bit yang digunakan cipher untuk mengenkripsi atau mendekripsi data. Secara umum, cipher yang digunakan adalah pengetahuan umum; namun, key harus tetap dirahasiakan kecuali jika itu adalah kunci publik dalam enkripsi asimetris. Kita akan membahas enkripsi asimetris dalam tugas selanjutnya.
- Encryption adalah proses mengubah plaintext menjadi ciphertext menggunakan cipher dan key. Tidak seperti key, pilihan cipher diungkapkan.
- Decryption adalah proses kebalikan dari enkripsi, yaitu mengubah teks sandi kembali menjadi teks biasa menggunakan sandi dan kunci. Meskipun sandi tersebut akan menjadi pengetahuan umum, memulihkan teks biasa tanpa mengetahui kuncinya seharusnya tidak mungkin (tidak layak).
Historical Ciphers
Sejarah kriptografi panjang dan berawal dari Mesir kuno pada tahun 1900 SM. Namun, salah satu sandi historis paling sederhana adalah Sandi Caesar dari abad pertama SM. Idenya sederhana: geser setiap huruf dengan angka tertentu untuk mengenkripsi pesan.
Pertimbangkan contoh berikut:
- Plaintext: TRYHACKME
- Key: 3 (Asumsikan pergeseran ke kanan sebanyak 3.)
- Cipher: Sandi Caesar
Kita dapat dengan mudah mengetahui bahwa T menjadi W, R menjadi U, Y menjadi B, dan seterusnya. Seperti yang Anda perhatikan, begitu kita mencapai Z, kita mulai dari awal lagi, seperti yang ditunjukkan pada gambar di bawah ini. Akibatnya, kita mendapatkan teks sandi WUBKDFNPH.

Untuk mendekripsi, kita membutuhkan informasi berikut:
- Ciphertext: WUBKDFNPH
- Key: 3
- Cipher: Sandi Caesar

Untuk enkripsi, kita menggeser ke kanan sebanyak tiga; untuk dekripsi, kita menggeser ke kiri sebanyak tiga dan memulihkan teks asli, seperti yang diilustrasikan pada gambar di atas. Namun, jika seseorang memberi Anda teks sandi dan memberi tahu Anda bahwa itu dienkripsi menggunakan Sandi Caesar, memulihkan teks asli akan menjadi tugas yang mudah karena hanya ada 25 kemungkinan kunci. Alfabet Inggris terdiri dari 26 huruf, dan pergeseran sebanyak 26 akan mempertahankan huruf tersebut; oleh karena itu, ada 25 kunci yang valid untuk enkripsi dengan Sandi Caesar. Gambar di bawah menunjukkan bagaimana dekripsi akan berhasil dengan mencoba semua kemungkinan kunci; dalam hal ini, kita memulihkan pesan asli dengan Kunci = 5. Akibatnya, menurut standar saat ini, di mana sandi tersebut diketahui publik, Sandi Caesar dianggap tidak aman.

Anda akan menemukan lebih banyak sandi bersejarah di film dan buku kriptografi. Contohnya meliputi:
- Sandi Vigenère dari abad ke-16
- Mesin Enigma dari Perang Dunia II
- Sandi one-time pad dari Perang Dingin
Anda dapat bereksperimen dengan pergeseran sandi Caesar menggunakan alat interaktif di situs web Cryptii. Alat ini memungkinkan Anda untuk mengubah rotasi dan langsung melihat bagaimana teks berubah.
Type of Encryption
Dua kategori utama enkripsi adalah simetris dan asimetris.
Enkripsi Simetris
Enkripsi simetris, juga dikenal sebagai kriptografi simetris, menggunakan kunci yang sama untuk mengenkripsi dan mendekripsi data, seperti yang ditunjukkan pada gambar di bawah ini. Menjaga kerahasiaan kunci adalah suatu keharusan; ini juga disebut kriptografi kunci pribadi. Lebih lanjut, mengkomunikasikan kunci kepada pihak yang dituju dapat menjadi tantangan karena membutuhkan saluran komunikasi yang aman. Menjaga kerahasiaan kunci dapat menjadi tantangan yang signifikan, terutama jika ada banyak penerima. Masalah ini menjadi lebih serius jika ada musuh yang kuat; pertimbangkan ancaman spionase industri, misalnya.

Pertimbangkan kasus sederhana di mana Anda membuat dokumen yang dilindungi kata sandi untuk dibagikan dengan kolega Anda. Anda dapat dengan mudah mengirimkan dokumen terenkripsi tersebut melalui email kepada kolega Anda, tetapi kemungkinan besar, Anda tidak dapat mengirimkan kata sandinya melalui email. Alasannya adalah siapa pun yang memiliki akses ke kotak surat mereka akan mengakses dokumen yang dilindungi kata sandi dan kata sandinya. Oleh karena itu, Anda perlu memikirkan cara lain, yaitu saluran, untuk berbagi kata sandi. Kecuali Anda memikirkan saluran yang aman dan mudah diakses, salah satu solusinya adalah bertemu langsung dan mengkomunikasikan kata sandi tersebut kepada mereka.
Contoh enkripsi simetris adalah DES (Data Encryption Standard), 3DES (Triple DES), dan AES (Advanced Encryption Standard).
- DES diadopsi sebagai standar pada tahun 1977 dan menggunakan kunci 56-bit. Dengan kemajuan daya komputasi, pada tahun 1999, kunci DES berhasil dipecah dalam waktu kurang dari 24 jam, yang memotivasi peralihan ke 3DES.
- 3DES adalah DES yang diterapkan tiga kali; Oleh karena itu, ukuran kuncinya adalah 168 bit, meskipun keamanan efektifnya adalah 112 bit. 3DES lebih merupakan solusi ad-hoc ketika DES tidak lagi dianggap aman. 3DES dihentikan penggunaannya pada tahun 2019 dan harus digantikan oleh AES; namun, mungkin masih ditemukan di beberapa sistem lama.
- AES diadopsi sebagai standar pada tahun 2001. Ukuran kuncinya dapat berupa 128, 192, atau 256 bit.
Terdapat banyak lagi algoritma enkripsi simetris yang digunakan dalam berbagai aplikasi; namun, algoritma tersebut belum diadopsi sebagai standar.
Enkripsi Asimetris
Tidak seperti enkripsi simetris, yang menggunakan kunci yang sama untuk enkripsi dan dekripsi, enkripsi asimetris menggunakan sepasang kunci, satu untuk mengenkripsi dan yang lainnya untuk mendekripsi, seperti yang ditunjukkan pada ilustrasi di bawah ini. Untuk melindungi kerahasiaan, enkripsi asimetris atau kriptografi asimetris mengenkripsi data menggunakan kunci publik; oleh karena itu, ia juga disebut kriptografi kunci publik.

Contohnya adalah RSA, Diffie-Hellman, dan kriptografi Kurva Elips (ECC). Dua kunci yang terlibat dalam proses ini disebut sebagai kunci publik dan kunci privat. Data yang dienkripsi dengan kunci publik dapat didekripsi dengan kunci privat. Kunci privat Anda harus dirahasiakan, karena itulah namanya.
Enkripsi asimetris cenderung lebih lambat, dan banyak algoritma enkripsi asimetris menggunakan kunci yang lebih besar daripada enkripsi simetris. Misalnya, RSA menggunakan kunci 2048-bit, 3072-bit, dan 4096-bit; 2048-bit adalah ukuran kunci minimum yang direkomendasikan. Diffie-Hellman juga memiliki ukuran kunci minimum yang direkomendasikan sebesar 2048 bit tetapi menggunakan kunci 3072-bit dan 4096-bit untuk keamanan yang lebih baik. Di sisi lain, ECC dapat mencapai keamanan yang setara dengan kunci yang lebih pendek. Misalnya, dengan kunci 256-bit, ECC memberikan tingkat keamanan yang sebanding dengan kunci RSA 3072-bit.
Enkripsi asimetris didasarkan pada sekelompok masalah matematika tertentu yang mudah dihitung dalam satu arah tetapi sangat sulit untuk dibalik. Dalam konteks ini, sangat sulit berarti secara praktis tidak mungkin. Misalnya, kita dapat mengandalkan masalah matematika yang akan membutuhkan waktu sangat lama, misalnya, jutaan tahun, untuk diselesaikan menggunakan teknologi saat ini.
Kita akan membahas berbagai sandi enkripsi asimetris di ruangan berikutnya. Untuk saat ini, hal penting yang perlu diperhatikan adalah bahwa enkripsi asimetris memberi Anda kunci publik yang Anda bagikan dengan semua orang dan kunci pribadi yang Anda jaga kerahasiaannya.
Ringkasan Istilah Baru
Alice dan Bob adalah karakter fiktif yang umum digunakan dalam contoh kriptografi untuk mewakili dua pihak yang mencoba berkomunikasi secara aman. Enkripsi simetris adalah metode di mana kunci yang sama digunakan untuk enkripsi dan dekripsi. Akibatnya, kunci ini harus tetap aman dan tidak pernah diungkapkan kepada siapa pun kecuali pihak yang dituju. Enkripsi asimetris adalah metode yang menggunakan dua kunci berbeda: kunci publik untuk enkripsi dan kunci pribadi untuk dekripsi.
Basic Math
Blok bangunan kriptografi modern terletak pada matematika. Untuk mendemonstrasikan beberapa algoritma dasar, kita akan membahas dua operasi matematika yang digunakan dalam berbagai algoritma:
- Operasi XOR
- Operasi Modulo
XOR Operation
XOR, singkatan dari “exclusive OR”, adalah operasi logika dalam aritmatika biner yang memainkan peran penting dalam berbagai aplikasi komputasi dan kriptografi. Dalam biner, XOR membandingkan dua bit dan mengembalikan 1 jika bit berbeda dan 0 jika sama, seperti yang ditunjukkan pada tabel kebenaran di bawah ini. Operasi ini sering direpresentasikan dengan simbol ⊕ atau ^.
| A | B | A ⊕ B |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
Jika ini pertama kalinya Anda bekerja dengan tabel kebenaran, tabel ini menunjukkan semua kemungkinan hasil. Tabel kebenaran XOR di atas menyatakan keempat kasus tersebut: 0 ⊕ 0 = 0, 0 ⊕ 1 = 1, 1 ⊕ 0 = 1, dan 1 ⊕ 1 = 0.
Mari kita pertimbangkan contoh di mana kita ingin menerapkan XOR pada bilangan biner 1010 dan 1100. Dalam kasus ini, kita melakukan operasi bit demi bit: 1 ⊕ 1 = 0, 0 ⊕ 1 = 1, 1 ⊕ 0 = 1, dan 0 ⊕ 0 = 0, menghasilkan 0110.
Anda mungkin bertanya-tanya bagaimana XOR dapat berperan dalam kriptografi. XOR memiliki beberapa sifat menarik yang membuatnya berguna dalam kriptografi dan deteksi kesalahan. Salah satu sifat kuncinya adalah bahwa menerapkan XOR pada suatu nilai dengan dirinya sendiri menghasilkan 0, dan menerapkan XOR pada nilai apa pun dengan 0 tidak mengubahnya. Ini berarti A ⊕ A = 0, dan A ⊕ 0 = A untuk nilai biner A apa pun. Selain itu, XOR bersifat komutatif, yaitu A ⊕ B = B ⊕ A. Dan bersifat asosiatif, yaitu (A ⊕ B) ⊕ C = A ⊕ (B ⊕ C).
Mari kita lihat bagaimana kita dapat memanfaatkan hal di atas dalam kriptografi. Kita akan mendemonstrasikan bagaimana XOR dapat digunakan sebagai algoritma enkripsi simetris dasar. Pertimbangkan nilai biner P dan K, di mana P adalah plaintext, dan K adalah kunci rahasia. Teks sandi adalah C = P ⊕ K.
Sekarang, jika kita mengetahui C dan K, kita dapat memulihkan P. Kita mulai dengan C ⊕ K = (P ⊕ K) ⊕ K. Tetapi kita tahu bahwa (P ⊕ K) ⊕ K = P ⊕ (K ⊕ K) karena XOR bersifat asosiatif. Lebih lanjut, kita tahu bahwa K ⊕ K = 0; akibatnya, (P ⊕ K) ⊕ K = P ⊕ (K ⊕ K) = P ⊕ 0 = P. Dengan kata lain, XOR berfungsi sebagai algoritma enkripsi simetris sederhana. Dalam praktiknya, ini lebih rumit karena kita membutuhkan kunci rahasia sepanjang teks biasa.
Modulo Operation
Operasi matematika lain yang sering kita temui dalam kriptografi adalah operator modulo, yang umumnya ditulis sebagai % atau sebagai mod. Operator modulo, X%Y, adalah sisa pembagian X oleh Y. Dalam perhitungan sehari-hari, kita lebih fokus pada hasil pembagian daripada sisanya. Sisa pembagian memainkan peran penting dalam kriptografi.
Anda perlu bekerja dengan angka besar saat menyelesaikan beberapa latihan kriptografi. Jika kalkulator Anda gagal, kami sarankan menggunakan bahasa pemrograman seperti Python. Python memiliki tipe data int bawaan yang dapat menangani bilangan bulat dengan ukuran sembarang dan akan secara otomatis beralih ke tipe yang lebih besar sesuai kebutuhan. Banyak bahasa pemrograman lain memiliki pustaka khusus untuk bilangan bulat besar. Jika Anda lebih suka melakukan perhitungan matematika secara online, pertimbangkan WolframAlpha (buka di tab baru).
Mari kita pertimbangkan beberapa contoh.
- 25%5 = 0 karena 25 dibagi 5 adalah 5, dengan sisa 0, yaitu, 25 = 5 × 5 + 0
- 23%6 = 5 karena 23 dibagi 6 adalah 3, dengan sisa 5, yaitu, 23 = 3 × 6 + 5
- 23%7 = 2 karena 23 dibagi 7 adalah 3 dengan sisa 2, yaitu, 23 = 3 × 7 + 2
Hal penting yang perlu diingat tentang modulo adalah bahwa operasi ini tidak dapat dibalik. Jika kita diberikan persamaan x%5 = 4, nilai x yang tak terbatas akan memenuhi persamaan ini.
Operasi modulo selalu menghasilkan nilai non-negatif yang lebih kecil dari pembaginya. Ini berarti bahwa untuk setiap bilangan bulat a dan bilangan bulat positif n, hasil dari a%n akan selalu berada dalam rentang 0 hingga n − 1.
Ref: [1]