49
Pada Bab 4 ini akan dilakukan implementasi terhadap apa yang telah
dianalisa dan dirancang pada bagian sebelumnya. Selain itu dilakukan pula
penggujian dari aplikasi yang kita bangun ini terhadap aspek-aspek yang kita
inginkan.
4.1.
Lingkungan Implementasi
Untuk tujuan implementasi dan pengujian aplikasi ini, kita akan
melakukannya dengan menggunakan seperangkat komputer.
1.
Prosesor intel
2.
RAM 2 GB
3.
Hard disk 180 GB
Adapun perangkat lunak yang digunakan dalam melakukan implementasi
dan pengujian ini adalah sebagai berikut.
1.
Sistem Operasi Widows 7
2.
Netbean IDE 6.9.1
3.
Glassfish 3
4.
Maven 2
5.
Embeded Database Apache Derby versi 10.5.3.0 - (802917)
4.2.
Implementasi Kelas
Pada bagian sebelumnya, kita telah melakukan analisa dan kemudian
merancang aplikasi termasuk perancangan kelas. Kelas-kalas yang telah di
rancang, akan diimplementasikan dengan menggunakan bahasa Java.
Nama TokenAlgorithm File TokenAlgorithm.java Atribut
static char[] hex = "0123456789abcdef".toCharArray(); Operator
public static String createTokenFromPassword(String password,long challange,int codeDigits) throws NoSuchAlgorithmException, InvalidKeyException
public static String createTokenFromHashPassword(byte[] key,long challange,int codeDigits)
throws NoSuchAlgorithmException, InvalidKeyException
public static byte[] hasingPassword(byte[] pwd) throws NoSuchAlgorithmException public static int dynamicTruncation(byte[] pwd ) throws NoSuchAlgorithmException public static byte[] hexToBytes(String strHex) throws NoSuchAlgorithmException public static String byteToHex(byte[] bytes ) throws NoSuchAlgorithmException
Nama AbstractToken File AbstractToken.java Atribut /** * DIGITS POWER */
protected static final int[] DIGITS_POWER // 0 1 2 3 4 5 6 7 8
= {1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000};
/**
* Panjang token yang di implementasi */
private int tokenLength = 6; Operator
protected static String conversion(int otp, int digits)
public String generateNonce(String username, Integer tokenType)
public boolean verifikasi(String username, String nonce, String response, Integer tokenType)
protected abstract boolean isValidNonce(String username, Integer tokenType, String token)
protected abstract void removeNonceResponse(String username, Integer tokenType, String token)
protected abstract void attemptNonceResponse(String username, Integer tokenType, String token)
protected abstract void storeNonce(String username, Integer tokenType, String token, String response)
protected abstract byte[] getTokenKey(String username, Integer tokenType) throws Exception
protected abstract int getSeed(String username, Integer tokenType) throws Exception
Nama UserSessionBean File UserSessionBean.java Atribut
@PersistenceContext
private EntityManager entityManager; Operator
public void save(UserToken userToken,String pwdLogin,String pwdTransaksi) public void changePassword(String username, String password,Integer typeToken)
Nama TokenSessionBean File TokenSessionBean.java Atribut
@PersistenceContext
private EntityManager entityManager; /**
* Panjang token yang di implementasi */
private static int token_lenght = 6; /**
* Max percobaan token */
Operator
public UserDto getUserDto(String username)
protected void removeNonceResponse(String username, Integer tokenType, String nonce) protected void attemptNonceResponse(String username, Integer tokenType, String nonce) protected void storeNonce(String username, Integer tokenType, String token, String response)
protected byte[] getTokenKey(String username, Integer tokenType) throws Exception protected UserToken getUserToken(String username)
protected void persist(NonceToken nonceToken )
protected NonceToken getNonceToken(String username, String nonce, Integer tokenType)
protected boolean isValidNonce(String username, Integer tokenType, String token) protected int getSeed(String username, Integer tokenType)throws Exception
Nama ChangePasswordController File ChangePasswordController.java Atribut
private Integer passwordType =0; private String password=""; private String passwordUlangi =""; Operator
public String changePasswordAction()
Nama RegisterController File RegisterController.java Atribut
private UserToken user = new UserToken(); private String pwdLogin="";
private String pwdLoginUlangi=""; private String pwdTransaksi=""; private String pwdTransaksiUlangi=""; Operator
Nama LoginController File LoginController.java Atribut
private String username = ""; private String challange = "0"; private String response ; Operator
protected void setUserDto(UserDto userDto) public String challangeAction()
public String verificationAction() public String logoutAction()
Nama TransaksiController File TransaksiController.java Atribut
private String name = ""; private String username = ""; private String challange = ""; private String response; Operator
public void generateChallange() public String verificationAction()
Nama JDialogToken File JDialogToken.java Atribut
private javax.swing.JFormattedTextField challenge; private javax.swing.JButton jButton1;
private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3;
private javax.swing.JTextField response; Operator
private void initComponents()
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt)
4.3.
Implementasi Modul
Dibagian sebelumnya, kita telah implementasi kelas dari aplikasi yang
sedang dibangun. Berikut ini kita dapat melihat daftar implemantsi modul yang
ada dalam aplikasi ini. Daftar tersebut dapat dilihat dalam tabel dibawah ini.
Tabel 4.1
DAFTAR IMPLEMENTASI MODUL
Nama Modul Nama Class yang Terlibat
Registrasi
RegisterController
, UserSessionBean, dan TokenAlgorithm Ganti Passaword ChangePasswordController , UserSessionBean, dan TokenAlgorithm Login LoginController, TokenSessionBean, TokenAlgorithm danOneTimePasswordAlgorithm Transaksi
Otentikasi
TransaksiController, TokenSessionBean, TokenAlgorithm dan OneTimePasswordAlgorithm
Token Desktop JDialogToken, TokenAlgorithm dan OneTimePasswordAlgorithm
4.4.
Implementasi Antar Muka
Implementasi Antar Muka didasari dari apa yang telah kita rancang pada
bagian sebelumnya.
Gambar 4.1 Layar-layar pada saat pendaftaran pengguna
Pada Gambar 4.1 ditampilkan hasil layar-layar untuk pendaftaran
pengguna. Sedangkan untuk Gambar 4.2 ditampilkan layar-layar pada saat login
sebelum pengguna dapat menggunakan aplikasi.
Gambar 4.3 Layar-Layar Pada Saat Transaksi
Pada Gambar 4.3 ditampilkan layar-layar yang mungkin mucul pada saat
pengguna melakukan Otentikasi untuk melakukan taransaksi. Sedangkan pada
Gambar 4.4 ditampilkan layar-layar yang muncul pada saat pengguna melakukan
penggantian password untuk login maupun password transaksi
Gambar 4.4. Layar-Layar Pada Saat Ganti Password
Pada Gambar 4.5 ditampilkan token destop yang berguna untuk
melakukan pembangkitan nilai response berdasarkan nilai
Challenge
dengan
menggunakan password.
4.5.
Pengujian Aplikasi
Pengujian aplikasi ini kita bagi menjadi dua bagia. Pengujian pertama
dilakukan untuk mengukur performansi dari aplikasi ini. Pengujian kedua adalah
pengujian terhadap hasil validasi token yang di hasilkan.
4.5.1.
Pengujian hasil Token
Pengujian hasil token ditujukan untuk melihat apakah proses melakukan
hal dengan benar. Untuk kelas utama yaitu OneTimePasswordAlgoritma dan
TokenAlgoritma di verifikasi menggunakan framework jUnit. Dengan
mempergunakan framework tesebut maka akan dapat test yang lebih stabil.
Gambar 4.6. hasil jUnit
Pada gambar 4.8 ditampilkan fungsi-fungsi utama mengunakan jUnit.
4.5.2.
Test Token Simulasi
Test token simulasi adalah pengetesan terhadap Kalss AbstractToken
dimana Abstract token tersebut akan di implementasikan menjadi sebuah Class
pengujian yang bernama Token.
import java.util.HashMap; import java.util.Map;
import token.engine.AbstractToken; import token.engine.TokenAlgorithm;
public class Token extends AbstractToken{
private static Map<String,String> hashMap = new HashMap(); private String seedToken = "0";
@Override
protected void removeNonceResponse(String username, Integer tokenType, String token) {
hashMap.remove(username+"#"+token+"#"+tokenType); }
@Override
protected void attemptNonceResponse(String username, Integer tokenType, String token) {
}
@Override
protected void storeNonce(String username, Integer tokenType, String token) {
hashMap.put(username+"#"+token+"#"+tokenType,username+"#"+token+"#"+tokenType); this.seedToken =token;
}
@Override
protected byte[] getTokenKey(String username, Integer tokenType) throws Exception { if("ani".equals(username)){ return TokenAlgorithm.hasingPassword("passwordAni".getBytes()); }else{ return TokenAlgorithm.hasingPassword("passwordOrangLain".getBytes()); } } @Override
protected boolean isValidNonce(String username, Integer tokenType, String token) {
return hashMap.containsKey(username+"#"+token+"#"+tokenType); }
@Override
protected int getSeed(String username, Integer tokenType) { return Integer.parseInt(seedToken);
}
Kelas token di implentasikan dengan beberapa batasan. Pada penyimpanan
nonce mengunakan memori itu bisa dilihat pada fungsi-fungsi getNonceResponse,
removeNonceResponse dan storeNonce. Walaupun menggunakan penyimpanan
data yang sederhana kelas tersebut mencerminkan kondisi sebenarnya. Pada kelas
tersebut akan di ujikan beberapa skenario berikut ini:
1.
Evi tidak mengetahui password Ani mencoba untuk menjadi Ani untuk
otentikasi
2.
Kondisi ada pengguna Ani melakukan otentikasi dan evi mencoba
untuk melakukan otentikasi menggunakan response dan challenge Ani
sebelumnya kirimkan ke server. (Replay Attack)
3.
Evi memcoba mengenerate challenge dari Ani tanpa mengetahui
password Ani.
4.
Kondisi ada pengguna Ani melakukan otentikasi dan evi mencoba
untuk melakukan otentikasi menggunakan Ani pada saat ani sedang
akan online
5.
Ani melakukan otentikasi dan berhasil
Scenario: Evi tidak menengetahui password Ani mencoba untuk menjadi Ani untuk otentikasi
Given Evi berpura-pura menjadi Ani When Evi meminta challenge And Evi generate response
And Evi mengirimkan response ke server Then Evi gagal diotentikasi
Scenario: Kondisi ada pengguna Ani melakukan otentikasi dan evi mencoba untuk melakukan otentikasi menggunakan response dan challenge Ani sebelumnya kirimkan ke server. (Replay Attack)
Given Ani meminta challenge And Evi berpura-pura menjadi Ani When Ani generate response
And Ani mengirimkan response ke server
And Evi memonitor challenge dan response Ani dan mengambil data tersebut And Evi mengirimkan response ke server
Then Evi gagal diotentikasi And Ani berhasil diotentikasi Hasil: berhasil
Scenario: Evi memcoba mengenerate challege dari Ani tanpa mengetahui password Ani
Given Ani meminta challenge And Evi berpura-pura menjadi Ani
When Evi memonitor dan mengetahui challenge Ani And Evi generate response
And Evi mengirimkan response ke server And Ani generate response
And Ani mengirimkan response ke server Then Evi gagal diotentikasi
And Ani berhasil diotentikasi Hasil: berhasil
Scenario: Kondisi ada pengguna Ani melakukan otentikasi dan evi mencoba untuk melakukan otentikasi menggunakan Ani pada saat ani sedang akan online
Given Ani meminta challenge And Evi berpura-pura menjadi Ani When Evi meminta challenge And Evi generate response
And Evi mengirimkan response ke server And Ani generate response
And Ani mengirimkan response ke server Then Evi gagal diotentikasi
And Ani berhasil diotentikasi Hasil: berhasil
Scenario: Ani melakukan otentikasi dan berhasil
Given Ani meminta challenge When Ani generate response
And Ani mengirimkan response ke server Then Ani berhasil diotentikasi
Hasil: berhasil
4.5.3.
Test Token pada Aplikasi WEB
Dalam melakukan test token terhadap aplikasi WEB kita mengunakan
beberapa skenario yang dijalankan. Skenario tersebut diantaranya:
1.
Daftar pengguna Baru
2.
Login passsword salah
3.
Login
4.
Transaksi Gagal
5.
Transaksi
6.
Ganti password Login
7.
Ganti password Transaksi
Scenario: Daftar pengguna Baru
Given daftar Pengguna
When isi username agusramdan And isi password login passwordlogin And isi password transaksi passwordtransaksi And isi data yang lainnya
And klik daftar
Then anda berhasil daftar Hasil: berhasil
Scenario: Login passsword salah
Given Login page
When set username agusramdan And request login challenge
And generate response by passwordsalah And klik login
Then login Gagal Hasil: berhasil Halaman:
Scenario: Login
Given Login page
When set username agusramdan And request login challenge
And generate response by passwordlogin And klik login
Then login Berhasil Hasil: berhasil Halaman:
Scenario: Transaksi Gagal
Given Transaksi page
When Generate Response Transaksi by passwordsalah Then transaksi Gagal
Hasil: berhasil Halaman:
Scenario: Transaksi
Given Transaksi page
When Generate Response Transaksi by passwordtransaksi Then transaksi Berhasil
Hasil: berhasil Halaman:
Scenario: Ganti password Login
Given ganti password page
When ganti password Login dengan password Then password berubah
Hasil: berhasil Halaman :
Scenario: Ganti password Transaksi
Given ganti password page
When ganti password Transaksi dengan password Then password berubah