Skip to main content
“Hollywood	
  style	
  cracking”	
  pada	
  Block	
  Cipher	
  mode	
  
CBC:	
  Analisis	
  and	
  Pencegahan	
  
	
  
Rizki	
  Wicaksono	
  
ilmuHacking.com,	
  email:	
  rizki@ilmuHacking.com	
  	
  
	
  
	
  
Abstrak	
   -­‐	
   Algoritma	
   enkripsi	
   standar	
   seperti	
   AES	
   sampai	
   sekarang	
   dikenal	
  
sebagai	
   algoritma	
   enkripsi	
   yang	
   kuat	
   dan	
   sangat	
   direkomendasikan	
   sebagai	
  
algoritma	
   yang	
   aman.	
   Namun	
   apakah	
   hanya	
   dengan	
   menggunakan	
   algoritma	
  
kuat	
  seperti	
  AES	
  menjamin	
  data	
  akan	
  aman	
  ?	
  Jawabnya	
  adalah	
  tidak.	
  Algoritma	
  
yang	
   kuat	
   hanya	
   satu	
   bagian	
   kecil	
   saja	
   dari	
   sistem	
   kriptografi	
   yang	
   utuh,	
  
kekuatan	
   algoritma	
   tidak	
   akan	
   berarti	
   apa-­‐apa	
   tanpa	
   didukung	
   dengan	
  
implementasi	
  algoritma	
  yang	
  aman.	
  
	
  
Paper	
   ini	
   mencoba	
   menganalisa	
   serangan	
   praktis	
   terhadap	
   algoritma	
   enkripsi	
  
block	
  cipher	
  dalam	
  mode	
  CBC.	
  Serangan	
  ini	
  menyerang	
  semua	
  algoritma	
  block	
  
cipher	
  dalam	
  mode	
  operasi	
  CBC	
  termasuk	
  algoritma	
  standar	
  AES.	
  Tidak	
  hanya	
  
mendekripsi	
   pesan	
   rahasia,	
   dalam	
   kondisi	
   tertentu	
   serangan	
   ini	
   juga	
   bisa	
  
diaplikasikan	
  untuk	
  mengenkripsi	
  pesan	
  palsu.	
  Kemampuan	
  untuk	
  mendekripsi	
  
sekaligus	
   mengenkripsi	
   pesan	
   tanpa	
   mengetahui	
   kunci	
   membuat	
   serangan	
   ini	
  
sangat	
  berbahaya.	
  
	
  
1.	
  PENDAHULUAN	
  
	
  
Algoritma	
  enkripsi	
  block	
  cipher	
  sebenarnya	
  hanya	
  dirancang	
  untuk	
  memproses	
  
satu	
  blok	
  plaintext	
  atau	
  blok	
  ciphretext	
  saja.	
  Sebagai	
  contoh,	
  algoritma	
  enkripsi	
  
AES	
   hanya	
   dirancang	
   untuk	
   mengubah	
   plaintext	
   berukuran	
   128	
   bit	
   menjadi	
  
ciphertext	
  berukuran	
  128	
  bit	
  juga.	
  
	
  
	
  
Gambar	
  1:	
  Block	
  cipher	
  
	
  
Enkripsi	
   dan	
   dekripsi	
   dapat	
   dilakukan	
   secara	
   langsung	
   bila	
   pesan	
   berukuran	
  
tepat	
   satu	
   blok.	
   Namun	
   bila	
   ciphertext/plaintextnya	
   berukuran	
   lebih	
   dari	
   satu	
  
blok,	
   tentu	
   harus	
   ada	
   cara	
   untuk	
   memproses	
   data	
   tersebut	
   agar	
   bisa	
   diterima	
  
oleh	
   algoritma	
   block	
   cipher,	
   prosedur	
   ini	
   disebut	
   mode	
   operasi.	
   Dalam	
   mode	
  
operasi	
   diatur	
   bagaimana	
   data	
   dipecah	
   menjadi	
   blok,	
   bagaimana	
   hubungan	
  
antara	
  satu	
  blok	
  dengan	
  blok	
  lainnya,	
  blok	
  manakah	
  yang	
  harus	
  dienkrip/dekrip	
  
duluan	
  dan	
  sebagainya.	
  
	
  
