Saturday, December 21, 2013

JABBER PROTOKOL

  1. Pengertian Jabber
Jabber adalah protokol eXtended Markup Language (XML) yang terbuka yang berfungsi sebagai pertukaran pesan dan kehadiran antara dua host dalam internet. Implementasi pertama dari Jabber adalah Instant Messenger yang mempunyai fungsi yang sama seperti IM yang sudah ada seperti ICQ, AOL, MSN dan Yahoo messenger

  1. Sekilas Tentang Jabber
Proyek Jabber dimulai pada awal 1998 sebagai gagasan dari Jeremie Miller. Proyek tersebut cepat berkembang pesat dan mulai mendapat perhatian publik ketika menjadi topik diskusi pada slashdot (www.slashdot.org) yaitu sebuah website diskusi popular antar developer pada bulan januari 1999. Protokol inti Jabber versi 1.0 dari referensi server jabber yang bersifat open source dirilis pada bulan Mei 2000.
Dari awal pengembangan, komunitas developer Jabber mencoba untuk membuat standart IM dan menyarankan interoperability antar sistem IM. Usaha kooperatif ini sangat kontras dengan perilaku dari provider IM lainnya yang menjaga agar sistem mereka tertutup dan terisolasi dari jaringan IM lain.
Sebagai usaha menjadikan Jabber sebagai protokol standart, pada bulan juni 2000, komunitas Jabber mempublikasikan protokol tersebut sebagai Request for Comments (RFC) kepada Internet Engeneering Task Force (IETF) sebagai bagian dari  standart IMPP (Instant Messaging and Presence). tetapi IMPP ini tidak berjalan sukses. Pada bulan Mei 2001, Jabber Community dan Jabber Inc. membuat Jabber Software Foundation. Jabber Software Foundation adalah organisasi serupa dengan Apache Foundation yang keberadaannya adalah untuk menunjukkan dedikasinya terhadap dunia open source dan interoperability antar sistem IM.
Pada tahun 2002, Internet Engineering Steering Group (IESG) menyetujui formasi Extensible Messaging and Presence Protocol Working Group (XMPP) dengan Internet Engineering Task Force (IETF). Ruang lingkup working group adalah untuk mengeksplorasi dan dimana protokol tersebut digunakan, memodifikasi protokol yang sudah ada agar dapat memenuhi RFC 2799 seperti persyaratan yang ditentukan dalam spesifikasi Common Presence and Instant Messaging (CPIM). Fokus utama working group adalah membuat XML stream termasuk stream pada level security dan autentikasi, elemen data dan namespace yang dibutuhkan untuk mencapai dasar IM dan Presence. XMPP working group menerbitkan XMPP Core Internet-Draft sebagai dokumen yang menggambarkan fitur-fitur utama Extensible Messaging dan protokol Presence

  1. Tinjauan Teknologi Protokol Jabber
 Dalam banyak hal, tujuan dari Jabber adalah untuk membangun sistem IM yang lebih baik yang mendukung informasi kehadiran secara real time(presence) dan pesan(messaging). Yang dimaksud sistem IM yang lebih baik adalah :
1.      Open, protokol Jabber bersifat free, terbuka, publik dan mudah dimengerti. Ini mempermudah untuk siapapun yang membuat implementasi Jabber tanpa harus mengeluarkan biaya untuk lisensinya.
2.      Standart, Internet Engeneering Task Force (IETF) telah menformulasikan protokol XML sebagai instant messaging and presence technology yang disetujui dengan nama Extensible Messaging dan Presence Protocol atau XMPP.
3.      Proven, Jabber pertama kali dikembangkan oleh Jaremie Miller pada tahun 1998 dan sekarang sudah cukup stabil, ratusan developer berkerja menggunakan teknologi jabber. Ada sepuluh dari seribu Jabber server yang aktif di internet sekarang dan jutaan orang menggunakan Jabber untuk IM.
4.      Decentralized, Arsitektur dari Jabber menyerupai email, sehingga setiap orang dapat membuat jabber server sendiri.
5.      Secure, Jabber server dapat dibuat terisolasi dari jaringan lain. Selain itu sistem keamanan menggunakan SASL dan TLS sudah dibangun di dalam core XMPP specification
6.      Extensible, menggunakan kelebihan dari XML namesapces, setiap orang dapat membangun fungsionalitas tambahan diatas protokol jabber. Untuk menjaga interoperability, extension umum diatur oleh XMPP Standart Foundation.
7.      Diverse, banyak perusahaan dan project open source menggunakan protokol jabber untuk membangun real-time application. Developer tidak akan merasa “terkunci” menggunakan teknologi jabber.

  1. Arsitektur Jabber
