Analisis Kode Implementasi Kombinasi AES & Steganografi
Dokumen ini memberikan penjelasan teknis mengenai alur kerja gabungan (cryptosteganography) yang menjadi inti dari penelitian ini. Proses ini mendemonstrasikan bagaimana Kriptografi AES-128 dan Steganografi LSB bekerja sama untuk menciptakan sistem keamanan berlapis, di mana sebuah pesan tidak hanya dikunci (dienkripsi), tetapi juga disembunyikan keberadaannya.
Konsep Dasar: Cryptosteganography
Cryptosteganography adalah sebuah pendekatan keamanan ganda yang menggabungkan dua disiplin ilmu:
-
Kriptografi
Berfokus pada kerahasiaan isi pesan. Dengan mengenkripsi data, kita memastikan bahwa meskipun data tersebut jatuh ke tangan yang salah, isinya tidak dapat dibaca tanpa kunci yang benar.
-
Steganografi
Berfokus pada kerahasiaan keberadaan pesan. Dengan menyembunyikan data di dalam media lain, kita membuat pihak ketiga bahkan tidak menyadari bahwa ada komunikasi rahasia yang sedang terjadi.
Kombinasi ini menciptakan benteng pertahanan yang sangat kuat. Jika steganografi gagal dan data tersembunyi ditemukan, lapisan kriptografi masih melindungi isinya.
Elemen HTML Terkait dan Fungsinya
Berikut adalah peran setiap elemen HTML di dalam tab demo "AES + Steganografi".
| Elemen (ID) | Fungsi / Deskripsi |
|---|---|
| Kolom Enkripsi + Penyembunyian | |
| #combined-secret-text | Area untuk memasukkan pesan asli (plaintext). |
| #combined-key | Kolom untuk memasukkan kunci AES (16 karakter). |
| #combined-cover-image | Tombol untuk mengunggah gambar sampul (media). |
| #combined-encode-btn | Pemicu untuk menjalankan proses gabungan (enkripsi lalu penyembunyian). |
| Kolom Ekstraksi + Dekripsi | |
| #combined-image-to-decode | Tombol untuk mengunggah stego-image. |
| #combined-key-decrypt | Kolom untuk memasukkan kembali kunci AES yang benar. |
| #combined-decode-btn | Pemicu untuk menjalankan proses gabungan (ekstraksi lalu dekripsi). |
Analisis Kode: Enkripsi + Penyembunyian
Proses ini adalah alur dua tahap yang dijalankan saat tombol #combined-encode-btn
diklik.
document.getElementById('combined-encode-btn').addEventListener('click', async () => {
// Mengambil semua input dari pengguna
const text = document.getElementById('combined-secret-text').value;
const keyStr = document.getElementById('combined-key').value;
const file = document.getElementById('combined-cover-image').files[0];
// ... (Validasi input) ...
try {
// --- TAHAP 1: ENKRIPSI AES ---
const key = await getAesKey(keyStr);
const iv = crypto.getRandomValues(new Uint8Array(16));
const ciphertext = await crypto.subtle.encrypt(
{ name: 'AES-CBC', iv },
key,
new TextEncoder().encode(text)
);
// Menggabungkan IV dan ciphertext, lalu mengubahnya menjadi Base64
const buffer = new Uint8Array(iv.length + ciphertext.byteLength);
buffer.set(iv, 0);
buffer.set(new Uint8Array(ciphertext), iv.length);
const encryptedText = btoa(String.fromCharCode.apply(null, buffer));
// --- TAHAP 2: PENYEMBUNYIAN (STEGANOGRAFI) ---
const reader = new FileReader();
reader.onload = (e) => {
const img = new Image();
img.onload = () => {
// Proses penyembunyian sama seperti demo steganografi sebelumnya
// Namun, yang disembunyikan adalah 'encryptedText' (hasil AES)
// ... (kode canvas dan LSB seperti di dokumen steganografi) ...
};
img.src = e.target.result;
};
reader.readAsDataURL(file);
} catch (e) { /* ... handle error ... */ }
});
Alur Proses Encoding:
- Enkripsi AES: Teks asli dienkripsi menggunakan AES-128. Hasilnya (ciphertext) diubah menjadi format Base64 agar dapat diperlakukan sebagai teks biasa.
- Penyembunyian Steganografi: Ciphertext dalam format Base64 tersebut diubah menjadi biner, lalu disembunyikan ke dalam piksel-piksel gambar sampul menggunakan metode LSB.
- Hasil Akhir: Sebuah gambar baru yang secara visual identik dengan aslinya, namun kini mengandung pesan yang sudah terenkripsi.
Analisis Kode: Ekstraksi + Dekripsi
Ini adalah proses kebalikannya, yang dijalankan saat tombol #combined-decode-btn
diklik.
document.getElementById('combined-decode-btn').addEventListener('click', () => {
// ... (Mengambil file dan kunci dari input) ...
const reader = new FileReader();
reader.onload = (e) => {
const img = new Image();
img.onload = async () => {
try {
// --- TAHAP 1: EKSTRAKSI (STEGANOGRAFI) ---
// ... (Kode untuk membaca LSB dari canvas, sama seperti demo steganografi) ...
// Hasil ekstraksi adalah ciphertext dalam format Base64
const encryptedText = binaryToStr(binaryMessage.substring(0, sentinelIndex));
// --- TAHAP 2: DEKRIPSI AES ---
const key = await getAesKey(keyStr);
const decodedData = atob(encryptedText).split('').map(c => c.charCodeAt(0));
// Pisahkan IV dan ciphertext, lalu dekripsi
const iv = new Uint8Array(decodedData.slice(0, 16));
const ciphertext = new Uint8Array(decodedData.slice(16));
const decrypted = await crypto.subtle.decrypt(
{ name: 'AES-CBC', iv },
key,
ciphertext
);
// Tampilkan pesan asli
// ... (tampilkan hasil ke UI) ...
} catch (e) { /* ... handle error: kunci atau gambar salah ... */ }
};
img.src = e.target.result;
};
reader.readAsDataURL(file);
});
Alur Proses Decoding:
- Ekstraksi Steganografi: Kode membaca LSB dari gambar untuk mengekstrak data tersembunyi. Data ini bukanlah pesan asli, melainkan ciphertext dalam format Base64.
- Dekripsi AES: Ciphertext Base64 diubah kembali menjadi data biner. Kemudian, proses dekripsi AES dijalankan menggunakan kunci yang benar untuk memulihkan pesan asli.
- Hasil Akhir: Jika kunci yang dimasukkan benar, pesan asli akan berhasil dipulihkan dan ditampilkan.
Kesimpulan
Demo kombinasi ini adalah visualisasi paling akurat dari konsep inti penelitian ini. Ia membuktikan secara praktis bahwa:
- Pesan dapat dienkripsi untuk melindungi kerahasiaan isinya.
- Hasil enkripsi tersebut dapat disembunyikan dalam media lain untuk menyamarkan kerahasiaan keberadaannya.
- Diperlukan dua langkah verifikasi (ekstraksi steganografi dan dekripsi AES dengan kunci yang benar) untuk bisa membaca kembali pesan aslinya.
Ini adalah demonstrasi keamanan berlapis yang sangat kuat dan efektif.