Kriptografi bagi kebanyakan orang adalah sesuatu yang sangat sulit dan kita sebagai pemula cenderung malas untuk mempelajarinya. Namun ada sebuah metode kriptografi yang agak mudah untuk dipelajari dan para ahlipun telah menyatakan bahwa metode ini merupakan metode kriptografi yang cukup aman untuk digunakan. Metode tersebut biasa dikenal dengan nama One Time Pad (OTP) atau yang lebih dikenal dengan sebutan Vernam Cipher. Vernam Cipher diciptakan oleh Mayor J. Maugborne dan G. Vernam pada tahun 1917.
Algoritma One Time Pad (OTP) merupakan algoritma berjenis symetric key yang artinya bahwa kunci yang digunakan untuk melakukan enkripsi dan dekripsi merupakan kunci yang sama. Dalam proses enkripsi, algoritma ini menggunakan cara stream cipher yang berasal dari hasi XOR antara bit plaintext dan bit key.
contoh:
Saya memiliki sebuah plaintext yaitu RUSDI dan memiliki sebuah kunci yaitu
CRASH (ingat panjang kunci harus sama dengan plaintext dan sebaiknya tidak
ada karakter yang diulang).
Pertama kita harus mendapatkan kode ASCII dari plaintext kemudian diubah
ke bentuk biner
- Code:
-
------------------------------------------
| Karakter | ASCII | Notasi biner|
------------------------------------------
| R | 82 | 0101 0010 |
| U | 85 | 0101 0101 |
| S | 83 | 0101 0011 |
| D | 68 | 0100 0100 |
| I | 73 | 0100 1001 |
------------------------------------------
- Code:
-
-----------------------------------------
| Karakter | ASCII | Notasi biner |
------------------------------------------
| C | 67 | 0100 0011 |
| R | 82 | 0101 0010 |
| A | 65 | 0100 0001 |
| S | 83 | 0101 0011 |
| H | 72 | 0100 1000 |
------------------------------------------
Setelah itu masing-masing karakter di XOR-kan dengan Key
R = 0101 0010 U = 0101 0101 S = 0101 0011 D = 0100 0100 I = 0100 1001
C = 0100 0011 R = 0101 0010 A = 0100 0001 S = 0101 0011 H = 0100 1000
XOR -------------------------------------------------------------------------
Cipher: 0001 0001 0000 0111 0001 0010 0001 0111 0000 0001
-----------------------------------------------------------------------------
ASCII : Ctrl-Q Ctrl-G Ctrl-R Ctrl-W Ctrl-A
Proses dekripsi pesan juga melakukan operasi yang sama yaitu XOR antara Cipher
dengan key.
Cipher: 0001 0001 0000 0111 0001 0010 0001 0111 0000 0001
Key: 0100 0011 0101 0010 0100 0001 0101 0011 0100 1000
XOR -------------------------------------------------------------------------
Plain : 0101 0010 0101 0101 0101 0011 0100 0100 0100 1001
-----------------------------------------------------------------------------
ASCII : R U S D I
Saya telah membuat sebuah program sederhana dengan menggunakan Visual Basic 6.0 sebagai implementasi dari Vernam Cipher yang tersebut diatas.
Program ini membutuhkan 3 buah text box 3 buah label dan 2 buah command button. Cara penggunaan program ini cukup sederhana, kita tinggal memasukan string yang akan kita enkrip/dekrip kemudian masukan juga kunci nya. Ingat untuk melakukan enkrip dan dekrip kunci yang dipergunakan harus sama.
Setelah kita menyiapkan textbox, label dan Command Button lalu kopi paste kan source code dibawah ini kedalam form.
- Code:
-
Option Explicit
Private RByte() As Variant
Private Sub cmdDecrypt_Click()
TxtPlain.Text = crypt(TxtCipher.Text, False)
End Sub
Private Sub cmdEncrypt_Click()
TxtCipher.Text = crypt(TxtPlain.Text, True)
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
FrmAbout.Show
End Sub
Private Function crypt(strInput As String, _
ByVal bEncrypt As Boolean) As String
Dim I As Long
Dim NewAsc As Long
Dim keypos As Long
GetKey TxtKey
For I = 1 To Len(strInput)
If bEncrypt Then
NewAsc = Asc(Mid$(strInput, I, 1)) + RByte(keypos)
Else
NewAsc = Asc(Mid$(strInput, I, 1)) - RByte(keypos)
End If
Do While NewAsc < newasc =" NewAsc"> 255
NewAsc = NewAsc - 255
Loop
Mid$(strInput, I, 1) = Chr$(NewAsc)
keypos = keypos + 1
If keypos > UBound(RByte) Then
keypos = 0
End If
Next I
crypt = strInput
End Function
Private Sub GetKey(StrA As String)
Dim I As Long
If Len(StrA) Then
ReDim RByte(Len(StrA) - 1) As Variant
For I = 1 To Len(StrA)
RByte(I - 1) = Asc(Mid$(StrA, I, 1))
Next I
End If
End Sub
Kemudian coba jalankan..
String yang berupa plaintext akan diubah menjadi cipher text dan sebaliknya. Namun apabila key yang dimasukan berbeda maka akan menghasilkan hasil yang berbeda pula. Demikianlah tulisan saya ini. Semoga bermanfaat.
Referensi :
http://ezine.echo.or.id/ezine14/04_Algoritma_Enkripsi_One_Time_Pad.txt
NB
---
Source code lengkap, dapat di download pada
http://geocities.com/yadoy666/download/vernamcipher.zip