Jabber menggunakan arsitektur client server. client Jabber dapat berkomunikasi dengan server Jabber pada domain Jabber mereka. Domain Jabber memiliki keuntungan yaitu kemampuannya dalam memisahkan zona komunikasi, yang ditangani oleh server Jabber yang berbeda, tidak seperti kebanyakan sistem IM lainnya yang menggunakan satu server terpusat untuk seluruh zona komunikasi. Pada Jabber pesan dikirim oleh client ke server pengirim kemudian diteruskan ke server penerima baru kemudian disampaikan ke client penerima
Format data yang digunakan untuk komunikasi pada jabber adalah format data XML. XML adalah standart World Wide Web Consortium untuk format data yg standart, generic untuk sebuah dokumen. Semua komunikasi yang berlangsung pada Jabber melibatkan pertukaran paket jabber dimana setiap paket dapat berupa fragmentasi XML. Fragmentasi XML ini dapat dikatakan sebagai sub dokumen dalam komunikasi stream pada Jabber.
1.      Modular server
Server Jabber memiliki tiga peranan utama yaitu :
·         Menangani koneksi client dan berkomunikasi secara langsung dengan client Jabber
·         Berkomunikasi dengan server Jabber yang lain
·         Mengkoordinasikan beragam komponen server yang diasosiasikan dengan server
Server Jabber di desain modular, dengan paket kode internal yang khusus sehingga dapat menangani fungsionalitasnya seperti registrasi, auntentikasi, present, contact list, penyimpanan pesan yang berstatus off-line dan sebagainya. Selain itu server Jabber dapat dikembangkan dengan komponen eksternal yang memungkinkan administrator server untuk mensuplemen server pusat dengan layanan tambahan semacam gerbang untuk sistem messaging lainnya.

2.      Simple client
Satu kriteria desain sistem Jabber bahwa ia harus memiliki kemampuan untuk mendukung client yang sederhana misalnya koneksi telnet pada port yang benar. Dalam hal ini tentu saja arsitektur Jabber memberikan sedikit batasan pada client. Task-task pada client Jabber harus dapat mengenal dan melengkapi :
·         Komunikasi dengan server Jabber melalui soket TCP
·         Melakukan parsing dan interpretasi XML dengan format yang baik melalui XML stream
·         Memahami tipe data utama Jabber (message, presence dan iq)
Keuntungan di dalam Jabber adalah dapat memindahkan kompleksitas dari client ke server. Secara praktis, banyak fungsi yang low-level pada client seperti proses parsing XML dan memahami tipe data core Jabber yang ditangani oleh library-library client Jabber, memungkinkan client developer untuk fokus pada user interface

  1. Komponen Utama Jabber
Tiga komponen utama jabber adalah :

1.      Message
Jabber menggunakan protokol message untuk mengirim pesan dalam bentuk XML stream. Pesan dapat dikirm antara jabber client dengan jabber server atau antara dua jabber server yang berbeda.
Protokol message sangat sederhana, paket pesan dikirim dari sender ke recepient. Secara default tidak ada acknowledge ketika recepient menerima pesan. Jika pesan dikirim dan recepient dalam keadaan offline maka server berkewajiban menyimpan pesan tersebut dan mengirimkannya ketika recepient sudah dalam keadaan online. Proses seperti ini mengacu pada proses store and foward.
Pada dasarnya format untuk protokol message adalah sebagai berikut :
<message></message>



