implementasi proteksi ganda dengan …informatika.stei.itb.ac.id/~rinaldi.munir/kriptografi/...share...

7
Makalah IF3058 Kriptografi Sem. II Tahun 2011/2012 Implementasi Proteksi Ganda Dengan Menggabungkan Algoritma El Gamal dan Vigenere Cipher Ignatius Ronaldo Galman Kurniawan - 13509074 Program Studi Teknik Informatika Sekolah Teknik Elektro dan Informatika Institut Teknologi Bandung, Jl. Ganesha 10 Bandung 40132, Indonesia [email protected] AbstrakAlgoritma El Gamal adal ah algoritma kunci asimetrik yang digunakan untuk kriptografi kunci publik yang telah dikembangkan sedemikian rupa dengan berbasiskan pertukaran kunci Diffie- Hellman sehingga dapat digunakan untuk melakukan enkripsi dan dekripsi pesan. Algoritma ini memiliki keamanan yang relatif tinggi dikarenakan memecahkan masalah logaritma diskrit bukanlah perkara mudah bahkan deng an menggunakan kemampuan komputasi dewasa ini yang notabene sudah sangat maju dan berkembang dengan pesat. Demikian pul a deng an Vigenere Cipher yang merupakan sebuah algoritma Kriptografi klasik yang cukup populer. Oleh karena itu menarik untuk diimplementasikan bagaimana penggabungan algoritma kriptografi modern dan klasik dan tentunya ada kelebihan maupun kekurangan yang ada dari hasil penggabungan algoritma El Gamal dan Vigenere Cipher ini. Kata Kunci Diffie-Hellman, El Gamal , Vigenere Cipher. I. PENDAHULUAN Kriptogtafi merupakan seni dan ilmu yang digunakan untuk menyembunyikan pesan yang memiliki beberapa terminologi dasar[1]. Terminologi dasar yang penting diantaranya adalah pengirim pesan, penerima pesan, pesan, plainteks, cipherteks, enkripsi, dekripsi dan kunci. Sejatinya Algoritma El Ga mal adalah algoritma kriptografi modern yang digunakan pada mulanya untuk digital signature atau tanda tangan digital dengan berdasarkan pada prinsip pertukaran kunci Diffie- Hellman yang merupakan algoritma kunci publik. Namun demikian, El Gamal mengalami modifikasi sehingga dimungkinkan melakukan enkripsi dan dekripsi pesan dengan menggunakan algoritma ini. Vigenere Cipher merupakan sebuah Algoritma Kriptografi klasik yang memiliki 8 elemen tersebut. Disebut algoritma klasik karena algoritma ini tergolong algoritma dasar karena menggunakan algoritma berbasis karakter dan dapat dipecahkan tanpa menggunakan komputer. Akan tetapi algoritma ini tentunya bisa diimplementasikan ke dalam program komputer. Dalam makalah ini akan dibahas implementasi proteksi ganda dengan menggabungkan Algoritma Modern El Gamal dengan Algoritma Klasik Vigenere Cipher. II. DASAR TEORI Algoritma El Gamal[1][2] Algoritma El Gamal adalah algoritma ekripsi/dekripsi dengan kunci asimetris untuk kriptografi kunci publik yang berdasarkan pada Algoritma Pertukaran kunci Diffie-Hellman[3]. Adalah seorang Mesir-Amerika Taher El Gamal memperkenalkannya ke publik pada tahun 1984. Pertama kali dikemukakan di dalam makalah berjudul " A public key cryptosystem and a signature scheme based on discrete logarithms. Keamanan algoritma ini adalah bahwa perkara sulit untuk menghitung logaritma diskrit. Komponen dari enkripsi El Gamal adalah : key generator, algoritma enkripsi, dan algoritma dekripsi. Properti dari Algoritma ini adalah: Properti Keterangan Bilangan Prima p Tidak rahasia Bilangan acak g (g < p) Tidak rahasia Bilangan acak x (x < p) Rahasia, Kunci Privat y = g x mod p Tidak rahasia, Kunci Publik Plaiteks m Rahasia Cipherteks a dan b Tidak rahasia Generate Key Melakukan generalisasi kunci adalah sebagai berikut: - Pilih sembarang bilangan prima p ( p dapat di- share di antara anggota kelompok) - Pilih dua buah bilangan acak, g dan x, dengan syarat g < p dan 1 x p 2 - Hitung y = g x mod p. Hasil dari algoritma ini: - Kunci Publik : triple(y, g, p) - Kunci Privat : pair(x, p) Enkripsi - Susun plainteks menjadi blok-blok m 1 , m 2 ,..., (nilai setiap blok di dalam selang [0, p 1]. - Pilih bilangan acak k , yang dalam hal ini 1 k p 2. - Setiap blok m dienkripsi dengan rumus a = g k mod p b = y k m mod p Pasangan a dan b adalah cipherteks untuk blok pesan m. Jadi, ukuran cipherteks dua kali ukuran plainteksnya.