1.1	
  MODE	
  OPERASI	
  CBC	
  
	
  
Dalam	
   mode	
   operasi	
   CBC	
   (cipher	
   block	
   chaining),	
   suatu	
   blok	
   dengan	
   blok	
  
berikutnya	
   saling	
   terkait.	
   Setiap	
   blok	
   plaintext	
   diXOR	
   dengan	
   ciphertext	
   hasil	
  
enkripsi	
   blok	
   plaintext	
   sebelumnya	
   baru	
   kemudian	
   hasil	
   operasi	
   XOR	
   ini	
  
dienkrip	
   untuk	
   menghasilkan	
   blok	
   ciphertext.	
   Begitu	
   pula	
   sebaliknya	
   ketika	
  
dekripsi.	
  Dekripsi	
  yang	
  dilakukan	
  terhadap	
  suatu	
  blok	
  ciphertext	
  tidak	
  langsung	
  
menghasilkan	
  blok	
  plaintext,	
  hasil	
  dekripsi	
  tersebut	
  harus	
  di-­‐XOR	
  dulu	
  dengan	
  
blok	
  ciphertext	
  sebelumnya	
  untuk	
  menghasilkan	
  blok	
  plaintext.	
  	
  
	
  
	
  
Gambar	
  2:	
  CBC	
  mode	
  
Khusus	
   untuk	
   blok	
   pertama,	
   diperlukan	
   suatu	
   data	
   yang	
   berfungsi	
   sebagai	
   C0,	
  
data	
   ini	
   disebut	
   dengan	
   IV	
   (initialization	
   vector).	
   	
   Jadi	
   formula	
   matematika	
  
enkripsi	
  dan	
  dekripsi	
  block	
  cipher	
  dalam	
  mode	
  operasi	
  CBC	
  adalah:	
  
	
  
Ci	
  =	
  Ek(Pi	
  ⊕	
  Ci-­‐1)	
  	
  
Pi	
  =	
  Dk(Ci)	
  ⊕	
  Ci-­‐1	
  	
  
C0	
  =	
  IV	
  
	
  
1.2	
  PADDING	
  
	
  
Dalam	
  block	
  cipher	
  plaintext	
  dan	
  ciphertext	
  harus	
  dipotong-­‐potong	
  dan	
  disusun	
  
dalam	
   blok-­‐blok	
   data	
   berukuran	
   sama.	
   Sebagai	
   contoh,	
   DES	
   dan	
   Blowfist	
  
menggunakan	
  blok	
  berukuran	
  64	
  bit,	
  AES	
  menggunakan	
  blok	
  berukuran	
  128	
  bit.	
  
Karena	
   data	
   harus	
   masuk	
   dalam	
   blok	
   berukuran	
   sama,	
   maka	
   dibutuhkan	
  
padding	
   byte	
   sebagai	
   pengganjal	
   untuk	
   menggenapi	
   data	
   agar	
   pas	
   dengan	
  
ukuran	
  blok.	
  
	
  
Aturan	
   mengenai	
   padding	
   untuk	
   mode	
   CBC	
   dijelaskan	
   dalam	
   standar	
   PKCS#7	
  
dan	
   PKCS#5	
   (Public	
   Key	
   Cryptographic	
   Standard).	
   Padding	
   dilakukan	
   dengan	
  
mengisi	
   byte	
   bernilai	
   N	
   bila	
   dibutuhkan	
   padding	
   sebanyak	
   N	
   byte.	
   Sebagai	
  
contoh,	
  bila	
  dibutuhkan	
  padding	
  3	
  byte,	
  maka	
  paddingnya	
  berisi	
  ’03	
  03	
  03′,	
  bila	
  
dibutuhkan	
  padding	
  5	
  byte,	
  maka	
  paddingnya	
  berisi	
  ’05	
  05	
  05	
  05	
  05′.	
  
 
Gambar	
  3	
  dan	
  4	
  menunjukkan	
  beberapa	
  contoh	
  padding	
  yang	
  valid	
  dan	
  padding	
  
yang	
  tidak	
  valid.	
  
	
  
	
  
Gambar	
  3:	
  Contoh	
  valid	
  padding	
  
	
  
	
  
Gambar	
  4:	
  Contoh	
  invalid	
  padding	
  
