Tampilkan postingan dengan label Kriptografi. Tampilkan semua postingan
Tampilkan postingan dengan label Kriptografi. Tampilkan semua postingan

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

Algoritma Kriptografi


Secara teori maka algoritma kriptografi dapat dibedakan menjadi dua jenis: 1) Algoritma Simetris dan 2) Algoritma Assimetris.

1) Symmetric Algorithms
Algoritma kriptografi simetris atau disebut juga algoritma kriptografi konvensional. Algoritma ini menggunakan kunci yang sama untuk proses enkripsi dan proses dekripsi. Algoritma kriptografi simetris dibagi menjadi 2 kategori yaitu algoritma aliran (Stream Ciphers) dan algoritma blok (Block Ciphers). Pada algoritma aliran, proses penyandiannya berorientasi pada satu bit atau satu byte data. Sedang pada algoritma blok, proses penyandiannya berorientasi pada sekumpulan bit atau byte data (per blok). Contoh algoritma kunci simetris yang terkenal adalah DES (Data Encryption Standard). 

Gambar Prosedur kerja algoritma simetris



2) Asymmetric Algorithms
Algoritma kriptografi asimetris adalah algoritma yang menggunakan kunci yang berbeda untuk proses enkripsi dan dekripsinya. Algoritma ini disebut juga algoritma kunci umum (publik key algorithm) karena kunci untuk enkripsi dibuat umum (publik key) atau dapat diketahui oleh setiap orang, tapi kunci untuk dekripsi hanya diketahui oleh orang yang berwenang mengetahui data yang disandikan atau sering disebut kunci pribadi (private key). Contoh algoritma terkenal yang menggunakan kunci asimetris adalah RSA dan ECC.

Syarat – syarat yang harus dipenuhi oleh suatu algoritma publik-key yaitu (Stalling, 1995):
  1. Mudah secara komputasi bagi suatu pihak B untuk mengkonstruksi sepasang kunci asimetris (kunci publik KU, kunci pribadi KR).
  2. Mudah secara komputasi bagi pengirim A, dengan memiliki kunci publik B dan pesan yang ingin dienkripsi, M, untuk menghasilkan ciphertext (C).
  3. Mudah secara komputasi bagi penerima B untuk mendekripsi ciphertext yang dihasilkan dengan menggunakan kunci pribadinya untuk mengembalikan pesan aslinya.
  4. Tidak bisa secara komputasi bagi pihak ketiga untuk memperoleh kunci pribadi KRb hanya dengan mengetahui kunci publik KUb.
  5. Tidak bisa secara komputasi bagi pihak ketiga untuk mengembalikan data asli M hanya dengan mengetahui kunci publik KUb dan ciphertext C.
  6. Walaupun bukanlah suatu keharusan bagi semua aplikasi publik-key, namun persyaratan keenam bisa ditambahkan 
  7. Fungsi enkripsi dan dekripsi bisa diterapkan dengan urutan yang dibalik.

Kegunaan dari persyaratan keenam adalah untuk penerapan tanda tangan digital (digital signature) yang digunakan memecahkan isu otentikasi (authentication) dalam masalah keamanan data.

Gambar Prosedur Kerja Algoritma Assymetris



Menurut Stalling (Stalling, 1995), proses enkripsi publik-key sederhana melibatkan empat tahap berikut:
  1. Setiap user di dalam jaringan membuat sepasang kunci untuk digunakan sebagai kunci enkripsi dan dekripsi dari pesan yang akan diterima.
  2. User kemudian mempublikasikan kunci enkripsinya dengan menempatkan kunci publiknya ke tempat umum. Pasangan kunci yang lain tetap dijaga kerahasiaannya.
  3. Jika user A ingin mengirimkan sebuah pesan ke user B, ia akan mengenkripsi pesan tersebut dengan menggunakan kunci publik user B.
  4. Pada saat user B ingin mendeskripsikan  pesan dari user A, ia akan menggunakan kunci pribadinya sendiri. Tidak ada pihak lain yang bisa mendekripsi pesan itu karena hanya B sendiri yang mengetahui kunci pribadi B.

Pengantar Kriptografi


Cryptography adalah ilmu yang mempelajari teknik-teknik matematika yang berhubungan dengan aspek-aspek pada keamanan informasi misalnya kerahasiaan, integritas data, otentikasi pengirim / penerima data, dan otentikasi data. Cryptography (kriptografi) berasal dari bahasa Yunani yaitu dari kata ‘crypto’ dan ‘graphia’ yang berarti penulisan rahasia. Kriptografi adalah suatu ilmu yang mempelajari penulisan secara rahasia. 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.

Menurut Stalling, ada beberapa tuntutan yang terkait dengan isu keamanan data, yaitu:
1. Confidentiality; yakni menjamin bahwa data-data tersebut hanya bisa diakses oleh pihak-pihak tertentu saja.
2. Authentication; yakni baik pada saat mengirim atau menerima informasi, kedua belah pihak perlu mengetahui bahwa pengirim dari pesan tersebut adalah orang yang sebenarnya seperti yang diklaim.
3. Integrity; yaitu Tuntutan ini berhubungan dengan jaminan setiap pesan yang dikirim pasti sampai pada penerimanya tanpa ada bagian dari pesan tersebut yang diganti, diduplikasi, dirusak, diubah urutannya, dan ditambahkan.
4. Nonrepudiation; yakni Mencegah pengirim maupun penerima mengingkari bahwa mereka telah mengirimkan atau menerima suatu pesan/informasi. Jika sebuah pesan dikirim, penerima dapat membuktikan bahwa pesan tersebut memang dikirim oleh pengirim yang tertera. Sebaliknya, jika sebuah pesan diterima, pengirim dapat membuktikan bahwa pesannya telah diterima oleh pihak yang ditujunya.
5. Access Control yaitu Membatasi sumber-sumber data hanya kepada orang-orang tertentu. 
6. Availability; yakni Jika diperlukan setiap saat semua informasi pada sistem komputer harus tersedia bagi semua pihak yang berhak atas informasi tersebut.