Atribut
Fungsi
Contoh
to=”” from=””
Mengidentifikasikan sender dan recepient. Format alamat jabber diatur dalam spesifikasi jabber. Atribut ini diperlukan untuk semua pesan.
<message to=”smith@example.com”>
<body> Do you have a new report </body>
</message>
Id=””
Digunakan identifier yang unik pada pesan. Client dapat menggunakan id untuk mengidentifikasikan pesan jika pesan mengalami error. Atribut ini bersifat opsional.
<message to=”smith@example.com”
id=”1001”>
<body> Do you have a new report </body>
</message>
[default]
Menunjukkan bahwa pesan berupa normal message. Secara default, client memberikan atribut tipe ini jika tidak ada atribut type yang diberikan.
<message to=”smith@example.com”>
<body> Do you have a new report </body>
</message>
type=”error”
Mengindikasikan bahwa pesan adalah error message. Error ditunjukkan didalam sub elemen <error></error> di dalam elemen message
<message to=”smith@example.com”
type=”error”>
<error type=”404”> Not found </error>
</message>
type=”chat”
Mengindikasikan bahwa pesan ditampilkan dalam sebuat line-by-line chat interface (1-to-1 chat)
<message to=”smith@example.com”
type=”chat”>
<body> Do you have a new report </body>
</message>
type=”groupchat”
Mengindikasikan bahwa pesan ditampilkan dalam room chat interface.
<message to=”smith@example.com”
type=”groupchat”>
<body> Do you have a new report </body>
</message>

Protokol message mempunyai beberapa set sub-elemen didalamnya. Sub-elemen yang pertama menunjukkan content dari pesan dan yang kedua adalah sub-elemen yang merupakan informasi metadata.

·         Content
<body><body>

Sub-elemen ini membungkus isi pesan yang akan dikirimkan. Elemen <body/> hanya diperbolehkan ada satu kali pada setiap pesan dan berupa plain text.

<x xlmns=”jabber:x:”></x>

Sub-elemen ini digunakan untuk mengirim perintah antar client atau sebagai mekanisme tambahan. Setiap kali elemen ini digunakan, namespaces (xmlns) harus didefinisikan. Sebuah pesan dapat memiliki banyak elemen </x> ini.
Sebagai contoh namespaces untuk out-of-bond extension dapat digunakan untuk mengirim file antar aplikasi.

<x xmlns=”jabber:x:oob”></x>

<error type=”nnn”></error>

Sub-elemen ini disertakan ketika atribut type dari pesan di set “error”. Error yang sebenarnya didefinisikan oleh atribut type=”nnn” yang menunjukkan jenis dari error.
·         302 – redirect
·         400 – Bad Request
·         401 – Unauthorized
·         402 – Payment Reuired
·         407 – Registration Required
·         408 – Request Timeout
·         409 – Conflict
·         500 – Internal Sevrer Error

Isi dari sub-elemen error adalah penjelasan teks dari spesifik error. Sebagai contoh, bad request mempunyai format sebagai berikut :

<error type=”400”>Bad Request</error>

·         Metadata
<subject></subject>

Sub-elemen ini menjelaskan topik dari pesan.

<thread></thread>

client penerima pesan selalu mengembalikan id dari elemen ini ketika terdapat membalas pesan yang diterima. Hal ini membuat pengirim dan penerima untuk mengidentifikasikan dan membuat conversation thread. Thread biasanya bernilai id string yang unik dan random.
Ketika client mengirim pesan ke server. Pengirim secara implisit menjadi jabber id dari client dan penerima adalah server jika tidak ada alamat jabber id penerima. Beberapa server Jabber tidak mengijinkan kita untuk mengirim pesan dengan alamat jabber pengirim yang tidak sesuai dengan session pengirim. Contoh pesan valid yang dikirim ke server adalah sebagai berikut :
<message to='smirk@jabber.org'>
<body>howdy</body>
</message>

Pada sisi server, pemrosesan akhir pengiriman pesan akan tampak sebagai berikut :

<message from='iain@shigeoka.com/work'
to='smirk@jabber.org'>
<body>Howdy</body>
</message>

2.      Presence
Protokol ini bertanggung jawab terhadap dua hal dibawah ini, yaitu :
a.       Presence Update, menginformasikan pengguna lain status presence yang sedang kita digunakan.
b.      Presence Subscription Management, mengijinkan pengguna untuk mendaftarkan update presence dari pengguna lain dan mengatur siapa saja yang berhak mengetahui status presence-nya.

Dalam kedua peran tersebut server jabber bertindak sebagai penengah antara presence information generator dan presence recepients. Server tidak memiliki kewenangan untuk secara pasif mengatur rute dari presence packet namun secara aktif server berpartisipasi di dalam protokol presence untuk memastikan operasi dilakukan dengan benar. Gambar 2.3 menunjukkan alur dari informasi pada Jabber server.


