Keamanan Data Dan Metode Enkripsi

Posted: Selasa, 30 Maret 2010 by feri van iero in
1

Aspek keamanan data sebenarya meliputi banyak hal yang saling berkaitan, tetapi khusus dalam tulisan ini penulis akan membahas tentang metoda enkripsi dan keamanan proteksi data pada beberapa program-program aplikasi umum. Hampir semua program aplikasi seperti MS Word, WordPerfect, Excel, PKZip menyediakan fasilitas proteksi data dengan pem-password-an, tapi sebenarnya fasilitas ini mudah untuk dibongkar. Bahkan program khusus proteksi data seperti Norton Diskreet (mungkin sekarang sudah jarang digunakan) yang memproteksi data dengan metoda DES ataupun metoda “proprietary” yang lebih cepat, sebenarnya sangat tidak aman.

Metoda DES yang digunakan mempunyai kesalahan dalam implementasinya yang sangat mengurangi keefektipan dari metoda tersebut. Walaupun dapat menerima password sampai 40 karakter, karakter ini kemudian diubah menjadi huruf besar semua dan kemudian di-reduce menjadi 8 karakter. Hal ini menyebabkan pengurangan yang sangat besar terhadap kemungkinan jumlah kunci enkripsi, sehingga tidak hanya terbatasnya jumlah password yang mungkin, tetapi juga ada sejumlah besar kunci yang equivalen yang dapat digunakan untuk mendekrip file. Sebagai contoh file yang dienkrip dengan kunci ‘xxxxxxx’ dapat didekrip dengan ‘xxxxxx’, ‘xxxxyy’, ‘yyyyxx’. PC Tools (mungkin ini juga sudah sulit ditemukan) adalah contoh lain paket software yang menyediakan fasilitas proteksi data yang sangat tidak aman. Implementasi DES pada program ini mengurangi ’round’ pada DES yang seharusnya 16 menjadi 2, yang membuatnya sangat mudah untuk dibongkar.