Dari keenam aspek keamanan data tersebut, empat diantaranya dapat diatasi dengan menggunakan cryptography yaitu confidentiality, integrity, authentication, dan nonrepudiation. 
1) Confidentiality
Confidentiality & privacy terkait dengan kerahasiaan data atau informasi. Pada sistem e-government kerahasiaan data-data pribadi (privacy) sangat penting. Hal ini kurang mendapat perhatian di sistem e-government yang sudah ada. Bayangkan jika data pribadi anda, misalnya data KTP atau kartu keluarga, dapat diakses secara online. Maka setiap orang dapat melihat tempat dan tanggal lahir anda, alamat anda, dan data lainnya. Data ini dapat digunakan untuk melakukan penipuan dan pembobolan dengan mengaku-aku sebagai anda (atau keluarga anda). Ancaman atau serangan terhadap kerahasiaan data ini dapat dilakukan dengan menggunakan penerobosan akses, penyadapan data (sniffer, key logger), social engineering (yaitu dengan menipu), dan melalui kebijakan yang tidak jelas (tidak ada). Dalam menjaga kerahasiaan data, kriptografi mentransformasikan data jelas (plaintext) ke dalam bentuk data sandi (ciphertext) yang tidak dapat dikenali. Ciphertext inilah yang kemudian dikirimkan oleh pengirim (sender) kepada penerima (receiver). Setelah sampai di penerima, ciphertext tersebut ditranformasikan kembali ke dalam bentuk plaintext agar dapat dikenali.
2) Authentication
Otentikasi merupakan identifikasi yang dilakukan oleh  masing – masing pihak yang saling berkomunikasi, maksudnya beberapa pihak yang berkomunikasi harus mengidentifikasi satu sama lainnya. Informasi yang didapat oleh suatu pihak dari pihak lain harus diidentifikasi untuk memastikan keaslian dari informasi yang diterima. Identifikasi terhadap suatu informasi dapat berupa tanggal pembuatan informasi, isi informasi, waktu kirim dan hal-hal lainnya yang berhubungan dengan informasi tersebut. Aspek ini berhubungan dengan metode 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. 
Masalah pertama, membuktikan keaslian dokumen, dapat dilakukan dengan teknologi watermarking dan digital signature. Watermarking juga dapat digunakan untuk menjaga “intelectual property”, yaitu dengan menandai dokumen atau hasil karya dengan “tanda tangan” pembuat. Masalah kedua biasanya berhubungan dengan akses kontrol, yaitu berkaitan dengan pembatasan orang yang dapat mengakses informasi. 
Dalam hal ini pengguna harus menunjukkan bukti bahwa memang dia adalah pengguna yang sah, misalnya dengan menggunakan password Aspek / servis dari security biometric (ciri-ciri khas orang), dan sejenisnya. Ada tiga hal yang dapat ditanyakan kepada orang untuk menguji siapa dia: 
• What you have (misalnya kartu ATM) 
• What you know (misalnya PIN atau password) 
• What you are (misalnya sidik jari, biometric) 
3) Integrity
Aspek integrity (integritas) terkait dengan keutuhan data. Aspek ini menjamin bahwa data tidak boleh diubah (tampered, altered, modifed) tanpa ijin dari yang berhak. Acaman terhadap aspek integritas dilakukan dengan melalui penerobosan akses, pemalsuan (spoofing), virus yang mengubah atau menghapus data, dan man in the middle attack (yaitu penyerangan dengan memasukkan diri di tengah-tengah pengiriman data). Proteksi terhadap serangan ini dapat dilakukan dengan menggunakan digital signature, digital certificate, message authentication code, hash function, dan checksum. Pada prinsipnya mekanisme proteksi tersebut membuat kode sehingga perubahan satu bit pun akan mengubah kode.
4) Nonrepudiation 
Aspek ini menjaga agar seseorang tidak dapat menyangkal telah melakukan sebuah transaksi. Sebagai contoh, seseorang yang mengirimkan email untuk memesan barang tidak dapat menyangkal bahwa dia telah mengirimkan email tersebut. Aspek ini sangat penting dalam hal electronic commerce. Penggunaan digital signature, certifiates, dan teknologi kriptografi secara umum dapat menjaga aspek ini. Akan tetapi hal ini masih harus didukung oleh hukum sehingga status dari digital signature itu jelas legal.
Setiap tindakan yang dilakukan dalam sebuah sistem yang aman telah diawasi (logged), ini dapat berarti penggunaan alat (tool) untuk melakukan pengecekan sistem berfungsi sebagaimana seharusnya. "Log" juga tidak dapat dipisahkan dari bagian keamanan "system" yang dimana bila terjadi sebuah penyusupan atau serangan lain akan sangat membantu proses investigasi. "Log" dan catatan waktu, sebagai contoh, bagian penting dari bukti di pengadilan jika cracker tertangkap dan diadili. Untuk alasan ini maka "nonrepudiation" dianggap sebagai sebuah faktor penting didalam keamanan jaringan komputer yang berkompeten.