2.	
  PADDING	
  ORACLE	
  ATTACK	
  
	
  
Padding	
  oracle	
  attack	
  pertama	
  kali	
  dipublikasikan	
  pada	
  tahun	
  2002	
  oleh	
  Sergey	
  
Vaudenay[1].	
   Kemudian,	
   pada	
   tahun	
   2010	
   Thai	
   Duong	
   and	
   Juliano	
   Rizzo[2]	
  	
  
mempublikasikan	
   paper	
   yang	
   menjelaskan	
   padding	
   oracle	
   attack	
   terhadap	
  
banyak	
  framework	
  aplikasi	
  web	
  yang	
  populer	
  seperti	
  JavaServer	
  Faces,	
  Ruby	
  on	
  
Rails	
  dan	
  ASP.NET.	
  
	
  
Dalam	
   padding	
   oracle	
   attack,	
   yang	
   dimaksud	
   dengan	
   Oracle	
   disini	
   tidak	
   ada	
  
hubungannya	
   sama	
   sekali	
   dengan	
   SQL	
   dan	
   database	
   Oracle.	
   Oracle	
   yang	
  
dimaksud	
  adalah	
  validation	
  oracle,	
  dimana	
  client	
  bisa	
  bertanya	
  dan	
  dijawab	
  oleh	
  
oracle	
  dengan	
  jawaban	
  boolean,	
  ya	
  atau	
  tidak,	
  benar	
  atau	
  salah.	
  	
  
	
  
Apapun	
  dan	
  bagaimanapun	
  cara	
  oracle	
  merespons	
  bila	
  client	
  bisa	
  membedakan	
  
mana	
   respons	
   yang	
   berarti	
   ya,	
   dan	
   mana	
   respons	
   yang	
   berarti	
   tidak,	
   artinya	
  
server	
  itu	
  telah	
  menjadi	
  ‘the	
  oracle’.	
  
	
  
Gambar	
   5	
   menunjukkan	
   cara	
   kerja	
   padding	
   oracle	
   attack.	
   Seorang	
   attacker	
  
mengirimkan	
   2	
   blok	
   ciphertext	
   ke	
   oracle	
   kemudian	
   mengamati	
   responsnya,	
  
apakah	
  2	
  blok	
  ciphertext	
  tersebut	
  ketika	
  didekrip	
  memiliki	
  byte	
  padding	
  yang	
  
valid	
  atau	
  tidak.	
  
	
  
Blok	
  ciphertext	
  yang	
  akan	
  didekrip	
  adalah	
  blok	
  ciphertext	
  yang	
  kedua.	
  Blok	
  ini	
  
tidak	
  perah	
  berubah	
  dalam	
  setiap	
  request.	
  Blok	
  ciphertext	
  pertama	
  selalu	
  diubah	
  
setiap	
  dikirim	
  ke	
  oracle	
  untuk	
  menemukan	
  byte	
  yang	
  membuat	
  padding	
  menjadi	
  
valid.	
   Jadi	
   attacker	
   mengirimkan	
   banyak	
   request	
   berisi	
   2	
   blok	
   ciphertext	
  
tersebut	
   sampai	
   menemukan	
   blok	
   ciphertext	
   pertama	
   yang	
   mendapatkan	
  
respons	
  padding	
  valid.	
  
	
  
	
  
Gambar	
  5:	
  Padding	
  oracle	
  attack	
  
Walaupun	
  oracle	
  tidak	
  pernah	
  memberitahukan	
  hasil	
  enkripsinya,	
  informasi	
  dari	
  
oracle	
  bahwa	
  padding	
  valid	
  atau	
  invalid	
  saja	
  sudah	
  cukup	
  menjadi	
  petunjuk	
  bagi	
  
attacker	
  untuk	
  menebak	
  hasil	
  dekripsinya.	
  
	
  
2.1	
  CONTOH	
  KASUS	
  
	
  
Bagaimana	
  padding	
  oracle	
  attack	
  ini	
  bekerja	
  akan	
  saya	
  jelaskan	
  dalam	
  sebuah	
  
contoh	
   kasus.	
   Attacker	
   telah	
   berhasil	
   mendapatkan	
   2	
   blok	
   ciphertext	
   berikut:	
  