Gambar 2.3 Server Jabber sebagai abitrator dalam pertukaran informasi presence

Presence update protocol menggunakan model pesan satu arah atau one-way message. Client mengirim update presence packet kepada server, kemudian server meneruskan salinan dari paket tersebut kepada semua pihak yang terdaftar pada presence subscription list dari client pengirim. Subscription list tersebut dinamakan roster di dalam jabber, namun lebih umum dikenal dengan sebutan buddy list.
Client jabber dapat dapat mendaftar presence dari jabber client lainnya. Proses pendaftaran tersebut adalah sebuah kesepakatan untuk mengetahui status presence dari client jabber  yang daftarkan. Sebagai contoh, kita dapat mendaftar presence temen kita sehingga ketika teman kita tersebut online, kita akan mendapatkan notifikasi, begitu pula sebaliknya.


Tabel 2. 1 Atribut pada elemen <presence>

Atribut
Fungsi
Contoh
type=
”subscribe”
mendaftar informasi presence pengguna lain
<presence to=”george@aim.jabber.com
type=subscribe”
type=
”subscribed”
Menerima request pendaftaran informasi presence dari pengguna lain
<presence to=”jane@jabber.com
type=subscribed”
type=
”unsubscribe”
Menghentikan update informasi presence dari pengguna lain
<presence to=”george@aim.jabber.com
type=unsubscribe”
type=
”unsubscribed”
Menghapus presence pengguna lain
<presence to=”jane@jabber.com
type=unsubscribed”

Server menggunakan Probe presence packet untuk request spesifik entitas dari presence packet. Dalam hal ini entitas yang dimaksud adalah menentukan apakan entitas tersebut available atau unavailable. Entity Probe mengijinkan informasi presence untuk dikirimkan
Elemen request probe presence dikirim dengan menggunakan format dibawah ini

<presence type=”probe”>

Elemen-elemen dibawah ini digunakan di dalam elemen <presence>.
<status></status>
Elemen ini digunakan untuk menampilkan deskripsi status dari user yang dapat langsung dilihat oleh user lain. Misal, pengguna ingin menampilkan status yang menunjukkan deskripsi dari apa yang sedang ia lakukan, “i’m at lunch” atau”be back in 5 minutes

<priority><priority>

Elemen ini memberi prioritas dari presence pada satu entitas pengguna. Misal smith@example.com mungkin login dengan menggunakan multiple resources (home computer, work dan work computer). Elemen ini memberikan prioritas angka untuk setiap resources. Resources dengan angka yang tinggi adalah default dari resources. Semua pesan dan komunikasi akan diarahkan kepada resources yang mempunyai nilai prioritas paling tinggi.
Ketika prioritas resources paling tinggi tersebut menjadi unavailable, pesan dan komunikasi akan dikirim ke resources lainnya yang mempunyai nilai prioritas tertentingi kedua. Prioritas yang bernilai negatif menunjukkan bahwa resources tidak dapat digunakan untuk direct atau immediate contact.

<show></show>

Elemen ini menunjukkan bagaimana status online seorang user kepada user lain. Tabel 2.3 berikut ini menunjukkan opsi yang tersedia.

Tabel 2. 2 Nilai pada elemen <show>

Tag/Elemen
Arti
<show>chat><show>
Client availabel untuk immediate contact
<show>away><show>
Client dalam keadaan online, namun tidak ada di tempat (misal “at launch” atau “meeting”)
<show>xa><show>
Client dalam keadaan online namun tidak aktif dalam jangka waktu lama
<show>dnd><show>
Client dalam keadaan tidak sedang ingin diganggu atau mode don’t distrub


<x xmlns=”jabber:x”></x>

Elemen ini digunakan untuk mengirimkan perintah antar aplikasi atai sebagai fungsi tambahan. Setiap kali elemen ini digunakan, namespaces xmlns harus didefinisikan. Sebuah pesan tunggal dapat memiliki lebih dari elemen <x/>.


