Thursday, February 07, 2013

Tiny Encription Algorithm (TEA)


Tiny Encription Algorithm (TEA) merupakan suatu algoritma sandi yang diciptakan oleh David J. Wheeler dan Roger M. Needham dari Computer Laboratory, Cambridge University, 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.
Sistem 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 memiliki 32 putaran proses sederhana yang shift, penambahan dan XORs, serta memiliki 128-bit panjang kunci dan 64-bit ukuran blok. Penjadwalan kunci cipher TEA sederhana pula. Ia menggunakan modulo 32-bit tambahan oleh delta (∂) konstan. Namun, konstan yang berasal dari jumlah sebagai berikut:
∂ = (5 -1)
Gambar 1.1 TEA Cipher
231 TEA cipher memproses blok data dengan blok. Setiap blok terdiri dari dua 32-bit blok setengah. Sebuah balok setengah diproses dan bertukar iteratif dan semua operasi yang dilakukan pada modulo 32-bit secara big endian.

  Algoritma Dan Cara Kerja
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 bilangan delta ganda yang berbeda digunakan dalam setiap roundnya sehingga tidak ada bit dari perkalian yang tidak berubah secara teratur. Berbeda dengan struktur 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 sebanyak 64-bit, kemudian 64-bit teks tersebut dibagi menjadi dua bagian, yaitu sisi kiri (L0) sebanyak 32-bit dan sisi kanan (R0) sebanyak 32-bit. Setiap bagian teks 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. Langkah selanjutnya di-XOR-kan dengan hasil penambahan antara Z yang digeser kekanan 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. Langkah selanjutnya 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.
Langkah-langkah penyandian dengan algoritma TEA dalam satu cycle (dua round) :
1.    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.
2. Penambahan
Langkah selanjutnya setelah digeser kekiri dan kekanan, maka Y dan Z yang telah digeser akan ditambahkan dengan kunci k[0]-k[3]. Sedangkan Y dan Z awal akan ditambahkan dengan sum (delta).
3. Peng-XOR-an
Proses selanjutnya setelah dioperasikan dengan penambahan pada masing-masing 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 lalu dilanjutkan proses seperti langkah-langkah diatas sampai dengan 16 cycle (32 round).
4. Key Schedule
Algoritma TEA menggunakan key schedule-nya sangat sederhana. Yaitu kunci k[0] dan k[1] konstan digunakan untuk round ganjil sedangkan kunci k[2] dan k[3] konstan digunakan untuk round genap.
5. Dekripsi
Proses dekripsi sama halnya seperti pada proses penyandian yang berbasis feistel cipher lainnya. Yaitu pada prinsipnya adalah sama pada saat proses enkripsi. Hal yang berbeda adalah penggunaan teks sandi sebagai input dan kunci yang digunakan urutannya dibalik. 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].
Rumus enkripsi diketahui :
L0 = L0 + f ( R0 , k[0], k[1], sum )
R0 = R0 + f ( L0, k[2], k[3], sum )
Proses dekripsi digunakan rumus :
L0 = L0 + f ( R0 , k[1], k[0], sum )
R0 = R0 + f ( L0, k[3], k[2], sum )
   void code(long* v, long* k) {
       unsigned long y=v[0],z=v[1], sum=0,             /* set up */
              delta=0x9e3779b9,          /* a key schedule constant */
              n=32 ;
       while (n-->0)        { /* basic cycle start */
              sum += delta ;
              y += ((z<<4)+k[0]) ^ (z+sum) ^ ((z>>5)+k[1]) ;
              z += ((y<<4)+k[2]) ^ (y+sum) ^ ((y>>5)+k[3]) ;
       }                          /* end cycle */
       v[0]=y ; v[1]=z ; }

