Budiy • Upvote 0 • Downvote 0

Alasan Algoritme Enkripsi Vernam Cipher Tidak Mungkin Dipecahkan

Kita bahas terlebih dahulu mengenai sejarah dan cara kerja algoritme enkripsi Vernam Cipher. Berdasarkan buku karangan William Stallings berjudul "Cryptography and Network Security (4th Edition)", penemu dari algoritme enkripsi Vernam Cipher yaitu seorang insinyur bernama Gilbert Vernam pada tahun 1918. Proses komputasi enkripsi Vernam Cipher dilakukan pada data biner.


Enkripsi pada umumnya tersusun dari 3 jenis data yaitu plaintext, key, dan ciphertext. Plaintext bisa dianggap sebagai sebuah pesan asli. Ciphertext bisa dianggap sebagai hasil jadi dari pesan yang telah dienkripsi. Key bisa dianggap sebagai unsur atau kunci yang mempengaruhi hasil jadi ciphertext.


Seorang pimpinan pasukan tentara bernama Joseph Mauborgne mengusulkan adanya peningkatan pada algoritme enkripsi Vernam Cipher. Mauborgne mengusulkan sebuah konsep bernama One-Time Pad yang mengatur bahwa key dibuat secara acak, sehingga tidak ada pengulangan penggunaan key. Jadi, key akan dibuang ketika sudah dipakai untuk proses enkripsi atau dekripsi. Selain itu panjang key dibuat sama dengan panjang plaintext.


kumpulan angka biner dalam enkripsi
Source: pixabay geralt

Berikut ini rumus enkripsi Vernam Cipher:

Ciphertext = Angka biner dari Plaintext dilakukan XOR dengan angka biner dari Key

Plaintext = Angka biner dari Ciphertext dilakukan XOR dengan angka biner dari Key


1. Ciphertext tidak memiliki karakteristik yang unik

Pada umumnya, ciphertext pada algoritme enkripsi memiliki karakteristik yang unik sehingga bisa dihasilkan sebuah kumpulan statistik. Vernam Cipher tidak memiliki karakteristik khusus dan ciphertext tidak memiliki hubungan statistik yang unik. Angka biner terdiri dari sekumpulan angka nol dan satu. Sekumpulin angka biner antara plaintext, key, dan ciphertext pada Vernam Cipher memiliki karakteristik yang sama. Tidak adanya perbedaan karakteristik membuat peretas keamanan kesulitan untuk menghasilkan perbedaan statistik pada setiap chipertext.


Contoh karakteristik dari algoritma enkripsi Caesar Cipher:

Ciphertext: dnx vxnd ndpx


Dari contoh ciphertext caesar cipher di atas dapat diidentifikasi bahwa ciphertext terdiri dari 3 kata yang ditandai dengan adanya spasi sebagai pemisah kata. Kata pertama terdiri dari 3 karakter, kata kedua terdiri dari 4 karakter, kata ketiga juga terdiri dari 4 karakter. Pada Vernam Cipher, setiap chipertext tidak dapat diidentifikasi karena nantinya tidak hanya karakter huruf alfabet saja yang dienkripsi. Pada Vernam CIpher, seluruh karakter lain seperti spasi, tanda titik, dan lain sebagainya juga akan dilakukan enkripsi karena juga memiliki kode biner yang berbeda.


2. Hasil ciphertext tidak unik

Pada umumnya, setiap algoritme enkripsi memiliki ciphertext yang unik. Dengan kata lain bahwa 1 ciphertext hanya bisa dihasilkan dari 1 permutasi plaintext dan key. Pada algoritme vernam cipher, ciphertext bisa dihasilkan dari banyak permutasi sehingga sulit untuk menentukan key yang sesungguhnya digunakan. Panjang plaintext dan key adalah sama sehingga bisa juga dikatakan bahwa panjang ciphertext juga sama.


Contoh karakteristik yang sama pada biner Vernam Cipher:

1 XOR 0 = 1

0 XOR 1 = 1

1 XOR 1 = 0

0 XOR 0 = 0


Jadi 1 angka biner bisa dihasilkan dari 2 permutasi. Jika menggunakan biner 8 bit maka total permutasi angka biner yaitu 256 (2 pangkat 8). Plaintext, key dan ciphertext memiliki karakteristik yang sama. Jika dimisalkan ciphertext terdiri dari 8 bit biner dapat dihasilkan dari 256 permutasi maka itu berlaku juga pada key dan plaintext.