2D7850F447A90B87	
   dan	
   123B36A038A8682F.	
   Ciphertext	
   tersebut	
   bisa	
  
dikirimkan	
  ke	
  suatu	
  aplikasi	
  web	
  yang	
  bertindak	
  sebagai	
  Oracle.	
  Bila	
  ciphertext	
  
tersebut	
  ketika	
  didekrip	
   oracle	
  menghasilkan	
  padding	
  yang	
  valid,	
  maka	
  oracle	
  
akan	
   mengirimkan	
   response	
   “200	
   OK”,	
   sebaliknya	
   akan	
   mengirimkan	
   respons	
  
“500	
  Internal	
  Server	
  Error”.	
  
	
  
	
  2.2	
  MENDEKRIP	
  BYTE	
  TERAKHIR	
  
	
  
Seorang	
   attacker	
   bisa	
   memanfaatkan	
   oracle	
   untuk	
   mendekrip	
   ciphertext	
  
tersebut.	
  Dalam	
  contoh	
  ini	
  attacker	
  mencoba	
  mendekrip	
  blok	
  C2	
  terlebih	
  dahulu	
  
(mencari	
   P2).	
   Cara	
   melakukan	
   serangan	
   padding	
   oracle	
   attack	
   adalah	
   dengan	
  
mengirimkan	
  banyak	
  ciphertext	
  ke	
  oracle	
  sampai	
  mendapatkan	
  respons	
  padding	
  
valid	
  (brute	
  force).	
  
	
  
Dekripsi	
  dilakukan	
  dimulai	
  dari	
  blok	
  terakhir.	
  Dua	
  blok	
  yang	
  dikirim	
  ke	
  oracle	
  
adalah:	
  
• Blok	
   pertama	
   C1	
   adalah	
   blok	
   ciphertext	
   yang	
   dipakai	
   untuk	
   mencari	
  
padding	
  yang	
  valid.	
  Dalam	
  mendekrip	
  byte	
  terakhir,	
  blok	
  ciphertext	
  yang	
  
dikirim	
   adalah	
   00-­‐00-­‐00-­‐00-­‐00-­‐00-­‐00-­‐XX	
   dengan	
   XX	
   nanti	
   bernilai	
   dari	
  
00	
  sampai	
  FF.	
  
• Blok	
   kedua	
   C2	
   adalah	
   blok	
   ciphertext	
   yang	
   ingin	
   didekrip	
  
123B36A038A8682F	
  
	
  
Gambar	
   6	
   menunjukkan	
   proses	
   dekripsi	
   dua	
   blok	
   ciphertext	
   yang	
   dikirim	
  
attacker	
  dalam	
  mode	
  CBC.	
  Attacker	
  ingin	
  mengetahui	
  byte	
  terakhir	
  hasil	
  dekripsi	
  
C2	
  (warna	
  hijau	
  dalam	
  gambar	
  6).	
  Kondisi	
  yang	
  diinginkan	
  attacker	
  adalah	
  ketika	
  
byte	
   terakhir	
   P2	
   (warna	
   kuning	
   dalam	
   gambar	
   6)	
   bernilai	
   01.	
   	
   Karena	
   byte	
  
terakhir	
   P2	
  (kuning)	
   adalah	
   hasil	
   XOR	
   antara	
   byte	
   terakhir	
   C1	
   (biru)	
   dan	
   hasil	
  
dekrip	
  C2	
  (hijau)	
  maka	
  bisa	
  dituliskan	
  A	
  XOR	
  B	
  =	
  01.	
  	
  
	
  
	
  
Gambar	
  6:	
  Dekripsi	
  byte	
  terakhir	
  
A	
  dan	
  B	
  adalah	
  variabel	
  yang	
  tidak	
  diketahui.	
  Kita	
  butuh	
  bantuan	
  oracle	
  untuk	
  
menyelesaikan	
   persamaan	
   ini.	
   Kita	
   bisa	
   menginterogasi	
   oracle	
   menanyakan	
  
pertanyaan:	
  
• Apakah	
  A	
  XOR	
  00	
  =	
  01	
  ?	
  
• Apakah	
  A	
  XOR	
  01	
  =	
  01	
  ?	
  
