際際滷

際際滷Share a Scribd company logo
Manajemen Keamanan Komputer
Enkripsi Data
oleh :
Ana Tolirenisa A1.1300017
Mirna Nurlitasari A1.1300003
Alvia Octavia S. A1.1300004
SEKOLAH MANAJEMEN INFORMATIKA DAN KOMPUTER
(STMIK SUMEDANG)
JL. Anggkrek Situ No.19
2014-2015
2
1. Program Aplikasi menjelaskan enkripsi RSA
import java.math.BigInteger;
import java.util.Random;
import java.io.*;
public class RSA {
private BigInteger p;
private BigInteger q;
private BigInteger N;
private BigInteger phi;
private BigInteger e;
private BigInteger d;
private int bitlength = 1024;
private int blocksize = 256; //blocksize in byte
private Random r;
public RSA() {
r = new Random();
p = BigInteger.probablePrime(bitlength, r);
q = BigInteger.probablePrime(bitlength, r);
N = p.multiply(q);
phi = p.subtract(BigInteger.ONE).multiply(q.subtract(BigInteger.ONE));
e = BigInteger.probablePrime(bitlength/2, r);
while (phi.gcd(e).compareTo(BigInteger.ONE) > 0 && e.compareTo(phi) < 0 )
{
e.add(BigInteger.ONE);
}
d = e.modInverse(phi);
}
public RSA(BigInteger e, BigInteger d, BigInteger N) {
this.e = e;
this.d = d;
this.N = N;
}
public static void main (String[] args) throws IOException
{
RSA rsa = new RSA();
DataInputStream in=new DataInputStream(System.in);
3
String teststring ;
System.out.println("Enter the plain text:");
teststring=in.readLine();
System.out.println("Encrypting String: " + teststring);
System.out.println("String in Bytes: " + bytesToString(teststring.getBytes()));
// encrypt
byte[] encrypted = rsa.encrypt(teststring.getBytes());
System.out.println("Encrypted String in Bytes: " + bytesToString(encrypted));
// decrypt
byte[] decrypted = rsa.decrypt(encrypted);
System.out.println("Decrypted String in Bytes: " + bytesToString(decrypted));
System.out.println("Decrypted String: " + new String(decrypted));
}
private static String bytesToString(byte[] encrypted) {
String test = "";
for (byte b : encrypted) {
test += Byte.toString(b);
}
return test;
}
public byte[] encrypt(byte[] message) {
return (new BigInteger(message)).modPow(e, N).toByteArray();
}
public byte[] decrypt(byte[] message) {
return (new BigInteger(message)).modPow(d, N).toByteArray();
}
}
4
2. Program code enkripsi cipher Caesar dan Vigenere Cipher
A. Cipher Caesar
/*
* CaesarCipher.java
* Encrypts/Decrypts text using the Caesar Cipher method
* Made by Shofiul Arif
*/
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class CaesarCipher extends JFrame implements ActionListener {
private static JLabel msgLabel = new JLabel("Message: ");
private static JLabel keyLabel = new JLabel("Key: ");
private static JLabel actionLabel = new JLabel("Action: ");
private static JLabel resultLabel = new JLabel("Result: ");
private static JTextField msgTextField = new JTextField(20);
private static JTextField resultTextField = new JTextField(20);
private static JSpinner keySpinner = new JSpinner( new SpinnerNumberModel(3,
1, 25, 1) );
private static JRadioButton encryptRadio = new JRadioButton("Encrypt");
private static JRadioButton decryptRadio = new JRadioButton("Decrypt");
private static JButton actionButton = new JButton("Encrypt Message");
private static JPanel panel = new JPanel();
private static ButtonGroup group = new ButtonGroup();
public static void main(String[] args) {
new CaesarCipher();
}
public CaesarCipher() {
this.setSize(310, 192);
this.setTitle("Caesar Cipher");
5
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setResizable(false);
panel.setLayout(new GridBagLayout());
addComponent(panel, msgLabel, 0, 0, 1, 1, GridBagConstraints.LINE_START);
addComponent(panel, msgTextField, 1, 0, 2, 1,
GridBagConstraints.LINE_START);
addComponent(panel, keyLabel, 0, 1, 1, 1, GridBagConstraints.LINE_START);
addComponent(panel, keySpinner, 1, 1, 1, 1, GridBagConstraints.LINE_START);
addComponent(panel, actionLabel, 0, 2, 1, 1,
GridBagConstraints.LINE_START);
group.add(encryptRadio);
group.add(decryptRadio);
addComponent(panel, encryptRadio, 1, 2, 1, 1,
GridBagConstraints.LINE_START);
addComponent(panel, decryptRadio, 2, 2, 1, 1,
GridBagConstraints.LINE_START);
encryptRadio.setSelected(true);
encryptRadio.addActionListener(this);
decryptRadio.addActionListener(this);
addComponent(panel, resultLabel, 0, 3, 1, 1, GridBagConstraints.LINE_START);
addComponent(panel, resultTextField, 1, 3, 2, 1,
GridBagConstraints.LINE_START);
resultTextField.setEditable(false);
addComponent(panel, actionButton, 1, 4, 1, 1, GridBagConstraints.CENTER);
actionButton.addActionListener(this);
this.add(panel);
this.setVisible(true);
}
private void addComponent(JPanel p, JComponent c, int x, int y, int width, int
height, int align) {
GridBagConstraints gc = new GridBagConstraints();
gc.gridx = x;
gc.gridy = y;
gc.gridwidth = width;
gc.gridheight = height;
6
gc.weightx = 100.0;
gc.weighty = 100.0;
gc.insets = new Insets(5, 5, 5, 5);
gc.anchor = align;
gc.fill = GridBagConstraints.NONE;
p.add(c, gc);
}
private void encryptMessage(String msg, int k) {
String result = "";
resultTextField.setText("");
for (int i = 0; i < msg.length(); i++)
result += encryptChar(msg.charAt(i), k);
resultTextField.setText(result);
}
private char encryptChar(char c, int k) {
if (Character.isLetter(c))
return (char) ('A' + (c - 'A' + k) % 26);
else
return c;
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == encryptRadio)
actionButton.setText("Encrypt Message");
if (e.getSource() == decryptRadio)
actionButton.setText("Decrypt Message");
if (e.getSource() == actionButton) {
String str = msgTextField.getText();
int k = (Integer) keySpinner.getValue();
int key = 0;
String message = "";
if (str.equals("")) {
JOptionPane.showMessageDialog(null, "Please enter a message!", "Error!",
JOptionPane.ERROR_MESSAGE);
msgTextField.requestFocus();
return;
}
message = str.toUpperCase();
7
if (encryptRadio.isSelected())
key = k;
else
key = 26 - k;
encryptMessage(message, key);
}
}
}
B. Vigener Cipher
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package vigenere;
/**
*
* @author Guest
*/
8
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
new vig().setVisible(true);
}
public String indraadiputra (String plain, String key) {
int m = key.length();
plain = plain.toUpperCase().trim();
key = key.toUpperCase();
byte[] bytePlainText = plain.getBytes();
byte[] byteCipherText = new byte[plain.length()];
byte[] byteKey = key.getBytes();
for (int i=0; i < m; i++) byteKey[i] -= 64;
for (int i=0; i < plain.length(); i++) {
bytePlainText[i] -= 65;
// abaikan selain alfabet
if (bytePlainText[i]>-1 && bytePlainText[i]< 26) {
byteCipherText[i] = (byte)((bytePlainText[i] + byteKey[i % m]-1) % 26);
byteCipherText[i] += 65;
}
else byteCipherText[i] = (byte)(bytePlainText[i] + 65);
}
return new String (byteCipherText);
}
public String indraadi (String sandi, String kunci) {
int m = kunci.length();
sandi = sandi.toUpperCase().trim();
kunci = kunci.toUpperCase();
byte[] bytesandiText = sandi.getBytes();
byte[] byteterangText = new byte[sandi.length()];
byte[] bytekunci = kunci.getBytes();
for (int i=0; i < m; i++) bytekunci[i] -= 64;
for (int i=0; i < sandi.length(); i++) {
9
bytesandiText[i] -= 65;
// abaikan selain alfabet
if (bytesandiText[i]<-1 && bytesandiText[i]< 26)
{
byteterangText[i] = (byte)((bytesandiText[i] - bytekunci[i % m]+1) % 26);
byteterangText[i] += 65;
if (byteterangText[i]&<65)
{
byteterangText[i] += 26;
}
}
else byteterangText[i] = (byte)(bytesandiText[i] + 65 );
}
return new String (byteterangText); } }
3. Enkripsi
A. Pengertian Enkripsi
Enkripsi adalah suatu metode yang digunakan untuk mengkodekan data
sedemikian rupa sehingga keamanan informasinya terjaga dan tidak dapat dibaca
tanpa di dekripsi (kebalikan dari proses enkripsi) dahulu. Encryption berasal dari
bahasa yunani kryptos yang artinya tersembunyi atau rahasia.
Dikarenakan enkripsi telah digunakan untuk mengamankan komunikasi di
berbagai negara, hanya organisasi-organisasi tertentu dan individu yang memiliki
kepentingan yang sangat mendesak akan kerahasiaan yang menggunakan enkripsi.
Di pertengahan tahun 1970-an, enkripsi kuat dimanfaatkan untuk pengamanan
oleh sekretariat agen pemerintah Amerika Serikat pada domain publik, dan saat ini
enkripsi telah digunakan pada sistem secara luas, seperti Internet e-commerce,
jaringan Telepon bergerak dan ATM pada bank.
Enkripsi dapat digunakan untuk tujuan keamanan, tetapi teknik lain masih
diperlukan untuk membuat komunikasi yang aman, terutama untuk memastikan
integritas dan autentikasi dari sebuah pesan. Contohnya, Message Authentication
Code (MAC) atau digital signature. Penggunaan yang lain yaitu untuk melindungi
dari analisis jaringan komputer.
B. Manfaat enkripsi
Beberapa manfaat yang bisa didapatkan dari enkripsi ini adalah :
 Kerahasiaan suatu informasi terjamin
 Menyediakan authentication dan perlindungan integritas pada algoritma
