Jumat, 04 Mei 2012

tentang WAP (bagian 3)

Tulisan ini merupakan bagian 3. 
Untuk bagian 1 dapat dilihat disini, dan untuk bagian 2 dapat dilihat disini.
Pengembangan aplikasi WAP dilakukan dalam suatu lingkungan kerja yang disebut Wireless Application Environment (WAE). Inti dari WAE ini terdiri Wireless Markup Language (WML) dan Wireless Markup Language Scripts (WMLScript). 

Pengembangan Aplikasi WAP dengan PHP
Untuk membuat aplikasi WAP menjadi lebih dinamis dan interaktif, yang mampu memberikan dan menerima respon dari dan ke pengakses, kita dapat menggunakan bahasa-bahasa script yang berjalan pada sisi server (server side-scripting). Dalam tugas akhir ini akan menggunakan PHP ( PHP Hypertext Processor), bahasa script server-side yang tangguh, populer di internet dan gratis untuk memberi unsur dinamik dan interaktif pada aplikasi WAP.

Pada prinsipnya, komunikasi antara web server dengan perangkat WAP sama dengan hubungan antara web server dengan browser berbasis PC, hanya saja dalam hal ini ada satu tahap tambahan. Tahap ekstra yang dibutuhkan adalah transfer informasi oleh WAP gateway. WAP gateway bertindak sebagai perantara antara browser nirkabel dengan server tempat informasi berada.


Proses Komunikasi browser nirkabel dengan web server     

Yang berperan sebagai WAP gateway biasanya adalah perusahaan telekomunikasi yang menyediakan layanan telepon nirkabel atau telepon seluler. Misalkan kita telah membuat deck yang berisi dua buah card. Kemudian user daengan perangkat nirkabelnya melakukan permintaan atau request  terhadap deck tersebut. Maka, urut-urutan event yang terjadi untuk permintaan user tersebut adalah sebagai berikut :
  1. Request dikirimkan ke WAP gateway dengan protocol WAP. WAP gateway, di bawah “kendali” dari perangkat WAP, melakukan request untuk URL tertentu dengan protocol HTTP.
  2. Request ditransmisikan via internet ke alamat IP dari perangkat WAP (alamat IP dari suatu perangkat WAP ditentukan oleh operator).
  3. Request mencapai tujuan akhirnya, yaitu web server.  Server membaca header dan memproses permintaan dokumen WAP. Kode program PHP yang terdapat dalam dokumen ini dikompilasi dan diformat sesuai dengan kebutuhan.
  4. Dokumen atau deck WAP yang telah diproses ini dikirimkan kembali melalui WAP gateway. Pada gateway, isi dari deck dikompres menjadi data biner dan dikirimkan keperangkat WAP.


Adalah mungkin dan sangat mudah untuk menambahkan unsur dinamik ke dalam WML dengan PHP. Pengembnagan aplikasi WAP dengan PHP memungkinkan kita membuat aplikasi seperti database, mailserver, pengiriman pesan dan lain-lain. Supaya script PHP dapat didukung oleh perangkat WAP, script ini harus menghasilkan outrput header WML kepada Client. Karena itu, setiap dokumen WML yang berisi kode PHP harus menyertakan baris-baris berikut yang ditempatkan pada awal deck:


Deklarasi ini diperlukan karena PHP secara default mengirim baris Content-type : text/html.


Interaksi PHP dengan MySQL
Komunikasi antara user dengan WAP browser dengan web server dapat menjadi lebih interaktif dengan penggunaan database. Dengan adanya PHP yang bekerja pada sisi server, komunikasi interaktif dapat dilakukan dengan antara user dengan server, baik Apache sebagai web server maupun database server MySQL. User yang mengakses dapat memperoleh data atau informasi dari server dan server dapat menyimpan data yang dikirimkan user dalam database MySQL.
Database yang dipakai adalah MySQL dengan beberapa alasan, antara lain karena MySQL gratis dan mudah dipelajari. Dalam PHP terdapat banyak fungsi yang digunakan sebagai penghubung atau antarmuka dengan MySQL sehingga data dalam database dapat dilihat di internet. Banyak situs di internet yang menggunakan PHP-MySQL dalam pengembangan situsnya. 

tentang WAP (bagian 2)

Bagian Pertama dari tulisan ini, dapat dilihat disini.
Pengembangan aplikasi WAP dilakukan dalam suatu lingkungan kerja yang disebut Wireless Application Environment (WAE). Inti dari WAE ini terdiri Wireless Markup Language (WML) dan Wireless Markup Language Scripts (WMLScript). 

