Perkembangan
teknologi kerap kali menyuguhkan kosakata baru yang terasa asing bagi
kita.
Mungkin karena memang kita belum pernah mendengarnya sama sekali, atau
sebenarnya kita mengetahuinya namun merasa tidak tahu karena biasa
disajikan
dalam bahasa asing atau bahasa serapan. Kosa kata yang kerap kita temui
antara
lain cybercrime,
digital
signature, social
engineering,
hacker, dan cracker.
Kali ini saya akan mencoba membahas mengenai digital
signature. Apa sih
sebenarnya yang dimaksud dengan digital
signature?
Jika ditinjau dari segi bahasanya, digital
signature pastilah merupakan sebuah frasa yang
berasal dari bahasa Inggris. Jika diterjemahkan
secara kata perkata, didapatlah istilah “tanda
tangan digital”. Apakah itu
berarti sebuah scan tanda tangan kita sehingga memiliki format JPG atau
PNG dan
kemudian bisa dicopy ke dokumen-dokumen kita? Ternyata bukan. Yang
seperti itu
dinamakan digitalized signature (tandatangan yang terdigitalisasi) .
Lalu apa
sih yang dimaksud dengan digital
signature ini?
"A digital
signature or digital
signature scheme is a
mathematical scheme for demonstrating the authenticity of a digital
message or
document. A valid digital signature gives a recipient reason to believe
that
the message was created by a known sender, and that it was not altered
in
transit.
Digital signatures are commonly used for software distribution,
financial transactions, and in other cases where it is important to
detect
forgery or tampering."
Dalam bahasa Indonesianya
kira-kira maksudnya seperti ini:
Tanda
Tangan Digital atau Skema
tanda tangan digital adalah sebuah skema matematis untuk mengautorisasi
kepemilikan dari sebuah pesan atau dokumen digital. Sebuah tanda tangan
digital
yang valid memberikan alasan bagi penerima untuk mempercayai bahwa pesan
yang
dikirim benar-benar dibuat oleh pengirim yang diketahui, dan tidak
dimanipulasi
dalam perjalanan.
Tanda tangan digital biasanya digunakan dalam distribusi
software, transaksi keuangan, dan dalam kasus-kasus lain dimana sangat
penting
dilakukan deteksi terhadap pemalsuan.
Penjelasan lebih
sederhananya,
dalam perjalanan tranfer dokumen di dunia maya, sangat riskan terjadi
penyadapan dan manipulasi dokumen yang kita kirimkan. Misalnya saja
penguban,
penambahan, atau pengurangan data. Disitulah fungsi tanda
tangan digital bagi
penerima, untuk mengecek apakah dokumen yang kita kirim itu benar-benar
dari
kita tanpa mengalami penyadapan di tengah jalan.
Jadi tujuan dari
penggunaan tanda
tangan digital ini adalah
untuk membuktikan keaslian identitas pengirim dari suatu pesan atau
penandatangan dari suatu dokumen, dan untuk memastikan isi yang asli
dari pesan
atau dokumen itu sudah dikirim tanpa perubahan. Tanda
tangan digital dengan
mudah dapat dipindahkan, tidak bisa ditiru oleh orang lain, dan dapat
secara otomatis
dilakukan time-stamp.
Kronologi Digital
Signature
Suatu tanda
tangan digital dapat digunakan di segala macam
pesan, apakah itu terenkripsi atau tidak, sehingga penerima dapat
memastikan
identitas pengirim itu dan pesan tiba secara utuh. Suatu sertifikat
digital
berisi tanda tangan digital dari sertifikat yang mengeluarkan otoritas
sehingga
siapapun dapat memverifikasi bahwa sertifikat itu adalah nyata.
Dalam digital
signature, suatu data atau pesan akan
dienkripsi dengan menggunakan kunci simetris yang diciptakan secara
acak. Kunci
ini kemudian akan dienkripsi dengan menggunakan kunci publik dari calon
penerima pesan. Hasil dari enkripsi ini kemudian disebut sebagai
“digital
envelope” yang kemudian akan dikirimkan bersama pesan atau data yang
telah
dienkripsi. Setelah menerima digital envelope penerima kemudian akan
membuka/mendekripsi dengan menggunakkan kunci kunci prifatnya. Hasil
yang ia
dapatkan dari dekripsi tersebut adalah sebuah kunci simetris yang dapat
digunakannya untuk membuka data/pesan tersebut.
Maksud dari
menandatangani secara digital adalah untuk
tujuan pemberian ciri khas terhadap suatu pesan. Message digest adalah
suatu
besaran yang berasal dari suatu data/pesan yang memiliki sifat yang unik
yang
menandai bahwa pesan tersebut mempunyai suatu besaran tertentu. Messages
digest
diciptakan dengan melakukan enkripsi terhadap suatu data dengan
menggunakan menggunakan
kriptografi satu arah, yaitu suatu tehnik kriptografi yang terhadapnya
tidak
dapat dilakukan proses pembalikan (reversed). Pada saat message digests
dienkripsi
dengan menggunakan kunci privat dari pengirim dan “ditambahkan” kepada
data/pesan yang asli maka hasil yang didapat adalah digital
signature dari
pesan tersebut.
Penerima dari digital
signature akan dapat mempercayai bahwa
data atau pesan benar-benar berasal pengirim. Dan karena apabila
terdapat
perubahan suatu data, hal tersebut akan
menyebabkan perubahan message digests dengan suatu cara yang tidak dapat
diprediksi.
Jika tidak terjadi perubahan, maka penerima akan merasa yakin bahwa data
atau pesan
tersebut tidak pernah diubah setelah message digest diciptakan.
Sebelum kedua
belah pihak baik engirim atau penerima hendak
melakukan komunikasi dengan menggunakan kriptografi kunci publik,
masing-masing
pihak harus merasa yakin akan keberaan mereka. Mereka kemudian melakukan
otentifikasi terhadap keberadaan masing-masing pihak. Agar dapat
melakukan
otentifikasi terhadap keberadaan mereka masing-masing, maka biasanya
ditunjuklah pihak ketiga yang akan memberikan otentifikasi terhadap
kunci
publik mereka. Pihak ketiga ini kita kenal sebagai Certification
Authorithy.
Certification authorithy ini kemudian akan memberikan suatu sertifikat
yang berisi
identitas dari pengguna, sertifikat ini ditandatangani secara digital
oleh
Certification authority tersebut. Isi dari sertifikat tersebut selain
identitas
ia juga berisi kunci publik dari pemiliknya.
Adapun
komponen-komponen dari suatu tanda
tangan digitalterdiri atas:
- Kunci publik, yakni bagian di mana semua orang dapat mendapat suatu salinan dan menjadi bagian dari sistim verifikasi.
- Nama dan alamat e-mail: komponen ini merupakan komponen yang penting untuk tujuan kontak informasi dan memungkinkan pembaca untuk mengidentifikasi detailnya.
- Tanggal jatuh tempo kunci publik: Komponen ini digunakan untuk menetapkan suatu umur simpan dan untuk memastikan bahwa dalam hal penyalahgunaan yang diperpanjang suatu tandatangan pada akhirnya tandatangan itu diatur ulang.
- Nama dari perusahaan: Komponen ini mengidentifikasi perusahaan yang tandatangan menjadi anggota juga.
- Nomor urut dari Digital ID: Part ini adalah suatu nomor yang unik yang digabung pada tandatangan untuk pertimbangan identifikasi iklan perkerjaan mengikuti jalan tambahan.
- Tanda tangan digital dari CA (Sertifikasi Authority): Komponen ini merupakan suatu tandatangan yang dikeluarkan oleh otoritas yang mengeluarkan sertifikat.
Implementasi:
Data Encryption Standard (DES) merupakan salah satu jenis sistem kriptografi simetris yang paling banyak digunakan di dunia dan telah diadopsi oleh NIST (National Institute of Standards and Technology) sebagai standar pengolahan informasi Federal AS. Sedangkan Algoritma ElGamal merupakan salah satu algoritma kriptografi kunci publik (asimetris) yang ditemukan oleh seorang ilmuwan Mesir Taher ElGamal pada tahun 1985. Kekuatan dari algoritma ElGamal ini terletak pada sulitnya menghitung logaritma diskrit.
Kedua algoritma (DES dan
ElGamal) tersebut mempunyai kelemahan dan kelebihannya masing-masing.
Itulah sebabnya, mengapa selama 20 tahun algoritma DES dipakai
sebagai standar nasional enkripsi data dan masih digunakan
sampai saat ini walaupun telah ditemukan algoritma sejenis yang
dianggap lebih baik. Sedangkan algoritma ElGamal adalah salah satu dari
algoritma kriptografi kunci-publik yang dapat menjadi alternatif karena
beberapa dari algoritma tersebut memp unyai kontribusi yang
luar biasa dibandingkan dengan sistem kriptografi simetris. Kontribusi
yang paling penting adalah tanda-tangan digital (Digital Signature)
pada pesan untuk memberikan aspek keamanan otentikasi, integritas data,
dan nirpenyangkalan. Digital Signature Standard yang diadopsi
pemerintah Amerika Serikat pada tahun 1994, merupakan sebuah mekanisme
penyandian yang berdasar pada algoritma ElGamal.
KESIMPULAN DAN CODE:
-->
Tanda tangan digital adalah satu tandatangan elektronik yang dapat digunakan
untuk membuktikan keaslian identitas pengirim dari suatu pesan atau
penandatangan dari suatu dokumen, dan untuk memastikan isi yang asli dari pesan
atau dokumen itu sudah dikirim tanpa perubahan. Tanda tangan digital dengan mudah dapat dipindahkan, tidak bisa ditiru oleh orang lain, dan dapat secara otomatis dilakukan time-stamp. Kemampuan itu untuk memastikan bahwa pesan asli yang tiba di pengirim tidak bisa dengan mudah diganti. Suatu tanda tangan digital dapat digunakan di segala macam pesan, apakah itu terenkripsi atau tidak, sehingga penerima dapat memastikan identitas pengirim itu dan pesan tiba secara utuh. Suatu sertifikat digital berisi tanda tangan digital dari sertifikat yang mengeluarkan otoritas sehingga siapapun dapat memverifikasi bahwa sertifikat itu adalah nyata.
Apakah Digital Id? Tandatangan id Digital atau sertifikat adalah satu file yang diinstall di suatu komputer untuk mengesahkan siapa Anda. Tanda tangan digital digunakan oleh program-program di internet dan lokal kepada mesin-mesin itu untuk mengkonfirmasikan identitas klien kepada setiap pihak ketiga terkait. Tanda tangan digital berbeda dengan tandatangan yang elektronik. Tandatangan elektronik di-scan dari suatu tandatangan yang tertulis secara fisik. Komponen-komponen dari suatu tanda tangan digital terdiri atas.
1. Kunci publik: Ini adalah bagian di mana semua orang dapat mendapat suatu salinan dan menjadi bagian dari sistim verifikasi.
2. Nama dan alamat e-mail: Ini penting untuk tujuan kontak informasi dan memungkinkan pembaca untuk mengidentifikasi detailnya.
3. Tanggal jatuh tempo kunci publik: Bagian ini digunakan untuk menetapkan suatu umur simpan dan untuk memastikan bahwa dalam hal penyalahgunaan yang diperpanjang suatu tandatangan pada akhirnya tandatangan itu diatur ulang.
4. Nama dari perusahaan: Bagian ini mengidentifikasi perusahaan yang tandatangan menjadi anggota juga.
5. Nomor urut dari Digital ID: Part ini adalah suatu nomor yang unik yang digabung pada tandatangan untuk pertimbangan identifikasi iklan perkerjaan mengikuti jalan tambahan.
6. Tanda tangan digital dari CA (Sertifikasi Authority): Ini adalah suatu tandatangan yang dikeluarkan oleh otoritas yang mengeluarkan sertifikat. Bedasarkan sejarahnya, penggunaan digital signature berawal dari penggunaan teknik kriptografi yang digunakan untuk mengamankan informasi yang hendak ditransmisikan/disampaikan kepada orang yang lain yang sudah digunakan sejak ratusan tahun yang lalu.
Dalam suatu kriptografi suatu pesan dienkripsi (encrypt) dengan menggunakan suatu kunci (key). Hasil dari enkripsi ini adalah berupa chipertext tersebut kemudian ditransmisikan/diserahkan kepada tujuan yang dikehendakinya. Chipertext tersebut kemudian dibuka/didekripsi (decrypt) dengan suatu kunci untuk mendapatkan informasi yang telah enkripsi tersebut. Terdapat dua macam cara dalam melakukan enkripsi yaitu dengan menggunakan kriptografi simetris (symetric crypthography/secret key crypthography) dan kriptografi simetris (asymetric crypthography) yang kemudian lebih dikenal sebagai public key crypthography. Secret key crypthografi atau yang dikenal sebagai kriptografi simetris, menggunakan kunci yang sama dalam melakukan enkripsi dan dekripsi terhadap suatu pesan (message), disini pengirim dan penerima menggunakan kunci yang sama sehingga mereka harus menjaga kerahasian (secret) terhadap kuci tersebut.
Salah satu algoritma yang terkenal dalam kriptografi simetris ini adalah Data Encryption standard (DES). manjar Public key crypthography, atau dikenal juga sebagai kriptografi simetris, menggunakan dua kunci (key) : satu kunci digunakan untuk melakukan enkripsi terhadap suatu pesan (messages) dan kunci yang lain digunakan untuk melakukan dekripsi terhadap pesan tersebut.
Kedua kunci tersebut mempunyai hubungan secara matematis sehingga suatu pesan yang dienkripsi dengan suatu kunci hanya dapat didekripsi dengan kunci pasangannya. Seorang pengguna mempunyai dua buah kunci, yaitu sebuah kunci privat (privat key) dan juga sebuah kunci publik (public key). Pengguna (user) tersebut kemudian mendistribusikan/menyebarluaskan kunci publik miliknya. Karena terdapat hubungan antara kedua kunsi tersebut, pengguna dan seseorang yang menerima kunci publik akan merasa yakin bahwa suatu data yang diterimanya dan telah berhasil didekripsi hanya dapat berasal dari pengguna yang mempunyai kunci privat. Kepastian /keyakinan ini hanya ada selama kunci privat ini tidak diketahui oleh orang lain. Kedua kunci ini berasal atau diciptakan sendiri oleh penggunanya.
Salah satu algoritma yang terbaik yang dikenal selama ini adalah RSA (dinamakan sesuai dengan nama penciptanya Rivest, Shamir, Adleman). manjarGambar 2 : kriptografi dengan menggunakan kunci publik Pada saat dua orang hendak saling berkomunikasi atau saling bertukar data/pesan secara aman, mereka kemudian saling mengirimkan salah satu kunci yang dipunyainya, yaitu kunci publiknya. Sedangkan mereka menyimpan kunci prifat sebagai pasangan dari kunci publik yang didistribusikannya. Karena data/pesan ini hanya dapat dienkripsi dan dekripsi dengan menggunakan kunci pasangannya maka data ini dapat dapat ditransmisikan dengan aman melalui jaringan yang relatif tidak aman (melalui internet).
Contoh dari penggunaan kriptografi ini adalah jika Bob hendak mentransmisikan suatu data/pesan rahasian kepada Alice maka ia akan melakuakn enkripsi data tersebut dengan menggunakan kunci publik Alice. Selama Alice yakin bahwa tidak ada seorang pun yang mengetahui kunci prifatnya, maka mereka dapat merasa yakin bahwa yang dapat membaca pesan tersebut hanyalah Alice. Contoh dari penggunaan digital signature adalah sebagai berikut, Alice akan membuat message digest dari data/pesan yang hendak ia kirimkan. Kemudian messages digest tersebut dienkripsi dengan menggunakan kunci privat yang ia punyai, hasil yang didapat adalah digital signature dari adata tersebut. Ia kemudian mentransmisikan data dan digital signature itu kepada Bob. Bob pada saat menerima pesan itu akan melihat messages digest dari pesan dan kemudian ia akan membandingkan hasilnya dengan hasil dari digital signature. Apabila hasil yang didapat dari keduannya dalah sama maka Bob akan merasa yakin bahwa pesan yang telah ditandatangani oleh Alice dengan menggunakan kunci privatnya adalah tidak pernah berubah sejak dibuat.
Contoh penerapan tanda
tangan digital dalam kode :
import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.InvalidKeyException;
import
javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import
javax.crypto.IllegalBlockSizeException;
import javax.crypto.SecretKey;
import
javax.crypto.SecretKeyFactory;
import
javax.crypto.spec.DESKeySpec;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
public class Cryptography {
private
static final String CRYPTOGRAPHY_ALGO_DES = "DES";
private
static Cipher cipher = null;
private
static DESKeySpec keySpec = null;
private
static SecretKeyFactory keyFactory = null;
public
static String encrypt(String inputString, String commonKey)
throws
InvalidKeyException, IllegalBlockSizeException,
BadPaddingException
{
String
encryptedValue = "";
SecretKey
key = getSecretKey(commonKey);
cipher.init(Cipher.ENCRYPT_MODE,
key);
byte[]
inputBytes = inputString.getBytes();
byte[]
outputBytes = cipher.doFinal(inputBytes);
encryptedValue
= new BASE64Encoder().encode(outputBytes);
return
encryptedValue;
}
public
static String decrypt(String encryptedString, String commonKey)
throws
InvalidKeyException, IllegalBlockSizeException,
BadPaddingException,
IOException {
String
decryptedValue = "";
encryptedString
= encryptedString.replace(' ', '+');
SecretKey
key = getSecretKey(commonKey);
cipher.init(Cipher.DECRYPT_MODE,
key);
byte[]
recoveredBytes = cipher.doFinal(new BASE64Decoder()
.decodeBuffer(encryptedString));
decryptedValue
= new String(recoveredBytes);
return
decryptedValue;
}
private
static SecretKey getSecretKey(String secretPassword) {
SecretKey
key = null;
try
{
cipher
= Cipher.getInstance(CRYPTOGRAPHY_ALGO_DES);
keySpec
= new DESKeySpec(secretPassword.getBytes("UTF8"));
keyFactory
= SecretKeyFactory.getInstance(CRYPTOGRAPHY_ALGO_DES);
key
= keyFactory.generateSecret(keySpec);
}
catch (Exception e) {
e.printStackTrace();
System.out.println("Error
in generating the secret Key");
}
return
key;
}
}
//--------------------class utama
public class TestCrypto {
public class TestCrypto {
public
static final String DES_ENCRYPTION_KEY = "testString";
public
static void main(String[] args) {
try{
String
input = "The quick brown fox jumps
over the lazy dog.";
String
encrypted = Cryptography.encrypt(input, DES_ENCRYPTION_KEY);
System.out.println(encrypted);
String
decrypted = Cryptography.decrypt(encrypted, DES_ENCRYPTION_KEY);
System.out.println(decrypted);
}catch(Exception
e){
}
}
}
atau refresni lain:import java.io.IOException;
import java.security.InvalidKeyException;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
/**
* @author dharmvir.singh
* The class demonstrates the DES algorithm by using java
* crypto API
*/
public class Cryptography {
private static final String CRYPTOGRAPHY_ALGO_DES = "DES";
private static Cipher cipher = null;
private static DESKeySpec keySpec = null;
private static SecretKeyFactory keyFactory = null;
public static String encrypt(String inputString, String commonKey)
throws InvalidKeyException, IllegalBlockSizeException,
BadPaddingException {
String encryptedValue = null;
SecretKey key = getSecretKey(commonKey);
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] inputBytes = inputString.getBytes();
byte[] outputBytes = cipher.doFinal(inputBytes);
encryptedValue = new BASE64Encoder().encode(outputBytes);
return encryptedValue;
}
public static String decrypt(String encryptedString, String commonKey)
throws InvalidKeyException, IllegalBlockSizeException,
BadPaddingException, IOException {
String decryptedValue = "";
// When Base64Encoded strings are passed in URLs, '+' character gets converted to space and so we need to reconvert the space to '+' and since encoded string cannot have space in it so we are completely safe.
encryptedString = encryptedString.replace(' ', '+');
SecretKey key = getSecretKey(commonKey);
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] recoveredBytes = cipher.doFinal(new BASE64Decoder()
.decodeBuffer(encryptedString));
decryptedValue = new String(recoveredBytes);
return decryptedValue;
}
private static SecretKey getSecretKey(String secretPassword) {
SecretKey key = null;
try {
cipher = Cipher.getInstance(CRYPTOGRAPHY_ALGO_DES);
keySpec = new DESKeySpec(secretPassword.getBytes("UTF8"));
keyFactory = SecretKeyFactory.getInstance(CRYPTOGRAPHY_ALGO_DES);
key = keyFactory.generateSecret(keySpec);
} catch (Exception e) {
e.printStackTrace();
System.out.println("Error in generating the secret Key");
}
return key;
}
}
Tidak ada komentar:
Posting Komentar