checksum/hash
 Menanggulangi penyadapan telepon dan email
 Untuk digital signature. Digital signature adalah menambahkan suatu baris
statemen pada suatu elektronik copy dan mengenkripsi statemen tersebut
dengan kunci yang kita miliki dan hanya pihak yang memiliki kunci
dekripsinya saja yang bisa membukanya.
10
 Untuk digital cash
C. Kerugian Enkripsi
 Penyandian rencana teroris
 Penyembunyian record criminal oleh seorang penjahat
 Pesan tidak bisa dibaca bila penerima pesan lupa atau kehilangan kunci
(decryptor).
D. Macam-macam Enkripsi pada pemrograman WEB
a. Metode Enkripsi MD2
 Message-Digest algortihm 2 (MD2) adalah fungsi hash cryptographic
yang dikembangkan oleh Ronald Rivest pada tahun 1989'
 Algoritma dioptimalkan untuk komputer 8-bit. MD2 yang ditetapkan
dalam RFC 1319.
 Meskipun algoritma lainnya telah diusulkan sejak dulu, seperti MD4,
MD5 dan SHA, bahkan sampai dengan 2004 [update] MD2 tetap
digunakan dalam infrastruktur kunci publik sebagai bagian dari
sertifikat yang dihasilkan dengan MD2 dan RSA.
b. Metode Enkripsi MD4
 Message-Digest algortihm 4(seri ke-4) yang dirancang oleh Profesor
Ronald Rivest dari MIT pada tahun 1990. Panjangnya adalah 128 bit.
 MD4 juga digunakan untuk menghitung NT-hash ringkasan password
pada Microsoft Windows NT, XP dan Vista.
c. Metode Enkripsi MD5
 MD5 adalah salah satu dari serangkaian algortima message digest yang
didesain oleh Profesor Ronald Rivest dari MIT (Rivest, 1994).
 Saat kerja analitik menunjukkan bahwa pendahulu MD5 yaitu MD4