Upload: trandieu

Post on 11-Jun-2018

213 views

Category:

Documents


0 download

TRANSCRIPT

  • Makalah IF3058 Kriptografi Sem. II Tahun 2011/2012

    Implementasi Proteksi Ganda Dengan Menggabungkan Algoritma El Gamal dan Vigenere Cipher

    Ignatius Ronaldo Galman Kurniawan - 13509074 Program Studi Teknik Informatika

    Sekolah Teknik Elektro dan Informatika Institut Teknologi Bandung, Jl. Ganesha 10 Bandung 40132, Indonesia

    [email protected]

    Abstrak Algoritma El Gamal adalah algoritma

    kunci asimetrik yang digunakan untuk kriptografi

    kunci publik yang telah dikembangkan sedemikian

    rupa dengan berbasiskan pertukaran kunci Diffie-

    Hellman sehingga dapat digunakan untuk melakukan

    enkripsi dan dekripsi pesan. Algoritma ini memiliki

    keamanan yang relatif tinggi dikarenakan

    memecahkan masalah logaritma diskrit bukanlah

    perkara mudah bahkan dengan menggunakan kemampuan k omputasi dewasa ini yang notabene

    sudah sangat maju dan berkembang dengan pesat. Demikian pula dengan Vigenere Cipher yang

    merupak an sebuah algoritma Kriptografi klasik yang

    cukup populer. Oleh karena itu menarik untuk

    diimplementasikan bagaimana penggabungan

    algoritma kriptografi modern dan klasik dan tentunya

    ada kelebihan maupun kekurangan yang ada dari

    hasil penggabungan algoritma El Gamal dan Vigenere

    Cipher ini .

    Kata KunciDiffie-Hellman, El Gamal , Vigenere Cipher.

    I. PENDAHULUAN

    Kriptogtafi merupakan seni dan ilmu yang digunakan

    untuk menyembunyikan pesan yang memiliki beberapa

    terminologi dasar[1]. Terminologi dasar yang penting

    diantaranya adalah pengirim pesan, penerima pesan,

    pesan, plainteks, cipherteks, enkripsi, dekripsi dan kunci.

    Sejatinya Algoritma El Gamal adalah algoritma

    kriptografi modern yang digunakan pada mulanya untuk

    digital signature atau tanda tangan digital dengan

    berdasarkan pada prinsip pertukaran kunci Diffie-

    Hellman yang merupakan algoritma kunci publik. Namun

    demikian, El Gamal mengalami modifikasi sehingga

    dimungkinkan melakukan enkripsi dan dekripsi pesan

    dengan menggunakan algoritma in i.

    Vigenere Cipher merupakan sebuah Algoritma

    Kriptografi klasik yang memiliki 8 elemen tersebut.

    Disebut algoritma klasik karena algoritma in i tergolong

    algoritma dasar karena menggunakan algoritma berbasis

    karakter dan dapat dipecahkan tanpa menggunakan

    komputer. Akan tetapi algoritma ini tentunya bisa

    diimplementasikan ke dalam program komputer.

    Dalam makalah ini akan dibahas implementasi proteksi

    ganda dengan menggabungkan Algoritma Modern El

    Gamal dengan Algoritma Klasik Vigenere Cipher.

    II. DASAR TEORI

    Algoritma El Gamal[1][2]

    Algoritma El Gamal adalah algoritma ekripsi/dekripsi

    dengan kunci asimetris untuk kriptografi kunci publik

    yang berdasarkan pada Algoritma Pertukaran kunci

    Diffie-Hellman[3]. Adalah seorang Mesir-Amerika Taher

    El Gamal memperkenalkannya ke publik pada tahun

    1984. Pertama kali dikemukakan di dalam makalah

    berjudul "A public key cryptosystem and a signature

    scheme based on discrete logarithms.

    Keamanan algoritma in i adalah bahwa perkara sulit untuk

    menghitung logaritma diskrit.

    Komponen dari enkripsi El Gamal adalah : key generator,

    algoritma enkripsi, dan algoritma dekripsi.

    Properti dari A lgoritma in i adalah:

    Properti Keterangan

    Bilangan Prima p Tidak rahasia

    Bilangan acak g (g < p) Tidak rahasia

    Bilangan acak x (x < p) Rahasia, Kunci Privat

    y = gx mod p Tidak rahasia, Kunci Publik

    Plaiteks m Rahasia

    Cipherteks a dan b Tidak rahasia

    Generate Key

    Melakukan generalisasi kunci adalah sebagai berikut:

    - Pilih sembarang bilangan prima p ( p dapat di-share di antara anggota kelompok)

    - Pilih dua buah bilangan acak, g dan x, dengan

    syarat g < p dan 1 x p 2

    - Hitung y = gx mod p.

    Hasil dari algoritma ini:

    - Kunci Publik : triple(y, g, p) - Kunci Privat : pair(x, p)

    Enkripsi

    - Susun plainteks menjadi blok-blok m1, m2,...,

    (nilai setiap blok di dalam selang [0, p 1].

    - Pilih bilangan acak k , yang dalam hal ini

    1 k p 2.

    - Setiap blok m dienkripsi dengan rumus

    a = gk mod p

    b = ykm mod p

    Pasangan a dan b adalah cipherteks untuk blok pesan m.

    Jadi, ukuran cipherteks dua kali ukuran plainteksnya.

  • Makalah IF3058 Kriptografi Sem. II Tahun 2011/2012

    Dekripsi

    - Gunakan kunci p rivat x untuk menghitung

    (ax) 1

    = ap 1 x

    mod p

    - Hitung plainteks m dengan persamaan:

    m = b/ax mod p = b(a

    x) 1

    mod p

    Vigenere Cipher[1][5]

    Vigenere Cipher adalah metode enkripsi teks alfabet

    dengan menggunakan deretan Caesar Cipher berdasarkan

    huruf - huruf pada kunci. Vigenere Cipher ditemukan oleh

    Blaise de Vigenere dari Prancis pada tahun 1586.

    Walaupun metode ini sudah ditemukan sebelum

    Vigenere, yaitu oleh Giovan Bat ista Belaso pada tahun

    1553, akan tetapi Vigenere lah yang menyempurnakan

    metode ini sehingga Vigenere leb ih dihormati dan

    algoritma ini dinamai Vigenere Cipher. Metode ini sangat

    terkenal karena kemudahan untuk digunakan bagi semua

    orang dan sulit untuk dipecahkan bagi pemula pada

    zamannya.

    Metode ini baru bisa dipecahkan pada abad ke-19 o leh

    Charles Babbage, seorang matematikawan dari Inggris .

    Dan Friedrich Kasiski mempublikasikan cara

    memecahkan Vigenere Cipher, sehingga metode ini

    dinamakan tes Kasiski.

    Penggunaan Vigenere Cipher adalah oleh Tentara

    Konfederasi pada saat Perang Sipil Amerika. Perang ini

    meletus setelah Vigenere Cipher berhasil dipecahkan.

    Cara Kerja Vigenere Cipher adalah menggunakan tabel

    Vigenere untuk melakukan enkripsi. Kolom paling kiri

    menyatakan kunci, sedangkan bagian atas menyatakan

    plainteks.

    Setiap baris dari bu jur sangkar menyatakan cipherteks

    yang diperoleh dengan Caesar Cipher, yang pergeseran

    huruf ditentukan nilai desimal o leh huruf kunci. (a=0,

    b=1, ..., y = 24, z = 25).

    Tabel Vigenere digunakan untuk memperoleh cipherteks

    dengan menggunakan kunci yang sudah tetap dengan

    panjang tertentu. Jika panjang kunci kurang dari

    plainteks, maka penggunaan kunci akan dilakukan secara

    periodik.

    Contoh:

    Plainteks : saya ganteng

    Kunci : asda sdasdas

    Perhatikan bahwa kunci asd diulang sampai sejauh

    plainteks. Setiap huruf d i plainteks akan dienkripsi

    dengan kunci di bawahnya.

    Cara enkripsi adalah dengan menarik garis vertikal huruf

    plainteks ke bawah dan menarik garis horizontal huruf

    kunci ke kanan. Dengan demikian perpotongan kedua

    garis ini akan menghasilkan sebuah huruf yang

    merupakan sebuah cipherteks.

    Misalkan plainteks huruf G dengan Kunci S, maka

    dengan tabel Vigenere akan dihasilkan perpotongan huruf

    G dan S yaitu huruf Y.

    Ilustrasi seperti gambar di bawah:

    Gambar 1 Ilustrasi Penggunaan Tabel Vigenere

    Dan Cipherteks dari saya ganteng dengan kunci asd

    adalah:

    Plainteks : saya ganteng

    Kunci : asda sdasdas

    Cipherteks : ssba ydnlhny

    Rumus Matematis dari Vigenere Cipher adalah sebagai

    berikut:

    Rumus Enkripsi:

    Ci = (Pi + Ki) mod 26 Pi+Ki < 26

    Ci = ((Pi + Ki) 26) mod

    26

    Pi+Ki > 26

    Rumus Dekripsi:

    Pi = (Ci-Ki) mod 26 CiKi > 0

    Pi = ((Ci-Ki) + 26) mod 26 Ci-Ki < 0

    Dengan :

    Pi : nilai desimal karakter plainteks ke-i

    Ci : nilai desimal karakter cipherteks ke-i

    Ki : n ilai desimal karakter kunci ke-i

    Nilai desimal karakter adalah :

    A = 0, B = 1, C = 2, D = 3, . . . , Z = 25.

  • Makalah IF3058 Kriptografi Sem. II Tahun 2011/2012

    III. IMPLEMENTASI DALAM PROGRAM KOMPUTER DAN ANALISIS

    Implementasi program in i memiliki ide sebagai berikut:

    Suatu pesan/file/plainteks P mula-mula akan dienkripsi

    dengan menggunakan Algoritma El Gamal dan

    menghasilkan cipherteks C.

    Kemudian C akan menjadi plainteks untuk enkripsi kedua

    menjadi P. P d ienkripsi lagi dengan Vigenere Cipher

    menjadi C.

    Untuk melakukan dekripsi maka C akan didekripsi

    dengan Vigenere Cipher menjadi P, dan P akan

    didekripsi dengan El Gamal untuk mendapatkan kembali

    plainteks P.

    Fungsi fungsi utama dalam program adalah sebagai

    berikut:

    Fungsi untuk generate key

    Fungsi untuk mengelompokkan dalam b lok sebelum dienkripsi secara El Gamal

    Fungsi untuk melakukan enkripsi secara El

    Gamal

    Fungsi untuk melakukan enkripsi secara Vigenere

    Fungsi untuk menyimpan cipherteks ke dalam file

    Fungsi untuk memuat cipherteks

    Fungsi untuk melakukan dekripsi secara Vigenere

    Fungsi untuk melakukan dekripsi secara El

    Gamal

    Generate Key

    Melakukan generate terhadap p, g, x, y secara random.

    Program menyediakan fitur berupa dapat memilih

    panjang bit bilangan yang ingin digeneralisasi.

    public void generateKey(int numberBit)

    {

    p = BigInteger.probablePrime(numberBit - 1, new

    Random());

    while ((g = new BigInteger(numberBit - 1, new

    Random())).compareTo(p) >= 0);

    while ((x = new BigInteger(numberBit - 1, new

    Random())).compareTo(p) >= 0);

    y = g.modPow(x, p);

    }

    Enkripsi Pertama (El Gamal)

    Enkripsi pertama d ilakukan dengan cara El Gamal dengan

    mengikuti rumus rumus yang sudah dijabarkan pada

    bagian dasar teori dimana hasil enkripsi in i akan

    menghasilkan rangkaian dari heksadesimal yang

    panjangnya dua kali dan berukuran dua kali pula dari

    panjang dan ukuran plainteksnya.

    Melakukan Pengelompokkan Blok

    Sesuai dengan rumus El Gamal bahwa sebelum dienkripsi

    rangkaian plainteks harus dipecah-pecah dan dipisah ke

    dalam kelompok tertentu.

    Enkripsi Kedua (Vigenere)

    Menggunakan Rumus Enkripsi Vigenere Cipher 256

    karakter: private byte encryptVigenere(byte input, char

    key){

    return (byte)(((int)(input &0xff) +

    (int)key)%256);

    }

    Dekripsi Pertama (Vigenere)

    Menggunakan Rumus Dekripsi Vigenere Cipher 256

    karakter: private byte decryptVigenere(byte input, char

    key){

    return (byte)(((int)(input &0xff) -

    (int)key)%256);

    }

    Dekripsi Kedua (El Gamal)

    Dekripsi El Gamal in i juga dilakukan dengan

    menggunakan rumus El Gamal yang sudah dibahas dalam

    dasar teori. Dekripsi ini

    Ujicoba program:

    Skenario Ujicoba Program adalah sebagai berikut :

    Melakukan Load terhadap file teks Test.txt Melakukan Generate Key dengan panjang bit

    kunci 1000 bits

    Memasukkan kata kunci VigenereCipher untuk enkripsi kedua

    Menyimpan file cipherteks yang sudah dienkripsi dua kali dengan nama Cipher.txt

    Melakukan load file cipherteks yang dimaksud

    dan melakukan dekripsi.

    Plainteks kembali seperti semula .

    Input:

    Berkas teks

    Teks Sebenarnya

    Aku ingin begini .

    Aku ingin begitu .

    Ingin in i , ingin itu banyak sekali . .

    Semua, semua, semua

    Dapat dikabulkan

    dapat dikabulkan dengan kantong ajaib

    Aku ingin terbang bebas di angkasa

    "Hey! Baling-baling Bambu!!"

    La,la,la

    Aku sayang sekali...

    Doaremon...

    La,la,la aku sayang sekali

    Doraemon...

    Dalam Heksadesimal 416B7520696E67696E20626567696E69202E0D0A416B7520

  • Makalah IF3058 Kriptografi Sem. II Tahun 2011/2012

    696E67696E20626567697475202E0D0A496E67696E20696E

    69202C20696E67696E206974752062616E79616B2073656B

    616C69202E202E0D0A0D0A53656D75612C2073656D75612C

    2073656D75610D0A44617061742064696B6162756C6B616E

    0D0A64617061742064696B6162756C6B616E2064656E6761

    6E206B616E746F6E6720616A6169620D0A0D0A416B752069

    6E67696E2074657262616E6720626562617320646920616E

    676B6173610D0A22486579212042616C696E672D62616C69

    6E672042616D62752121220D0A0D0A4C612C6C612C6C610D

    0A416B7520736179616E672073656B616C692E2E2E0D0A44

    6F6172656D6F6E2E2E2E0D0A0D0A4C612C6C612C6C612061

    6B7520736179616E672073656B616C690D0A446F7261656D

    6F6E2E2E2E

    Nilai p:

    5269806298302442448805339068623952727515309781

    4183557526223766612701895460177278682611321423

    8628120209300577071158656494933298558077201651

    9836479765222431183906154932502872885795007128

    4499322704413330304467406875513633682660272253

    3326107534502140668508724135368903325860245399

    6279029411601314689650811

    Nilai g:

    2494546075204825813692230069242909497667566923

    9574728639785617101816563075268699560575313597

    1557511785597358942415629727135869775074880523

    0535275448167025623029897914743042821003823963

    9290406312757642230928495477229734752632778313

    5318418501512724794861818721429683579591070914

    7330067029141203837333960

    Nilai x:

    9572702698229201597791768999288049670256114352

    6355202002435429778823256470736407314295261539

    5166817670630957919577124101252125157474144760

    1772859105309760907935881920010492958500001114

    8660904981609394635750031651452848694613701833

    5249983777632600224316922992432852013744722152

    064724254623503130903969

    Nilai y:

    4863913975640194054239130951813900075870166106

    1760769848904388844680852706566125828218318110

    9791010572662646551320962710146911389671153369

    4384585043880707251698145684346983649182930172

    5447401998904756671083806042518378246806597982

    6867723081624989537965472503741530962214459304

    7425362372833870211823232

    Output:

    Cipherteks 1 (El Gamal)

    Dalam heksadesimal 3B725DAFFEA1CB09238F10FDE8297CDFF63A5BE718A90DA9

    7754290C8611CFC6F5C70EEF7463F30521A354E113633324

    8F755790B80D24AEF232765D3B737E42A18C81B99FD6B910

    4D2A3BC53371F25F7733C7D17D020F554699B39DD62EB231

    CD600D8F5F9D58EEA85ECB7AF01A93CDFAFCB09DB7F69A42

    D8FEFC1AFC380EBDB8F1B83059CB4E35DC9E56C2E1939F1B

    8EF1C8CB16F2470464316A779592B4867F2DCF2D123FD733

    8F5907E8BBAEDAB94B8A09B4FC06BF2D09517F00D061F978

    F1F683B344EBFC86643F3ACF95C704EBD85832EA59B6621A

    FED2A1D52E600899A47A56DF4BEB52F2E3D549A5551CFD2B

    D9CF13F6987622B75D2B502CDFB3268D40053499352F1E90

    1F8EBC0C88230357256F6933DD68B71806E2A080ED4E8314

    B6A5168AB44302A86DE3745D962BFC241EF3C395AA795F86

    2DDD31846CF07303B5053B9192F620B3D16FF2E5B36B42EC

    58FF373058F006FC1D58DE7D8AAC0AC78B27CBF8056A8A12

    86A64167D007BD6C60558016A468212E5767207AA0D3BC63

    5A399A21587EB9AA04D53B2523523AB1153177319AF73391

    D478B39E3D60DBBDB1CDC93EA66515ED8DEA600C5BE6BE13

    9409C04B966FCFE77C48652870D1CB534D38711E1631B812

    E01FD4FF7F91D12948955EF69A5B0D697A6FCA9AF5A1CD44

    321D2324907B680752330A2E4DFA1355023EBA63061725BC

    2CBCE79006DACC15B6B6E3781E883A167B74FB56FB324F46

    3716C7A062DBAAEC0911B3759A540994A07F525865B8C4D8

    BD2AFA0F884F4318BD6237BE6C1F48AC0A732DE6F9D9E2B9

    112F939394665C72D6D48CB319C8992F3264223E11FF218D

    64DD47950FFDAB51BCA1B00B931761E7AB331612567CF12D

    DE4E07A7CE3073A0D4DE51EBF46D25BBC350D8DA7881AD12

    AD5BE133061DE5ADFEBD1F886A2A99EAA0AC34B2D3F566F2

    A7D9202691BDDAB8251CD2422D4986C33924987B9C0A1D4F

    2FA85C1A466FB5627B65BF15A09CAF609B674ED05B18246F

    9B505D0422CB4695868D8B426B286A31EF49263D175177EF

    1600246DFC1A

    Teks sebenarnya

    Cipherteks 2 (El Gamal + Vigenere)

    Dalam heksadesimal 7B5B74144D23336A0A89858196F2CF28EC97A067621BBF5A

    24718AAF31810AFC94AB97EE4C82A3A8A95C2AF9E8977ABF

    0221F5DE695A5A4C1870978EDCE8261CF28EBCEE9436FF3B

    AE7CC6BCCAC07F32ADA014A238FA1CB45B55BF731D505F87

    BB695B1002E18EFF62A3B4E203C0BA45006E6B2CFE8FAC02

    D7D50F661F180A53EA4512BCF182D11509CF7B3883826A87

    D2B1531DDE98C10D18F6E0E9E45BA5BAE8ACF08E6559BE62

    BFAAA1CF8C15B1B72F1717E18C0838CCAF23740E6843131E

    C5BC038476F8642822D0545E0DE353706B2FAE7E4607849B

    8557679E52D7213D65936FD889D9EEDEF97A352A8A602A3C

    9F40780393B9512C3F8B67AD7A7437B3F694AD2A256FBA10

    2420D8553C9A5D1989336B7F6386D2E43C144F66C21A7193

    173949B11A70EE0594E99A57BCA22ADE8F995D36C60C494B

    2711EA1FA4219E1DC875980B6A8E7C399842941D83C7F7C3

    2850628BF76AA567E6A14A60694E9F0438EED4008B6E5892

    5F1CAEC27689F27F44E8096B47BC800C188D13D3568BB238

    57F07CA4BFFBF04BEA456C650E7DF699A3D99921B0EA9B13

    B0F72812C6E30ED75A573C3CE9098D9C183062CBE5A6E3A7

  • Makalah IF3058 Kriptografi Sem. II Tahun 2011/2012

    D746896F0AFE2A4F89BA752D3D51DAAD519DDA8845B051CC

    03B95C4731DF7AE4285DC20A8A3E4EE377AC6BCA2F9A9DA0

    E999F5E1E73D579D5B4D50EEE798390EF1CF3DF972A0CEFA

    A8AC54320D226FE93E132F38D5203BB1F0CEC11E494D5458

    2086280DFDEF353B6E3B7AB51C460BFAAE4C17FD00AA3FDE

    9BD503CBE5783533A57A0B5C379B12EE08A39BD26D61A413

    865F7819049D7CD88A0ADAB4AB381B87A6964A9D021D6AA4

    B834D9F9D775B71188C7FDCE9F6D4807A5F21A6076F70F85

    F21894010A0356FAF5FE38971FB4D487971CC09615AA7C24

    053AF583FE995BB33DF75C0EC4D6E40085B1E79FB34110A8

    09E57A0970AD7FF2AD55DAD316F53629A486D6C9C22F35F2

    DBD2DDDD210DACE05724D821BD01313366448A4CAF02ED06

    F8BC5C5126757BB58E330D015F526E7937E4DD67B9201923

    DEED39EB6E55

    Teks sebenarnya

    N

    Screenshot program:

    Gambar 2 Screenshot Ujicoba Program

    IV. KESIMPULAN

    Menggabungkan algoritma enkripsi El Gamal dan

    Vigenere Cipher adalah menggabungkan seni enkripsi

    modern dan klasik. Dan dengan menggunakan teknik in i,

    ketangguhan algoritma El Gamal yang terkenal akan

    semakin bertambah dengan adanya perlindungan ganda

    dengan menggunakan Vigenere Cipher. Keunggulan dari

    algoritma ini tentunya adalah semakin menyulitkan

    penyadap yang tidak berhak yang ingin membaca pesan.

    Karena selain dengan El Gamal stand alone pun sudah

    sulit dipecahkan, apalagi dengan teknik in i, penyadap

    harus menemukan kunci Vigenere terlebih dahulu baru

    kemudian memecahkan El Gamal. Kekurangan dari

    teknik ini adalah kepraktisannya menjadi berkurang,

    karena Vigenere yang merupakan algoritma kunci

    simetrik, maka dalam mengirimkan kunci untuk Vigenere

    harus melalui saluran yang aman.

    .

    REFERENSI

    [1] Munir, Rinaldi. 2006. Kriptografi. Bandung: Informatika. [2] http://agcrypt.wordpress.com/2008/02/25/elgamal-

    algorithm/http://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange

    [3] http://www.rsa.com/rsalabs/node.asp?id=2248 [4] http://malware.cbronline.com/news/father-of-ssl-says-the-bad-

    guys-are-winning [5] http://www.braingle.com/brainteasers/codes/vigenere.php

    PERNYATAAN

    Dengan ini saya menyatakan bahwa makalah yang saya

    tulis ini adalah tulisan saya sendiri, bukan saduran, atau

    terjemahan dari makalah orang lain, dan bukan plagiasi.

    Bandung, 11 Mei 2012

    ttd

    Ignatius Ronaldo Galman Kurn iawan 13509074

    http://agcrypt.wordpress.com/2008/02/25/elgamal-algorithm/http://agcrypt.wordpress.com/2008/02/25/elgamal-algorithm/http://agcrypt.wordpress.com/2008/02/25/elgamal-algorithm/http://www.rsa.com/rsalabs/node.asp?id=2248http://malware.cbronline.com/news/father-of-ssl-says-the-bad-guys-are-winninghttp://malware.cbronline.com/news/father-of-ssl-says-the-bad-guys-are-winninghttp://www.braingle.com/brainteasers/codes/vigenere.php

  • Makalah IF3058 Kriptografi Sem. II Tahun 2011/2012

    Lampiran

    Kode Sumber

    Fungsi Pengelompokkan Blok

    Private LinkedList

    createBlockCollection(byte[] buffer) throws

    NullPointerException, IOException

    {

    int length = (int)

    Math.ceil(((double)p.bitLength() + 1)/8) - 1;

    LinkedList result = new

    LinkedList();

    int i = 0;

    int j = 0;

    while (i < buffer.length)

    {

    byte[] temp = null;

    BigInteger tempBig = null;

    temp = new byte[length];

    if (i + length >= buffer.length)

    {

    System.arraycopy(buffer, i, temp, length -

    buffer.length + i, buffer.length - i);

    padding = (short)(length - buffer.length + i);

    }

    else System.arraycopy(buffer, i, temp, 0,

    temp.length);

    tempBig = new BigInteger(1,temp);

    result.add(tempBig);

    i += temp.length;

    }

    return result;

    }

    Fungsi Enkripsi Vigenere saat Save File

    public long saveData(File fileout,

    LinkedList input, boolean raw, String

    key) throws IOException

    {

    FileOutputStream fos = new

    FileOutputStream(fileout);

    int j = 0;

    if (!raw) {

    byte[] temp1 = shortToByteArray(padding);

    for (int i = 0; i < temp1.length; i++){

    temp1[i] = encryptVigenere(temp1[i],

    key.charAt((j++)%key.length()));

    }

    fos.write(temp1);

    for (int i = 0; i < input.size(); i++)

    {

    byte[] temp = input.get(i);

    for (int k = 0; k < temp.length; k++){

    temp[k] = encryptVigenere(temp[k],

    key.charAt((j++)%key.length()));

    }

    fos.write(temp);

    }

    } else {

    for (int i = 0; i < input.size(); i++)

    fos.write(input.get(i));

    }

    fos.close();

    return fileout.length();

    }

    Fungsi Dekripsi Vigenere saat Load File

    public LinkedList loadCipherTeks(File

    filein, String key) throws IOException,

    NullPointerException

    {

    int length = (int)

    Math.ceil(((double)p.bitLength() + 1)/8) * 2;

    LinkedList result = new

    LinkedList();

    FileInputStream fis = new

    FileInputStream(filein);

    byte[] bytePadding = new byte[2];

    fis.read(bytePadding);

    int j = 0;

    bytePadding[0] = decryptVigenere(bytePadding[0],

    key.charAt((j++)%key.length()));

    bytePadding[1] = decryptVigenere(bytePadding[1],

    key.charAt((j++)%key.length()));

    padding = byteArrayToShort(bytePadding);

    while (fis.available() != 0)

    {

    byte[] buffer = new byte[length];

    fis.read(buffer);

    for (int k = 0; k < buffer.length; k++){

    buffer[k] = decryptVigenere(buffer[k],

    key.charAt((j++)%key.length()));

    }

    result.add(buffer);

    }

    fis.close();

    return result;

    }

    protected static String byteArrayToString(byte[]

    input)

    {

    StringBuilder result = new StringBuilder();

    for (int i = 0; i < input.length; i++)

    {

    result.append(HexStringTable[input[i] & 0xff]);

    }

    return result.toString();

    }

    Fungsi Enkripsi El Gamal

    public LinkedList encryptData(byte[]

    data) throws NullPointerException, IOException

    {

    int length = (int)

    Math.ceil(((double)p.bitLength() + 1)/8);

    LinkedList blockCollection =

    createBlockCollection(data);

    LinkedList result = new

    LinkedList();

    for (int i = 0; i < blockCollection.size(); i++)

    {

    BigInteger k = null;

    BigInteger a = null;

    BigInteger b = null;

    byte[] cipher = new byte[2 * length];

    while ((k = new BigInteger(p.bitCount() - 2, new

    Random())).compareTo(p.subtract(new

    BigInteger("2"))) > 0 || k.compareTo(new

    BigInteger("1")) < 0);

    a = g.modPow(k, p);

    b = y.modPow(k,

    p).multiply(blockCollection.get(i)).mod(p);

    int sizeA = a.toByteArray().length;

    int sizeB = b.toByteArray().length;

    System.arraycopy(a.toByteArray(), 0, cipher,

    length - sizeA, sizeA);

  • Makalah IF3058 Kriptografi Sem. II Tahun 2011/2012

    System.arraycopy(b.toByteArray(), 0, cipher,

    cipher.length - sizeB, sizeB);

    result.add(cipher);

    }

    return result;

    }

    Fungsi Dekripsi El Gamal

    public LinkedList

    decryptData(LinkedList cipherCollection)

    {

    int length = (int)

    Math.ceil(((double)p.bitLength() + 1)/8);

    int blockLength = (int)

    Math.ceil(((double)p.bitLength() + 1)/8) - 1;

    LinkedList result = new

    LinkedList();

    for (int i = 0; i < cipherCollection.size();

    i++)

    {

    byte[] tempA = new byte[length];

    byte[] tempB = new byte[length];

    byte[] cipher = cipherCollection.get(i);

    byte[] plain = null;

    BigInteger a = null;

    BigInteger b = null;

    System.arraycopy(cipher, 0, tempA, 0, length);

    System.arraycopy(cipher, length, tempB, 0,

    length);

    a = new BigInteger(1,tempA);

    b = new BigInteger(1,tempB);

    BigInteger tempKey =

    a.modPow(p.subtract(x).subtract(new

    BigInteger("1")), p);

    plain =

    b.multiply(tempKey).mod(p).toByteArray();

    if (plain.length < blockLength)

    {

    byte[] tempPlain = null;

    if (i == cipherCollection.size() - 1) tempPlain

    = new byte[blockLength - padding];

    else tempPlain = new byte[blockLength];

    System.arraycopy(plain, 0, tempPlain,

    tempPlain.length - plain.length, plain.length);

    plain = tempPlain;

    } else if (plain.length > blockLength)

    {

    byte[] tempPlain = new byte[blockLength];

    System.arraycopy(plain, 1, tempPlain, 0,

    tempPlain.length);

    plain = tempPlain;

    }

    // System.out.println(i + " " + new

    BigInteger(1,plain));

    result.add(plain);

    }

    return result;

    }