Aplikasi
Ada banyak macam pengaplikasian TEA, berikut beberapa contoh :
* TEA dapat diimplementasikan dalam PIC18F4550 dengan hasil yang memuaskan. Pada 4 MHz (1 mikrodetik per siklus) yang bekerja frekuensi, pelaksanaan menunjukkan 586 byte / s kecepatan.
* TEA dengan 16 cycles (32 round) sangat cocok digunakan untuk membangun system keamanan data yang mengandalkan kecepatan proses yang optimal. TEA dengan 32 cycles (64 round) tingkat keamanan lebih tinggi.
Pembangunan Add-on pada Mozilla Thunderbird untuk enkripsi email

Kriptografi


Kriptografi (Cryptography) berasal dari bahasa Yunani yaitu dari kata Crypto dan Graphia yang berarti penulisan rahasia. Kriptografi adalah seni dan ilmu untuk menjaga pesan supaya aman. Kriptografi merupakan bagian dari suatu cabang ilmu matematika yang disebut Cryptology. Kriptografi bertujuan menjaga kerahasiaan informasi yang terkandung dalam data sehingga informasi tersebut tidak dapat diketahui oleh pihak yang tidak sah (Kurniawan, 2002).

Istilah-istilah yang umum ditemui di dunia kriptografi adalah sebagai berikut:
a.    Pesan, Plaintext dan Ciphertext
Pesan (messages) adalah data atau informasi yang dapat dibaca dan dimengerti maknanya. Nama lain untuk pesan adalah plaintext. Pesan dapat berupa data atau informasi yang dikirim melalui kurir atau media telekomunikasi lain atau yang di dalam media penyimpan (storage). Agar pesan tidak dapat dimengerti maknanya oleh pihak lain, maka pesan harus disandikan ke bentuk lain yang tidak dapat dipahami. Bentuk pesan yang tersandikan disebut ciphertext. Ciphertext harus dapat dikembalikan ke bentuk awal atau dikembalikan menjadi plaintext semula agar pesan dapat dibaca oleh orang yang seharusnya menerima pesan.
b.    Pengirim dan Penerima
Komunikasi data yang menggunakan kriptografi selalu melibatkan dua pihak atau dua entitas. Pengirim (sender) adalah entitas yang mengirim pesan kepada entitas lain. Penerima (receiver) adalah entitas yang menerima pesan entitas, dapat berupa orang atau komputer (machine).
c.    Enkripsi dan Dekripsi
Enkripsi (encryption) atau enciphering (standar nama menurut ISO 7498-2) merupakan proses menyandikan plaintext menjadi ciphertext. Dekripsi (decryption) atau deciphering (standar nama menurut ISO 7498-2) merupakan proses mengembalikan ciphertext menjadi plaintext semula. Enkripsi dan dekripsi bisa diterapkan pada pesan yang dikirimkan melalui media transmisi atau pesan yang disimpan di media simpan (storage media).
d.   Cipher
Algoritma kriptografi disebut juga cipher, yaitu aturan untuk enciphering dan deciphering, atau fungsi matematika yang digunakan untuk enkripsi dan dekripsi. Konsep matematis yang mendasari algortima kriptografi adalah relasi antara dua buah himpunan, yaitu himpunan yang berisi elemen–elemen plaintext dan himpunan yang berisi ciphertext. Enkripsi dan dekripsi merupakan fungsi yang memetakan elemen-elemen antara kedua himpunan tersebut. Misalnya P menyatakan plaintext dan C menyatakan ciphertext, maka fungsi enkripsi E memetakan P ke C :
E(P) = C
Dan fungsi dekripsi D memetakan C ke P :
D(C) = P
Karena proses enkripsi kemudian dekripsi mengembalikan pesan ke pesan awal, maka kesamaan berikut harus benar :
D(E(P)) = P
Keamanan algoritma kriptografi sering diukur dari banyaknya kerja (work) yang dibutuhkan untuk memecahkan ciphertext menjadi plaintext-nya tanpa mengetahui kunci yang digunakan.
e.    Kriptanalisis dan Kriptologi
Kriptografi telah berkembang pesat sehingga memunculkan bidang baru yang disebut kriptanalisis. Kriptanalisis atau cryptanalysis adalah ilmu dan seni untuk memecahkan ciphertext menjadi plaintext tanpa mengetahui kunci dan algoritma yang digunakan. Orang yang melakukan kriptanalisis disebut kriptanalis. Jika seorang kriptografer (cryptografer) mengubah plaintext menjadi ciphertext dengan algoritma dan kunci tertentu, maka seorang kriptanalis mengubah ciphertext menjadi plaintext tanpa mengetahui kunci dan algoritmanya terlebih dahulu. Tujuan kriptanalisis adalah menemukan plaintext atau menemukan kunci atau algoritmanya. Kriptologi (cryptology) merupakan studi mengenai kriptografi dan kriptanalisis, dan keduanya saling berkaitan.