mulai tidak aman, MD5 kemudian didesain pada tahun 1991 sebagai
pengganti dari MD4 (kelemahan MD4 ditemukan oleh Hans
Dobbertin).
 Dalam kriptografi, MD5 (Message-Digest algortihm 5) ialah fungsi
hash kriptografik yang digunakan secara luas dengan hash value 128-
bit.
 Pada standart Internet (RFC 1321), MD5 telah dimanfaatkan secara
bermacam-macam pada aplikasi keamanan, dan MD5 juga umum
digunakan untuk melakukan pengujian integritas sebuah file.
d. Metode Enkripsi SHA
 SHA adalah serangkaian fungsi cryptographic hash yang dirancang
oleh National Security Agency (NSA) dan diterbitkan oleh NIST
sebagai US Federal Information Processing Standard.
 SHA adalah Secure Hash Algoritma. Jenis-jenis SHA yaitu SHA-0,
SHA-1, dan SHA-2.
 Untuk SHA-2 menggunakan algoritma yang identik dengan ringkasan
ukuran variabel yang terkenal sebagai SHA-224, SHA-256, SHA-384,
dan SHA-512.
11
e. Metode Enkripsi RC4
 RC4 merupakan salah satu jenis stream cipher, yaitu memproses unit
atau input data pada satu saat. Unit atau data pada umumnya sebuah
byte atau bahkan kadang kadang bit (byte dalam hal RC4).
 Dengan cara ini enkripsi atau dekripsi dapat dilaksanakan pada
panjang yang variabel.
 RC4 adalah penyandian stream cipher yang dibuat oleh Ron Riverst
pada tahun 1987 untuk pengamanan RSA.
 Algoritmanya didasarkan pada permutasi acak.
f. Metode Enkripsi Base64
 Base64 adalah sistem untuk mewakili data mentah byte sebagai
karakter ASCII.
 Base64 menyediakan 6-bit encoding 8-bit ASCII karakter.
 Base64 merupakan format yang dicetak menggunakan karakter,
memungkinkan binari data yang akan dikirim dalam bentuk dan email,
dan akan disimpan di database atau file.
g. Metode Enkripsi PGP
 Pengertian PGP
PGP adalah suatu metode penyandian informasi yang bersifat rahasia
sehingga jangan sampai diketahui oleh orang yang tidak berhak.
Informasi ini bisa berupa e-mail yang sifatnya rahasia, nomor kode
kartu kredit, atau pengiriman dokumen rahasia perusahaan melalui
internet. PGP menggunakan metode kriptografi yang disebut public
key encryption; yaitu suatu metode kriptografi yang sangat
sophisticate.
 Prinsip Kerja PGP
 PGP, seperti yang telah dijelaskan
sebelumnya, menggunakan teknik yang disebut public-key
encryption dengan dua kode. Kode-kode ini berhubungan
secara intrinsik, namun tidak mungkin untuk memecahkan satu
dan yang lainnya.
 Bila suatu ketika kita membuat suatu kunci, maka secara
otomatis akan dihasilkan sepasang kunci yaitu public key and
secret key. Kita dapat memberikan public key ke
manapun tujuan yang kita inginkan, melalui
telephone, internet, keyserver, dsb. Secret key yang disimpan
pada mesin kita dan menggunakan messager decipher akan
dikirimkan ke kita. Jadi orang yang akan menggunakan public
key kita (yang hanya dapat didekripsi oleh oleh secret key
kita), mengirimkan messages kepada kita , dan kita akan
menggunakan secret key untuk membacanya.
12
 Kenapa menggunakan dua kunci ?. Karena
dengan conventional crypto, di saat terjadi transfer informasi
kunci, suatu secure channel diperlukan. Dan jika kita memiliki
suatu secure channel, mengapa kita menggunakan
crypto? Namun dengan public-key system, tidak akan menjadi
masalah siapa yang melihat kunci milik kita, karena kunci yang
dilihat orang lain adalah yang digunakan hanya untuk enkripsi
dan hanya kita sebagai pemilik yang mengetahui secret key;
yaitu key yang berhubungan secara fisik dengan komputer
kita yang dapat melakukan proses dekripsi dengan public key
yang ada dan kemudian kita masukan lagi passphrase. Jadi
seseorang mungkin dapat mencuri passphrase yang kita
ketikkan, namun ia dapat membaca hanya jika ia dapat
mengakses komputer kita
 Enkripsi untuk File-File Biner
Untuk mereka yang terbiasa bekerja dengan file-file biner, pada usenet
mengetahui istilah uuencode. Uuenconde adalah suatu program, yang
terutama untuk UNIX, namun sekarang berkembang sehingga dapat
mengubah file-file biner seperti .GIF or .AU menjadi ASCII text yang
sesuai dengan format pengiriman usenet. Feature ini juga dimiliki
oleh PGP. File config.txt(mungkin disebut pgp.ini atau .pgprc ;
tergantung protokol local) memiliki suatu option untuk berapa banyak
baris file ASCII yang dapat dimuat. Jika jumlah ini tercapai, PGP akan
memecah-mecah file armored .asc menjadi .as1, .as2, .as3, ... dan
semuanya harus digabungkan satu sama lain secara bersama-sama dan
menjalankan PGP dalam suatu file yang besar. Untuk mengenkripsi
suatu file biner, gunakan command berikut:
 pgp -a picture.gif
 option TextMode diset ke ON:
 pgp -a picture.gif +textmode=off
h. metode enkripsi DES
 Pengertian DES
DES merupakan algoritma enkripsi yang dikembangkan oleh NIST
(National Institute of Standards and Technology) sebagai standar
pengolahan informasi Federal AS. Secara umum, Data Encryption
Standard (DES) terbagi menjadi tiga kelompok, yaitu pemrosesan
kunci, enkripsi data 64 bit dan deskripsi data 64 bit, dimana satu
kelompok saling berinteraksi satu dengan yang lainnya.
Data dienkripsi dalam blok-blok 64 bit menggunakan kunci 56 bit,
DES mentransformasikan input 64 bit dalam beberapa tahap enkripsi
ke dalam output 64 bit. Dengan demikian, DES termasuk lama block
cipher dengan tahapan pemakaian kunci yang sama untuk
deskripsinya.
 Sejarah DES