• Apakah	
  A	
  XOR	
  02	
  =	
  01	
  ?	
  
• Apakah	
  A	
  XOR	
  03	
  =	
  01	
  ?	
  
• Dan	
  seterusnya	
  sampai	
  255	
  
	
  
Bila	
  oracle	
  menjawab	
  dengan	
  valid	
  padding,	
  artinya	
  attacker	
  mendapat	
  jawaban	
  
Ya,	
  sebaliknya	
  berarti	
  attacker	
  mendapat	
  jawaban	
  Tidak.	
  
	
  
Gambar	
   7	
   menunjukkan	
   bagaimana	
   cara	
   attacker	
   mengirimkan	
   ciphertext	
   ke	
  
oracle	
   dan	
   menerima	
   respons	
   dari	
   oracle	
   sampai	
   suatu	
   saat	
   dia	
   akan	
  
mendapatkan	
  jawaban	
  valid	
  padding.	
  
	
  
 
Figure	
  7:	
  Brute	
  force	
  byte	
  terakhir	
  
Ketika	
   attacker	
   mendapatkan	
   jawaban	
   valid	
   padding	
   dari	
   oracle,	
   artinya	
   dia	
  
sudah	
  mengetahui	
  byte	
  terakhir	
  C1	
  yang	
  membuat	
  byte	
  terakhir	
  P2	
  bernilai	
  01.	
  
Dalam	
   contoh	
   ini	
   setelah	
   mencoba	
   dari	
   00,	
   01,	
   02	
   dan	
   seterusnya	
   sampai	
  
akhirnya	
  diketahui	
  bahwa	
  bila	
  byte	
  terakhir	
  C1	
  bernilai	
  87,	
  maka	
  respons	
  yang	
  
didapat	
   adalah	
   valid	
   padding.	
   Karena	
   respons	
   yang	
   diterima	
   adalah	
   valid	
  
padding,	
  	
  maka	
  attacker	
  yakin	
  bahwa	
  byte	
  terakhir	
  P2	
  bernilai	
  01.	
  
	
  
	
  
Figure	
  8:	
  Byte	
  terakhir	
  ditemukan	
  
Gambar	
  8	
  menunjukkan	
  situasi	
  yang	
  terjadi	
  ketika	
  byte	
  terakhir	
  C1	
  bernilai	
  87	
  
dan	
  byte	
  terakhir	
  P2	
  bernilai	
  01.	
  Dalam	
  situasi	
  ini	
  hasil	
  dekrip	
  C2	
  (warna	
  hijau)	
  
bisa	
  diketahui	
  dengan	
  mudah	
  yaitu	
  87	
  XOR	
  01	
  =	
  86.	
  Dengan	
  teknik	
  sederhana	
  
ini,	
  dalam	
  maksimal	
  256	
  kali	
  percobaan,	
  seorang	
  attacker	
  bisa	
  mengetahui	
  hasil	
  
dekrip	
  C2.	
  
	
  
Setelah	
   mengetahui	
   hasil	
   dekrip	
   C2	
   seorang	
   attacker	
   bisa	
   mendapatkan	
   P2	
  
dengan	
  mengXOR	
  dengan	
  byte	
  terakhir	
  ciphertext	
  sebelumnya.	
  
	
  
2.3	
  MENDEKRIP	
  BYTE	
  KE-­‐7	
  
	
  
Setelah	
   berhasil	
   mendekrip	
   byte	
   terakhir,	
   attacker	
   bisa	
   melanjutkan	
   untuk	
  
mendapatkan	
   byte	
   ke-­‐7.	
   Caranya	
   mirip	
   dengan	
   sebelumnya,	
   namun	
   kali	
   ini	
  
attacker	
   harus	
   mencari	
   byte	
   ke-­‐7	
   C1	
   yang	
   membuat	
   byte	
   ke-­‐7	
   P2	
   bernilai	
   02.	
  
Attacker	
  juga	
  membuat	
  byte	
  terakhir	
  C1	
  bernilai	
  84	
  agar	
  byte	
  terakhir	
  P2	
  bernilai	
  
02.	
  
	
  
Gambar	
  7	
  menunjukkan	
  situasi	
  ketika	
  attacker	
  mencoba	
  mendekrip	
  byte	
  ke-­‐7.	
  
	
  
	
  