A. Macam-macam Algoritma Kriptografi
Algoritma kriptografi dibagi menjadi dua berdasarkan pembagian kunci sebagai berikut (Munir, 2000):
a.         Kriptografi Simetri
       Kriptografi simetri menggunakan kunci untuk enkripsi sama dengan kunci yang dipakai untuk melakukan dekripsi. Istilah lain untuk enkripsi dan dekripsi ini adalah kriptografi kunci privat (private-key cryptography) atau kriptografi kunci rahasia (secret-key cryptography). Penerapan algoritma akan menghasilkan output yang berbeda sesuai dengan kunci yang dipakai. Mengubah kunci berarti juga mengubah output dari algoritma yang dipakai. Hasil chipertext tersebut dapat diubah kembali menjadi pesan asli dengan algoritma dekripsi dan dengan kunci yang sama seperti yang digunakan pada saat enkripsi. Keamanan dari enkripsi konvensional ini terdiri dari beberapa faktor. Pertama, algoritma enkripsi harus benar-benar teruji, sehingga tidak dimungkinkan untuk mendekripsi sebuah pesan hanya dalam bentuk chipertext. Kedua, keamanan enkripsi konvensional juga ditentukan oleh kerahasiaan kunci yang digunakan, bukan kerahasiaan algoritma yang digunakan. Kunci simetri meliputi OTP, DES, RC2, RC4, RC5, RC6, IDEA, Twofish, Rijndael (AES) dan Blowfish.
b.        Kriptografi Asimetri
Kriptografi asimetri adalah algoritma yang memakai kunci berbeda untuk proses enkripsi dan dekripsinya. Kriptografi asimetri disebut juga sebagai sistem kriptografi Public-key karena kunci untuk enkripsi dibuat secara umum (publickey) atau bisa diketahui oleh siapa saja. Proses dekripsinya yang dibuat satu saja, yakni hanya oleh yang berwenang untuk mendekripsinya (disebut private-key). Keuntungan kriptografi asimetri ini, untuk berkorespondensi secara rahasia dengan banyak pihak tidak diperlukan kunci rahasia sebanyak jumlah pihak tersebut, cukup membuat dua buah kunci (disebut public-key) bagi para koresponden untuk mengenkripsi pesan, dan private-key untuk mendekripsi pesan. Metode enkripsi kunci publik membutuhkan dua buah kunci di dalam algoritmanya, yaitu kunci publik dan kunci pribadi. Kunci publik dipakai untuk mengenkripsi plaintext menjadi ciphertext, kunci pribadi dipakai untuk mendekripsi ciphertext menjadi plaintext dan kunci ini bersifat rahasia. Algoritma kriptografi asimetri meliputi ECC, LUC, RSA, El Gamal, DH.