DES, atau juga dikenal sebagai Data Encryption Algorithm (DEA)
oleh ANSI dan DEA-1 oleh ISO, merupakan algoritma kriptografi
13
simetris yang paling umum digunakan saat ini. Sejarahnya DES
dimulai dari permintaan
pemerintah Amerika Serikat untuk memasukkan proposal enskripsi.
DES memiliki sejarah dari Lucifer1, enkripsi yang dikembangan di
IBM kala itu. Horst Feistel merupakan salah satu periset yang mula-
mulA mengembangkan DES ketika bekerja di IBM Watson Laboratory
di Yorktown Heights, New York. DES baru secara resmi digunakan
oleh pemerintah Amerika Serikat (diadopsi oleh National Bureau of
Standards)
di tahun 1977. Ia dikenal sebagai Federal Information Processing
Standard 46 (FIPS PUB46).
 Aplikasi yang menggunakan DES antara lain:
 enkripsi dari password di sistem UNIX
 berbagai aplikasi di bidang perbankan
 Memecahkan DES
DES merupakan block chiper yang beroperasi dengan menggunakan
blok berukuran 64-bit dan kunci berukuran 56-bit. Brute force attack
dengan mencoba segala kombinasi membutuhkan 256 kombinasi atau
sekitar 7x 1017 atau 70 juta milyar kombinasi. DES dengan
penggunaan yang biasa (cookbook mode) dengan panjang kunci 56 bit
saat ini sudah dapat dianggap tidak aman karena sudah berhasil
dipecahkan dengan metoda coba-coba (brute force attack). Ada
berbagai group yang mencoba memecahkan DES dengan berbagai
cara. Salah satu group yang bernama distributed.net menggunakan
teknologi Internet untuk memecahkan problem ini menjadi sub-
problem yang kecil (dalam ukuran blok). Pengguna dapat menjalankan
sebuah program yang khusus dikembangkan oleh tim ini untuk
mengambil beberapa blok, via Internet, kemudian memecahkannya di
komputer pribadinya. Program yang disediakan meliputi berbagai
operating system seperti Windows, DOS, berbagai variasi Unix,
Macintosh. Blok yang sudah diproses dikembalikan
ke distributed.net via Internet. Dengan cara ini puluhan ribu orang,
termasuk penulis, membantu memecahkan DES. Mekanisme ini dapat
memecahkan DES dalam waktu 30 hari. Sebuah group lain yang
disebut Electronic Frontier Foundation (EFF) membuat sebuah
komputer yang dilengkapi dengan Integrated Circuit chip DES cracker.
Dengan mesin seharga US$50.000 ini mereka dapat memecahkan DES
56-bit dalam waktu rata-rata empat (4) sampai lima (5) hari. DES
cracker yang mereka kembangkan dapat melakukan eksplorasi
keseluruhan dari 56-bit keyspace dalam waktu sembilan (9) hari.
Dikarenakan 56-bit memiliki 216 (atau 65536) keyspace dibandingkan
DES dengan 40-bit, maka untuk memecahkan DES 40-bit hanya
dibutuhkan waktu sekitar 12 detik1. Dikarenakan hukum average,
waktu rata-rata untuk memecahkan DES 40-bit adalah 6 detik.
14
Perlu diingat bahwa group seperti EFF merupakan group kecil dengan
budget yang terbatas.
 Memecakan DES
DES merupakan block chiper yang beroperasi dengan menggunakan
blok berukuran 64-bit dan kunci berukuran 56-bit. Brute force attack
dengan mencoba segala kombinasi membutuhkan 256 kombinasi atau
sekitar 7x 1017 atau 70 juta milyar kombinasi. DES dengan
penggunaan yang biasa (cookbook mode) dengan panjang kunci 56 bit
saat ini sudah dapat dianggap tidak aman karena sudah berhasil
dipecahkan dengan metoda coba-coba (brute force attack). Ada
berbagai group yang mencoba memecahkan DES dengan berbagai
cara. Salah satu group yang bernama distributed.net menggunakan
teknologi Internet untuk memecahkan problem ini menjadi sub-
problem yang kecil (dalam ukuran blok). Pengguna dapat menjalankan
sebuah program yang khusus dikembangkan oleh tim ini untuk
mengambil beberapa blok, via Internet, kemudian memecahkannya di
komputer pribadinya. Program yang disediakan meliputi berbagai
operating system seperti Windows, DOS, berbagai variasi Unix,
Macintosh. Blok yang sudah diproses dikembalikan
ke distributed.net via Internet. Dengan cara ini puluhan ribu orang,
termasuk penulis, membantu memecahkan DES. Mekanisme ini dapat
memecahkan DES dalam waktu 30 hari. Sebuah group lain yang
disebut Electronic Frontier Foundation (EFF) membuat sebuah
komputer yang dilengkapi dengan Integrated Circuit chip DES cracker.
Dengan mesin seharga US$50.000 ini mereka dapat memecahkan DES
56-bit dalam waktu rata-rata empat (4) sampai lima (5) hari. DES
cracker yang mereka kembangkan dapat melakukan eksplorasi
keseluruhan dari 56-bit keyspace dalam waktu sembilan (9) hari.
Dikarenakan 56-bit memiliki 216 (atau 65536) keyspace dibandingkan
DES dengan 40-bit, maka untuk memecahkan DES 40-bit hanya
dibutuhkan waktu sekitar 12 detik1. Dikarenakan hukum average,
waktu rata-rata untuk memecahkan DES 40-bit adalah 6 detik.
Perlu diingat bahwa group seperti EFF merupakan group kecil dengan
budget yang terbatas.
15
Secara umum skema Data Encryption Standard (DES) memiliki dua
fungsi input, yaitu :
Plaintext untuk dienkripsi dengan panjang 64 bit.
Kunci dengan panjang 56 bit.
 Proses initial permutasi (IP) Plaintext ada tiga :
