• Arsip

  • Klik tertinggi

  • Laman

  • Iklan

ALGORITMA TEA (Tiny Encryption Algorithm)

DESKRIPSI ALGORITMA TEA

Tiny Encription Algorithm (TEA) merupakan suatu algoritma sandi yang diciptakan oleh David Wheeler dan Roger Needham dari Computer Loboratory, Cambridge Univercity, England pada bulan November 1994. Algoritma ini merupakan algoritma penyandian block cipher yang dirancang untuk penggunaan memory yang seminimal mungkin dengan kecepatan proses yang maksimal.

Berikut ini diberikan source code TEA dalam bahasa C, dengan k[0]-k[3]. Dan data dalam v[0] dan v[1]

Encode Routine

void encrypt(unsigned long* v, unsigned long* k) {

unsigned long v0=v[0], v1=v[1], sum=0, i; /* set up */

unsigned long delta=0x9e3779b9; /* a key schedule constant */

unsigned long k0=k[0], k1=k[1], k2=k[2], k3=k[3]; /* cache key*/

for (i=0; i < 32; i++) { /* basic cycle start */

sum += delta;

v0 += (v1<<4)+k0 ^ v1+sum ^ (v1>>5)+k1;

v1 += (v0<<4)+k2 ^ v0+sum ^ (v0>>5)+k3; /* end cycle*/

}

v[0]=v0; v[1]=v1;

}

Decode Routine

void decrypt(unsigned long* v, unsigned long* k) {

unsigned long v0=v[0], v1=v[1], sum=0xC6EF3720, i; /* set up */

unsigned long delta=0x9e3779b9; /* a key schedule constant */

unsigned long k0=k[0], k1=k[1], k2=k[2], k3=k[3]; /* cache key */

for(i=0; i<32; i++) { /* basic cycle start */

v1 -= (v0 << 4)+k2 ^ v0+sum ^ (v0 >> 5)+k3;

v0 -= (v1 << 4)+k0 ^ v1+sum ^ (v1 >> 5)+k1;

sum -= delta; /* end cycle */

}

v[0]=v0; v[1]=v1;

}

System penyandian TEA menggunakan proses feistel network dengan menambahkan fungsi matematik berupa penambahan dan pengurangan sebagai operator pembalik selain XOR. Hal ini dimaksudkan untuk menciptakan sifat non linearitas. Pergeseran dua arah (ke kiri dan ke kanan) menyebabkan semua bit kunci dan data bercampur secara berulang ulang.

TEA memproses 64 bit input sekali waktu dan menghasilkan 64 bit output. TEA menyimpan 64 bit input kedalam L0 dan R0 masing masing 32 bit. Sedangkan 128 bit kunci disimpan kedalam k[0], k[1], k[2], dan k[3] yang masing masing berisi 32 bit. Diharapkan teknik ini cukup dapat mencegah penggunaan teknik exshautive search secara efektif. Hasil outputnya akan disimpan dalam L16 dan R16.

Bilangan delta berasal dari golden number, digunakan delta=(√5 -1)231. Suatu ilangan delta ganda yang berbeda digunakan dalam setiap roundnya sehingga tidak ada bit dari perkalian yang tidak berubah secara teratur. Berbeda dengan sruktur feistel yang semula hanya mengoperasikan satu sisi yaitu sisi sebelah kanan dengan sebuah fungsi F, pada algoritma TEA kedua sisi dioperasikan dengan sebuah fungsi yang sama.

Proses diawali dengan input bit teks terang sebanyak 64 bit. Kemudian 64 bit teks terang tersebut dibagi, yaitu dua. Sisi kiri (L0) sebanyak 32 bit dan sisi kanan (R0) sebanyak 32 bit. Setiap bagian teks terang akan dioperasikan sendiri-sendiri. R0 (z) akan digeser kekiri sebanyak empat (4) kali dan ditambahkan dengan kunci k[0]. Sementara itu z ditambah dengan sum (delta) yang merupakan konstanta. Hasil penambahan ini di XOR kan dengan penambahan sebelumnya. Kemudian di XOR kan dengan hasil penambahan antara Z yang digeser kekenan sebanyak lima (5) kali dengan kunci k[1]. Hasil tersebut kemudian ditambahkan dengan L0 (y) yang akan menjadi R1.

Sisi sebelah kiri akan mengalami proses yang sama dengan sisi sebelah kanan. L0 (y) akan digeser kekiri sebanyak empat (4) kali lalu ditambahkan dengan kunci k[2]. Sementara itu , Y ditambah dengan sum (delta). Hasil penambahan ini di XOR kan dengan penambahan sebelumnya. Kemudian di XOR kan dengan hasil penambahan antara Y yang digeser ke kanan sebanyak lima (5) kali dengan unci k[3]. Hasil tersebut kemudian ditambahkan dengan R0 (Z) yang akan menjadi L1.

