Block cipher adalah jenis algoritma enkripsi yang mengenkripsi data dalam blok-blok berukuran tetap. Pada artikel ini, kita akan membahas algoritma kriptografi block cipher berbasis pola gambar anak tangga. Pola ini akan digunakan untuk mengacak blok data secara terstruktur sebelum proses enkripsi, memberikan tingkat keamanan tambahan.
Komponen Utama
- Plaintext: Data asli yang akan dienkripsi.
- Key: Kunci enkripsi yang digunakan untuk mengacak dan mengembalikan plaintext.
- Block Size: Ukuran blok tetap yang akan dienkripsi. Misalnya, 128-bit.
- Pola Gambar Anak Tangga: Pola yang digunakan untuk mengacak blok data sebelum proses enkripsi.
Langkah-langkah Implementasi
- Pembagian Data ke dalam Blok-blok
- Bagilah plaintext menjadi blok-blok berukuran tetap. Jika ukuran plaintext tidak sesuai dengan ukuran blok, tambahkan padding.
- Pembentukan Pola Anak Tangga
- Gunakan pola anak tangga untuk mengacak posisi byte di dalam setiap blok. Misalnya, jika ukuran blok adalah 4×4 byte, pola anak tangga akan mengacak byte dengan mengikuti pola naik turun seperti anak tangga.
- Proses Enkripsi dan Dekripsi
- Gunakan algoritma enkripsi block cipher seperti AES (Advanced Encryption Standard) setelah menerapkan pola anak tangga.
- Untuk dekripsi, gunakan pola anak tangga yang sama untuk mengembalikan posisi byte ke urutan semula setelah dekripsi block cipher.
Implementasi Algoritma
Berikut adalah contoh implementasi dalam Python yang menggunakan pola anak tangga untuk mengacak blok data sebelum dienkripsi menggunakan AES.
python
Salin kode
from Crypto.Cipher import AES from Crypto.Util.Padding import pad, unpad import numpy as np # Konstanta BLOCK_SIZE = 16 # 128-bit block size KEY = b'This is a key123' # 16-byte key for AES # Fungsi untuk menerapkan pola anak tangga pada blok def apply_staircase_pattern(block): size = int(len(block) ** 0.5) matrix = np.array(block).reshape((size, size)) staircase_pattern = [] for i in range(size): for j in range(i+1): staircase_pattern.append(matrix[i-j, j]) return bytes(staircase_pattern) # Fungsi untuk mengembalikan blok ke urutan asli dari pola anak tangga def reverse_staircase_pattern(block): size = int(len(block) ** 0.5) result = np.zeros((size, size), dtype=bytes) index = 0 for i in range(size): for j in range(i+1): result[i-j, j] = block[index] index += 1 return bytes(result.flatten()) # Fungsi enkripsi def encrypt(plaintext, key): cipher = AES.new(key, AES.MODE_ECB) padded_plaintext = pad(plaintext, BLOCK_SIZE) encrypted_blocks = b'' for i in range(0, len(padded_plaintext), BLOCK_SIZE): block = padded_plaintext[i:i+BLOCK_SIZE] staircased_block = apply_staircase_pattern(block) encrypted_block = cipher.encrypt(staircased_block) encrypted_blocks += encrypted_block return encrypted_blocks # Fungsi dekripsi def decrypt(ciphertext, key): cipher = AES.new(key, AES.MODE_ECB) decrypted_blocks = b'' for i in range(0, len(ciphertext), BLOCK_SIZE): block = ciphertext[i:i+BLOCK_SIZE] decrypted_block = cipher.decrypt(block) original_block = reverse_staircase_pattern(decrypted_block) decrypted_blocks += original_block return unpad(decrypted_blocks, BLOCK_SIZE) # Contoh penggunaan plaintext = b'This is a secret message.' ciphertext = encrypt(plaintext, KEY) print("Ciphertext:", ciphertext) decrypted_message = decrypt(ciphertext, KEY) print("Decrypted message:", decrypted_message)
Penjelasan Kode
- Pembentukan Pola Anak Tangga:
- Fungsi
apply_staircase_patternmengacak byte dalam blok berdasarkan pola anak tangga. - Fungsi
reverse_staircase_patternmengembalikan byte ke posisi semula setelah dekripsi.
- Fungsi
- Enkripsi:
- Plaintext dipadkan agar ukurannya sesuai dengan blok.
- Setiap blok diproses dengan pola anak tangga sebelum dienkripsi dengan AES.
- Dekripsi:
- Setiap blok dekripsi diproses dengan pola anak tangga terbalik untuk mengembalikan byte ke posisi asli sebelum dihapus padding.
Kesimpulan
Algoritma kriptografi block cipher berbasis pola gambar anak tangga memberikan lapisan keamanan tambahan dengan mengacak byte dalam blok sebelum proses enkripsi. Implementasi ini menggabungkan kekuatan enkripsi AES dengan keunikan pola anak tangga untuk meningkatkan keamanan data.