B.  Tujuan Kriptografi
Tujuan kriptografi meliputi lima aspek penting sebagai berikut (Kurniawan, 2004):
a.         Kerahasiaan
Confidentiality atau kerahasiaan adalah tujuan kriptografi yang bertujuan untuk menjaga agar informasi atau pesan yang ada tidak dapat dibaca oleh pihak–pihak yang tidak berhak.
b.        Integritas Data
Data integrity atau integritas data merupakan tujuan kriptografi yang menjamin bahwa pesan masih asli atau belum pernah dimanipulasi oleh pihak yang tidak berhak selama proses pengiriman.
c.         Otentikasi
Authentication atau otentikasi adalah tujuan kriptografi yang berhubungan dengan identifikasi. Dalam hal ini akan diidentifikasi tentang kebenaran pihak–pihak yang berkomunikasi. Hal ini berkaitan erat dengan keaslian sumber pesan.
d.        Anti Penyangkalan
Non repudiation atau anti penyangkalan adalah tujuan kriptografi yang bertujuan mencegah pihak yang mengirim pesan melakukan penyangkalan terhadap pesan yang dikirimnya.

Macam-macam Metode Kriptograpi


Asymmetric (public key) encryption:
  1. DSA
  2. ElGamal
  3. Elliptic curve cryptography
  4. NTRUEncrypt
  5. RSA
Cryptographic hash functions:
  1. HMAC: keyed-hash message authentication
  2. MD5 – Note that there is now a method of generating collisions for MD5
  3. RIPEMD-160
  4. SHA-1
  5. SHA-2 (SHA-224, SHA-256, SHA-384, SHA-512)
  6. Tiger (TTH), usually used in Tiger tree hashes
Cryptographically secure pseudo-random number generators
  1. Blum Blum Shub - based on the hardness of factorization
  2. Fortuna, intended as an improvement on Yarrow algorithm
  3. Linear feedback shift register
  4. Yarrow algorithm
  5. Key exchange
  6. Diffie–Hellman key exchange
  7. Secret sharing, Secret Splitting, Key Splitting, M of N algorithms
  8. Blakey's Scheme
  9. Shamir's Scheme
Symmetric (secret key) encryption:
  1. Advanced Encryption Standard (AES), winner of NIST competition, also known as Rijndael
  2. Blowfish
  3. Data Encryption Standard (DES), sometimes DE Algorithm, winner of NBS selection competition, replaced by AES for most purposes
  4. IDEA
  5. RC4 (cipher)
  6. Tiny Encryption Algorithm

Client Server dan Peer to Peer


          Client server adalah jaringan yang memisahkan client dengan server. Masing-masing client dapat meminta data atau informasi dari server. Client disini adalah konsumen dan server adalah provider. Server bisa melayani beberapa client pada waktu yang sama, dan meregulasi akses bersama untuk share sumber daya dalam menjamin konsistensinya. Server bisa diupgrade tanpa mempengaruhi client selama interface pesan yang diterbitkan tidak berubah.
          Kelebihan
o  Keamanan lebih baik
o  Administrator tersentralisasi
o  Data terbackup pada satu server
Kekurangan
o  Butuh software NOS yang mahal
o  Butuh hardware yang tinggi dan mahal untuk mesin server
o  Butuh administrator yang professional
o  Jika server mati, data user hilang

    Peer to Peer (P2P) adalah sebuah jaringan yang memungkinkan semua komputer dalam lingkungannya bertindak/berstatus sebagai server yang memiliki kemampuan untuk mendistribusikan sekaligus menerima berkas-berkas atau sumber. Kata peer berarti pengguna satu dengan yang lainnya. Dan yang terpenting, hubungan ini haruslah menghasilkan interaksi langsung antara komputer pengguna yang satu dengan komputer pengguna lainnya. Tanpa embel-embel ada komputer yang berstatus sebagai client dan berstatus sebagai server.
          Kelebihan
o  Pelaksanaan tidak terlalu mahal, relatif murah
o  Tidak membutuhkan software server NOS ( Network Operating System )
o  Tidak membutuhkan administrator network yang handal
Kekurangan
o  Tidak cocok untuk networking skala besar
o  User harus bias seperti administrator
o  Keamanan kurang
o  Mesin yang sharing resource tidak memperngaruhi performa