cryptography : Simple a-symetric algorithm
Secara umum adalah ilmu dan seni untuk menjaga kerahasiaan berita ilmu yang mempelajari teknik matematika yang berhubungan dengan aspek keamanan informasi seperti : Kerahasiaan data, keabsahan data, integritas data, autentikasi. Untuk pengertian tersebut teman-teman bisa melihat detailnya di wikipedia…:P karena aku ambil bahannya dari situ.
=== II. Algoritma Sandi
Nah untuk melakukan tujuan kriptografi tersebut digunakanlah algoritma sandi,
semakin kuat algoritma sandi yang digunakan maka kriptanalis/code
breaker(pemecah sandi) tersebut akan semakin sulit. Dasar matematis yang
mendasari proses enkripsi dan dekripsi adalah relasi antara dua himpunan yaitu
yang berisi elemen teks terang /plaintext dan yang berisi elemen teks
sandi/ciphertext. Enkripsi dan dekripsi merupakan fungsi transformasi antara
himpunan-himpunan tersebut. Apabila elemen-elemen teks terang dinotasikan
dengan P, elemen-elemen teks sandi dinotasikan dengan C, sedang untuk proses
enkripsi dinotasikan dengan E, dekripsi dengan notasi D.
Enkripsi : E(P) = C
Dekripsi : D(C) = P atau D(E(P)) = P
untuk mempertegas : Enkripsi adalah proses menyandi/merubah plain teks menjadi
cipher teks Dekripsi adalah proses membuka sandi/merubah cipher teks menjadi
plain teks
Berdasarkan kunci yang digunakan untuk enkripsi dan dekripsi, maka algoritma
sandi dibagi menjadi dua macam :
1. simetrik ==> kunci untuk enkripsi dan dekripsi adalah sama, contoh :
stream cipher, blok cipher
2. a-simetrik ==> kunci untuk enkripsi dan dekripsi adalah berbeda,
contoh : RSA, ELGAMAL, dll
======= Fokus a-simetrik —|
Tadi sudah aku jelaskan sedikit tentang algoritma sandi, sekarang aku mau
fokuskan ke dalam algoritma sandi a-simetrik. Salah satu ilmu matematik yang
mendukung algoritma a-simetrik adalah number theory (teori bilangan), number
theory ini sangat menarik, aku menghabiskan waktu 2 semester untuk
mempelajarinya. Mari kita mulai sedikit number theory
#konsep inverse modular
a*b mod N = 1
jika a adalah suatu bilangan integer dikalikan dengan bilangan integer lainnya
misalnya b, kemudian dimodularkan dengan integer N menghasilkan nilai 1, maka b
adalah inverse dari a atau a adalah inverse dari b.
BINGUNG…???? :P
aku berikan contoh :
a=2; b=6; N=11;
maka (2*6) mod 11
= 12 mod 11
= 1
artinya 6 adalah adalah inverse dari 2, atau 2 adalah inverse dari 6
======= Implementasi —|
Dari konsep inverse modular tadi, aku membuat algoritma sandi a-simetrik
sederhana bernama kardel-a. Konsep algoritmanya seperti berikut :
-pilih dua buah bilangan a dan b, sedemikian hingga a dan b memenuhi konsep
inverse modular
-bilangan a adalah kunci enkripsi
-bilangan b adalah kunci dekripsi
rumus algoritma kardel-a==> enkripsi : (P)*a mod N = C
dekripsi : (C)*b mod N = P
contoh implementasi :
a=3; #sebagai kunci enkripsi
b=171; #sebagai kunci dekripsi
N=256;
———– Proses Enkripsi ——————————
Plain teks : “xdiamond1″ < == tanpa tanda kutip proses : – ubah setiap huruf menjadi bilangan desimal ascii x = 120 d = 100 i = 105 a = 97 m = 109 o = 111 n = 110 d = 100 1 = 49 – enkripsi ==> (120)*3 mod 256 = 104
(100)*3 mod 256 = 44
. . .
. . .
. . .
(49)*3 mod 256 = 147
- ubah bilangan hasil enkripsi menjadi karakter
Cipher teks nya adalah : “h,;#GMJ,ô” < ==tanpa tanda kutip..
———— Proses Enkripsi Selesai ———————
———— Proses Dekripsi —————————–
cipher teks : “h,;#GMJ,ô” <==tanpa tanda kutip proses : – ubah setiap huruf menjadi bilangan desimal ascii h = 104 , = 44 ; = 59 # = 35 G = 71 M = 77 J = 74 , = 44 ô = 147 – dekripsi ==> (104)*171 mod 256 = 120
(44)*171 mod 256 = 100
. . .
. . .
. . .
(147)*171 mod 256 = 49
- ubah bilangan hasil dekripsi menjadi karakter
Plain teksnya adalah : xdiamond1
———– Proses Dekripsi Selesai ———————-
======= Source Code Program —|
aku juga membuat programnya menggunakan perl, mungkin rekan-rekan mau
mencobanya….:P
———— enkripsi.pl ———————————
#!/usr/bin/perl -w
#mode enkripsi
#by xdiamond1
print “\nPlain teks : “;
chomp($plain=);
print “Kunci Enkrip : “;
chomp($ke=);
@word=split(“”,$plain);
$jml=scalar(@word);
&enkrip;
sub enkrip
{
for($i=0; $i< $jml; $i++)
{
$konv1[$i]=ord($word[$i]);
$pro[$i]=($konv1[$i]*$ke)%256;
$konv2[$i]=chr($pro[$i]);
}
$gab=join(“”,@konv2);
print “Cipher teks : $gab\n”;
}
————- enkripsi.pl ———————————-
————- dekripsi.pl ———————————-
#!/usr/bin/perl -w
#mode dekripsi
#by xdiamond1
print “\nCipher teks : “;
chomp($plain=);
print “Kunci Dekrip : “;
chomp($kd=);
@word=split(“”,$plain);
$jml=scalar(@word);
&dekrip;
sub dekrip
{
for($i=0; $i< $jml; $i++)
{
$konv1[$i]=ord($word[$i]);
$pro[$i]=($konv1[$i]*$kd)%256;
$konv2[$i]=chr($pro[$i]);
}
$gab=join(“”,@konv2);
print “Plain teks : $gab\n”;
}
———— dekripsi.pl ———————————–
======= Penutup —|
ho..ho..ho…dah selesai, aku rasa tulisanku kali ini dah cukup
semoga rekan-rekan tertarik dengan kriptografi dan mau mengembangkannya,
sekali lagi aku mohon maaf klo pengetahuan yang aku share ini sangat jauh dari sempurna..
======= Greetz —|
[1] Allah, tuhan penciptaku
[2] Ayah&ibu, lambang, lian, daffa
[3] my love Susi
[3] y3dips, dan echo staff lainnya
[4] freak ‘abe’ einstein
[5] readyforuse20
[6] ethan0ir
[7] sigit2003
[8] dan penghuni LKTI lainnya
======= Referensi —|
[1] http://id.wikipedia.org/wiki/Kriptografi
[2] cryptanalysis number theory
[3] kreasiku sendiri