Padding dalam kriptografi

Padding merupakan salah satu konsep dasar dalam kriptografi. Konsep padding ini sederhana: sebuah pesan sebelum dienkrip atau dihash diberi tambahan sesuatu, bisa di awal, di tengah atau di akhir. Padding ini konsep sederhana, tapi perlu diketahui misalnya jika ingin memahami hash length extension attack.

Dalam kriptografi klasik, cryptanalysis bisa dilakukan terhadap pesan karena biasanya sebuah pesan bisa diprediksi awalannya (“Selamat siang”), atau akhirannya (“Dengan Hormat, XXX”). Dari teks parsial yang diketahui/ditebak itu bisa dilakukan berbagai analisis untuk mengetahui apa isi pesannya (known plaintext attack).

Untuk membingungkan pihak yang menguping, sebuah pesan biasanya diberi tambahan di awal, kadang di tengah dan di akhir dengan teks yang tidak masuk akal. Walau pernah juga ada insiden The world wonders di mana karena kesalahan operator radio, padding dianggap sebagai pesan, akibatnya seorang admiral pundung dan ngambek selama sejam.

Di dalam kriptografi modern padding biasanya dilakukan di akhir pesan untuk beberapa tujuan:

  • untuk hashing, karena hashing dilakukan per blok
  • untuk block cipher karena enkripsi dilakukan per blok
  • untuk RSA karena jika tidak dipadding pesan bisa dimodifikasi dan tetap valid

Ada banyak skema padding di dunia ini, lengkapnya bisa dilihat di Wikipedia. Akan saya berikan beberapa contoh yang sederhana di tulisan ini, sementara contoh yang lebih rumit bisa dibaca sendiri. Dalam banyak kasus pemahaman padding ini tidak terlalu diperlukan karena berbagai library kriptografi akan melakukan padding sesuai permintaan kita.

Padding termudah adalah zero padding. Jika pesan kita hanya 2 byte tapi ukuran blok harus 8 byte, maka sisanya diberi byte 00 sampai ukuran blok. Dalam kasus ini kita butuh 6 x 00. Cara padding ANSI X9.23 seperti Zero padding, tapi supaya penerima tahu berapa jumlah byte padding, maka digit terakhir adalah jumlah padding, misalnya blok plaintext seperti ini:

AA BB CC DD

Dan perlu dipadding sampai 8 byte, maka ditambahkan 3 byte 00 dan 1 byte 04 yang menyatakan bahwa sejumlah itu perlu diremove dari pesan

AA BB CC DD 00 00 00 04

Padding PKCS memakai byte dengan nilai padding yang diulang sebanyak padding, jadi jika butuh padding 1 byte maka gunakan byte 01, jika butuh padding 2 byte gunakan 02 02, jika butuh 3 byte gunakan 03 03 03, dst.

Dalam public key cryptography, seperti RSA yang sudah saya bahas sebelumnya diperlukan padding khusus. Jika contoh pada tulisan sebelumnya diikuti, lalu kita berusaha mengubah-ubah angka hasil enkripsi, kita bisa mendapatkan message yang valid (bisa didekrip walau kadang tidak masuk akal hasilnya). Di dalam kriptografi, kita tidak ingin ada yang bisa mengubah pesan yang kita buat.

Saat ini padding RSA yang dianggap terbaik adalah Optimal Asymmetric Encryption Padding (OAEP). Penjelasan detail eksak OAEP agak panjang, jadi silakan cek halaman wikipedia OAEP. Inti dari paddingnya adalah:

  • Pesan dipadding dengan 00 sampai n bit
  • Kita membuat bilangan random
  • Dilakukan operasi hash dan XOR yang melibatkan message dan bilangan random

Intinya adalah: jika diberikan 2 pesan yang sama yang dipadding dengan OAEP lalu dienkrip akan terlihat hasil enkripsinya berbeda (karena ada faktor bilangan random). Ketika proses dekripsi dilakukan, bisa dicek apakah paddingnya sesuai dengan algoritma kebalikannya. Ketika memakai library RSA, jangan heran jika hasil enkripsi selalu berbeda tiap kali, ini karena faktor padding random.

Tinggalkan Balasan

This site uses Akismet to reduce spam. Learn how your comment data is processed.