WML merupakan bahasa mark-up yang  berbasis pada Extensible Markup Language (XML). WML adalah analogi dari HTML yang berjalan pada protocol nirkabel. Tag-tag pada WML mirip dengan tag-tag yang ada pada HTML.
Data WML terstruktur dalam bentuk koleksi kartu atau card. Sebuah koleksi card disebut deck. Tiap deck tersusun dari isi yang terstruktur dan spesifikasi navigasi. Penggunaan melakukan navigasi dalam susunan card, melihat isi tiap card, mengisi informasi yang dibutuhkan, membuat pilihan dan bernavigasi ke card selanjutnya atau kembali ke card sebelumnya.
Dalam HTML, user interface ditampilkan dalam bentuk halaman-halaman HTML di mana dalam card pada suatu deck dapat memiliki hyperlink ke card yang lain.
Jika WML merupakan analogi dari HTML pada media nirkabel, maka WMLScript merupakan analogi yang tepat dari JavaScript. WMLScript, seperti halnya JavaScript, berjalan pada sisi client (client side scripting). Bedanya, WMLScript tidak bisa ditempatkan menjadi satu dengan halaman WML yang menggunakan fungsi-fungsi dari WMLScript.

Fungsi-fungsi WMLScript yang akan digunakan oleh halaman WML ditempatkan dalam file yang terpisah. Pemisahan ini memberikan suatu keuntungan, yaitu dalam fokus pembuatan aplikasi. Jika kita bekerja dengan halaman WML, maka kita hanya berfokus pada isi atau user interface halaman yang kita inginkan. Dengan WMLScript, kita berfokus pada pembuatan prosedur atau fungsi dari logika pemrograman.

Aplikasi WML yang kita buat dapat diakses menggunakan browser yang disebut user agent (UA). UA mendownload halaman WML dan atau WMLScript yang dibutuhkan dan merender halaman tersebut. Hasil render halaman WML amat tergantung pada tipe alat yang digunakan. Dan tampilan yang diperoleh mungkin berbeda antara ponsel dengan kemampuan grafis yang baik dengan yang hanya mendukung modus teks.

Berikut adalah catatan terkait WML:
Prolog WML 8
Statetmen pertama dalam sebuah dokumen XML dalam sebuah dokumen WML disebut prolog ini adalah optional (tidak harus ada) dan mengandung  dua baris kode :
Deklarasi  XML : digunakan untuk mendefinisikan versi XML
Deklarasi DTD : penunjuk ke file yang mengandung DTD dokumen ini.

Contoh prolog adalah sebagai berikut : 
<?xml version="1.0" encoding="iso-8859-1" ?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
"http://www.wapforum.org/DTD/wml_1.1.xml">

Setelah prolog, setiap dokumen XML mengandung sebuah elemen tunggal yang mengandung semua sub elemen dan entity yang lainnya. Seperti kalau di HTML, semua elemen dikurung  oleh karakter <> dan </>. Misalnya :
                    <element> datadatadata </element>

Hanya boleh ada satu elemen dokumen per dokumen. Dengan WML, elemen dokumennya adalah <wml>, (seperti di html elemen dokumennya adalah <html> ) semua elemen lainnya termasuk di dalamnya. 
Dua cara paling umum untuk menyimpan data dalam dokumen XML adalah dengan element dan attribute.
Element adalah item-item berstruktur dalam  dokumen tersebut yang ditandai dengan tag elemen pembuka dan penutup. Element juga dapat mengandung sub-element.
Attribute biasanya digunakan untuk mendeskripsikan sebuah elemen.

Contoh, misalkan ada kode seperti ini:


Dalam kode di atas, element mengandung attribute id dan title. (Catatan: komentar di WML mirip dengan HTML tetapi harus tampil dalam tag <!-- -->  

Element WML yang  valid
WML mendefinisikan sebelumnya sebuah kumpulan element yang dapat dikombinasikan bersama-sama untuk membuat sebuah dokumen WML. Pencantuman Elemen-eleman ini dapat dibagi menjadi dua kelmpok :
Element Deck/Card; dan Element Event.
Element Deck/Card : wml,card, template, head, acces, meta.
Element Event : do, on timer, onenterforward, onenterbackward, onpick, onevent, postfield.
Task : go, prev, refresh, noop.
Variabel : input, select, option, optgroup, fieldset.
Anchor, Image dan Timer : a, anchor, img, timer.
Text Formatting : br, p, table, tr, td.
Setiap elemen di atas dimasukkan ke dalam dokumen dengan sintaks seperti ini :
<element>nilai elemen itu</element>

Jika sebuah elemen tidak punya data di dalamnya (sebagaimana biasanya dalam kasus menformat elemen dengan <br> misalnya), kita dapat menghemat dengan hanya memasukkan satu tag yang ditambahi karakter / (misalnya: <br/>.

tentang WAP


WIRELESS APPLICATION PROTOCOL (WAP) merupakan salah satu produk Teknologi Informasi Komunikasi yang paling sering digunakan oleh masyarakat umum. Internet sejak pertengahan tahun 1990-an hingga kini, telah mengubah cara kita berkomunikasi dan berinteraksi. Internet memungkinkan terjadinya pertukaran informasi secara cepat dalam lingkup yang global, yaitu dunia. Informasi kemudian menjadi wilayah publik dapat diakses dari manapun. Perkembangan sistem komunikasi personal nirkabel (wireless) yang pesat telah membangkitkan gagasan-gagasan tentang akses internet dan informasi dari perangkat komunikasi personal nirkabel dengan tingkat mobilitas tinggi. Bagaimana bisa? Teknologi Wireless Aplication Protocol (WAP) merupakan sinergi dari kombinasi internet dan dunia komunikasi nirkabel.

Apa itu WAP
Wireless Application Protocol (WAP) merupakan protokol bagi perangkat-perangkat nirkabel yang menyediakan layanan komunikasi data bagi pengguna, baik dalam bentuk yang berhubunngan dengan telekomunikasi maupun aplikasi-aplikasi berorentasi internet.
Struktur  WAP mengadopsi topologi layer-layer yang ada pada Internet Protocol (model TCP/IP). Ini terkait dengan tujuan dibuatnya WAP, yaitu memberikan akses internet bagi alat komunikasi mobile nirkabel. Protokol mengatur bagaimana format paket data dan layanan-layanan terhadap paket data pada setiap layer, bagaimana suatu layer memberikan layanan kepada layer lain yang berada diatasnya.   

Mengembangkan Aplikasi  WAP
Pengembangan aplikasi WAP dilakukan dalam suatu lingkungan kerja yang disebut Wireless Application Environment (WAE). Inti dari WAE ini terdiri Wireless Markup Language (WML) dan Wireless Markup Language Scripts (WMLScript). 
Untuk  menjangkau dunia internet, sebuah ponsel dengan teknologi WAP harus berjalan via WAP Gateway. WAP Gateway ini bertindak sebagai perantara, menghubungkan jaringan mobile dan internet dengan menerjemahkan Hypertext Transfer Protokol (HTTP) menjadi Wireless Session Protokol (WSP). Gambar di bawah ini menunjukkan skema sederhana hubungan antara web server, gateway dan ponsel dengan WAP.


Diagram Network Pada WAP

Web server melayani permintaan dari user melalui ponsel untuk sebuah aplikasi WAP. Hubungan ini dilakukan melalui perantara WAP Gateway. Aplikasi dalam WAP dibentuk dalam format WML. Untuk menjalankan suatu aplikasi WAP, sama halnya dengan internet biasa. Kita tinggal mengetikan URL yang dikehendaki, misalnya : http://tekniksoft.net. Karena itu, untuk membuat aplikasi WAP yang kita butuhkan adalah sebuah web server untuk menangani permintaan user akan aplikasi WAP, misalnya Apache, Microsoft Internet Information Sevice (IIS), ataupun PWS (Personal Web Server).

Kamis, 03 Mei 2012

Algoritma SHA



Secure Hash Algorithm, SHA-1 ini dikembangkan oleh NIST (National Institute of Standard and Technology). SHA-1 dapat diterapkan dalam penggunaan Digital Signature Algorithm (DSA) yang dispesifikasikan dalam Digital Signature Standard (DSS) dan  SHA  tersebut dapat diterapkan untuk aplikasi federal.
Untuk suatu pesan yang panjangnya < 2 ^ 64, SHA-1 akan menghasilkan keluaran sebanyak 160 bit dari pesan tersebut dan pesan keluaran itu disebut message digest. Panjang jarak message digest dapat berkisar antara 160 sampai 512 bit tergantung algoritmanya. Berdasarkan cirinya SHA-1 dapat digunakan dengan algoritma kriptografi lainnya seperti Digital Signature Algorithms atau dalam generasi angka yang acak (bits).
Bentuk penggunaan SHA-1 dengan DSA dapat dilihat pada gambar di bawah ini:

Gambar Bentuk Penggunaan SHA-1 dengan DSA

SHA-1 dikatakan aman karena proses SHA-1 dihitung secara infisibel untuk mencari pesan yang sesuai untuk menghasilkan message digest atau dapat juga digunakan untuk mencari dua pesan yang berbeda yang akan menghasilkan message digest yang sama. Menurut jenisnya SHA dapat dispesifikasikan menjadi 4 bagian yaitu: SHA-1, SHA-256, SHA-384, dan SHA-512. Berikut ini merupakan daftar-daftar properti dari keempat SHA.

Gambar Daftar-daftar properti dari keempat SHA

Untuk SHA-1 ukuran blok pesan -m bit- dapat ditentukan tergantung dari algoritmanya. Pada SHA-1 masing-masing blok pesan mempunyai 512 bit dimana dapat dilakukan dengan 16 urutan sebesar 32 bit. 
SHA-1 digunakan untuk menghitung message digest pada pesan atau file data yang diberikan sebagai input. Tujuan pengisian pesan adalah untuk menghasilkan total dari pesan yang diisi menjadi perkalian dari 512 bits.

Algoritma SHA-1 dapat diringkas sebagai berikut:
a. Penghitungan menggunakan dua buffer dimana masing-masing buffer terdiri dari lima sebesar 32 bit kata dan urutan 80 juga sebesar 32 bit kata. Lima kata pertama pada buffer kata diberi nama A, B, C, D, E sedangkan lima kata kedua diberi nama H0, H1, H2, H3, dan H4. Kemudian pada 80 kata yang berurutan diberi nama W0, W1, …, W79 dan pada penghitungan ini juga memakai TEMP.

b. Lakukan pengisian pesan, M dan kemudian parsingkan pesan tersebut ke dalam N 512 bit blok pesan, M(1), M(2), …, M(n). Caranya: 32 bit pertama dari blok pesan ditunjukkan ke M0(i), lalu 32 bit berikutnya adalah M1(i) dan selanjutnya berlaku hingga M15(i).

c. Inisialisasi Nilai Hash (dalam bentuk hex) :
H0  = 67452301 H3 = 10325476
H1 = EFCDAB89 H4 = C3D2E1F0
H2 = 98BADCFE
 
d. Lakukan proses M1, M2, …, Mn dengan cara membagi Mi ke dalam 16 kata W0, W1, …, W15 dimana W0 merupakan left most.

e. Hitung : For t = 16 to 79
Wt = S1(Wt-3 + Wt-8  + Wt-14  + Wt-16)

f. Inisialisasi 5 variabel A, B, C, D, dan  E dengan nilai Hash :
A = H0 ; B = H1; C = H2; D = H3; E = H4.

g. Hitung : For t = 0 to 79
TEMP = S5(A) + ft(B,C,D) + E + Wt  + Kt
E = D; D = C; C = S30(B); B = A; A = TEMP.

h. Hitung Nilai Hash :
H0 = H0 + A ; H1 = H1 + B ;
H2 = H2  + C ; H3  = H3  + D ;
H4 = H4 + E.

Hasil dari message digest sebesar 160 bit dari pesan, M adalah : H0  H1 H2  H3  H4.


Algoritma RSA


Algoritma Rivest-Shamir-Adleman (RSA) merupakan salah satu teknik enkripsi dan dekripsi dengan menggunakan dua buah kunci. Kunci-kunci tersebut diperoleh dari hasil perhitungan eksponensial, perkalian, pembagian, penjumlahan dan pengurangan. Perhitungan dilakukan terhadap dua buah bilangan prima. Walaupun RSA cenderung aman bukan berarti tidak bisa dilakukan “attack” terhadap enkripsinya. Didukung perkembangan hardware komputer yang semakin cepat maka semakin terbuka kemungkinan memecahkan enkripsi RSA. Pada tahun 1977 Rivest, Shamir dan Adleman mempublikasikan tantangan memecahkan enkripsi RSA yang memakai 129 digit bilangan bulat. Tantangan ini diharapkan bisa bertahan dari “attack” untuk waktu yang lama. Tetapi pada tahun 1994 tantangan ini dipecahkan dengan menggunakan komputer yang kekuatan komputasinya berimbang dengan komputer untuk membuat film animasi “Toy Story” (kumpulan, 87 unit komputer dual prosesor, 30 unit komputer empat procesor, 100Mhz SPARCstation). 

Dibawah ini diterangkan beberapa kemungkinan melakukan “attack” terhadap RSA:
  1. Cara untuk memecahkan enkripsi RSA oleh penyerang adalah mencari kunci pribadi berdasarkan kunci publik. Jalan menuju itu adalah melakukan pemfaktoran bilangan n dari kunci publik. Kemudian dari n bisa didapatkan p dan q, bersama dengan e maka bisa didapatkan d. Masalahnya adalah memfaktorkan bilangan n.  Apabila bilangan yang dipakai cukup besar maka akan memperkecil penyerangan dengan cara ini.
  2. Cara lain adalah mencari cara untuk menghitung akar pangkat e mod n, dari persamaan c=m^e, c akar pangkat e, maka akan didapatkan m. Tetapi faktor dari n tidak bisa diketahui. Sampai sekarang belum ada metode yang diketahui untuk penyerangan yang dilakukan dengan cara ini.
  3. Cara pemecahan enkripsi RSA lainnya adalah dengan menebak sebagian dari kata atau Single Message Attack, kemudian kata tersebut dienkripsi dengan menggunakan kunci publik dan membandingkan hasilnya dengan data asli yang terenkripsi. Cara ini memang bisa dilakukan, tetapi masih bisa ditangkal dengan menyusupi bit-bit random dalam pesan.
  4. Cara “attack“ yang paling baik yang dikenal adalah GNFS (General Number Field Sieve), caranya adalah memfaktorkan n ke bilangan prima p dan q, sama seperti ide no.1. Tetapi waktu yang dibutuhkan untuk RSA dengan besar kunci 1024 bit, sekitar 3x10^11 MIPS-year(MIPS-year, komputasi 1 juta instruksi perdetik selama setahun), atau dengan komputer 300 MIPS membutuhkan 2^30 tahun komputer. Kecepatan masih bisa ditingkatkan dengan hardware yang lebih baik.
  5. Jadi banyak cara yang bisa dilakukan untuk memecahkan enkripsi RSA, walaupun ada cara yang belum dapat dilakukan saat ini. Semakin meningkatnya daya komputasi komputer dari waktu-kewaktu harus diakui semakin memperbesar kemungkinan memecahkan enkripsi RSA. Tetapi RSA masih bisa tetap digunakan karena digit bilangan bulat yang dipakai masih dapat diperbesar dan disesuaikan dengan teknologi yang ada sekarang. Semakin besar nilai kunci yang digunakan RSA, maka semakin aman juga teks yang terenkripsi tersebut.

Dengan demikian kekuatan dari algoritma RSA tergantung pada kesulitan pemfaktoran p dan q dari n (Menezes, 1996). Saat ini, tidak ada algoritma yang diketahui dapat memfaktorkan perkalian dari dua bilangan prima untuk nilai yang sangat besar (ratusan digit desimal) dengan cepat. Rekor tercepat dalam memfaktorkan perkalian dua bilangan prima dicatat pada tanggal 22 Agustus 1999 oleh sebuah tim yang dipimpin oleh Herman te Riele di Amsterdam. Bilangan yang berhasil difaktorkan adalah bilangan 512-bit (155-digit decimal) yang merupakan perkalian dua bilangan prima 78-digit desimal. Total waktu yang diperlukan adalah 7,4 bulan dengan menggunakan algoritma General Number Field Sieve.
Menanggapi hal ini RSA Laboratories pada FAQ versi 4.1 menyarankan kunci RSA yang digunakan adalah minimal 1024-bit yang dengan menggunakan teknologi sekarang masih diperlukan waktu bertahun – tahun untuk memfaktorkannya.
Secara garis besar, algoritma kunci publik RSA dapat dijabarkan sebagai berikut
Algoritma RSA - Key Generation


 Algoritma RSA - Public Key Encryption and Decryption



Contoh Penerapan Algoritma RSA
Misalkan :
Dalam contoh ini dipilih bilangan yang kecil agar memudahkan perhitungan, namun dalam aplikasi nyata dapat  dipilih bilangan prima besar untuk meningkatkan keamanan.
p = 3
q = 11

n = 3 * 11 = 33
m = (3-1) * (11-1) = 20

e = 2 => gcd(e, 20) = 2
e = 3 => gcd(e, 20) = 1 (yes)

n = 0 => d = 1 / 3
n = 1 => d = 21 / 3 = 7 (yes)


Publik key  : (3, 33)
Private key : (7, 33)


Let's check the math using numbers
----------------------------------
* Try encryption : message "2"

  C = 2 ^ 7 (mod 33)
    = 29

  Try to decrypt : ciphertext "29"
  M = 29 ^ 3 (mod 33)
    = 24389 (mod 33)
    = 2

** Encrypt : message " " (ASCII=20)
  C = 20 ^ 7 (mod 33)
    = 8000 (mod 33)
    = 26

  Decrypt : ciphertext 26 
  M = 26 ^ 3 (mod 33)
    = 17576 (mod 33)
    = 20