Di bawah ini merupakan contoh source code enkripsi dan source code bruteforce dekripsi Vernam Cipher menggunakan bahasa pemrograman PHP.


Enkripsi Vernam Cipher


<?php
$plaintext="01100001";//ganti dengan biner plaintext yang diinginkan
$key="01100011";//ganti dengan biner key yang diinginkan
$ciphertext="";
for($i=0;$i<strlen($plaintext);$i++){
$temp=(int)$plaintext[$i]^(int)$key[$i];
$ciphertext.=$temp;
}
echo $ciphertext."\n";//00000010
?>

Jika kode di atas dijalankan di terminal maka akan menampilkan output yaitu "00000010" yang didapatkan dari hasil XOR antara "01100001" dan "01100011".


Bruteforce Vernam Cipher


<?php
//fungsi untuk generate seluruh permutasi biner 8 bit (2 pangkat 8) dan mengecualikan biner dari ciphertext
function get_kemungkinan_key($ciphertext){
$biner=Array("0","1");
$hasil=Array();
$panjang=count($biner);
for($a=0;$a<$panjang;$a++){
for($b=0;$b<$panjang;$b++){
for($c=0;$c<$panjang;$c++){
for($d=0;$d<$panjang;$d++){
for($e=0;$e<$panjang;$e++){
for($f=0;$f<$panjang;$f++){
for($g=0;$g<$panjang;$g++){
for($h=0;$h<$panjang;$h++){
$val=$biner[$a].$biner[$b].$biner[$c].$biner[$d].$biner[$e].$biner[$f].$biner[$g].$biner[$h];
if($val!==$ciphertext){
array_push($hasil,$val);
}
}
}
}
}
}
}
}
}
return $hasil;
}
$ciphertext="00000010";//ganti dengan biner ciphertext yang diinginkan
$key=get_kemungkinan_key("");
$plaintext=get_kemungkinan_key($ciphertext);
$hasil=Array();
$kemungkinan_key=Array();
$kemungkinan_plaintext=Array();
foreach($key as $k=>$vk){
foreach($plaintext as $p=>$vp){
$vernam="";
for($i=0;$i<strlen($ciphertext);$i++){
$temp=(int)$vk[$i]^(int)$vp[$i];
$vernam.=$temp;
}
$decimal_k=bindec($vk);
$hexa_k=dechex($decimal_k);
$asci_k=chr($decimal_k);
$decimal_p=bindec($vp);
$hexa_p=dechex($decimal_p);
$asci_p=chr($decimal_p);
if($vernam==$ciphertext){
array_push($hasil,$vernam);
if($vk!=$ciphertext){
array_push($kemungkinan_key,$vk);
}
if($vp!=$ciphertext){
array_push($kemungkinan_plaintext,$vp);
}
// echo $vk."(".$asci_k.") ^ ".$vp."(".$asci_p.") = ".$vernam."\n";
echo $vk." ^ ".$vp." = ".$vernam."\n";
}
}
}
?>

Jika kode di atas dijalankan di terminal maka akan menampilkan seluruh kemungkinan untuk menghasilkan ciphertext tersebut. Karena kemungkinan yang dihasilkan begitu banyak sesuai panjang ciphertext maka dapat mengakibatkan para peretas mengalami kesulitan untuk menentukan key mana yang dimaksud.


Dari hasil kode program di atas dapat disimpulkan bahwa 1 ciphertext dapat dihasilkan dari banyak kemungkinan. Semakin panjang plaintext maka ciphertext juga semakin panjang sehingga jumlah kemungkinan juga akan meningkat. Itulah kenapa algoritme Vernam Cipher menjadi tidak mungkin atau sangat sulit untuk dipecahkan. Sangat sulit bahkan tidak mungkin untuk bisa mengetahui key yang sebenarnya karena tidak adanya karakteristik yang unik.


Tidak ada cara perhitungan matematika atau logika yang dapat digunakan untuk memecahkan algoritme Vernam Cipher. Hanya ada 1 cara untuk memecahkan algoritme Vernam Cipher yaitu dengan mengandalkan tebakan keberuntungan. Walaupun dikatakan tidak mungkin dipecahkan tetapi di dunia ini tidak ada yang tidak mungkin.

Share thread ini ke sosial media
Anda harus sudah login untuk berkomentar di thread ini