Figure	
  9:	
  Mendekrip	
  byte	
  ke-­‐7	
  
	
  
Gambar	
   10	
   menunjukkan	
   proses	
   ketika	
   attacker	
   melakukan	
   brute	
   force	
   untuk	
  
mencari	
   byte	
   ke-­‐7.	
   Setelah	
   mencoba	
   beberapa	
   kali	
   akhir	
   attacker	
   berhasil	
  
mendapatkan	
  respons	
  padding	
  valid	
  ketika	
  byte	
  ke-­‐7	
  bernilai	
  0A.	
  	
  
	
  
	
  
Gambar	
  10:	
  Percobaan	
  mencari	
  byte	
  ke-­‐7	
  
Setelah	
   mengetahui	
   bahwa	
   ketika	
   2	
   byte	
   terakhir	
   C1	
   bernilai	
   0A-­‐84	
  
menghasilkan	
   2	
   byte	
   terakhir	
   P2	
   02-­‐02,	
   maka	
   otomatis	
   attacker	
   juga	
   langsung	
  
bisa	
   menghitung	
   byte	
   ke-­‐7	
   hasil	
   dekrip	
   C2	
  yaitu	
   08.	
   Gambar	
   10	
   menunjukkan	
  
situasi	
  ketika	
  attacker	
  berhasil	
  mendekripsi	
  2	
  byte	
  terakhir	
  C2.	
  	
  
	
  
 
Figure	
  11:	
  Dekripsi	
  byte	
  ke-­‐7	
  
Sampai	
  tahap	
  ini	
  attacker	
  sudah	
  berhasil	
  mengetahui	
  2	
  byte	
  terakhir	
  hasil	
  dekrip	
  
C2	
  .	
  	
  
	
  
Proses	
   ini	
   bisa	
   dilanjutkan	
   terus	
   untuk	
   mencari	
   byte	
   berikutnya	
   dengan	
   cara	
  
yang	
  sama	
  dari	
  byte	
  terakhir	
  sampai	
  byte	
  pertama:	
  
• Mencari	
   byte	
   ke-­‐6	
   dilakukan	
   dengan	
   mencari	
   3	
   byte	
   terakhir	
   C1	
   yang	
  
membuat	
  3	
  byte	
  terakhir	
  P2	
  bernilai	
  03-­‐03-­‐03	
  
• Mencari	
   byte	
   ke-­‐5	
   dilakun	
   dengan	
   mencari	
   4	
   byte	
   terakhir	
   C1	
   yang	
  
membuat	
  4	
  byte	
  terakhir	
  P2	
  bernilai	
  04-­‐04-­‐04-­‐04.	
  
• Dan	
  seterusnya.	
  
	
  
3.	
  PENCEGAHAN	
  
	
  
Sebagai	
  algoritma	
  enkripsi,	
  AES	
  sampai	
  saat	
  ini	
  masih	
  dianggap	
  algoritma	
  yang	
  
aman.	
  Namun	
  ternyata	
  bila	
  tidak	
  diimplementasikan	
  dengan	
  baik	
  bisa	
  berakibat	
  
fatal.	
  Dalam	
  serangan	
  yang	
  dibahas	
  dalam	
  paper	
  ini	
  sebenarnya	
  bukan	
  algoritma	
  
enkripsinya	
   yang	
   bermasalah,	
   namun	
   implementasi	
   dalam	
   mode	
   CBC	
   yang	
  
bermasalah.	
  
	
  
Tadi	
   kita	
   sudah	
   melihat	
   bagaimana	
   mengubah	
   ciphertext	
   bisa	
   membuat	
   hasil	
  
dekripsinya	
  menjadi	
  berubah	
  juga.	
  Gambar	
  12	
  menunjukkan	
  ketika	
  byte	
  terakhir	
  
C1	
  diubah	
  dari	
  85	
  menjadi	
  87,	
  menghasilkan	
  pesan	
  yang	
  sama-­‐sama	
  valid	
  namun	
  
isinya	
  berbeda.	
  
	
  
Ketika	
  byte	
  terakhir	
  C1	
  bernilai	
  85,	
  hasil	
  dekripsinya	
  adalah	
  ‘ABCDEFGHIJKLM’,	
  
