Pengantar
Sebelum membaca alangkah indahnya jika and berdoa menurut keyakinan anda masing-masing namun apabila anda tidak yakin lebih baik anda tidak berdoaBagaimana kita dapat melindungi transaksi dalam suatu sistem jaringan
komputer?
• Dapatkah kita melindungi pengiriman data?
• Dapatkan kita mensetup saluran yang aman untuk komunikasi?
• Dapatkan kita menentukan pengirim data?
Kebutuhan untuk melindungi kesatuan dan rahasia informasi dan
sesumber lain yang dimiliki oleh individu ataupun organisasi dapat
meliputi keamanan fisik maupun data digital.
Beberapa Ancaman dan Serangan :
● Tujuan utama dengan adanya keamanan adalah untuk membatasi akses
informasi dan sesumber hanya untuk pemakai yang memiliki hak akses.
Ancaman keamanan:
● Leakage (Kebocoran) :
pengambilan informasi oleh penerima yang tidak berhak
● Tampering :
pengubahan informasi yang tidak legal
● Vandalism (perusakan) :
gangguan operasi sistem tertentu. Si pelaku tidak mengharap keuntungan apapun.
● Serangan pada sistem terdistribusi tergantung pada pengkasesan ke
saluran komunikasi yang ada atau membuat saluran baru yang
menyamarkan (masquerade) sebagai koneksi legal
● Penyerangan Pasive, Hanya mengamati komunikasi atau data
● Penyerangan Aktif, Secara aktif memodifikasi komunikasi atau data
Pemalsuan atau pengubahan Email
TCP/IP Spoofing
Beberapa Metode Penyerangan Jess
● Eavesdropping, mendapatkan duplikasi pesan tanpa ijin
● Masquerading, Mengirim atau menerima pesanmenggunakan identitas
lain tanpa ijin mereka
● Message tampering,
● Mencegat atau menangkap pesan dan mengubah isinya sebelum
dilanjutkan ke penerima sebenarnya. “man-in-the-middle attack”
adalah bentuk message tampering dengan mencegat pesan pertama
pada pertukaran kunci enkripsi pada pembentukan suatu saluran
yang aman. Penyerang menyisipkan kunci lain yang memungkinkan
dia untuk mendekrip pesan berikutnya seelum dienkrip oleh
penerima
● Replaying, menyimpan pesan yang ditangkap untuk pemakaian
berikutnya.
● Denial of Service, membanjiri saluran atau sesumber lain dengan pesan
yang bertujuan untuk menggagalkan pengaksesan pemakai lain
Keamanan Transaksi Elektronik jess
Keamanan sangat dibutuhkan pada kebanyak transaksi
• E-commerce
• Banking
Transaksi elektronik dapat aman jika dilindungi dengan kebijakan
dan mekanisme keamanan.
Contoh : Pembeli harus dilindungi terhadap
penyingkapan kode credit number selama pengiriman dan juga terhadap
penjual yang tidak bersedia mengirim barang setelah menerima
pembayaran. Vendor harus mendapatkan pembayaran sebelum barang
dikirim, sehingga perlu dapat memvalidasi calon pembeli sebelum memberi
mereka akses
Kebijakan dan Mekanisme Keamanan jess
● Pemisahan antara kebijakan dan mekanisme keamanan akan membantu
memisahkan kebutuhan implementasinya
• Kebijakan menspesifikasikan kebutuhan
• Mekanisme menerapkan spesifikasi kebijakan tersebut
● Berdasar spesifikasi dari OSI, sebuah layanan (kebijakan) keamanan
meliputi :
• Access Control, Perlindungan terhadap pemakaian tak legak
• Authentication, Menyediakan jaminan identitas seseorang
• Confidentiality (kerahasiaan), Perlindungan terhadap pengungkapan identitas tak legak
• Integrity, Melindungi dari pengubahan data yang tak legak
• Non-repudiation (penyangkalan), Melindungi terhadap penolakankomunikasi yang sudah pernah dilakukan
● Untuk mencapai layanan keamanan tersebut, mekanisme-mekanisme yang dapat diterapkan :
• Enkripsi
Digunakan untuk menyediakan kerahasiaan, dapat menyediakan authentication dan perlindungan integritas
• Digital Signature
Digunakan untuk menyediakan authentication, perlindungan integritas, dan non-repudiation
• Algoritma Checksum/Hash
Digunakan untuk menyediakan perlindungan integritas, dan dapat menyediakan authentication. Satu atau lebih mekanisme dikombinasikan untuk menyediakan security service
Enkripsi
● Enkripsi adalah proses pengkodean pesan untuk menyembunyikan isi
● Algoritma enkripsi modern menggunakan kunci (key).
• Pesan M (plaintext) di enkodekan dengan fungsi E dan sebuah kunci K
untuk menjadi ciphertext.
E(K,M) = {M}
K
• Pesan didekripsi dengan menggunakan fungsi D dan kunci L
D(K,E(K,M)) = M
● Kunci kriptografi adalah parameter yang digunakan dalam algoritma enkripsi dimana hasil enkripsi tidak dapat didekripsi jika tanpa kunci yang sesuai
● Berikut beberapa mode Cipher :
• Cipher Block Chaining : Untuk ukuran block data yang tetap, yang populer adalah 64 bit
• Pesan dibagi ke dalam block, dan block terakhir di padding ke ukuran standard yang digunakan, dan setiap block dienkrip secara ndependent
• Block pertama tersedia untuk transmisi setelah enkripsi selesai
Stream Chiper menghasilkan keystream dari setiap enkripsi kunci dengan initialization vector (IV)
●Ada dua tipe algoritma enkripsi :
● Symmetric (secret-key)
● Pengirim dan penerima harus berbagi kunci dan tidak diberikan kepada orang lain.
● One-way function.
● One-way function.
Contoh : DES (Data Encryption Standard), Triple DES
● AES (Advanced Encryption Standard) yang disponsori oleh
NIST (National Institute of Standards and Technology)
menetapkan beberapa algoritma enkripsi AES :
• Rijndael (Joan Daemen dan Vincent Rijmen)
• Serpent (Ross Anderson, Eli Biham, Lars Knudsen)
• Twofish (dari Bruce Schneier)
• RC6 (dari RSA Laboratories)
• MARS (dari IBM)
● Algoritma AES harus memenuhi :
• symmetric block chiper
• panjang kunci 128, 192 dan 256
• dimungkinkan implementasi pada software maupun hardware
• Algoritma harus umum atau berlisensi tanpa persiaratan yang diskriminatif
Berikut contoh program untuk melakukan enkripsi dan dekripsi DES :import java.security.*;
import javax.crypto.*;
public class EnDeDES {
public static void main(String[] args) {
Cipher ecipher;
Cipher dcipher;
String teks = args[0];
try {
//menghasilkan kunci temporary
SecretKey key =
KeyGenerator.getInstance("DES").generateKey();
ecipher = Cipher.getInstance("DES");
ecipher.init(Cipher.ENCRYPT_MODE, key);
dcipher = Cipher.getInstance("DES");
dcipher.init(Cipher.DECRYPT_MODE, key);
// Enkripsi dimulai
byte[] enc = ecipher.doFinal(teks.getBytes());
String teksEnc =
new sun.misc.BASE64Encoder().encode(enc);
System.out.println("Hasil enkripsi DES '" +
teks + "' adalah " + teksEnc);
// Dekripsi dimulai
byte[] dec = dcipher.doFinal(enc);
System.out.println("Hasil dekripsi DES '" +\
teksEnc + "' adalah " + new String(dec));
} catch (Exception e) {
}
}
}
Hasil eksekusi adalah sebagai berikut :
$ java EnDeDES "Ini percobaan saja dari Budsus"
Hasil enkripsi DES 'Ini percobaan saja dari Budsus'
adalah y4OhBZX/T923EdH07f1x9kf65l6jE38Q0dq9fabwucE=
Hasil dekripsi DES
'y4OhBZX/T923EdH07f1x9kf65l6jE38Q0dq9fabwucE=' adalah
Ini percobaan saja dari Budsus
● Asymmetric (public-key)
● Pengirim pesan menggunakan public key (kunci yang
dipublikasikan ke penerima) untuk mengenkrip pesan
● Penerima menggunakan private key yang cocok (miliknya)
untuk mendekrip pesan.
● Pola public key dimunculkan pertama oleh Diffie Hellman (1976)
● Dasar public key : trap-door function adalah one-way function
yang dapat dibalikkan dengan hanya adanya secret key
● contoh : RSA
Berikut adalah contoh program yang dapat menghasilkan kunci
Public/Private Key dengan menggunakan algoritma RSA
import javax.net.*;
import javax.net.ssl.*;
import java.security.*;
public class getPublicPrivateKey {
public static void main(String[] args) {
try {
//1024-bit Digital Signature Algorithm (DSA)
KeyPairGenerator keyGen =
KeyPairGenerator.getInstance("DSA");
keyGen.initialize(1024);
KeyPair keypair = keyGen.genKeyPair();
PrivateKey privateKey = keypair.getPrivate();
PublicKey publicKey = keypair.getPublic();
System.out.print("Public Key : " + publicKey);
System.out.print("Private Key : " + privateKey);
// Generate a 576-bit DH key pair
keyGen = KeyPairGenerator.getInstance("DH");
keyGen.initialize(576);
keypair = keyGen.genKeyPair();
privateKey = keypair.getPrivate();
publicKey = keypair.getPublic();
System.out.print("Public Key : " + publicKey);
System.out.print("Private Key : " + publicKey);
// Generate a 1024-bit RSA key pair
keyGen = KeyPairGenerator.getInstance("RSA");
keyGen.initialize(1024);
keypair = keyGen.genKeyPair();
privateKey = keypair.getPrivate();
publicKey = keypair.getPublic();
System.out.print("Public Key : " + publicKey);
System.out.print("Private Key : " + privateKey);
}catch (java.security.NoSuchAlgorithmException e) {}
}
}
Hasilnya? Silahkan Anda coba sendiri Jess.
Ada kemungkinan juga, bahwa kedua algoritma tersebut digabungkan untuk
membentuk suatu mekanisme kemanan,
Digital Signature
● Didasarkan pada suatu ikatan tanda (yang tak dapat dirubah) ke suatu
pesan atau dokumen yang hanya diketahui oleh si penandatangan.
● Hal ini dapat dicapai dengan cara mengenkrip sebuah pesan terkompresi
(digest) dengan menggunakan private key
● Digest memiliki ukuran yang tetap yang dihasilkan dari sebuah secure
digest function.
● Contoh ilustrasinya :
● A ingin menandatangani dokumen M, sehingga penerima dapat yakin bahwa M adalah berasal dari A.
● A menghitung digest dokumen dengan fungsi Digest(M).
● A mengenkrip digest dengan private keynya, dan ditambahkan ke M, sehingga menghasilkan {Digest(M)}KApriv.
● B menerima dokumen tersebut dan mengambil M dan menghitung Digest(M).
● B mendekrip dengan {Digest(M)}KApriv menggunakan KApub dan membandingkan isinya dengan hasil perhitungan Digest(M). Jika sama, tandatangan adalah valid.
MAC (Message Authentication Code)
● Menghasilkan random password/key untuk suatu hash
● Hanya pemegang password yang dapat menghasilkan MAC
Beberapa fungsi Digest :
● MD5 (Message Digest 5) oleh Rivest (1991)
• Dapat ditemukan di RFCs 1319-1321
• Panjang digest : 128 bit
● SHA (Secure Hash Algorithm)
• Panjang digest : 160 bit
• Didasarkan pada algoritma MD4
Berikut contoh sederhana dengan JSSE untuk digital signature tersebut :
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class ContohDigest {
public static void main(String args[])
throws NoSuchAlgorithmException {
MessageDigest sha =
MessageDigest.getInstance("SHA");
sha.update("Sistem Terdistribusi".getBytes());
byte[] shaHash = sha.digest();
System.out.println(new String(shaHash));
MessageDigest md5 =
MessageDigest.getInstance("MD5");
md5.update("Sistem Terdistribusi".getBytes());
byte[] md5Hash = md5.digest();
System.out.println(new String(md5Hash));