pergeseran (shift)

    Blok teks terang pada kedua sisi yang masing masing sebanyak 32 bit akan digeser kekiri sebanyak empat (4) kali dan digeser ke kanan sebanyak lima (5) kali.

    Penambahan

      Setelah digeser kekiri stsu kekanan, maka Y dan Z yang sedah digeser akan ditambahkan dengan kunci k[0]-k[3]. Sedangkan Y dan Z awal akan ditambahkan dengan sum (delta).

      peng-XOR-an

        Setelah dioperasikan dengan penambahan pada masingmasing register maka akan dilakukan peng XOR an dengan rumus untuk satu round adalah sebagai berikut :

        y = y + (((z<<4)+k[0])^z+sum^((z>>5)+k[1]))

        z = z + (((y<<4)+k[2]^y+sum^((y>>5)+k[3]))

        dalam hal ini sum=sum+delta.

        Hasil penyandian dalam satu cycle satu blok teks terang 64 bit menjadi 64 bit teks sandi adalah dengan menggabungkan y dan z. Untuk penyandian pada cycle berikutnya y dan z ditukar posisinya, sehingga y1 menjadi z1 dan z1 menjadi y1 terus dilanjutkan proses seperti langkah-langkah diatas sampai dengan 16 cycle (32 round).

        1. Key Schedule

        Pada algoritma TEA, key schedulenya sangat sederhana. Yaitu kunci k[0] dan k[1] konstan digunakan ntuk round ganjil sedangkan kunci k[2] dan k[3] konstan digunakan untuk round genap.

        5. Dekripsi

        Dalam proses delripsi dama halnya seperti dapa proses penyandian yang berbasis feistel cipher lainnya. Yaitu pada prinsipnya adalah sama pada saat proses enkripsi. Namun hal yang berbeda adah penggunaan teks sandi sebagai input dan kunci yang digunakan urutannya dibalik. Pada proses dekripsi semua round ganjil menggunakan k[1] terlebih dahulu kemudian k[0], demikian juga dengan semua round genap digunakan k[3] terlebih dahulu kemudian k[2].

        Pada rumus enkripsi diketahui :

        L0 = L0 + f ( R0 , k[0], k[1], sum )

        R0 = R0 + f ( L0, k[2], k[3], sum )

        Sehingga untuk proses dekripsi digunakan rumus :

        L0 = L0 + f ( R0 , k[1], k[0], sum )

        R0 = R0 + f ( L0, k[3], k[2], sum )

        Iklan

        Algoritma Enkripsi Rivest Code 5 (RC-5)

        Algoritma Enkripsi Rivest Code 5 (RC-5)

        Abstrak :

        RC-5 (Rivest Code-5) merupakan enkripsi stream simetrik yang dibuat oleh RSA Data Security, Inc (RSADSI). Metode enkripsi ini pada awalnya dirancang untuk enkripsi yang menggunakan mikroprosesor (perangkat keras), tetapi pada tahap pengembangannya algoritma ini cocok diterapkan dengan menggunakan perangkat keras maupun perangkat lunak. Secara ringkas algoritma ini bekerja dengan penambahan modulus 2w,melakukan EX-OR dan melakukan rotasi x kekiri dengan jumlah y bit. RC-5 memiliki kelebihan dalam menentukan jumlah kata kunci yang digunakan, hal ini berarti akan memilih tingkat keamanan yang digunakan sesuai dengan aplikasinya. Tulisan ini membahas tentang algoritma enkripsi RC-5 yang dikemukakan oleh Ronald L.Rivest dari MIT Laboratory for Computer Science. Metode penulisan dilakukan dengan studi literartur terhadap buku dan bahasan-bahasan di internet yang berhubungan dengan algoritma enkripsi terutama algoritma RC-5.

        1. Pendahuluan
        Saat ini sistem komputer yang terpasang makin mudah diakses. Sistem time sharing dan akses jarak jauh menyebabkan masalah keamanan menjadi salah satu kelemahan komuniksi data seperti internet. Disamping itu kecendrungan lain saat ini adalah memberikan tanggung-jawab sepenuhnya ke komputer untuk mengelola aktifitas pridadi dan bisnis seperti sistem transfer dana elekronis yang melewatkan uang sebagai aliran bit dan lain sebagainya. Untuk itu diperlukan sistem computer yang memiliki tingkat keamanan yang dapat terjamin, walaupun pada akhirnya akan terjadi trade off antara tingkat keamanan dan kemudahan akses.
        Keamanan komputer adalah menjamin data atau informasi tidak dibaca, tidak dimodifikasi oleh orang lain yang tidak diberi otorisasi. Keamanan sistem dibagi menjadi tiga bagian [4] :

        1.Keamanan eksternal
        Keamanan eksternal berkaitan dengan fasilitas komputer dari penyusup dan bencana seperti kebakaran atau bencana alam.
        2.Keamanan interface pamakai
        Keamanan interface pemakai yang berkaitan dengan identifikasi pemakai sebelum pemakai diizinkan mengakses data atau program.
        3.Keamanan internal
        Keamanan internal berkaitan dengan beragam kendali yang dibangun pada perangkat keras dan perangkat lunak yang menjamin operasi yang handal dan tidak terganngu untuk menjaga integritas data.
        Sementara itu kebutuhan keamanan sistem komputer dapat dikategorikan menjadi aspek-aspek sebagai berikut [3] :
        1. Privacy / Confidentiality
        Inti utama aspek privacy atau confidentiality adalah usaha untuk menjaga informasi dari orang yang tidak berhak mengakses. Privacy lebih kearah data-data yang sifatnya privat sedangkan confidentiality biasanya berhubungan dengan data yang diberikan ke pihak lain untuk keperluantertentu (misalnya sebagai bagian dari pendaftaran sebuah servis) dan hanya diperbolehkan untuk keperluan tertentu tersebut.
        2. Integrity
        Aspek ini menekankan bahwa informasi tidak boleh diubah tanpa seijin pemilik informasi. Adanya virus, trojan horse, atau pemakai lain yang mengubah informasi tanpa ijin merupakan contoh masalah yang harus dihadapi. Sebuah e-mail dapat saja “ditangkap” (intercept) di tengah jalan, diubah isinya (altered, tampered, modified), kemudian diteruskan ke alamat yang dituju. Dengan kata lain, integritas dari informasi sudah tidak terjaga. Penggunaan encryption dan digital signature, misalnya, dapat mengatasi masalah ini.
        3.Authentication
        Aspek ini berhubungan dengan metoda untuk menyatakan bahwa informasi betul-betul asli, orang yang mengakses atau memberikan informasi adalah betul-betul orang yang dimaksud, atau server yang kita hubungi adalah betul-betul server yang asli.
        4. Availability
        Aspek availability atau ketersediaan berhubungan dengan ketersediaan informasi ketika dibutuhkan. Sistem informasi yang diserang atau dijebol dapat menghambat atau meniadakan akses ke informasi.
        Enkripsi merupakan salah satu cara yang dilakukan untuk mengamankan sistem atau informasi dari hal yang akan menyebabkan aspek-aspek diatas tidak terpenuhi, seperti untuk menjaga integritas data atau informasi. Ada beberapa algoritma enkripsi yang sudah terbuka untuk dipelajari, seperti Data Encryption Standard (DES), RC-4, Two Fish, RC-5 dan lain-lain. Tulisan ini membahas algoritma RC-5 yang dikemukakan oleh Ronald L.Rivest dari MIT Laboratory for Computer Science. Metode penulisan dilakukan dengan studi literatur terhadap buku dan bahasan-bahasan di internet yang berhubungan dengan algoritma enkripsi terutama algoritma RC-5.

        2. Tinjauan Pustaka
        Bagian ini membahas tinjaun pustaka yang erkaiatan dengan masalah enkripsi. Diharapakan dengan adanya tinjauan pustaka ini akan memudahkan kita dalam memahami masalha enkripsi terutama enkripsi RC-5.
        Salah satu mekanisme untuk meningkatkan keamanan adalah dengan menggunakan teknologi enkripsi. Data-data yang kirimkan diubah sedemikian rupa sehingga tidak mudah disadap. Jadi enkripsi adalah proses yang dilakukan untuk mengamankan sebuah pesan (yang disebut plaintext) menjadi pesan yang tersembunyi (disebut ciphertext) adalah enkripsi (encryption). Ciphertext adalah pesan yang sudah tidak dapat dibaca dengan mudah. Menurut ISO 7498-2, terminologi yang lebih tepat digunakan adalah “encipher”. Proses sebaliknya, untuk mengubah ciphertext menjadi plaintext, disebut dekripsi (decryption). Menurut ISO 7498-2, terminologi yang lebih tepat untuk proses ini adalah “decipher” [3].
        Berdasarkan cara memproses teks (plaintext), cipher dapat dikategorikan menjadi dua jenis: block cipher and stream cipher[3]. Block cipher bekerja dengan memproses data secara blok, dimana beberapa karakter / data digabungkan menjadi satu blok. Setiap proses satu blok menghasilkan keluaran satu blok juga. Sementara itu stream cipher bekerja memproses masukan (karakter atau data) secara terus menerus dan menghasilkan data pada saat yang bersamaan.
        Banyak servis di Internet yang masih menggunakan “plain text” untuk authentication, seperti penggunaan pasangan userid dan password. Informasi ini dapat dilihat dengan mudah oleh program penyadap atau pengendus (sniffer) [3].
        Contoh servis yang menggunakan plaintext antara lain [3]:
        • akses jarak jauh dengan menggunakan telnet dan rlogin
        • transfer file dengan menggunakan FTP
        • akses email melalui POP3 dan IMAP4
        • pengiriman email melalui SMTP
        • akses web melalui HTTP
        Kelompok enkripsi
        Kelompok enkripsi itu sendiri dibagi menjadi 3 kelompok yaitu :
        1.Symmetric encryption
        Menggunakan kunci (key) yang sama untuk proses enkripsi dan dekripsi, masalah yang muncul adalah kesulitan dalam manajemen key. Misalnya dilakukan pengirim data yang telah di enkripsi ke seorang penerima melalui email, orang yang diberi data ini hanya dapat merubah data kedalam bentuk aslinya dengan menggunakan key yang sama. Jadi sipengirim harus memberitahukan ke sipenerima data key key yang digunakan, disini masalahnya bagaimana mengirim key ke penerima tersebut. Bentuk blok diagram metode simetrik diperlihatkan pada gambar 1.

        Gambar 1. Enkripsi simetrik
        Algoritma enkripsi yang menggunakan metode ini adalah :
        Data Encryption Standard (DES)
        AES, CAST, IDE, RC-4, RC-5
        2.Asymmetric encryption
        Menggunakan kunci (key) yang berbeda untuk proses enkripsi dan dekripsi. Pada sistem asimetrik dikenal adanya private key dan public key. Jika melakukan pengiriman data yang di enkripsi ke penerima, sipengrim melakukan enkripsi dengan menggunakan public key dari sipenerima dan data hanya dapat dirobah kembali dalam bentuk plaintext dengan menggunakan private key yang dimiliki sipenerima. Bentuk blok diagram metode asimetrik diperlihatkan pada gambar 2.

        Gambar 2. Enkripsi asimetrik
        Algoritma enkripsi yang menggunakan metode ini adalah :
        RSA
        Dife-Hillman
        3.Hybrid encryption
        Metode ini menggabungkan konsep simetri dan asimetrik, dengan menggunakan key random data dienkripsi dengan metode simetrik. Tahap berikutnya key random yang dipakai untuk proses enkripsi data juga dienkripsi, tetapi menggunakan metode asimetrik dengan menggunakan public key dari sipenerima. Ciphertext yang dihasilkan masing-masing metode digabungkan dan dikirimkan ke penerima. Sipenerima akan membuka Ciphertext untuk key word dengan menggunakan private key yang dimilikinya. Bentuk blok diagram metode ini diperlihatkan pada gambar 3.

        Gambar 3.a Proses enkripsi

        Gambar 3.b Proses enkripsi
        Fungsi Hash Satu Arah

        Fungsi hash satu arah (one-way hash function) digunakan untuk membuktikan keaslian dari suatu dokumen atau pesan. Pesan (yang besarnya dapat bervariasi) yang akan di-hash disebut pre-image, sedangkan outputnya yang memiliki ukuran tetap, disebut hash-value (nilai hash). Untuk mengetahui keaslian pesan ada tiga cara yang dapat dilakukan yaitu dengan menggunkan enkripsi dan dekripsi simetrik enkripasi, enkripasi dengan anti simetrik enkripsi dan dengan menggunakan sistem tanda tangan digital. Contoh algoritma fungsi hash satu arah adalah MD-5 dan SHA. Message Authentication Code (MAC) adalah salah satu variasi dari fungsi hash satu arah, hanya saja selain pre-image, sebuah kunci rahasia juga menjadi input bagi fungsi MAC.
        Tanda Tangan Digital
        Selama ini, masalah tanda tangan digital (digital signature) masih sering di permasalahkan keabsahannya, hal ini terjadi karena pengertian dan konsep dasarnya belum dipahami. Penandatanganan digital terhadap suatu dokumen adalah sidik jari dari dokumen tersebut beserta timestamp-nya di enkripsi dengan menggunakan kunci privat pihak yang menandatangani. Tanda tangan digital memanfaatkan fungsi hash satu arah untuk menjamin bahwa tanda tangan itu hanya berlaku untuk dokumen yang bersangkutan saja. Keabsahan tanda tangan digital itu dapat diperiksa oleh pihak yang menerima pesan.
        Sertifikat Digital
        Sertifikat digital adalah kunci publik dan informasi penting mengenai jati diri pemilik kunci publik, seperti misalnya nama, alamat, pekerjaan, jabatan, perusahaan dan bahkan hash dari suatu informasi rahasia yang ditandatangani oleh suatu pihak terpercaya. Sertifikat digital tersebut ditandatangani oleh sebuah pihak yang dipercaya yaitu Certificate Authority (CA).
        Secure Socket Layer (SSL)
        SSL dapat menjaga kerahasiaan (confidentiality) dari informasi yang dikirim karena menggunakan teknologi enkripsi yang maju dan dapat di-update jika ada teknologi baru yang lebih bagus. Dengan penggunaan sertifikat digital, SSL menyediakan otentikasi yang transparan antara client dengan server. SSL menggunakan algoritma RSA untuk membuat tanda tangan digital (digital signature) dan amplop digital (digital envelope). Selain itu, untuk melakukan enkripsi dan dekripsi data setelah koneksi dilakukan, SSL menggunakan RC-4 sebagai algoritma standar untuk enkripsi kunci simetri. Saat aplikasi menggunakan SSL, sebenarnya terjadi dua kondisi, yakni handshake dan pertukaran informasi.
        Konsep Dasar RC-5
        Seperti dijelaskan diatas, algoritma RC-5 merupakan metode enkripsi menggunakan metode simetrik dan pengolahan dalam bentuk blok chiper, jadi kata kunci yang sama digunakan untuk proses enkripsi dan dekripsi. Parameter-parameter yang digunakan dalam RC-5 adalah sebagai berikut :
        Jumlah putaran ini disimbolkan dengan r yang merupakan parameter untuk rotasi dengan nilai 0, 1, 2, …… 255.
        Jumlah word dalam bit disimbolkan dengan w. Nilai bit yang di support adalah 16 bit, 32 bit, dan 64 bit.
        Kata kunci (key word) Variable ini disimbolkan dengan b dengan range 0, 1, 2, …. 255. Key word ini dikembangkan menjadi array S yang digunakan sebagai key pada proses untuk enkripsi dan dekripsi.
        Untuk memahami cara kerja RC-5, dapat dimulai dengan melihat konsep dasar bagaimana RC-5 ini bekerja. Hal ini dilakukan untuk memahami cara kerja algoritma ini lebih lanjut. RC-5 Menggunakan operasi dasar untuk proses enkripsi sebagai berikut :
        1.Data yang akan dienkripsi dikembangkan menjadi 2 bagian bagian kiri dan bagian kanan dan dilakukan penjumlahan dengan key word yang yang telah diekspansi sebelumnya. Pemjulahan ditunjukan dengan tanda “+“, dan disimpan di dua register A dan register B.
        2.Kemudian dilakukan operasi EX-OR, yang ditandai dengan tanda ““.
        3.Melakukan rotasi kekiri (shift left) sepanjang y terhadap x word yang ditandai dengan x<<< y. y merupakan interpretasi modulo w atau jumlah kata w dibagi 2. Dengan lg[w] ditentukan jumlah putaran yang dilakukan.
        4.Tahap akhir dilakukan penggabungan untuk mendapatkan data yang telah dienkripsi.
        Prose dekripsi dilakukan dengan konsep dasar sebagai berikut :
        1.Data yang telah dienkripsi dikembangkan kembali menjadi 2 bagian dan disimpan di dua register A dan register B.
        2.Kemudian dilakukan rotasi ke kanan sejumlah r .
        3.Selanjutnya dilakukan operasi EX-OR yang ditandai dengan ““.
        4.Tahap akhir dilakukan pengurangan terhadap masing-masing register dengan key word yang ditunjukan dengan tanda “-“, untuk mendapatkan plaintext.

        3. Algoritma RC-5
        Pada bagian ini kita menjelaskan algoritma RC5, yang terdiri dari tiga komponen: algoritma key expansion, algoritma enkripsi, dan algoritma dekripsi.
        Input plaintext ke RC5 terdiri dari dua word w-bit, yang ditandai dengan A dan B. RC5 menggunakan expanded key table (key table yang diperluas), S[0…t – 1], terdiri dari t = 2(r + 1) word w-bit. Algoritma key expansion menginisialisasi S dari parameter key rahasia dari (yang diberikan oleh) user. (Sebagai catatan tabel S dalam enkripsi RC5 bukan “S-box” seperti yang yang digunakan di DES; RC5 menggunakan entry dalam S secara sekuensial, satu pada satu waktu).
        Diasumsikan konvensi standard “little-endian“ untuk mem-packing byte menjadi blok input/output: byte yang pertama menempati posisi bit low order pada register A, dan seterusnya, sehingga byte keempat menempati posisi bit high-order, byte kelima menempati posisi bit low-order pada B, dan byte kedelapan (terakhir) menempati posisi bit high order di B.
        Proses enkripsi
        Kita asumsikan bahwa blok input diberikan dalam dua register w-bit A dan B. Kita juga mengasumsikan bahwa key expansion telah dijalankan, sehingga array S[0…t – 1] telah dihitung. Berikut ini adalah algoritma enkripsi dalam pseudo-code.
        A=A+S[0];
        B=B+S[1];
        for i=1 to r do
        A=((A  B) <<< B) + S[2 * i];
        B=((B A) <<< A) + S[2 * I + 1];
        Outputnya berada di dalam register A dan B. Kita mencatat (atau memperhatikan) exceptional simplity dari 5 baris algoritma ini.
        Kita juga mencatat bahwa setiap round (putaran) RC5 meng-update kedua register A dan B, dimana satu “round” dalam DES hanya meng-update setengah dari registernya. Suatu “half-round” RC5 (satu dari pernyataan penugasan meng-update A atau B dalam body dari loop diatas) mungkin lebih dapat dianalogi terhadap satu round DES).

        Gambar 3. Algoritma enkripsi RC-5
        Dari flow chart diatas, A merupakan plaintext yang diproses disebelah kiri setelah ditambahkan dengan dengan hasil key ekspansi dan B merupakan bagian plaintext yang diproses disebelah kanan yang juga ditambahkan dengan hasil key ekspansi. Tahap berikutnya dilakukan proses EX-OR terhadap masing-masing plantext dan dilakukan rotasi (putaran). Setelah dilakukan putaran sebanyak r kali, data-data ini digabungkan kembali membentuk ciphertext yang telah siap dikirimkan ke penerima atau diproses selanjutnya.
        Proses dekripsi
        Proses dekripsi dilakukan penerima terhadap data yang sudah dalam bentuk ciphertext. Proses ini dapat dilakukan dengan algoritma sebagai berikut :
        for i= r downto 1 do
        B=((B – S [2 * i + 1]) >>> A)  A;
        A=((A – S [2 * i]) >>> B)  B;
        B= B- S[1];
        A= A – S[0];
        Data-data dari ciphertext dikembangkan menjadi dua bagian A dan B selanjutnya di lakukan pengurangan dengan hasil key ekspansi dan dirotasi sebanyak r sambil dilakukan operasi EX-OR terhadap data tersebut. Tahap akhir untuk mendapatkan plaintext adalah dengan melakukan kembali proses pengurangan ke masing-masing bagian dengan hasil key ekspansi. Data-data ini kemudian digabungkan kembali membentuk plaintext sesuai dengan yang dikirimkan pengirim atau data awal sebelum proses enkripsi.
        Key Expansion
        Rutin key expansion memperluas kunci rahasia user K untuk mengisi array key yang diperluas S, sehingga S menyerupai suatu array t = 2(r + 1) word biner random yang ditentukan oleh K. Algoritma key expansion menggunakan dua “magic constants”, dan terdiri dari tiga bagian algoritmik sederhana.
        Definisi dari Magic Constants. Algoritma key-expansion menggunakan dua konstanta biner berukuran word Pw dan Qw. Konstanta biner tersebut didefinisikan untuk sembarang w sebagai berikut :

        Dimana :
        e = 2.718281828459  Nilai logaritma dasar
         = 1.6180333988749  golden ratio
        Dimana Odd(x) (bilangan ganjil (x))adalah integer ganjil (odd) terdekat terhadap x (dibulatkan keatas jika x adalah integer genap, meskipun hal ini tidak terjadi disini). Untuk w = 16, 32, dan 64, konstanta ini diberikan berikut ini dalam biner dan dalam heksadesimal.
        P16= 1011011111100001 = b7e1.
        Q16= 1001111000110111= 9e37.
        P32= 10110111111000010101000101100011 = b7e15163.
        Q32=10011110001101110111100110111001 = 9e3779b9.
        P62= 1011011111100001010100010110001010001010111011010010101001101011
        = b7e151628aed2a6b.
        Q64= 1001111000110111011110011011100101111111010010100111110000010101
        = 9e3779b97f4a7c15.

        Merubah Kunci Dari Bit Ke Word
        Langkah algoritmik pertama dari key expansion adalah untuk meng-copy kunci rahasia K[0…b – 1] ke array L[0…e – 1] dari word c = [b/u], dimana u = w/8 adalah jumlah byte/word. Operasi ini dilakukan dalam cara yang alami, menggunakan kunci byte konsekutif (berulang) u dari K untuk memenuhi setiap word dalam L, byte low order sampai byte high order. Posisi byte yang tidak terisi dari L dibuat 0. pada kasus ini b = c = 0 kita me-reset c ke 1 dan me-set L[0] menjadi 0.
        Pada mesin “little-endian” seperti pada Intel 486, task diatas dapat diselesaikan hanya dengan membuat array L menjadi 0, dan kemudian meng-copy string K secara langsung ke posisi memori yang merepresentasikan L. Pseudocode berikut ini mencapai efek yang sama, diasumsikan semua byte adalah “unsigned” dan semula array L dibuat 0.
        C=[max(b,1)/u]
        for i=b-1 downto 0 do
        L[i/u]=(L[i/u] <<<8) +K[i];
        Menginisialisasi Array S
        Langkah algoritmik kedua dari key expansion adalah untuk menginisialisasi array S menjadi pola bit pseudo-random tertentu yang tetap (key-independent), menggunakan deret aritmetika modulo 2w ditentukan oleh “magic constant” Pw dan Qw. Karena Qw ganjil, deret aritmetik memiliki periode 2w.
        S[0] = Pw;
        for i=1 to t-1 do
        S[i] = S[i-1]+Qw;
        Dari algoritma diatas terlihat bahwa pada kondisi 0 S[0] berisi Pw dan pada itersi i=1 dan seterusnya, S[i] akan berisi S[i-1] + Qw.
        Penggabungan Kunci
        Langkah algoritmik ketiga dari key expansion adalah untuk menggabungkan kunci rahasia user dalam tiga cara pada array S dan L. Lebih tepatnya, dikarenakan ukuran yang berbeda secara potensial pada S dan L, array yang lebih besar akan diproses tiga kali, dan yang lainnya dapat ditangani lebih dari tiga kali. Bentuk algoritma proses dapat dilihat berikut ini :
        i=j=0;
        A=B=0;
        do 3 * max(t,c) times
        A=S[i]=(S[i]+A+B) << 3;
        B=L[j]=(L[j]+A+B) << (A+B);
        i=(i+1) mod (t);
        j=(j+1) mod(c);

        Bentuk Implementasi Dalam Bahasa C
        Implementasi ini dilakukan terhadap format RC-5 32bit, 12 putaran dengan 16 byte kata kunci [7].
        # include <stdio.h>
        typedef unsigned long int WORD; /* Panjang word 32bit=4 byte*/
        #define w 32 /* Ukuran word dalam bit*/
        #define r 12 /* Jumlah putaran*/
        #define b 16 /* Jumlah kata kunci*/
        #define c 4 /* Jumlah word*/

        #define t 26 /* Ukuran tabel S=2*(r+1)*/

        WORD S[t]; /* Tabel pengembangan key*/
        WORD P = 0xb7e15163, Q=0x9e3779b9; /* Konstanta magic*/

        /* Operasi putaran*/
        #define ROTL (x,y) (((x)<<(y&(w-1)))|((x)>>(w-(y&(w-1)))))
        #define ROTR (x,y) (((x)>>(y&(w-1)))|((x)<<(w-(y&(w-1)))))

        void RC5_ENCRYPT (WORD *pt, WORD *ct) /* proses enkripsi*/
        {
        WORD i, A=pt[0]+S[0], B=pt[1]+S[1];
        for (i=1;i<=r;i++)
        {
        A=ROTL (A^B,B)+S[2*i];
        B=ROTL (B^A,A)+S[2*i+1];
        }
        ct[0]=A; ct[1]=B;
        }

        void RC5_DECRYPT (WORD *ct, WORD *pt) /* Proses dekripsi*/
        {
        WORD i, B=ct[1], A=ct[0];
        for (i=r;i>0;i–)
        {
        B=ROTR (B-S[2*i+1],A)^A;
        A=ROTR (A-S[2*i],B)^B;
        }
        pt[1]=B-S[1]; pt[0]=A-S[0];
        }
        void RC5_SETUP (unsigned char *k) /* Proses input kunci rahasia*/
        {
        WORD i, j,k, u=w/8, A, B, L[c];
        for (i=b-1,L[c-1]=0;i!=-1;i–)
        L[i/u]= (L[i/u]<<8) +K[i];
        for (S[0]=P,i=1; i<t; i++)
        S[i] = S[i-1]+Q;
        for (A=B=i=j=k=0;k<3*t;k++,i=(i+1)%t,j=(j+1)%c)
        {
        A=S[i]=ROTL (S[i]+(A+B),3);
        B=L[j]=ROTL (L[j]+(A+B),(A+B));
        }
        }
        void printword(WORD A) /* Proses input plaintext acak*/
        {
        WORD k;
        for (k=0;k<w;k+=8)
        printf (“%02.21X”,(A>>k)&0xFF);
        }
        void main()/* Program utama*/
        {
        WORD i,j,k,pt1[2],pt2[2],ct[2]={0,0};
        unsigned char key[b];
        if (sizeof(WORD) !=4)
        printf (“RC5 ERROR : WORD has %d bytes.\n”,sizeof(WORD));
        printf (“RC5-32/12/16 examples : \n”);
        for (i=1;i<6;i++)
        {
        pt1[0]=ct[0];pt[1]=ct[1];
        for (j=0;j<b;j++)key[j]=ct[0]%(255-j);
        RC5_SETUP(key);
        RC5_ENCRYPT (pt1,ct);
        RC5_DECRYPT(ct,pt2);
        printf(“\n%d. key= “,i);
        for (j=0;j<b;j++)
        printf (“02.2X”,key[j]);
        printf (“\n Plaintext “);
        printword(pt1[0]);
        printword(pt1[1]);
        printf(“—-> ciphertext “);
        printf word(ct[0]);
        print word(ct[1]);
        printf(“\n”);
        if (pt1[0] !=pt2[0] || pt1[1] !=pt2[1])
        printf (“Decryption Error”);
        }
        }

        Hasil simulasi program adalah :
        Key = 91 5F 46 19 BE 41 B2 51 63 55 A5 01 10 A9 CE 91
        Plaintext = 21A5DBEE154B8F6D
        chipertext = F7C013AC5B2B8952

        4. Analisis Tingkat Keamanan RC-5
        Suatu putaran mengandung dua persamaan yang disimpan dalam buffer A dan B atau dalam bentuk lain. Pada setengah putaran, dapat dijelaskan dengan mengacu kepada persamaan yang dikemukakan oleh Feistel ciphers sebagai berikut;
        L1=L0 +S0
        R1=R0+S1
        For i = 2 to n do
        Li= Ri-1
        Ri=((Li-1  Ri-1) << Ri-1)+Si
        Dari persamaan diatas L1 dan R1 bagian dari plaintext yang dikembangkan menjadi dua bagian kiri dan kanan yang merupakan input dan Li dan Ri adalah merupakan output chipertext. Pada setengah putaran pertama input blok RC-5 (plaintext) adalah L0, R0 dan blok output chipertext adalah Ln, Rn.
        Konsep dasar untuk menganalisa cara memecahkan RC-5 dilakukan dengan dengan meganalisa struktur rutin enkripsi, dimana konsep ini berusaha menemukan kunci rahasia dan tabel pengembangan key S. Proses iterasi yang dilakukan untuk mendapatkan kunci rahasia dan tabel pengembangannya didekati dengan perhitungan Ln-1 (b) pada range 0≤ b≤w-1. Pada setengah putaran yang terakhir, Ln dan Rn akan didapat dengan persamaan berikut ini :
        Ln = Rn-1;
        Rn = (( Ln-1 Rn-1) <<< Rn-1)+Sn
        Terdapat 4 variable dalam persamaan kedua diantaranya Rn dan Rn-1, hal ini dapat diketahui dari chipertext. Jika kita mengetahui informasi tentang Ln-1 akan membantu bagaimana mengetahui subkey Sn yang digunakan untuk proses chipertext. Untuk mendapatkan hubungan persamaan dari keempat variable diatas terhadap proses rotasi Rn-1 mod w. Pertama, kita asumsikan kasus khusus dimana (b+Rn-1) mod w = 0. Pada kasus ini bit Ln-1[b])  Rn-1 [b] pindah keposisi bot 0 setelah rotasi. Dengan demikian didapat persamaannya sebagai berikut :
        Rn[0]=(Ln-1[b]  Rn-1[b] Sn[0].
        Pada awalnya, Rn[0] dan Rn-1[b] diketahui, jika kita dapat menghitung Ln-1[b], selanjutnya dapat diperoleh Sn[0], bit yang kurang penting dari subkey Sn.
        Kekuatan dari penyandian bergantung kepada jumlah kunci yang digunakan [3]. Beberapa algoritma enkripsi memiliki kelemahan pada kunci yang digunakan. Untuk itu, kunci yang lemah tersebut tidak boleh digunakan. Selain itu, panjangnya kunci, yang biasanya dalam ukuran bit, juga menentukan kekuatan dari enkripsi. Kunci yang lebih panjang biasanya lebih aman dari kunci yang pendek. Jadi enkripsi dengan menggunakan kunci 128-bit lebih sukar dipecahkan dengan algoritma enkripsi yang sama tetapi dengan kunci 56-bit. Semakin panjang sebuah kunci, semakin besar keyspace yang harus dijalani untuk mencari kunci dengan cara brute force attack atau coba-coba karena keys pace yang harus dilihat merupakan pangkat dari bilangan 2. Jadi kunci 128-bit memiliki keyspace 2128, sedangkan kunci 56-bit memiliki key space 256. Artinya semakin lama kunci baru bisa ketahuan.
        Beberapa cara telah dikembangkan oleh seorang pemecah enkripsi untuk menganalisa keamanan block cipher dalam memecahkan chipertext. Jika sebuah key memiliki n bit,kemudian terdapat 2n kemungkinan key yang akan diuji. Ketika ukuran key lebih besar dari ukuran blok, akan terdapat peningkatan kemungkinan pemecahan enkripsi. Test statisktik bisa digunakan untuk menganalisa prilakuk blok chipertext. Blok chipertext yang memiliki tingkat keamanan yang tinggi akan berprilaku seperti suatu permutasi yang random (acak) dari sebuah key yang random juga. Jadi dari informasi dengan statistik diatas sangat sulit untuk memecahkan sebuah enkripsi dengan key dan permutasi yang acak, kecuali dengan analis yang sangat mendalam.
        RC-5 menggunakan konsep seperti yang diuraikan diatas, yaitu memiliki jumlah key yang dapat divariasikan dan jumlah rotasi yang dapat ditentukan untuk mendapatkan tingkat keamanan yang diinginkan. Disamping itu proses pengembangan key (key expansion) dilakukan secara acak, yang akan menghasilkan key hasil pengembangan yang juga acak, key hasil pengembangan inilah yang akan digabungkan dengan plaintext. Jadi secara statistik sangat sulit memecahkan kode enkripsi RC-5 yang menggunakan jumlah key yang semakin banyak walapun banyak pihak yang sudah berusaha memecahkan algoritma ini.
        Pada tahun 1995 Kaliski dan Yin [7] berhasil memecahkan RC-5 hanya satu tahun setelah dipublikasikan. Mereka melakukan pemecahan dengan menanalisa struktur dasar rutin, yaitu rotasi data idependent, Pada tahun 96` Knudsen dan Meier melakukan perbaikan pemecahan yang dilakukan oleh Kaliski dan Yin dengan menganalisa secara hati-hati hubungan antara input dan subkey. Kemudian pada tahun 1998 Biryukov dan Kushilevitz melakukan perbaikan konsep pemecahan yang dikemukakan oleh Knudsen dan Meier. Mereka mempelajari lebih komplek dan melakukan suatu perkiraan yang umum rotasi data dependent dari enkripsi dan pemecahannya. Mereka memperkirakan untuk memecahkan RC-5 dengan 12 putaran dengan data 64 bit dibutuhkan waktu penyelesaian 255 dan dibuatnya dalam bentuk tabel berikut ini untuk data 64 bit:
        Jumlah Putaran
        4
        6
        8
        10
        12
        14
        16
        18
        Iterasi proses plaintext
        (chosen plaintext)
        27
        216
        228
        236
        244
        252
        261
        >
        Iterasi pemecahan plaintext
        (known plaintext)
        236
        241
        247
        251
        255
        259
        263
        >

        Dari uraian dan tabel diatas dapat disimpulkan, bahwa RC-5 dapat dipecahkan dan membutuhkan waktu iterasi pemecahan yang cukup lama tergantung jumlah putaran yang digunakan seperti yang terlihat pada tabel diatas berdasarkan syarat dibaris kedua dan ketiga. Semakin tinggi jumlah putaran yang dilakukan semakin lama proses pemecahan, dimana jumlah putaran ditentukan saat prose enkripsi. Jumlah putaran juga menentukan tabel pengambangan key yang digunakan. Jadi semakin banyak jumlah kata kunci dan putaran yang digunakan, maka semakin lama waktu yang dibutuhkan untuk memecahkan enkripsinya dan tingkat keamanan semakin tinggi.

        5. Feature-Feature RC-5
        Algoritma memiliki keuntungan-keuntungan dalam implementasinya. Hal ini dapat digunakan oleh pemakai untuk memilih atau sebagai pertimbangan dalam memilih menggunakan RC-5 [5].
        Keuntungan-keuntungan yang dimiliki RC-5 adalah sebagai berikut:
        RC-5 menggunakan metode enkripsi simetrik, sehingga key yang sama digunakan untuk proses enkripsi dan dekripsi.
        RC-5 dapat diimplentasikan dengan hard ware ataupun soft ware, dimana RC-5 menggunakan dasar operasi komputasi yang biasa digunakan pada konsep dasar mikroprosesor.
        RC-5 mempunyai kemampuan proses enkripsi dan dekripsi yang cepat, besar nya kemampuan ini diperlihatkan dengan cara kerja beroreantasi pada kata (word).
        RC-5 dapat disesuaikan untuk bermacam-macam prosesor yang memiliki panjang bit data yang berbeda. Contohnya untuk prosesor 64 bit dapat dipakai untuk RC-5 dengan panjang kata yang diolah lebih panjang atau disesuaikan dengan kemampuan prosesor tersebut.
        RC-5 memiliki struktur yang iterative dengan variabel jumlah rotasi (putaran), sehingga pengguna secara eksplisit dapat memanipulasi trade off antara kecepatan dan tingkat keamanan.
        RC-5 mempunyai variabel panjang key word yang dapat divariasikan, sehingga pengguna dapat memilih tingkat keamanan yang dikehendaki sesuai dengan aplikasi yang digunakan.
        RC-5 sangat sedehana sehingga mudah untuk diimplementasikan.
        RC-5 membutuhkan memori yang kecil.

        6. Pengembangan RC-5
        Pengembangan RC-5 didasari kepada keinginan untuk mendapatkan tingkat keamanan yang tinggi agar sulit dipecahkan. Ada beberapa pengembangan yang sudah dilakukan diantaranya [7]:
        A. RC5XOR
        Konsep pengembangan ini didasari kepada proses pertukaran penjumlahan dengan operasi EX-OR. Jadi semua operasi dasar penjumlahan digantikan dengan operasi EX-OR seperti pada algoritma berikut ini :
        Ri=((Li-1 Ri-1) <<< Ri-1)  Si
        B. RC5P
        Konsep pengembangan ini berlawanan dengan proses diatas, yaitu dengan melakukan pertukaran operasi EX-OR dengan operasi penjumlahan. Jadi operasi yang dilakukan terhadap plaintext hanya dilakukan operasi penjumlahan.
        Ri=((Li-1+ Ri-1) <<< Ri-1) + Si
        C. RC5PFR
        Konsep pengembangan ini memasukan jumlah putaran ri dengan jumlah yang tetap. Proses putaran diberikan dengan nilai yang tetap dan tidak tergantung pada pengembangan sisi kanan dari plaintext.
        Ri=((Li-1 Ri-1) <<< ri) + Si
        D. RC5KFR
        Konsep pengembangan ini memasukan jumlah putaran ri (K) yang didapat dari kunci rahasia K. Konsep putaran yang digunakan tergantung kepada jumlah key yang digunakan. Jadi semakin banyak jumlah key yang digunakan semakin banyak jumlah putaran yang dilakukan.
        Ri=((Li-1 Ri-1) <<< ri(K)) + Si
        F. RC5RA
        Konsep pengembangan ini memasukan jumlah putaran f (Ri-1) yang teragnatung pada jumlah bit Ri-1.
        Ri=((Li-1 Ri-1) <<< f(Ri-1)) + Si
        G. RC6
        Pengembangan yang terbaru dari RC-5 disebut dengan RC-6. Konsep dasar pengembangan ini menggunakan putaran fungsi kuadratik berikut ini terhadap 5 bit bagian atas. f(x)=x(2x+1) mod 223.

        7. Penutup
        Pada kondisi nyata, semua algoritma enkripsi data yang ada masih dapat dipecahkan kuncinya oleh para kritoanalis, hal ini menunjukan bahwa tidak ada algoritma enkripsi data yang sempurna, termasuk juga disini algoritma RC-5. Untuk enkripsi model RC-5 masih terdapat beberapa kelebiha dan kelemahan yaitu diantaranya;.
        A.Kelebihan
        Kesulitan mengetahui sebuah nilai dalam table pengembangan key karena prose pengembangan key dilakukan secara random.
        Algoritma enkripsi ini dapat diimplementasikan dalam bentuk hard ware, karena pada dasarnya algoritm in menggunakan operasi yang dapat dilakukan oleh perangkat keras seperti prosesor. Hal ini telah dibuktikan oleh E. Chitalwala1, T. El-Ghazawi1, N.Alexandridis1 dan K.Gaj2.
        1 The George Washington University, Washington DC.
        2 George Mason University, Fairfax.

        Tingkat keamanan dari enkripsi yang dilakukan dapat dipilih dengan
        menggunakan jumlah kata kunci yang digunakan, hal ini terlihat bahwa jumlah kata kunci akan menentukan jumlah pembagian plaintext yang akan dienkripsi.
        B.Kekurangan
        Algoritma RC-5 dapat diserang dengan menggunakan analisa dari bagian table pengembangan kunci rahasia.
        Salah satu kelemahan umum dari metode enkripsi simetrik adalah masalah manajemen kunci. Hal ini juga terdapat pada RC-5, dimana penerima harus memiliki kunci yang sama untuk membuka chipertext yang dikirimkan kepadanya. Hal ini juga merupakan suatu kelemahan yang dapat dimanfaatkan oleh penyerang.
        Daftar Pustaka
        1.Bruce Schneier, Applied Cryptography : Protocols, Algorithms, and Source Code in C, 2nd Edition
        2.Wahana Komputer & Andi Yogyakarta,” Penanganan Jaringan Komputer”, Semarang, Yogyakarta,2002.
        3.Budi Rahardjo,” Keamanan Sistem informasi Berbasis Internet”, PT Insan Komunikasi Indonesia, Bandung, 2002.
        4.Bambang Hariyanto,”Sistem Operasi”,Jilid I, Informatika Bandung,1997.
        5.Kristianto, Andi, KEAMANAN DATA pada JARINGAN KOMPUTER, Gava Media, Yogyakarta, 2003
        6.Wahana Komputer Semarang, Memahami MODEL ENKRIPSI & SECURITY DATA, Andi Offset, Yogyakarta, 2003
        7.http://grc.com/r&d/rc5-report.pdf
        8.ftp://ftp.auscert.org.au/pub/coast/COAST/Tripwire/*