Plaintext 64 bit diproses di Initial Permutasi (IP) dan menyusun
kembali bit untuk menghasilkan permutasi input.
Langkah untuk melakukan perulangan kata dari plaintext sebanyak 16
dengan melakukan fungsi yang sama, yang menghasilkan fungsi
permutasi substitusi, yang mana output akhir dari hal tersebut berisi 64
bit (fungsi dari plaintext dan kunci), masuk ke swap, dan menghasilkan
preouput.
Preoutput diproses, dan permutasi di inverse dari initial permutasi yang
akan menghasilkan ciphertext 64bit.

More Related Content

Enkripsi Data

  • 1. Manajemen Keamanan Komputer Enkripsi Data oleh : Ana Tolirenisa A1.1300017 Mirna Nurlitasari A1.1300003 Alvia Octavia S. A1.1300004 SEKOLAH MANAJEMEN INFORMATIKA DAN KOMPUTER (STMIK SUMEDANG) JL. Anggkrek Situ No.19 2014-2015
  • 2. 2 1. Program Aplikasi menjelaskan enkripsi RSA import java.math.BigInteger; import java.util.Random; import java.io.*; public class RSA { private BigInteger p; private BigInteger q; private BigInteger N; private BigInteger phi; private BigInteger e; private BigInteger d; private int bitlength = 1024; private int blocksize = 256; //blocksize in byte private Random r; public RSA() { r = new Random(); p = BigInteger.probablePrime(bitlength, r); q = BigInteger.probablePrime(bitlength, r); N = p.multiply(q); phi = p.subtract(BigInteger.ONE).multiply(q.subtract(BigInteger.ONE)); e = BigInteger.probablePrime(bitlength/2, r); while (phi.gcd(e).compareTo(BigInteger.ONE) > 0 && e.compareTo(phi) < 0 ) { e.add(BigInteger.ONE); } d = e.modInverse(phi); } public RSA(BigInteger e, BigInteger d, BigInteger N) { this.e = e; this.d = d; this.N = N; } public static void main (String[] args) throws IOException { RSA rsa = new RSA(); DataInputStream in=new DataInputStream(System.in);
  • 3. 3 String teststring ; System.out.println("Enter the plain text:"); teststring=in.readLine(); System.out.println("Encrypting String: " + teststring); System.out.println("String in Bytes: " + bytesToString(teststring.getBytes())); // encrypt byte[] encrypted = rsa.encrypt(teststring.getBytes()); System.out.println("Encrypted String in Bytes: " + bytesToString(encrypted)); // decrypt byte[] decrypted = rsa.decrypt(encrypted); System.out.println("Decrypted String in Bytes: " + bytesToString(decrypted)); System.out.println("Decrypted String: " + new String(decrypted)); } private static String bytesToString(byte[] encrypted) { String test = ""; for (byte b : encrypted) { test += Byte.toString(b); } return test; } public byte[] encrypt(byte[] message) { return (new BigInteger(message)).modPow(e, N).toByteArray(); } public byte[] decrypt(byte[] message) { return (new BigInteger(message)).modPow(d, N).toByteArray(); } }
  • 4. 4 2. Program code enkripsi cipher Caesar dan Vigenere Cipher A. Cipher Caesar /* * CaesarCipher.java * Encrypts/Decrypts text using the Caesar Cipher method * Made by Shofiul Arif */ import javax.swing.*; import java.awt.*; import java.awt.event.*; public class CaesarCipher extends JFrame implements ActionListener { private static JLabel msgLabel = new JLabel("Message: "); private static JLabel keyLabel = new JLabel("Key: "); private static JLabel actionLabel = new JLabel("Action: "); private static JLabel resultLabel = new JLabel("Result: "); private static JTextField msgTextField = new JTextField(20); private static JTextField resultTextField = new JTextField(20); private static JSpinner keySpinner = new JSpinner( new SpinnerNumberModel(3, 1, 25, 1) ); private static JRadioButton encryptRadio = new JRadioButton("Encrypt"); private static JRadioButton decryptRadio = new JRadioButton("Decrypt"); private static JButton actionButton = new JButton("Encrypt Message"); private static JPanel panel = new JPanel(); private static ButtonGroup group = new ButtonGroup(); public static void main(String[] args) { new CaesarCipher(); } public CaesarCipher() { this.setSize(310, 192); this.setTitle("Caesar Cipher");
  • 5. 5 this.setLocationRelativeTo(null); this.setDefaultCloseOperation(EXIT_ON_CLOSE); this.setResizable(false); panel.setLayout(new GridBagLayout()); addComponent(panel, msgLabel, 0, 0, 1, 1, GridBagConstraints.LINE_START); addComponent(panel, msgTextField, 1, 0, 2, 1, GridBagConstraints.LINE_START); addComponent(panel, keyLabel, 0, 1, 1, 1, GridBagConstraints.LINE_START); addComponent(panel, keySpinner, 1, 1, 1, 1, GridBagConstraints.LINE_START); addComponent(panel, actionLabel, 0, 2, 1, 1, GridBagConstraints.LINE_START); group.add(encryptRadio); group.add(decryptRadio); addComponent(panel, encryptRadio, 1, 2, 1, 1, GridBagConstraints.LINE_START); addComponent(panel, decryptRadio, 2, 2, 1, 1, GridBagConstraints.LINE_START); encryptRadio.setSelected(true); encryptRadio.addActionListener(this); decryptRadio.addActionListener(this); addComponent(panel, resultLabel, 0, 3, 1, 1, GridBagConstraints.LINE_START); addComponent(panel, resultTextField, 1, 3, 2, 1, GridBagConstraints.LINE_START); resultTextField.setEditable(false); addComponent(panel, actionButton, 1, 4, 1, 1, GridBagConstraints.CENTER); actionButton.addActionListener(this); this.add(panel); this.setVisible(true); } private void addComponent(JPanel p, JComponent c, int x, int y, int width, int height, int align) { GridBagConstraints gc = new GridBagConstraints(); gc.gridx = x; gc.gridy = y; gc.gridwidth = width; gc.gridheight = height;
  • 6. 6 gc.weightx = 100.0; gc.weighty = 100.0; gc.insets = new Insets(5, 5, 5, 5); gc.anchor = align; gc.fill = GridBagConstraints.NONE; p.add(c, gc); } private void encryptMessage(String msg, int k) { String result = ""; resultTextField.setText(""); for (int i = 0; i < msg.length(); i++) result += encryptChar(msg.charAt(i), k); resultTextField.setText(result); } private char encryptChar(char c, int k) { if (Character.isLetter(c)) return (char) ('A' + (c - 'A' + k) % 26); else return c; } public void actionPerformed(ActionEvent e) { if (e.getSource() == encryptRadio) actionButton.setText("Encrypt Message"); if (e.getSource() == decryptRadio) actionButton.setText("Decrypt Message"); if (e.getSource() == actionButton) { String str = msgTextField.getText(); int k = (Integer) keySpinner.getValue(); int key = 0; String message = ""; if (str.equals("")) { JOptionPane.showMessageDialog(null, "Please enter a message!", "Error!", JOptionPane.ERROR_MESSAGE); msgTextField.requestFocus(); return; } message = str.toUpperCase();
  • 7. 7 if (encryptRadio.isSelected()) key = k; else key = 26 - k; encryptMessage(message, key); } } } B. Vigener Cipher /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package vigenere; /** * * @author Guest */
  • 8. 8 public class Main { /** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here new vig().setVisible(true); } public String indraadiputra (String plain, String key) { int m = key.length(); plain = plain.toUpperCase().trim(); key = key.toUpperCase(); byte[] bytePlainText = plain.getBytes(); byte[] byteCipherText = new byte[plain.length()]; byte[] byteKey = key.getBytes(); for (int i=0; i < m; i++) byteKey[i] -= 64; for (int i=0; i < plain.length(); i++) { bytePlainText[i] -= 65; // abaikan selain alfabet if (bytePlainText[i]>-1 && bytePlainText[i]< 26) { byteCipherText[i] = (byte)((bytePlainText[i] + byteKey[i % m]-1) % 26); byteCipherText[i] += 65; } else byteCipherText[i] = (byte)(bytePlainText[i] + 65); } return new String (byteCipherText); } public String indraadi (String sandi, String kunci) { int m = kunci.length(); sandi = sandi.toUpperCase().trim(); kunci = kunci.toUpperCase(); byte[] bytesandiText = sandi.getBytes(); byte[] byteterangText = new byte[sandi.length()]; byte[] bytekunci = kunci.getBytes(); for (int i=0; i < m; i++) bytekunci[i] -= 64; for (int i=0; i < sandi.length(); i++) {
  • 9. 9 bytesandiText[i] -= 65; // abaikan selain alfabet if (bytesandiText[i]<-1 && bytesandiText[i]< 26) { byteterangText[i] = (byte)((bytesandiText[i] - bytekunci[i % m]+1) % 26); byteterangText[i] += 65; if (byteterangText[i]&<65) { byteterangText[i] += 26; } } else byteterangText[i] = (byte)(bytesandiText[i] + 65 ); } return new String (byteterangText); } } 3. Enkripsi A. Pengertian Enkripsi Enkripsi adalah suatu metode yang digunakan untuk mengkodekan data sedemikian rupa sehingga keamanan informasinya terjaga dan tidak dapat dibaca tanpa di dekripsi (kebalikan dari proses enkripsi) dahulu. Encryption berasal dari bahasa yunani kryptos yang artinya tersembunyi atau rahasia. Dikarenakan enkripsi telah digunakan untuk mengamankan komunikasi di berbagai negara, hanya organisasi-organisasi tertentu dan individu yang memiliki kepentingan yang sangat mendesak akan kerahasiaan yang menggunakan enkripsi. Di pertengahan tahun 1970-an, enkripsi kuat dimanfaatkan untuk pengamanan oleh sekretariat agen pemerintah Amerika Serikat pada domain publik, dan saat ini enkripsi telah digunakan pada sistem secara luas, seperti Internet e-commerce, jaringan Telepon bergerak dan ATM pada bank. Enkripsi dapat digunakan untuk tujuan keamanan, tetapi teknik lain masih diperlukan untuk membuat komunikasi yang aman, terutama untuk memastikan integritas dan autentikasi dari sebuah pesan. Contohnya, Message Authentication Code (MAC) atau digital signature. Penggunaan yang lain yaitu untuk melindungi dari analisis jaringan komputer. B. Manfaat enkripsi Beberapa manfaat yang bisa didapatkan dari enkripsi ini adalah : Kerahasiaan suatu informasi terjamin Menyediakan authentication dan perlindungan integritas pada algoritma checksum/hash Menanggulangi penyadapan telepon dan email Untuk digital signature. Digital signature adalah menambahkan suatu baris statemen pada suatu elektronik copy dan mengenkripsi statemen tersebut dengan kunci yang kita miliki dan hanya pihak yang memiliki kunci dekripsinya saja yang bisa membukanya.
  • 10. 10 Untuk digital cash C. Kerugian Enkripsi Penyandian rencana teroris Penyembunyian record criminal oleh seorang penjahat Pesan tidak bisa dibaca bila penerima pesan lupa atau kehilangan kunci (decryptor). D. Macam-macam Enkripsi pada pemrograman WEB a. Metode Enkripsi MD2 Message-Digest algortihm 2 (MD2) adalah fungsi hash cryptographic yang dikembangkan oleh Ronald Rivest pada tahun 1989' Algoritma dioptimalkan untuk komputer 8-bit. MD2 yang ditetapkan dalam RFC 1319. Meskipun algoritma lainnya telah diusulkan sejak dulu, seperti MD4, MD5 dan SHA, bahkan sampai dengan 2004 [update] MD2 tetap digunakan dalam infrastruktur kunci publik sebagai bagian dari sertifikat yang dihasilkan dengan MD2 dan RSA. b. Metode Enkripsi MD4 Message-Digest algortihm 4(seri ke-4) yang dirancang oleh Profesor Ronald Rivest dari MIT pada tahun 1990. Panjangnya adalah 128 bit. MD4 juga digunakan untuk menghitung NT-hash ringkasan password pada Microsoft Windows NT, XP dan Vista. c. Metode Enkripsi MD5 MD5 adalah salah satu dari serangkaian algortima message digest yang didesain oleh Profesor Ronald Rivest dari MIT (Rivest, 1994). Saat kerja analitik menunjukkan bahwa pendahulu MD5 yaitu MD4 mulai tidak aman, MD5 kemudian didesain pada tahun 1991 sebagai pengganti dari MD4 (kelemahan MD4 ditemukan oleh Hans Dobbertin). Dalam kriptografi, MD5 (Message-Digest algortihm 5) ialah fungsi hash kriptografik yang digunakan secara luas dengan hash value 128- bit. Pada standart Internet (RFC 1321), MD5 telah dimanfaatkan secara bermacam-macam pada aplikasi keamanan, dan MD5 juga umum digunakan untuk melakukan pengujian integritas sebuah file. d. Metode Enkripsi SHA SHA adalah serangkaian fungsi cryptographic hash yang dirancang oleh National Security Agency (NSA) dan diterbitkan oleh NIST sebagai US Federal Information Processing Standard. SHA adalah Secure Hash Algoritma. Jenis-jenis SHA yaitu SHA-0, SHA-1, dan SHA-2. Untuk SHA-2 menggunakan algoritma yang identik dengan ringkasan ukuran variabel yang terkenal sebagai SHA-224, SHA-256, SHA-384, dan SHA-512.
  • 11. 11 e. Metode Enkripsi RC4 RC4 merupakan salah satu jenis stream cipher, yaitu memproses unit atau input data pada satu saat. Unit atau data pada umumnya sebuah byte atau bahkan kadang kadang bit (byte dalam hal RC4). Dengan cara ini enkripsi atau dekripsi dapat dilaksanakan pada panjang yang variabel. RC4 adalah penyandian stream cipher yang dibuat oleh Ron Riverst pada tahun 1987 untuk pengamanan RSA. Algoritmanya didasarkan pada permutasi acak. f. Metode Enkripsi Base64 Base64 adalah sistem untuk mewakili data mentah byte sebagai karakter ASCII. Base64 menyediakan 6-bit encoding 8-bit ASCII karakter. Base64 merupakan format yang dicetak menggunakan karakter, memungkinkan binari data yang akan dikirim dalam bentuk dan email, dan akan disimpan di database atau file. g. Metode Enkripsi PGP Pengertian PGP PGP adalah suatu metode penyandian informasi yang bersifat rahasia sehingga jangan sampai diketahui oleh orang yang tidak berhak. Informasi ini bisa berupa e-mail yang sifatnya rahasia, nomor kode kartu kredit, atau pengiriman dokumen rahasia perusahaan melalui internet. PGP menggunakan metode kriptografi yang disebut public key encryption; yaitu suatu metode kriptografi yang sangat sophisticate. Prinsip Kerja PGP PGP, seperti yang telah dijelaskan sebelumnya, menggunakan teknik yang disebut public-key encryption dengan dua kode. Kode-kode ini berhubungan secara intrinsik, namun tidak mungkin untuk memecahkan satu dan yang lainnya. Bila suatu ketika kita membuat suatu kunci, maka secara otomatis akan dihasilkan sepasang kunci yaitu public key and secret key. Kita dapat memberikan public key ke manapun tujuan yang kita inginkan, melalui telephone, internet, keyserver, dsb. Secret key yang disimpan pada mesin kita dan menggunakan messager decipher akan dikirimkan ke kita. Jadi orang yang akan menggunakan public key kita (yang hanya dapat didekripsi oleh oleh secret key kita), mengirimkan messages kepada kita , dan kita akan menggunakan secret key untuk membacanya.
  • 12. 12 Kenapa menggunakan dua kunci ?. Karena dengan conventional crypto, di saat terjadi transfer informasi kunci, suatu secure channel diperlukan. Dan jika kita memiliki suatu secure channel, mengapa kita menggunakan crypto? Namun dengan public-key system, tidak akan menjadi masalah siapa yang melihat kunci milik kita, karena kunci yang dilihat orang lain adalah yang digunakan hanya untuk enkripsi dan hanya kita sebagai pemilik yang mengetahui secret key; yaitu key yang berhubungan secara fisik dengan komputer kita yang dapat melakukan proses dekripsi dengan public key yang ada dan kemudian kita masukan lagi passphrase. Jadi seseorang mungkin dapat mencuri passphrase yang kita ketikkan, namun ia dapat membaca hanya jika ia dapat mengakses komputer kita Enkripsi untuk File-File Biner Untuk mereka yang terbiasa bekerja dengan file-file biner, pada usenet mengetahui istilah uuencode. Uuenconde adalah suatu program, yang terutama untuk UNIX, namun sekarang berkembang sehingga dapat mengubah file-file biner seperti .GIF or .AU menjadi ASCII text yang sesuai dengan format pengiriman usenet. Feature ini juga dimiliki oleh PGP. File config.txt(mungkin disebut pgp.ini atau .pgprc ; tergantung protokol local) memiliki suatu option untuk berapa banyak baris file ASCII yang dapat dimuat. Jika jumlah ini tercapai, PGP akan memecah-mecah file armored .asc menjadi .as1, .as2, .as3, ... dan semuanya harus digabungkan satu sama lain secara bersama-sama dan menjalankan PGP dalam suatu file yang besar. Untuk mengenkripsi suatu file biner, gunakan command berikut: pgp -a picture.gif option TextMode diset ke ON: pgp -a picture.gif +textmode=off h. metode enkripsi DES Pengertian DES DES merupakan algoritma enkripsi yang dikembangkan oleh NIST (National Institute of Standards and Technology) sebagai standar pengolahan informasi Federal AS. Secara umum, Data Encryption Standard (DES) terbagi menjadi tiga kelompok, yaitu pemrosesan kunci, enkripsi data 64 bit dan deskripsi data 64 bit, dimana satu kelompok saling berinteraksi satu dengan yang lainnya. Data dienkripsi dalam blok-blok 64 bit menggunakan kunci 56 bit, DES mentransformasikan input 64 bit dalam beberapa tahap enkripsi ke dalam output 64 bit. Dengan demikian, DES termasuk lama block cipher dengan tahapan pemakaian kunci yang sama untuk deskripsinya. Sejarah DES DES, atau juga dikenal sebagai Data Encryption Algorithm (DEA) oleh ANSI dan DEA-1 oleh ISO, merupakan algoritma kriptografi
  • 13. 13 simetris yang paling umum digunakan saat ini. Sejarahnya DES dimulai dari permintaan pemerintah Amerika Serikat untuk memasukkan proposal enskripsi. DES memiliki sejarah dari Lucifer1, enkripsi yang dikembangan di IBM kala itu. Horst Feistel merupakan salah satu periset yang mula- mulA mengembangkan DES ketika bekerja di IBM Watson Laboratory di Yorktown Heights, New York. DES baru secara resmi digunakan oleh pemerintah Amerika Serikat (diadopsi oleh National Bureau of Standards) di tahun 1977. Ia dikenal sebagai Federal Information Processing Standard 46 (FIPS PUB46). Aplikasi yang menggunakan DES antara lain: enkripsi dari password di sistem UNIX berbagai aplikasi di bidang perbankan Memecahkan DES DES merupakan block chiper yang beroperasi dengan menggunakan blok berukuran 64-bit dan kunci berukuran 56-bit. Brute force attack dengan mencoba segala kombinasi membutuhkan 256 kombinasi atau sekitar 7x 1017 atau 70 juta milyar kombinasi. DES dengan penggunaan yang biasa (cookbook mode) dengan panjang kunci 56 bit saat ini sudah dapat dianggap tidak aman karena sudah berhasil dipecahkan dengan metoda coba-coba (brute force attack). Ada berbagai group yang mencoba memecahkan DES dengan berbagai cara. Salah satu group yang bernama distributed.net menggunakan teknologi Internet untuk memecahkan problem ini menjadi sub- problem yang kecil (dalam ukuran blok). Pengguna dapat menjalankan sebuah program yang khusus dikembangkan oleh tim ini untuk mengambil beberapa blok, via Internet, kemudian memecahkannya di komputer pribadinya. Program yang disediakan meliputi berbagai operating system seperti Windows, DOS, berbagai variasi Unix, Macintosh. Blok yang sudah diproses dikembalikan ke distributed.net via Internet. Dengan cara ini puluhan ribu orang, termasuk penulis, membantu memecahkan DES. Mekanisme ini dapat memecahkan DES dalam waktu 30 hari. Sebuah group lain yang disebut Electronic Frontier Foundation (EFF) membuat sebuah komputer yang dilengkapi dengan Integrated Circuit chip DES cracker. Dengan mesin seharga US$50.000 ini mereka dapat memecahkan DES 56-bit dalam waktu rata-rata empat (4) sampai lima (5) hari. DES cracker yang mereka kembangkan dapat melakukan eksplorasi keseluruhan dari 56-bit keyspace dalam waktu sembilan (9) hari. Dikarenakan 56-bit memiliki 216 (atau 65536) keyspace dibandingkan DES dengan 40-bit, maka untuk memecahkan DES 40-bit hanya dibutuhkan waktu sekitar 12 detik1. Dikarenakan hukum average, waktu rata-rata untuk memecahkan DES 40-bit adalah 6 detik.
  • 14. 14 Perlu diingat bahwa group seperti EFF merupakan group kecil dengan budget yang terbatas. Memecakan DES DES merupakan block chiper yang beroperasi dengan menggunakan blok berukuran 64-bit dan kunci berukuran 56-bit. Brute force attack dengan mencoba segala kombinasi membutuhkan 256 kombinasi atau sekitar 7x 1017 atau 70 juta milyar kombinasi. DES dengan penggunaan yang biasa (cookbook mode) dengan panjang kunci 56 bit saat ini sudah dapat dianggap tidak aman karena sudah berhasil dipecahkan dengan metoda coba-coba (brute force attack). Ada berbagai group yang mencoba memecahkan DES dengan berbagai cara. Salah satu group yang bernama distributed.net menggunakan teknologi Internet untuk memecahkan problem ini menjadi sub- problem yang kecil (dalam ukuran blok). Pengguna dapat menjalankan sebuah program yang khusus dikembangkan oleh tim ini untuk mengambil beberapa blok, via Internet, kemudian memecahkannya di komputer pribadinya. Program yang disediakan meliputi berbagai operating system seperti Windows, DOS, berbagai variasi Unix, Macintosh. Blok yang sudah diproses dikembalikan ke distributed.net via Internet. Dengan cara ini puluhan ribu orang, termasuk penulis, membantu memecahkan DES. Mekanisme ini dapat memecahkan DES dalam waktu 30 hari. Sebuah group lain yang disebut Electronic Frontier Foundation (EFF) membuat sebuah komputer yang dilengkapi dengan Integrated Circuit chip DES cracker. Dengan mesin seharga US$50.000 ini mereka dapat memecahkan DES 56-bit dalam waktu rata-rata empat (4) sampai lima (5) hari. DES cracker yang mereka kembangkan dapat melakukan eksplorasi keseluruhan dari 56-bit keyspace dalam waktu sembilan (9) hari. Dikarenakan 56-bit memiliki 216 (atau 65536) keyspace dibandingkan DES dengan 40-bit, maka untuk memecahkan DES 40-bit hanya dibutuhkan waktu sekitar 12 detik1. Dikarenakan hukum average, waktu rata-rata untuk memecahkan DES 40-bit adalah 6 detik. Perlu diingat bahwa group seperti EFF merupakan group kecil dengan budget yang terbatas.
  • 15. 15 Secara umum skema Data Encryption Standard (DES) memiliki dua fungsi input, yaitu : Plaintext untuk dienkripsi dengan panjang 64 bit. Kunci dengan panjang 56 bit. Proses initial permutasi (IP) Plaintext ada tiga : Plaintext 64 bit diproses di Initial Permutasi (IP) dan menyusun kembali bit untuk menghasilkan permutasi input. Langkah untuk melakukan perulangan kata dari plaintext sebanyak 16 dengan melakukan fungsi yang sama, yang menghasilkan fungsi permutasi substitusi, yang mana output akhir dari hal tersebut berisi 64 bit (fungsi dari plaintext dan kunci), masuk ke swap, dan menghasilkan preouput. Preoutput diproses, dan permutasi di inverse dari initial permutasi yang akan menghasilkan ciphertext 64bit.