• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Java kriptografi
 

Java kriptografi

on

  • 762 views

 

Statistics

Views

Total Views
762
Views on SlideShare
762
Embed Views
0

Actions

Likes
1
Downloads
29
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft Word

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Java kriptografi Java kriptografi Document Transcript

    • MAKALAH JAVA CRYPTOGRAPHIC EXTENSION KEAMANAN DATA M.MISBAKHUL MUNIR 7410040048 3 D4 TI B Politeknik Elektronika Negeri Surabaya (PENS) 2013
    • JAVA CRYPTOGRAPHIC EXTENSION (JCE) I. Pendahuluan API yang pertamaadalahJCA (Java Cryptography Architecture), merupakan framework sekuriti yang diintegrasikanbersamainti (core) dari Java API. JCA banyakdikeluhkanmenyediakankriptografi yang kurang 'kuat', dimanapanjangkuncikriptografi yang diperbolehkanhanyasampaimaksimum 128 atau 256 bit. Sudahbarangtentukuncikriptografi yang tidak 'kuat' ataupanjang bit kunci yang pendekmaka hacker yang memecahkankriptografitersebut (cipher) hanyamemerlukanwaktu yang tidakterlalu lama. Lokasi JCA terletakpadapaketjava.security. API yang keduaadalah JCE (Java Cryptography Extension), merupakan framework sekuritiekstensidari Java.Iamenyediakanekstensiuntukkriptografi yang kuat, diperbolehkanuntuk di- eksporolehpemerintah US setelahkebijakanmengenaieksportahun 2000. JCE mulaidiperbolehkansebagaiopsipakettambahanpada JDK v 1.2.x dan 1.3.x, sedangkanpada JDK v 1.4.x telahdiintegrasikan.API JCE diimplementasioleh Cryptographic Service Providers.Pada JDK v 1.4.x keatassecara default API service-provider nyaadalahSunJCE.Dengan JCE makamemberikeleluasaankepadakita (memprogram java kriptografi) untukmemakaiimplementasidari API service-provider yang diinginkan.Lokasi JCE terletakpadapaketjavax.crypto. Symmetric dan Asymmetric Cryptography merupakanjenisalgoritmakriptografiberdasarkanpenggunaankunci.Singkatnya, kriptografi symmetric menggunakankunci yang samauntukmelakukan proses enkripsidandekripsisedangkankriptografi asymmetric menggunakankunci yang berbedauntuk encrypt dan decrypt. Contohalgoritma symmetric adalah AES, DES, RC4 dllsedangkan asymmetric adalah RSA, Elgamaldll.Gambardibawahinimerupakan proses enkripsidandekripsialgoritma symmetric dan asymmetric. Symmetric Algorithm Asymmetric Algorithm
    • Padaalgoritma asymmetric, terdapatduabuahkunciyaitukuncipublikuntuk encrypt dankunci private untuk decrypt. Ketikaseseorang (misal Alice) akanmengirimkanpesanke Bob, maka Alice akanmengenkripsipesantersebutmenggunakankuncipublik Bob dan Bob akanmembukapesan yang diterimanyamenggunakankunci private. Hal tersebutmerupakankelebihanpadasistem asymmetric karena user cukupmenyimpansecararahasiakunci private miliknya, sedangkankuncipublikdapatdisebarkankeseluruh user yang inginberkomunikasidengannyatanpaperlukhawatir orang yang tidakberhakdapatmembukapesanmenggunakankuncipublik yang telahdisebartersebut. Padasistem symmetric, kunci yang digunakanuntuk encrypt dan decrypt adalahsama, sehingga user yang salingberkomunikasimenggunakansistem symmetric harussalingberkirimkunci yang samakarenajikamerekatidakmenggunakankunci yang samamakapesantidakdapatterbuka di sisipenerima. Jikaterdapatseseorang yang berada di tengah2 proses kirimterimakuncidanberhasilmendapatkankuncitersebutmakamakasemuapesandapatterbuka. Berbedadengansistem asymmetric, user hanyaperlu mengirimkankuncipubliksupaya orang laindapatberkomunikasidengandirinya. User tidakperlutakutpenyerangdapatmerekonstruksi private key darikuncipublik yang didapatkannya. Kompleksitaspendistribusiankunci pada symmetric lebihtinggidibandingkandengan asymmetric. Setiapsatukuncipada symmetric digunakano lehdua user atausatugrupuntukberkomunikasi. Sayailustrasikansebagaiberikut, ketika user A akanberkomunikasidengan user B merekamenggunakankunci X danketika user A berkomunikasidengan user C merekaakanmenggunakankunci Y. Makaketika user B,C,D akanmengirimkanpesanke user A, user A akanmenggunakan 3 buahkunci yang berbedauntukmembukapesan yang diterima. Berbedadengansistem asymmetric,user B,C,D cukupmenggunakankuncipublik A untukmengirimkanpesandan A cukupmenggunakankunci private nyauntukmembukapesantersebut. Akan tetapi, sistem symmetric lebihcepatdalamkomputasidan ciphertext yang dihasilkanlebihsedikitsehinggatidakmembebanibandwithpadasaat proses pengirimanpesan. Biasanya symmetric dan asymmetric seringdigunakanbersamaanpadasuatusistem.Sebagaicontohpadasiste m video conference Agievic, asymmetric digunakanuntukpendistribusiankunci symmetric, kunci symmetric inidigunakanuntu kuntukmengenkripsikomunikasi video conference AES (Advance Encryption Standart) Advanced Encryption Standard (AES) merupakanalgoritmakriptografi simetrik yang dapatdigunkanuntukmengamakan data.Algoritma AESadalahblokchipertextsimetrik yang dapatmengenkripsi (encipher) dandekripsi (decipher) informasi. Enkripsimerubah data yang tidakdapatlagidibacadisebutciphertext.sebaliknyadekripsiadalahmerubahciphertext data menjadibentuksemula yang kitakenalsebagai plaintext. Algoritma AESmengunakankuncikriptografi 128, 192, dan 256 bits untukmengenkripdandekrip data padablok 128 bits. DES (Digital Encryption Standart) Secure random key. DES (Data Encryption Standard) adalahalgoritmacipher blok yang populerkarenadijadikan standard algoritmaenkripsikunci-simetri, meskipunsaatini standard tersebuttelahdigantikandenganalgoritma yang baru, AES, karenaDES sudahdianggaptidakamanlagi. SebenarnyaDES adalahnama standard enkripsisimetri, namaalgoritmaenkripsinyasendiriadalahDEA
    • (Data Encryption Algorithm), namunnamaDES lebihpopulerdaripadaDEA. AlgoritmaDES dikembangkan di IBM dibawahkepemimpinan W.L. Tuchman padatahun 1972.AlgoritmainididasarkanpadaalgoritmaLucifer yang dibuatoleh Horst Feistel.AlgoritmainitelahdisetujuiolehNational Bureau of Standard (NBS) setelahpenilaiankekuatannyaolehNational Security Agency (NSA) AmerikaSerikat.DES termasukkedalamsistemkriptografisimetridantergolongjeniscipher blok. DES beroperasipadaukuranblok 64 bit. DES mengenkripsikan 64 bit plainteksmenjadi 64 bit cipherteksdenganmenggunakan 56 bit kunci internal (internal key) atauupa-kunci(subkey). Kunci internal dibangkitkandarikuncieksternal(external key) yang panjangnya 64 bit. II.Menginstall JCE Berikutiniadalahcaramenginstall JCE ke JDK API kita. 1. Download Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files disiniuntuk yang menggunakan JDK 7. Jikamenggunakan JDK selainitubisadisesuaikan. 2. Uncompressdanekstrak file yang didownloadtadi. Iniakanmembuatsubdirektori JCE. Didalamdirektoritersebutakanterdapat file sbb: README.txt COPYRIGHT.html Copyright information local_policy.jar Unlimited strength local policy file US_export_policy.jar Unlimited strength US export policy file 3.Menginstall the unlimited strength policy JAR files. Standarlokasiuntuk JCE jurisdiction policy JAR files adalah: /jre/lib/security [Unix] jrelibsecurity [Win32] Artinyainitergantungkepada environment Java andaapakahandamenjalankanaplikasi java menggunakan JRE denganmenginstall JDK atauhanya JRE sajatanpamenginstall JDK. Dalamkasus environment Java menginstalldengan JDK, makamungkinakansepertiberikut /home/user1/jdk1.6.0/jre [Unix] C:jdk1.6.0jre [Win32] Dalamkasus environment Java hanya JRE sajatanpamenginstall JDK, makamungkinakansepertiberikut /home/user1/jre1.6.0 [Unix] C:jre1.6.0 [Win32] Dalamkasussayamakalokasiuntuk JCE adalah (JRE denganmenginstall JDK)
    • C:Program FilesJavajdk1.7.0_11jrelibsecurity [Win32] 4. Copy local_policy.jar dan US_export_policy.jar ke C:Program FilesJavajdk1.7.0_11jrelibsecurity (ini environment Java di laptop saya). Catatan, kemungkinan file tersebutsudahada di direktoritersebut, sehinggaandaharusmenimpasaja file tersebutdengan yang didownloadtadi.Jikalebihamannyamaka file yang sudahadatadibisa di-rename terlebihdahulu. 5. Restart komputerandauntukmenyingkirkan exception yang terjadisebelummemasang file jar JCE yang barutersebut. III.ProgamKriptografi a. Program Kriptografi DES  Source Code packageorg.wikijava.crypto; importjava.io.IOException; importjava.io.UnsupportedEncodingException; importjava.security.InvalidKeyException; importjava.security.Key; importjava.security.NoSuchAlgorithmException; importjava.security.SecureRandom; importjavax.crypto.BadPaddingException; importjavax.crypto.Cipher; importjavax.crypto.IllegalBlockSizeException; importjavax.crypto.KeyGenerator; importjavax.crypto.NoSuchPaddingException; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; /** * * @author Giulio */ public class CryptoMessage { private Key key; /**
    • * Generates the encryption key. using "des" algorithm * * @throws NoSuchAlgorithmException */ private void generateKey() throws NoSuchAlgorithmException { KeyGenerator generator; generator = KeyGenerator.getInstance("DES"); generator.init(new SecureRandom()); key = generator.generateKey(); } private String encrypt(String message) throws IllegalBlockSizeException, BadPaddingException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, UnsupportedEncodingException { // Get a cipher object. Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, key); // Gets the raw bytes to encrypt, UTF8 is needed for // having a standard character set byte[] stringBytes = message.getBytes("UTF8"); // encrypt using the cypher byte[] raw = cipher.doFinal(stringBytes); // converts to base64 for easier display. BASE64Encoder encoder = new BASE64Encoder(); String base64 = encoder.encode(raw); return base64; } private String decrypt(String encrypted) throws InvalidKeyException, NoSuchAlgorithmException, NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException, IOException { // Get a cipher object. Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding"); cipher.init(Cipher.DECRYPT_MODE, key); //decode the BASE64 coded message BASE64Decoder decoder = new BASE64Decoder();
    • byte[] raw = decoder.decodeBuffer(encrypted); //decode the message byte[] stringBytes = cipher.doFinal(raw); //converts the decoded message to a String String clear = new String(stringBytes, "UTF8"); return clear; } publicCryptoMessage(String message) { try { System.out.println("clear message: " + message); generateKey(); String encrypted = encrypt(message); System.out.println("encrypted message: " + encrypted); String decrypted = decrypt(encrypted); System.out.println("decrypted message: " + decrypted); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (NoSuchPaddingException e) { e.printStackTrace(); } catch (InvalidKeyException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (IllegalBlockSizeException e) { e.printStackTrace(); } catch (BadPaddingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** * * @paramargs */
    • public static void main(String[] args) { /* if (args.length == 1) { newCryptoMessage(args[0]); } else { System.out.println("usage: "); System.out.println("CryptoMessage [message]"); } */ newCryptoMessage("misbakhul_munir"); } }  Output Argument diisidengankalimat yang nantinyajika di run, makaterenkripsi. Dan didekripsilagi.
    • b. Program Kriptografi AES  Source Code packageorg.wikijava.cryptography.generalExamples; importjava.io.IOException; importjava.io.UnsupportedEncodingException; importjava.security.InvalidAlgorithmParameterException; importjava.security.InvalidKeyException; importjava.security.NoSuchAlgorithmException; importjavax.crypto.BadPaddingException; importjavax.crypto.Cipher; importjavax.crypto.IllegalBlockSizeException; importjavax.crypto.NoSuchPaddingException; importjavax.crypto.spec.IvParameterSpec; importjavax.crypto.spec.SecretKeySpec; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; public class CryptographyWithReusedPass { private static String encrypt(String message, String skey, String ivx) throwsUnsupportedEncodingException, IllegalBlockSizeException, BadPaddingException { SecretKeySpeckeySpec = new SecretKeySpec(skey.getBytes(), "AES"); IvParameterSpecivSpec = new IvParameterSpec(ivx.getBytes()); Cipher cipher = getCypher(keySpec, ivSpec, Cipher.ENCRYPT_MODE);
    • // Gets the raw bytes to encrypt, UTF8 is needed for // having a standard character set byte[] stringBytes; stringBytes = message.getBytes("UTF8"); // encrypt using the cypher byte[] raw; //try { raw = cipher.doFinal(stringBytes); //} catch (IllegalBlockSizeException e) { // throw new CryptographyException(e); //} catch (BadPaddingException e) { // throw new CryptographyException(e); //} // converts to base64 for easier display. BASE64Encoder encoder = new BASE64Encoder(); String base64 = encoder.encode(raw); return base64; } public static String decrypt(String encrypted, String skey, String ivx) throws IOException { SecretKeySpeckeySpec = new SecretKeySpec(skey.getBytes(), "AES"); IvParameterSpecivSpec = new IvParameterSpec(ivx.getBytes()); Cipher cipher = getCypher(keySpec, ivSpec, Cipher.DECRYPT_MODE); // decode the BASE64 coded message BASE64Decoder decoder = new BASE64Decoder(); byte[] raw; //try { raw = decoder.decodeBuffer(encrypted); //} catch (IOException e) { // throw new CryptographyException("Reading error", e); //} // decode the message byte[] stringBytes = null;
    • try { stringBytes = cipher.doFinal(raw); } catch (IllegalBlockSizeException e) { // throw new CryptographyException("Encrypted message was corrupted", // e); } catch (BadPaddingException e) { // throw new CryptographyException("Encrypted message was corrupted", // e); } // converts the decoded message to a String String clear; //try { clear = new String(stringBytes, "UTF8"); //} catch (UnsupportedEncodingException e) { //throw new CryptographyException(e); //} return clear; } /** * @paramkeySpec * @paramivSpec * @param mode * @return * @throws CryptographyException */ public static Cipher getCypher(SecretKeySpeckeySpec, IvParameterSpecivSpec, int mode) { // Get a cipher object. Cipher cipher; try { cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); } catch (NoSuchAlgorithmException e) { throw new RuntimeException("invalid algorithm", e); } catch (NoSuchPaddingException e) { throw new RuntimeException("invalid padding", e); } try { cipher.init(mode, keySpec, ivSpec); } catch (InvalidKeyException e) {
    • // throw new CryptographyException("invalid key", e); } catch (InvalidAlgorithmParameterException e) { throw new RuntimeException("invalid algorithm parameter.", e); } return cipher; } /** * * @paramargs */ public static void main(String[] args) throws UnsupportedEncodingException, IllegalBlockSizeException, BadPaddingException, IOException { String message="misbakhul_munir"; String key="1011199102112008"; String ivx="1502199202112008"; //if (args.length == 3) { // message = args[0]; // key = args[1]; // ivx = args[2]; //} else { // System.out.println("usage: "); // System.out // .println("CryptographyWithReusedPass [message] [skey] [ivx]n key and ivx must have length 16 "); // return; //} System.out.println("clear message: " + message); String encrypted; //try { encrypted = encrypt(message, key, ivx); //} catch (UnsupportedEncodingException e) { // e.printStackTrace(); // return; //} catch (CryptographyException e) { // e.printStackTrace(); // return; //} System.out.println("encrypted message: " + encrypted); String decrypted;
    • //try { decrypted = decrypt(encrypted, key, ivx); //} catch (CryptographyException e) { // e.printStackTrace(); // return; //} System.out.println("decrypted message: " + decrypted); } }  Output Argument harusdiisidengan value1,value2& value3 (dengan length 16).