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.

    Kalkulator AES 128-bit

  • 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.

    Kalkulator Media Steganografi LSB

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:

  1. Enkripsi AES: Teks asli dienkripsi menggunakan AES-128. Hasilnya (ciphertext) diubah menjadi format Base64 agar dapat diperlakukan sebagai teks biasa.
  2. Penyembunyian Steganografi: Ciphertext dalam format Base64 tersebut diubah menjadi biner, lalu disembunyikan ke dalam piksel-piksel gambar sampul menggunakan metode LSB.
  3. 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:

  1. Ekstraksi Steganografi: Kode membaca LSB dari gambar untuk mengekstrak data tersembunyi. Data ini bukanlah pesan asli, melainkan ciphertext dalam format Base64.
  2. Dekripsi AES: Ciphertext Base64 diubah kembali menjadi data biner. Kemudian, proses dekripsi AES dijalankan menggunakan kunci yang benar untuk memulihkan pesan asli.
  3. 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.