Beberapa program akan secara otomatis membongkar proteksi program aplikasi seperti MS Word, Excel, Word Perfect, PKZip 2.x, Quattro Pro, dll dengan sangat mudah, bahkan ada program yang menambahkan ‘delay loop’ sehingga seolah-olah program tersebut sedang bekerja keras membongkar password. Salah satu perusahaan tersebut adalah Access Data (http://www.accessdata.com), mereka membuat software yang dapat membongkar WordPerfect (versi 4.2-6.1, enkripsi ‘regular’ atau ‘enhanced’, Microsoft Word (versi 2.0-6.1), Microsoft Excel (semua versi termasuk versi Macintosh), Lotus 1-2-3 (semua versi), Quattro Pro, Paradox, Pkzip, Norton’s Diskreet (baik metoda DES maupun ‘proprietary’), Novell NetWare (versions 3.x-4.x), dll. Access Data menyediakan program demo yang dapat memecahkan password sampai 10 karakter. Untuk mendapatkannya coba ftp site-nya di ftp.accessdata.com pada directory /pub/demo. Penulis sendiri telah mencoba program demo pembongkar passwordnya (untuk WordPerfect) yang jalan pada Windows 95, tetapi sayang hanya dapat menampilkan jumlah karakter yang digunakan pada password kita. Penulis juga telah melihat ada program lokal berbasis DOS yang dapat membongkar password Word 6.0/7.0. Alasan utama kurang baiknya proteksi dari program-program diatas adalah mungkin untuk mendapatkan izin ekspor dari pemerintah Amerika Serikat dengan mudah, karena di sana untuk mengekspor program enkripsi yang kuat memerlukan izin yang ketat dari pemerintah. Dan mengekspor program enkripsi sama dengan mengekspor amunisi sehingga sangat dibatasi bahkan dikenai hukuman bagi yang melanggarnya. Contoh klasik adalah apa yang menimpa Philip Zimmermann yang diadili karena program PGP yang ia buat dan menyebar ke seluruh dunia.

Untuk proteksi data yang cukup penting tidak ada jalan lain selain menggunakan program khusus proteksi/enkripsi data. Saat ini telah banyak beredar program khusus proteksi data baik freeware, shareware, maupun komersial yang sangat baik. Pada umumnya program tersebut tidak hanya menyediakan satu metoda saja, tetapi beberapa jenis sehingga kita dapat memilih yang menurut kita paling aman. Contoh program tesebut yang penulis ketahui seperti :

  • BFA 97 (Blowfish Advanced 97) yang menyediakan metoda ekripsi : Blowfish, Idea, Triple DES, GOST, Cobra128, PC-1 (RC4 compatible), dan Twofish. Program demo dari paket ini menyediakan pem-password-an hanya sampai 5 huruf. Selain itu paket ini menyediakan fasilitas ‘disk key’ yaitu kunci pada disket, sehingga kita tidak perlu mengingat-ingat password. Tetapi dengan cara ‘disk key’ ini ada masalah yaitu bila disketnya rusak atau hilang maka kita akan kehilangan semua data kita.
  • Kremlin yang menyediakan proteksi data Blowfish, Idea, DES/Triple DES, dll.
  • F-Secure yang menyedikan metoda proteksi Blowfish, RSA, DES/Triple DES dan RC4. Produk ini dirancang untuk sistem jaringan.
  • Cryptext merupakan freeware, extension Windows 95/NT shell yang yang menggunakan RC4 untuk mengenkripsi file yang menggunakan kunci 160 bit yang dihasilkan dari digest SHA terhadap password yang kita masukkan.
  • PGP, merupakan program enkripsi sistem kunci publik (asimetrik) dan biasanya digunakan untuk untuk enkripsi e-mail, tetapi dapat juga digunakan untuk enkripsi konvensional (simetrik). PGP menggunakan RSA sebagai sistem kunci publik dan Idea sebagai metoda enkripsi simetrik dan MD5 untuk message digest. PGP merupakan freeware tersedia untuk DOS (versi 2.6.x, tersedia beserta source programnya) dan Windows 95/NT (versi 5.x).
  • Pegwit, seperti PGP merupakan program ekripsi sistem kunci publik, walaupun masih sangat sederhana (versi 8.71). Pegwit menggunakan Elliptic Curve untuk sistem kunci public dan Square untuk enkripsi simetrik dan SHA-1 untuk message digest. Pegwit tersedia untuk DOS (16 dan 32 bit) dan menyertakan juga source programnya.
  • Selain itu juga terdapat program untuk enkripsi ‘on the fly’/'real time’ yang dapat mengenkripsi harddisk, partisi, atau suatu direktori tertentu secara transparan. Dengan cara ini kita tidak perlu memilih satu persatu file yang akan kita enkrip, tetapi program yang akan melaksanakannya. Salah satu contoh jenis ini adalah Norton Your Eyes Only, yang menggunakan metoda enkripsi Blowfish. Contoh lain adalah ScramDisk (versi 2.02) yang dapat digunakan untuk Windows 95/98, program ini merupakan program bebas dan tersedia beserta source programnya (http://www.hertreg.ac.uk/ss/). Scramdisk menyediakan beberapa metoda enkripsi seperti Blowfish, Tea, Idea, DES, SquareWindows NT bahkan sudah menyediakan fasilitas mengenkrip , Misty dan Triple DES 168 bit. Microsoft 5.0 yang akan datang direktori dengan menggunakan metoda DES.

Lalu bagaimana dengan program enkripsi produk lokal ?. Sampai saat ini penulis memperhatikan telah banyak program proteksi data yang telah diterbitkan pada majalah Mikrodata ataupun Antivirus, tetapi jarang sekali yang cukup baik sehingga dapat dipercaya untuk melindungi data yang cukup penting. Sebagai contoh penulis akan membahas program Multilevel Random Encryption versi 1.4 (pada Antivirus no. 5) yang menurut penulisnya menggunakan proteksi ganda dengan triple covery (?) dengan langkah-langkah overdosis (?), mempunyai kelebihan dan sekuritas tinggi (?), kunci covery dapat diganti sesuka anda, sehingga pembuat MRE sendiri tidak dapat memecahkanya (?). Lalu coba kita analisa bersama-sama, program ini mempunyai satu kunci yang di-hard coded di tubuh program kemudian satu kunci lagi yang dipilih secara random dari random generator standar, yang fatalnya kunci ini juga disimpan didalam hasil enkripsi. Plaintext dioperasikan (XOR) dengan kedua kunci ini dan data dibolak balik dalam 6 byte blok menghasilkan ciphertext. Dengan mengengkrip data dengan kunci yang sama saja sudah jelas akan dihasilkan data yang sama, contohnya karakter ASCII 52 akan menjadi karakter ASCII 235, maka dibagian manapun pada data karakter ASCII 52 akan tetap menjadi karakter ASCII 235, ini merupakan suatu cara untuk membongkar file hasil enkripsi. Kesalahan fatal lain adalah menyertakan password pada data hasil enkripsi sehingga dengan mudah dapat dicari passwordnya. Sehingga dengan logika sangat sederhana saja sudah dapat membongkar program ini. Penulis juga telah membuat program yang sangat sederhana untuk mencari password dari data yang telah diproteksi dengan program ini, seperti dapat dilihat pada listing (MREBR.PAS) dalam mrebr.zip.

Terlepas dari aman atau tidak, penulis sangat menghargai kreatifitas programmer-programmer di negara kita, sehingga penulis selalu tertarik jika ada artikel tentang program proteksi data di majalah ini, meskipun (sekali lagi) sangat jarang metoda-metoda tersebut dapat memberikan proteksi yang baik terhadap data kita. Meskipun hanya sebagai kegiatan sampingan, saat ini penulis telah mengumpulkan beberapa metoda enkripsi yang sudah diakui keampuhannya (kebanyakan sumbernya dalam bahasa C) dan mem ‘port’ nya ke dalam bahasa Pascal/Delphi dan bila redaksi Antivirus berkenan maka penulis akan membahasnya pada beberapa tulisan yang akan datang. Alasan penulis mem-port ke Delphi karena kebanyakan rutin-rutin tersebut ditulis dengan bahasa C dan sedikit sekali dari rutin-rutin yang tersedia bagi programmer Delphi. Walaupun paling tidak ada satu site (TSM Inc, http://crypto-central.com/index.html) yang menyediakan komponen cryptography (Blowfish, DES, RC6, Twofish, RSA, Eliptic Curve, SHA) untuk Delphi/C++ Builder, tetapi komponen tersebut tidak disertai source dan bila ingin disertai source harus membelinya dengan harga kurang lebih US $100 per komponen. Metoda-metoda yang telah berhasil di-port diantaranya yang klasik seperti DES dan modifikasinya Triple DES, metoda-metoda yang lebih modern seperti GOST (Russian DES), Blowfish, RC2, RC4, RC5, Idea, Safer, MDS-SHS, Square. Juga penulis masih dalam proses mem-port metoda mutakhir yang ikut kontes AES (Advances Encryption Standard) yang akan digunakan sebagai standar pada dekade mendatang, seperti Twofish, RC6, Safer+ dan Mars. (Sebagai informasi sampai tanggal 20 Agustus 1998 ada 15 kandidat, yaitu : Cast-256, Crypton, Deal, DFC, E2, Frog, HPC, Loki97, Magenta, Mars, RC6, Rijndael, Safer+, Serpent dan Twofish). Selain itu ada metoda ’secure hash’ seperti MD5 dan SHA, ’secure pseudo random number generator’ seperti pada PGP (ANSI X9.17), peggunaan SHA-1 untuk random number generator dan George Marsaglia’s the mother of all random number generators . Juga mungkin suatu saat metoda public key cryptosystem, tetapi penulis tidak terlalu yakin akan hal ini sebab metoda ini cukup rumit dan memerlukan kode program yang cukup panjang, karena melibatkan perhitungan dengan bilangan integer yang sangat besar. Meskipun demikian paling tidak penulis telah mem-port salah satu metoda publik key ini yaitu Elliptic Curve (Elliptic Curve Crypto version 2.1 dari Mike Rosing), meskipun belum sempat di-debug dan dites, karena kemudian penulis menemukan sistem yang lebih lengkap yaitu pada Pegwit 8.71 oleh George Barwood. Dan terakhir penulis juga menemukan rutin-rutin enkripsi yang ditulis oleh David Barton (http://sunsite.icm.edu.pl/delphi/ atau http://web.ukonline.co.uk/david.w32/delphi.html) tetapi rutin-rutin ini tampaknya kurang dioptimasi dengan baik sehingga performancenya kurang baik (cek site tersebut mungkin sudah ada perbaikan), bahkan untuk rutin Blowfish sangat lambat. Sebagai perbandingan penulis mengadakan test kecepatan, yang dilakukan pada Pentium Pro 200 dengan RAM 64MB dan sistem operasi Windows NT 4.0 (SR3), untuk mengenkrip 5MB data (kecuali Blowfish dari David Barton 1 MB) yang dikompile dengan Delphi 4.0 dan hasilnya dapat dilihat pada tabel dibawah ini :

Metoda

Rutin Penulis

Rutin Barton

Faktor

( x )

( Kbytes/detik)

Blowfish

6063,06

26,33

230,3

IDEA

1458,44

913,91

1,6

RC2

1867,76

640,37

2,9

RC4

9416,20

6429,49

1,5

RC5

5760,37

1907,91

3,0

RC6

4291,85

812,30

5,3

GOST

3524,44

-

-

Safer

1234,77

-

-

Skipjack

-

497,45

-

Dari tabel di atas terlihat performance dari metoda-metoda ekripsi yang telah di-port ke dalam Delphi rata-rata cukup baik bila di-optimize dengan benar, bahkan ada diantaranya yang lebih cepat (dicompile dengan Delphi 3.0, dengan directive {$O+;$R-;$Q-}) dibandingkan rutin C-nya yang dicompile dengan Borland C/C++ 5.2 (BCC32 dari Borland C++ Builder, dengan option optimize for speed,-O2), contohnya adalah Blowfish dan RC4. Faktor penting dalam optimasi dengan Delphi 32 bit (Delphi 2.x, 3.x, 4.0 tampaknya menggunakan metoda optimasi yang sama) adalah penggunaan variabel 32 bit (Integer/LongInt/LongWord), karena tampaknya Delphi ini dioptimasikan untuk operasi 32 bit. Contohnya adalah rutin Idea yang menggunakan beberapa variabel Word (16 bit) dalam proses ciphernya, ketika penulis mengganti variabel-variabel ini dengan Integer dan me-mask beberapa operasi yang perlu sehingga hasilnya masih dalam kisaran Word, akan meningkatkan performance kurang lebih 40%. Demikian juga dengan RC4 yang dalam tabel permutasinya menggunakan type Byte (8 bit) penulis mengganti dengan Integer, kecepatannya meningkat drastis. Walaupun demikian, dengan cara ini terjadi peningkatkan overhead penggunaan memori, seperti pada RC4 dari tabel 256 byte menjadi 256*4 = 1024 byte. Tetapi karena kita memakainya untuk implementasi software saja dan saat ini harga memori cukup murah jadi tidak terlalu menjadi masalah. Faktor lain dalam optimasi adalah menghindari pemanggilan fungsi/procedure dalam blok enkripsi utama, karena pemanggilan fungsi/procedure akan menyebabkan overhead yang sangat besar. Hal lain yang perlu dihidari adalah penggunaan loop (for, while, repeat) sehingga memungkinkan kode program dieksekusi secara paralel, terutama pada prosesor superscalar seperti Pentium atau yang lebih baru. Hal utama yang perlu diperhatikan dalam melakukan optimasi adalah selalu membandingkan hasilnya dengan ‘test vector’ baku yang biasanya disertakan oleh pembuatnya, dengan demikian kita yakin bahwa implementasi kita terhadap metoda cipher tersebut adalah benar.

Dari pengamatan penulis kekuatan dari metoda-metoda enkripsi adalah pada kunci (dari password yang kita masukkan) sehingga walaupun algoritma metoda tersebut telah tersebar luas orang tidak akan dapat membongkar data tanpa kunci yang tepat. Walaupun tentunya untuk menemukan metoda tersebut diperlukan teori matematika yang cukup rumit. Tetapi intinya disini ialah bagaimana kita mengimplementasikan metoda-metoda yang telah diakui keampuhannya tersebut didalam aplikasi kita sehingga dapat meningkatkan keamanan dari aplikasi yang kita buat.

Memang untuk membuat suatu metoda enkripsi yang sangat kuat (tidak dapat dibongkar) adalah cukup sulit. Ada satu peraturan tidak tertulis dalam dunia cryptography bahwa untuk dapat membuat metoda enkripsi yang baik orang harus menjadi cryptanalysis (menganalisa suatu metoda enkripsi atau mungkin membongkarnya) terlebih dahulu. Salah satu contohnya adalah Bruce Schneier pengarang buku Applied Crypthography yang telah menciptakan metoda Blowfish dan yang terbaru Twofish. Bruce Schneier (dan sejawatnya di Counterpane) telah banyak menganalisa metoda-metoda seperti 3-Way, Cast, Cmea, RC2, RC5, Tea, Orix, dll dan terbukti metoda yang ia buat yaitu Blowfish (yang operasi ciphernya cukup sederhana bila dibandingkan dengan DES misalnya) sampai saat ini dianggap salah satu yang terbaik dan tidak bisa dibongkar dan juga sangat cepat. Bahkan untuk menciptakan Twofish ia dan timnya di Counterpane menghabiskan waktu ribuan jam untuk menganalisanya dan sampai saat-saat terakhir batas waktu penyerahan untuk AES (15 Juni 1998) ia terus menganalisisnya dan menurutnya sampai saat inipun ia masih terus menganalisis Twofish untuk menemukan kelemahannya.

Bila ada diantara pembaca yang ingin mempelajari metoda-metoda cryptography lebih dalam, sebagai permulaan ada beberapa site di Internet yang menyediakan ‘link’ ke situs-situs cryptography seperti :

Counterpane, http://www.counterpane.com

Cryptography and Encryption, http://www.isse.gmu.edu/~njohnson/Security/crypto.htm

Tom Dunigan’s Security page, http://www.epm.ornl.gov/~dunigan/security.html

Delphi Security component, http://crypto-central.com/index.html

Dan banyak lagi, pembaca bisa menggunakan search engine untuk mencari site-site lain.

Dan juga beberapa ftp site yang menyediakan source program (kebanyakan dalam bahasa C/C++) seperti di :

- ftp://ftp.funet.fi/pub/crypt/cryptography/libs/

- ftp://ftp.hacktic.nl/pub/replay/pub/crypto/LIBS/

- ftp://idea.sec.dsi.unimi.it/pub/security/crypt/code

- ftp://ftp.psy.uq.oz.au/pub/Crypto/

- ftp://ftp.ox.ac.uk/pub/crypto/

FTP site ini semuanya terletak diluar Amerika Serikat/Canada sehingga bila men-down-load-nya kita tidak melanggar aturan larangan ekspor software enkripsi dari pemerintah Amerika Serikat.

Juga beberapa newsgroup yang dapat dibaca, walaupun penulis belum pernah mencobanya dan tidak mengetahui apakah ada provider yang menyediakannya.

Dan tentunya dengan mempelajari beberapa buku tentang cryptography akan sangat baik, walaupun tampaknya agak sulit mendapat buku demikian di negara kita.

Perlu juga diketahui bahwa ada diantara metoda-metoda enkripsi tersebut yang dipatenkan seperti Idea, Seal, RC5, RC6, Mars atau mungkin tidak diperdagangkan/disebarkan secara bebas (trade secret) seperti RC2, RC4. Dan ada juga yang bebas digunakan seperti Blowfish, Twofish, Sapphire II, Diamond II, 3-Way, Safer, Cast-256, dll., walaupun tentu saja secara etika kita harus tetap mencantumkan pembuatnya/penciptanya pada program kita.

Akhir kata penulis berharap semoga tulisan ini ada manfaatnya bagi pembaca majalah Antivirus sekalian.

Referensi :

1. Antivirus Media No. 5

2. Eric Bach, dkk, Cryptograhy-FAQ.

3. Peter C.Gutmann, SFS Version 1.20 Document.

4. Bruce Schneier, Applied Cryptography : Protocols, Algorithms, and Source Code in C, 2nd Edition

5. Philip Zimmermann, PGP 2.6.2 User Guide.

6. Berbagai site di Internet.

Catatan: beberapa link dari halaman ini mungkin sudah berubah

Metode Enkripsi PGP (Pretty Good Privacy)

Posted: by feri van iero in
0

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.

Beberapa istilah yang sering digunakan

  • cryptography/encryption

ilmu pengetahuan yang mempelajari pengacakan text sehingga tidak seorang pun yang dapat mengetahuinya kecuali bila ia tahu kode yang digunakan untuk men-dechipernya.

  • conventional cryptography

suatu metode encryption/enkripsi di mana suatu kunci digunakan untuk melakukan enksripsi dan dekripsi suatu plaintext.

  • encrypt/encipher

pengacakan/scramble dari suatu informasi.

  • decrypt/decipher

mengembalikan informasi yang telah diacak menjadi bentuk informasi yang semula.

  • ciphertext/cipher

text setelah dilakukan proses enkripsi

  • plaintext

text yang akan dienkripsi

  • key/kunci

kode yang digunakan untuk melakukan enchiper dan atau dechiper suatu text. Dalam kriptografi konvensional, kunci yang digunakan untuk enkripsi dan dekripsi adalah sama. Dalam public-key cryptography,kunci untuk enkripsi dan dekripsi berbeda.

  • public-key crypto

suatu sistem yang menggunakan dua kunci; yaitu public key dan the secret key yang lebih baik dan lebih praktis dibandingkan dengan conventional crypto. Tujuan utamanya adalah kemudahan dalam manajemen kunci.

  • algorithm/algoritma

algorithm adalah program crypto apa yang digunakan untuk melakukan enkripsi. Ia bukanlah suatu kunci, tetapi menghasilkan kunci. Suatu algoritma yang kuat/bagus akan manghasilkan crypto yang kuat.bagus juga. PGP menggunakan IDEA untuk bagian crypto yang konvensional, dan RSA untuk bagian public-key . keduanya adalah algoritma yang bagus, namun RSA lebih bagus daripada IDEA.

  • passphrase

adalah suatu word atau phrase, atau bahkan hanya karakter acak, yang digunakan PGP untuk mengidentifikasi seseorang sebagai person yang diinginkan oleh orang tersebut. Suatu passphrase sebaiknya lebih dari satu word, dan jangan pernah membuat yang orang lain dapat menebaknya, seperti nama, nama tengah, binatang kesayangan, nama anak, hari ultah, nama pacar, alamat, band favorit dsb. suatu passphrase yang ideal, adalah setengah dari baris text. Sebaiknya lebih dari tiga word dan mengandung hal-hal berikut: proper name, suatu slang atau vulgar word, dan irregular capitalization, sebagai contoh: tHe, benny, dll. JUGA, Sifat lainnya adalah ia harus mudah diketik secara cepat, tanpa error, dan tanpa perlu melihatnya pada layar.

  • public key

adalah suatu kunci yang memiliki sifat sebagai berikut : mempunyai suatu koneksi, sangat berbeda dari yang lainnya, didistribusikan dalam jumlah yang besar , melaluui banyak channel, secure atau insecure.

  • secret key

adalah suatu kunci yang dimiliki oleh kita dan hanya kita seorang, dan tidak pernah diperlihatkan kepada publik.

  • ASCII armor/radix-64

adalah suatu format yang digunakan PGP untuk mengkonversi default binary ciphertext, yang tidak dapat ditransfer melalui jaringan, menjadi suatu bentuk ASCII yang dapat dikirmkan melalui email atau usenet.

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.

ü 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

Ilustrasi Pemakaian PGP

· Public-key sangat lambat bila dibandingkan dengan konvensional, jadi PGP akan mengkombinasikan dua algoritma, yaitu RSA and IDEA, untuk melakukan enkripsi plaintext kita.

· Sebagai contoh, Badrun (pemilik PGP) ingin mengenkripsi suatu file yang diberi nama plain.txt sedemikian sehingga hanya si Matangin yang dapat mendekripsi-nya. Maka Badrun mengirimkan PGP perintah (command line) untuk melakukan enkripsi :

pgp -e plain.txt Matangin

Pada command line ini, pgp adalah file executable, -e berarti memberitahukan PGP untuk meng-encrypt file, plain.txt adalah nama plaintext, dan dul merepresentasikan public key suatu tujuan (Matangin) yang diinginkan Badrun untuk mengenkripsi message-nya. PGP menggunakan suatu random number generator, dalam file randseed.bin untuk menghasilkan suatu kunci (session key) temporary IDEA. Session key itu sendiri di-enkripsi dengan kunci RSA public yang direpresentasikan oleh Matangin yang disematkan pada plaintext.

· Kemudian, PGP menggunakan session key untuk mengenkripsi message, ASCII-armors dan menyimpan seluruhnya sebagai cipher.asc. Bila Matangin ingin membaca pesannya, ia mengetikkan command:

pgp cipher.asc

· PGP menggunakan secret key milik Matangin, yang merupakan kunci RSA, untuk men-dekripsi sessi kunci yang mana, yang jika dipanggil oleh Badrun akan dienkripsi oleh public key. kemudian, conventional crypto digunakan dalam bentuk session key untuk mendekripsi sisa dari message. Alasan prinsip ini adalah sebagai pengganti/kompensasi dari RSA karena "RSA is too slow, it's not stronger, and it may even be weaker." (-PGP Documentation, pgpdoc2.txt).

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

atau option TextMode diset ke ON:

pgp -a picture.gif +textmode=off

Metode Enkripsi Blowfish

Posted: by feri van iero in
0

Blowfish merupakan metoda enkripsi yang mirip dengan DES (DES-like cipher) dan diciptakan oleh Bruce Schneier yang ditujukan untuk mikroposesor besar (32 bit ke atas dengan cache data yang besar). Blowfish dikembangkan untuk memenuhi kriteria disain sebagai berikut:

  • Cepat, pada implementasi yang optimal Blowfish dapat mencapai kecepatan 26 clock cycle per byte.

  • Kompak, Blowfish dapat berjalan pada memori kurang dari 5 KB.

  • Sederhana, Blowfish hanya menggunakan operasi yang simpel: penambahan (addition), XOR, dan penelusuran tabel (table lookup) pada operand 32 bit. Desainnya mudah untuk dianalisa yang membuatnya resisten terhadap kesalahan implementasi.

  • Keamanan yang variabel, panjang kunci Blowfish dapat bervariasi dan dapat mencapai 448 bit (56 byte).

Blowfish dioptimasikan untuk aplikasi dimana kunci tidak sering berubah, seperti jalur komunikasi atau enkripsi file otomatis. Blowfish jauh lebih cepat dari DES bila diimplementasikan pada 32 bit mikroprosesor dengan cache data yang besar, seperti Pentium dan Power PC, Blowfish tidak cocok untuk aplikasi seperti packet switching, dengan perubahan kunci yang sering, atau sebagai fungsi hash satu arah. Kebutuhan memorinya yang besar tidak memungkinkan untuk aplikasi kartu pintar (smart card).

Deskripsi dari Blowfish

Blowfish merupakan blok cipher 64-bit dengan panjang kunci variabel. Algoritma ini terdiri dari dua bagian: key expansion dan enkripsi data. Key expansion merubah kunci yang dapat mencapai 448 bit menjadi beberapa array subkunci (subkey) dengan total 4168 byte.

Enkripsi data terdiri dari iterasi fungsi sederhana sebanyak 16 kali. Setiap putaran terdiri dari permutasi kunci-dependent dan substitusi kunci- dan data-dependent. Semua operasi adalah penambahan dan XOR pada variable 32-bit. Tambahan operasi lainnya hanyalah empat penelusuran tabel (table lookup) array berindeks untuk setiap putaran.

Blowfish menggunakan subkunci yang besar. Kunci ini harus dihitung sebelum enkripsi atau dekripsi data.

Array P terdiri dari delapan belas 32-bit subkunci:

P1,P2, . . . ,P18

Empat 32-bit S-box masing-masing mempunyai 256 entri:

S1,0, S1,1, . . . , S1,255

S2,0, S2,1, . . . , S2,255

S3,0, S3,1, . . . , S3,255

S4,0, S4,1, . . . , S4,255

Metoda selengkapnya untuk menghitung subkunci ini akan dijelaskan pada bagian bawah.

Blowfish merupakan algoritma yang menerapkan jaringan Feistel (Feistel network) yang terdiri dari 16 putaran. Input merupakan elemen 64 bit, X. Untuk mengenkrip:

Bagi X menjadi dua 32-bit: XL, XR

untuk i = 1 sampai 16

XL = XL xor Pi

XR = F(XL) xor XR

Tukar XL dan XR

Tukar XL dan XR (batalkan penukaran terakhir)

XR = XR xor P17

XL = XL xor P18

Kombinasikan kembali XL dan XR

Fungsi F adalah sebagai berikut:

Bagi XL, menjadi empat bagian 8-bit: a, b, c dan d

F(XL) = ((S1,a + S2,b mod 232) xor S3,c) + S4,c mod 232

Dekripsi sama persis dengan enkripsi, kecuali P1, P2, . . . , P18 digunakan pada urutan yang terbalik.

Subkunci dihitung menggunakan algoritma Blowfish, metodanya adalah sebagai berikut:

  1. Pertama-tama inisialisasi P-array dan kemudian empat S-box secara berurutan dengan string yang tetap. String ini terdiri digit hexadesimal dari pi.

  2. XOR P1 dengan 32 bit pertama kunci, XOR P2 dengan 32 bit kedua dari kunci dan seterusnya untuk setiap bit dari kunci (sampai P18). Ulangi terhadap bit kunci sampai seluruh P-array di XOR dengan bit kunci.

  3. Enkrip semua string nol dengan algoritma Blowfish dengan menggunakan subkunci seperti dijelaskan pada langkah (1) dan (2).

  4. Ganti P1 dan P2 dengan keluaran dari langkah (3)

  5. Enkrip keluaran dari langkah (3) dengan algoritma Blowfish dengan subkunci yang sudah dimodifikasi.

  6. Ganti P3 dan P4 dengan keluaran dari langkah (5).

  7. Lanjutkan proses tersebut, ganti seluruh elemen dari P-array, dan kemudian seluruh keempat S-box berurutan, dengan keluaran yang berubah secara kontinyu dari algoritma Blowfish.

Total diperlukan 521 iterasi untuk menghasilkan semua subkunci yang dibutuhkan. Aplikasi kemudian dapat menyimpan subkunci ini dan tidak dibutuhkan langkah-langkah proses penurunan ini berulang kali, kecuali kunci yang digunakan berubah.

Keamanan dari Blowfish

Tidak ada kelemahan yang berarti dari algoritma Blowfish yang dapat ditemukan sampai saat ini, kecuali adanya weak key, dimana dua entri dari S-box mempunyai nilai yang sama. Tidak ada cara untuk mencek weak key sebelum melakukan key expansion. Bila dikuatirkan hal ini dapat mengurangi keamanannya maka dapat dibuat rutin untuk mengecek entri S-box, walaupun hal ini tidak perlu.

Sampai saat ini tidak ada cryptanalysis yang berhasil tehadap Blowfish, untuk amannya jangan menggunakan Blowfish dengan kurang dari 16 putaran (round).

Aplikasi

Untuk mengaplikasikan metoda ini penulis membuat rutin dengan menggunakan Delphi yang dapat dilihat pada unit Blowfish.pas dan tabel inisialisasi bf_init.inc. Untuk mengecek kebenaran implementasi dari algortima ini penulis juga melengkapinya dengan prosedur self test yang dapat dilihat hasilnya dengan menjalankan program BFTest.dpr.

Saat ini banyak sekali aplikasi security yang menggunakan Blowfish sebagai metoda enkripsinya, untuk melihat aplikasi apa saja yang sudah menggunakan metoda ini dapat dilihat websitenya di Counterpane.

Pustaka

  • A. Menezes, P. van Oorschot and S. Vanstone, Handbook of Applied Cryptography, CRC Press, 1996.

  • B. Schneier, Applied Cryptography - Protocol, Algorithm, and Source Code in C, second edition, John Willey & Sons, 1996.

Metode enkripsi simetris RC4

Posted: by feri van iero in
0

Ketika internet menjadi salah satu media komunikasi yang banyak digunakan orang, sebagian orang kemudian berpikir untuk menjadikanya sebagai media untuk transaksi komersial semacan internet banking, e-comerce, dan lain sebagainya. Kebutuhan akan hal itu kemudian didukung dengan lahirnya berbagai metode ataupun algoritma – algoritma enkripsi untuk pengamanan data misalnya MD2,MD4,MD5,RC4,RC5, dan lain sebagainya. Pembakuan penulisan pada kriptografi dapat ditulis dalam bahasa matematika. Fungsi-fungsi yang mendasar dalam kriptografi adalah enkripsi dan dekripsi. Enkripsi adalah proses mengubah suatu pesan asli (plaintext) menjadi suatu pesan dalam bahasa sandi (ciphertext).

C = E (M)

dimana

M = pesan asli
E = proses enkripsi
C =
pesan dalam bahasa sandi (untuk ringkasnya disebut sandi)

Sedangkan dekripsi adalah proses mengubah pesan dalam suatu bahasa sandi menjadi pesan asli kembali.

M = D (C)
D = proses dekripsi

Dalam setiap transaksi di internet , idealnya, setiap data yang ditransmisikan harusnya terjamin :

  • Integritas data

Jaminan integritas data sangat penting, sehingga data yang di kirimkan akan sama persis dengan data yang diterima, tanpa mengalami perubahan apapun pada selama ditransmisikan.

  • Kerahasiaan data

Jaminan kerahasiaan data juga penting karena dengan demikian tidak ada pihak lain yang bisa membaca data yang ada selama data tersebut ditransmisikan.

  • Otentikasi akse data

Mekanisme otentikasi akses data menjamin bahwa data ditransmisikan oleh pihak yang benar dengan tujuan transimisi yang benar pula.

Teknik kriptografi data untuk enkripsi ada dua macam yaitu:

  • Kriptografi simetrik

Dengan model kriptografi ini, data di enkripsi dan didekripsi dengan kunci rahasia yang sama.

  • Kriptografi asimetrik

Dengan model kriptografi ini, data dienkripsi dan didekripsi dengan kunci rahasia yang berbeda.pasangan kunci untuk enkripsi dan dekripsi dikenal dengan private key dan public key.


Aplikasi kriptografi simetrik RC4 menggunakan Java

RC4 merupakan merupakan salah satu jenis stream cipher, yaitu memproses unit atau input data pada satu saat. Dengan cara ini enkripsi atau dekripsi dapat dilaksanakan pada panjang yang variabel. Algoritma ini tidak harus menunggu sejumlah input data tertentu sebelum diproses, atau menambahkan byte tambahan untuk mengenkrip. Metode enkripsi RC4 sangat cepat kurang lebih 10 kali lebih cepat dari DES.

Untuk melihat bagaimana metode enlripsi RC4 bekerja maka dalam tulisan ini dibuat aplikasi dengan menggunakan java, adapun source program tersebut adalah sebagai berikut :

Nama file : RC4Engine.java

—————-mulai—————-

class KeyParameter{

private byte[] key;

public KeyParameter(byte[] key){

this(key,0,key.length);

}

public KeyParameter(byte[] key,int keyoff,int keyLen){

this.key = new byte[keyLen];

System.arraycopy(key,keyoff,this.key,0,keyLen);

}

public byte[] getKey(){

return key;

}

}

class EncRC4Engine{

private final static int STATE_LENGTH = 256;

private byte[] engineState = null,workingKey = null;

private int x=0,y=0;

private static final char[] kDigits = {‘0′,’1′,’2′,’3′,’4′,’5′,’6′,’7′,’8′,’9′,’a',’b',’c',’d',’e',’f'};

EncRC4Engine(){}//constructor

public void init(boolean forEncryption,KeyParameter params){

if(params instanceof KeyParameter){

workingKey = ((KeyParameter)params).getKey();

setKey(workingKey);

return;

}

throw new IllegalArgumentException(“invalid parameter passed to RC4 init”+params.getClass().getName());

}

public void processBytes(byte[] in,int inOff,int len,byte[] out,int outOff){

if((inOff+len)>in.length){

throw new RuntimeException(“output buffer too short”);

}

if((outOff+len)>out.length){

throw new RuntimeException(“out put buffer too short”);

}

for (int i = 0 ; i <>

x = (x+1) & 0xff;

y = ( engineState[x] + y ) & 0xff;

//swap

byte tmp = engineState[x];

engineState[x] = engineState[y];

engineState[y] = tmp;

//xor

out[i + outOff] = (byte)(in[i+inOff] ^ engineState[(engineState[x] + engineState[y]) & 0xff]);

}

}

public String bytesToHex(byte[] raw){

int length = raw.length;

char[]hex = new char[length*2];

for (int i=0;i

int value = (raw[i]+256) % 256;

int highIndex = value >> 4;

int lowIndex = value & 0×0f;

hex[i*2+0] = kDigits[highIndex];

hex[i*2+1] = kDigits[lowIndex];

}

return (new String(hex)).toString();

}

public void reset(){

setKey(workingKey);

}

//private implementation

private void setKey(byte[] keyBytes){

workingKey = keyBytes;

x=0;y=0;

if (engineState == null){

engineState = new byte [STATE_LENGTH];

}

//reset the state of the engine

for(int i = 0;i <>

engineState[i]=(byte)i;

}

int i1=0;int i2=0;

for(int i=0;i <>

i2 = ((keyBytes[i1] & 0xff) + engineState[i]+ i2) & 0xff;

//do the byte swap inline

byte tmp = engineState[i];

engineState[i]=engineState[i2];

engineState[i2]=tmp;

i1=(i1+1) % keyBytes.length;

}

}

}

————-selesai—————-

nama file : TesRC4Engine.java

————-mulai—————-

import java.io.*;

class tesRC4Engine {

public static void main (String args[]){

try{

String myKey1, myKey2, text2Encrypt, text2Decrypt;

BufferedReader b;

byte[] ciphertext1;

byte[] ciphertext2;

EncRC4Engine s1 = new EncRC4Engine();

EncRC4Engine s2 = new EncRC4Engine();

b = new BufferedReader(new InputStreamReader(System.in));

System.out.print(“masukan data untuk encryption : “);

text2Encrypt = b.readLine();

System.out.print(“masukan kunci encryption : “);

myKey1 = b.readLine();

s1.init(true,new KeyParameter(myKey1.getBytes()));

ciphertext1 = new byte[text2Encrypt.length()];

s1.processBytes(text2Encrypt.getBytes(),0,text2Encrypt.length(),ciphertext1,0);

System.out.print(“hasil encrypt dari \”" + text2Encrypt);

System.out.println(“\” adalah ” + s1.bytesToHex(ciphertext1));

text2Decrypt = s1.bytesToHex(ciphertext1);

System.out.print(“masukan kunci untuk decrypt : “);

myKey2 = b.readLine();

s2.init(false,new KeyParameter(myKey2.getBytes()));

ciphertext2 = new byte[ciphertext1.length];

s2.processBytes(ciphertext1, 0, ciphertext1.length,ciphertext2,0);

System.out.print(“hasil decrypt dari \”" + text2Decrypt);

System.out.println(“\” adalah ” + (new String(ciphertext2)).toString());

}catch(IOException e){

e.printStackTrace();

}

}

}

———–selesai———–

Kompilasi dan hasil eksekusi dari source program diatas afalah sebagai berikut:

C:\>java TesRC4Engine

masukan data untuk encryption : keamanan jaringan komputer

masukan kunci encryption : kjk

hasil encrypt dari “keamanan jaringan komputer” adalah 5ec874ee3cd7cd0b38dad37c7b684c0ccc589c2f1e689287a746

masukan kunci untuk decrypt : kjk

hasil decrypt dari “5ec874ee3cd7cd0b38dad37c7b684c0ccc589c2f1e689287a746″ adalah keamanan jaringan komputer

C:\>java TesRC4Engine

masukan data untuk encryption : keamanan jaringan komputer

masukan kunci encryption : h

hasil encrypt dari “keamanan jaringan komputer” adalah ca28c9e03687b13fd9f0273fb8c5d31eba8955371c82c3985647

masukan kunci untuk decrypt : kjk

hasil decrypt dari “ca28c9e03687b13fd9f0273fb8c5d31eba8955371c82c3985647″ adalah ÿ…Ück>ZÁ@•1ªÃøsñ¢woš$k”s

Dari hasil diatas dapat diambil suatu analisi bahwa :

  • RC4 merupakan algoritma enkripsi simetris

Hal ini terbukti bahwa untuk melakukan enkripsi dan dekripsi diperlukan suatu kunci/key yang sama. Jika key untuk enkripsi dan key untuk dekripsi berbeda, hasil dekripsi tidak akan menghasilkan hasil yang sama dengan plain text yang sebenarnya. Hal ini dapat dilihat pada eksekusi program yang kedua.

  • Hasil enkripsi bergantung dari key

Hasil enkripsi dari plain text yang sama akan berbeda jika digunakan key atau kunci yang berbeda pula. Dengan kata lain hasil enkripsi merupakan fungsi dari plain text dan key.

Keamanan metode enkripsi RC4

Perbandingan kemanan metode enkripsi DES dengan RC4 menurut penulisnya pada http://www.geocities.com/amwibowo/resource/komparasi/komparasi.html adalah sebagai berikut :

Panjang kunci DES

Jaminan waktu untuk menemukan kunci

40-bit

0,4 detik

56-bit

7 jam

64-bit

74 jam 40 menit

128-bit

157.129.203.952.300.000 tahun

Tabel 1.1. Serangan brute-force pada DES

Panjang kunci RC4

Jaminan waktu untuk menemukan kunci

40-bit

15 hari

56-bit

2.691,49 tahun

64-bit

689.021,57 tahun

128-bit

12.710.204.652.610.000.000.000.000 tahun

Tabel 1.2. Serangan brute-force pada RC4

Dari tabel diatas dapat dilihat bahwa metode enkripsi dengan menggunkan RC4 masih lebih aman dibanding dengan metode enkripsi dengan DES.

Daftar pustaka

Wicaksono, Adi. (2003). Pemrograman Internet dan XML pada Ponsel dengan Midlet Java. Jakarta: PT Elex Media Komputindo.

Kriptografi [online], available http://www.geocities.com/amwibowo/resource/ komparasi/komparasi.html [12 desember 2005].

Sukmawan, Budi.(1998). RC4 STREAM CIPHER, available http://bdg.centrin.net.id/ ~budskman/rc4.htm [12 desember 2005].