namun	
   ketika	
   byte	
   terakhir	
   C1	
   diubah	
   sedikit	
   menjadi	
   87	
   hasil	
   dekripsinya	
  
berubah	
   menjadi	
   ‘ABCDEFGHIJKLM’+03+03	
   (kini	
   03	
   dianggap	
   sebagai	
   data	
  
karena	
  paddingnya	
  adalah	
  01).	
  
	
  
 
Figure	
  12:	
  Malleability	
  
Bayangkan	
  bila	
  ada	
  attacker	
  yang	
  berperan	
  sebagai	
  man-­‐in-­‐the-­‐middle	
  mencegat	
  
suatu	
   ciphertext,	
   kemudian	
   mengubah	
   satu	
   byte	
   saja	
   dari	
   ciphertext	
   tersebut	
  
sebelum	
   meneruskan	
   ke	
   tujuan.	
   Setelah	
   tiba	
   di	
   tujuan,	
   ciphertext	
   yang	
   sudah	
  
diubah	
   tadi	
   ketika	
   didekrip	
   menghasilkan	
   pesan	
   yang	
   berbeda	
   dengan	
   yang	
  
dimaksud	
   dalam	
   pesan	
   aslinya.	
   Hal	
   ini	
   tentu	
   berbahaya	
   bila	
   isi	
   pesannya	
  
berubah	
  dari	
  “kirim	
  uang	
  1	
  juta	
  ke	
  rekening	
  123″	
  berubah	
  menjadi	
  “kirim	
  uang	
  1	
  
juta	
  ke	
  rekening	
  124″.	
  
	
  
Serangan	
   ini	
   bisa	
   terjadi	
   karena	
   server	
   melakukan	
   dekripsi	
   pada	
   semua	
  
ciphertext	
  yang	
  diterimanya	
  tanpa	
  peduli	
  apakah	
  ciphertext	
  tersebut	
  valid	
  atau	
  
tidak.	
   Bila	
   server	
   bersedia	
   mendekrip	
   semua	
   ciphertext	
   yang	
   masuk,	
   maka	
  
attacker	
   bisa	
   memanfaatkannya	
   untuk	
   mengirimkan	
   tampered	
   ciphertext	
   ke	
  
server	
  dan	
  mengamati	
  respons	
  hasil	
  dekripsinya.	
  
	
  
Serangan	
   padding	
   oracle	
   ini	
   bisa	
   dicegah	
   dengan	
   menempelkan	
   Message	
  
Authentication	
   Code	
   pada	
   ciphertext.	
   Server	
   hanya	
   boleh	
   melakukan	
   dekripsi	
  
pada	
   ciphertext	
   yang	
   authenticated,	
   artinya	
   ciphertext	
   yang	
   dijamin	
   integritas	
  
dan	
  otentisitasnya	
  dengan	
  MAC.	
  	
  
	
  
Dengan	
   adanya	
   MAC,	
   attacker	
   tidak	
   bisa	
   lagi	
   mengubah	
   ciphertext	
   dengan	
  
harapan	
  mengorek	
  informasi	
  dari	
  server	
  apakah	
  ciphertext	
  yang	
  dia	
  kirim	
  valid	
  
atau	
  tidak	
  paddingnya.	
  Server	
  boleh	
  mengirimkan	
  response	
  pada	
  client	
  apakah	
  
MAC	
   valid	
   atau	
   tidak	
   tanpa	
   ada	
   resiko	
   kebocoran	
   informasi	
   karena	
   tidak	
   ada	
  
operasi	
   dekripsi	
   yang	
   dilakukan	
   dan	
   MAC	
   tidak	
   ada	
   hubungan	
   sama	
   sekali	
  
dengan	
  plaintext.	
  
	
  
4.	
  REFERENSI	
  
	
  
[1]	
   S.	
   Vaudenay.	
   Security	
   Flaws	
   Induced	
   by	
   CBC	
   Padding	
   Applications	
   to	
   SSL,	
  
IPSEC,	
  WTLS…	
  -­‐	
  2002	
  
[2]	
  T.	
  Duong,	
  J.	
  Rizzo.	
  Practical	
  Padding	
  Oracle	
  Attacks	
  -­‐	
  2010