3.      Info/Query
Meskipun secara garis besar trafik jabber terdiri dari message dan presence, sebagian besar pekerjaan mengimplementasikan client dan server adalah mengatur administrasi dan manajemen protokol yang mendukung message dan presence. Jabber melakukan tugas tersebut menggunakan  generic query protocol yang disebut IQ. Gambar 2.4 menunjukkan gambaran cara kerja dari protokol IQ.


Gambar 2.4 Atribut pada elemen <iq>

Tabel 2. 3 Tabel atribut pada elemen IQ
Atribut
Fungsi
Contoh
to="*" from="*"

Mengidentifikasi sender dan recepients
<iq to="jsmith@example.com"/>

id="*"

Id unik untuk message
<iq to="jsmith@example.com"
id="1001"/>
type="get"

Menerima informasi yang berhubungan dengan query namespace. Atribut ini secara default disertakan jika tipe atribut tidak di set
<iq type="get"
to="jsmith@example.com"/>

type="set"

Menunjukkan bahwa message yg dikirim adalah query yang di dalam nya terdapat data yang akan di set atau diganti nilainya
<iq type="set"
to="jsmith@example.com"/>

type="result"

Mengindikasikan message adalah response tanda bahwa query Get atau Set berhasil dilakukan.
<iq type="result"
from="jsmith@example.com"/>

type="error"

Menunjukkan kegagalan dalam query. Deskripsi dari kesalahan di jabarkan pada elemen error yang ada di dalam elemen iq
<iq type="error"
to="jsmith@example.com">
<error type="404">Not
found</error>
</iq>

Di dalam setiap IQ, sebuah namaspaces mendefinisikan tipe dari query yang akan dilakukan. Namespaces didefinisikan di dalam elemen query seperti yang ditunjukkan dibawah ini.

<query xmlns="*"/>

Sebagai contoh, client mengirim query Set dengan client authentification namespaces ke server untuk login.

<iq type="set" to="jsmith@example.com">
<query xmlns="jabber:iq:auth">
</query>
</iq>

format protokol IQ yang digunakan pada jabber dapat dirumuskan seperti yang ditunjukkan dibawah ini.

<iq type='set|get|result|error'
to='handler_jid'
from='originator_jid'
id='unique'>
<query xmlns='iq extension namespace'>
    <query_field1/>
<query_field2/>
</query>
</iq>

Protokol IQ ini sangat penting jika kita ingin membangun server berdasarkan kebijakan keamanan sistem yang harus dipenuhi oleh client. Jika sistem keamanan client telah terpenuhi maka harus mendukung pula terhadap sistem keamanan pada sisi server.

  1. Sistem Keeamanan Jabber Protokol
1.         Stream Encryption
XMPP merupakan sebuah metode untuk mengamankan  stream  dari kerusakan atau  pembicaraan yang didengar oleh pihak lain (eavesdropping).
1.      SSL/TLS
Sebelum menggunakan SSL/TLS, client dapat mulai dengan membahas STARTTLS memantau respon  server apakah mendukung TLS atau tidak
2.      OpenPGP
XMPP working group outline menggunakan solusi OpenPGP yang digunakan saat  ini dengan tidak ada modifikasi aktual di dalam draft internet mereka dengan judul End- To-End Object Encryption. XMPP working group menggambarkan enkripsi objek sebagai mekanisme  key exchange  yang dilakukan dengan mengunakan  key server OpenPGP

2.         Stream Authentication
         XMPP menggunakan dua macam metode untuk memperkuat autentikasi pada level  XML stream     
1.      SASL Authentication
         SASL  menyediakan metode umum untuk menambahkan autentikasi yang mendukung koneksi berbasis protokol. XMPP menggunakan sebuah profil  namespace XML yang umum dan namespace identifier untuk protokol ini
2.      Dialback Authentication
         Di dalam XMPP termasuk sebuah metode level protokol untuk membuktikan bahwa koneksi antara 2 server dapat dipercaya (minimal seperti DNS yang dapat dipercaya). Metode ini disebut dialback dan hanya dapat digunakan dengan XML stream yang dideklarasikan berdasarkan namespace jabber:server.

3.         Stream Authentication

            XML digunakan sebagai teknologi dasar untuk mendesain dokumen yang terstruktur berdasarkan pertimbangan bahwa XML merupakan standar yang terbuka dan telah diterima secara luas untuk mendukung transaksi berbasis Internet

3 comments: