Algoritma Spread Spectrum


Algoritma Spread Spectrum adalah salah satu algoritma yang dapat digunakan untuk melakukan enkripsi data sehingga data asli hanya dapat dibaca oleh seseorang yang memiliki kunci enkripsi tersebut. Contoh yang dibahas kali ini adalah mengenai enkripsi dan dekripsi dari sebuah kalimat.
Ilustrasi singkat mengenai algoritma ini adalah sebagai berikut:

  • Jika terdapat input karakter binary seperti ini
  • 11001010
    maka masing-masing nilai bit tersebut akan digandakan sebanyak 4 kali dan disusun kedalam 4 baris data, sehingga hasilnya adalah
    11111111
    00000000
    11110000
    11110000

  • Simpan nilai tersebut. Selanjutnya adalah melakukan operasi XOR untuk masing-masing karakter dalam kata kunci. Jika diasumsikan input karakter binary pada kata kunci adalah
  • 01110011 dan 01101111
    maka hasil operasi XOR nya adalah 00011100

  • Simpan nilai tersebut. Kemudian dapatkan nilai seed acak dengan rumus
  • seed(n+1) = (a * seed(n) + c) mod m, dengan konstanta a bernilai 17, konstanta c bernilai 7, dan konstanta m bernilai 84
    sehingga didapatkan nilai seed pertama adalah 44, nilai seed kedua adalah 83, dan seterusnya

  • Lakukan operasi XOR antara masing-masing nilai binary input dengan nilai binary dari seed. Sebagai contoh
  • 00001111 XOR (nilai konversi 8-bit dari 44 = 00101100) = 00100011
    11111111 XOR (nilai konversi 8-bit dari 83 = 01010011) = 10101100

  • Ubah nilai binary tersebut menjadi karakter sehingga didapatkan hasil enkripsi dari teks input tersebut.


Langkah-langkah penggunaan algoritma ini adalah

1. Tentukan kalimat yang akan dienkrip

Console.WriteLine("Masukkan kalimat yang akan dienkrip: ")
Dim input As String = Console.ReadLine

2. Tentukan kata kunci enkripsi yang digunakan

Console.WriteLine("Masukkan kata kunci enkripsi: ")
Dim kataKunci As String = Console.ReadLine

3. Lakukan inisialisasi variabel yang digunakan oleh metode ini
Penjelasan lebih detail tentang fungsi ini dapat dilihat pada penjelasan skrip dibawah ini

Dim ss As New SpreadSpectrum()

4. Lakukan enkripsi kalimat awal menggunakan algoritma ini
Penjelasan lebih detail tentang fungsi ini dapat dilihat pada penjelasan skrip dibawah ini (poin 4a – 4e)

Dim hasilEnkripsi As String = ss.enkripsi(input, kataKunci)

4a. Lakukan perhitungan pada masing-masing karakter teks
Lakukan penyebaran pesan dengan skala pengali adalah 4
Sehingga setiap bit akan digandakan sebanyak 4 kali
Sebagai contoh, dengan string sebelumnya 01110100
Maka akan menghasilkan 4 buah string dengan nilai
00001111
11111111
00001111
00000000

For i As Integer = 0 To teks.Length - 1
	Dim tmpTeksBinary As String = StringToBinary(teks.Substring(i, 1))

	pesanSkala4(idxPesanSkala4) = tmpTeksBinary.Substring(0, 1) & tmpTeksBinary.Substring(0, 1) & tmpTeksBinary.Substring(0, 1) & tmpTeksBinary.Substring(0, 1) & _
		tmpTeksBinary.Substring(1, 1) & tmpTeksBinary.Substring(1, 1) & tmpTeksBinary.Substring(1, 1) & tmpTeksBinary.Substring(1, 1)
	idxPesanSkala4 += 1

	pesanSkala4(idxPesanSkala4) = tmpTeksBinary.Substring(2, 1) & tmpTeksBinary.Substring(2, 1) & tmpTeksBinary.Substring(2, 1) & tmpTeksBinary.Substring(2, 1) & _
		tmpTeksBinary.Substring(3, 1) & tmpTeksBinary.Substring(3, 1) & tmpTeksBinary.Substring(3, 1) & tmpTeksBinary.Substring(3, 1)
	idxPesanSkala4 += 1

	pesanSkala4(idxPesanSkala4) = tmpTeksBinary.Substring(4, 1) & tmpTeksBinary.Substring(4, 1) & tmpTeksBinary.Substring(4, 1) & tmpTeksBinary.Substring(4, 1) & _
		tmpTeksBinary.Substring(5, 1) & tmpTeksBinary.Substring(5, 1) & tmpTeksBinary.Substring(5, 1) & tmpTeksBinary.Substring(5, 1)
	idxPesanSkala4 += 1

	pesanSkala4(idxPesanSkala4) = tmpTeksBinary.Substring(6, 1) & tmpTeksBinary.Substring(6, 1) & tmpTeksBinary.Substring(6, 1) & tmpTeksBinary.Substring(6, 1) & _
		tmpTeksBinary.Substring(7, 1) & tmpTeksBinary.Substring(7, 1) & tmpTeksBinary.Substring(7, 1) & tmpTeksBinary.Substring(7, 1)
	idxPesanSkala4 += 1
Next

* Gunakan fungsi ini untuk mengubah String menjadi Binary
contoh: teks ‘ABC’ akan menjadi ‘010000010100001001000011’

Public Shared Function StringToBinary(ByVal teks As String) As String
	Dim hasil As String = ""
	For Each C As Char In teks
		hasil &= System.Convert.ToString(AscW(C), 2).PadLeft(8, "0")
	Next
	Return hasil
End Function

4b. Lakukan perhitungan pseudonoise berdasarkan kata kunci yang telah dikonversi menjadi string berformat 8-bit
Kemudian lakukan operasi bitwise XOR pada masing-masing string tersebut
Sebagai contoh dengan kata kunci “sonny”
maka hasil konversinya adalah
s = 01110011
o = 01101111
s XOR o = 00011100
n = 01101110
XOR n = 01110010
n = 01101110
XOR n = 00011100
y = 01111001
XOR y = 01100101

Pseudonoise adalah nilai byte dari operasi terakhir.
yaitu nilai byte dari 01100101 = 101

Dim kataKunciBytes() As Byte = System.Text.ASCIIEncoding.ASCII.GetBytes(kataKunci)
Dim pseudonoise As Byte = 0
For i As Integer = 0 To kataKunciBytes.Length - 1
	If i = 0 Then
		pseudonoise = kataKunciBytes(i)
	Else
		pseudonoise = pseudonoise Xor kataKunciBytes(i)
	End If
Next

4c. Dapatkan nilai seed acak dengan rumus
seed(n+1) = (a * seed(n) + c) mod m
dengan konstanta a bernilai 17, konstanta c bernilai 7, dan konstanta m bernilai 84
Sebagai contoh dengan nilai pseudonoise diatas maka
seed(1) = (17 * 101 + 7) mod 84 = 44
seed(2) = (17 * 44 + 7) mod 84 = 83
seed(3) = (17 * 83 + 7) mod 84 = 74
seed(4) = (17 * 74+ 7) mod 84 = 5

Dim daftarSeed(pesanSkala4.Length - 1) As Byte
For i As Integer = 0 To daftarSeed.Length - 1
	If i = 0 Then
		daftarSeed(i) = pseudonoise
	Else
		daftarSeed(i) = (17 * daftarSeed(i - 1) + 7) Mod 84
	End If
Next

4d. Hitung hasil modulasi dari bit pesan dan seed
Yaitu lakukan proses operasi XOR antara bit pesan dengan nilai seed yang telah didapatkan sebelumnya
Sebagai contoh dengan menggunakan 4 buah string diatas
00001111 XOR (nilai konversi 8-bit dari 44 = 00101100) = 00100011
11111111 XOR (nilai konversi 8-bit dari 83 = 01010011) = 10101100
00001111 XOR (nilai konversi 8-bit dari 74 = 01001010) = 01000101
00000000 XOR (nilai konversi 8-bit dari 5 = 00000101) = 00000101

Dim hasilModulasi(pesanSkala4.Length - 1) As Byte
For i As Integer = 0 To hasilModulasi.Length - 1
	Dim intPesanSkala4 As Integer = Convert.ToByte(pesanSkala4(i), 2)
	hasilModulasi(i) = intPesanSkala4 Xor daftarSeed(i)
Next

4e. Dapatkan karakter dari masing-masing bit sebagai jawaban karakter hasil enkripsi

Return System.Text.Encoding.Default.GetString(hasilModulasi)

5. Lakukan dekripsi dari kalimat yang telah terenkripsi
Penjelasan lebih detail tentang fungsi ini dapat dilihat pada penjelasan skrip dibawah ini (poin 5a – 5f)

Dim hasilDekripsi As String = ss.dekripsi(hasilEnkripsi, kataKunci)

5a. Dapatkan nilai bit dari masing-masing karakter dalam pesan terenkripsi

Dim hasilDemodulasi = System.Text.Encoding.Default.GetBytes(teks)

5b. Lakukan perhitungan pseudonoise berdasarkan kata kunci yang telah dikonversi menjadi string berformat 8-bit
Kemudian lakukan operasi bitwise XOR pada masing-masing string tersebut
Sebagai contoh dengan kata kunci “sonny”
maka hasil konversinya adalah
s = 01110011
o = 01101111
s XOR o = 00011100
n = 01101110
XOR n = 01110010
n = 01101110
XOR n = 00011100
y = 01111001
XOR y = 01100101

Pseudonoise adalah nilai byte dari operasi terakhir.
yaitu nilai byte dari 01100101 = 101

Dim kataKunciBytes() As Byte = System.Text.ASCIIEncoding.ASCII.GetBytes(kataKunci)
Dim pseudonoise As Byte = 0
For i As Integer = 0 To kataKunciBytes.Length - 1
	If i = 0 Then
		pseudonoise = kataKunciBytes(i)
	Else
		pseudonoise = pseudonoise Xor kataKunciBytes(i)
	End If
Next i

5c. Dapatkan nilai seed acak dengan rumus
seed(n+1) = (a * seed(n) + c) mod m
dengan konstanta a bernilai 17, konstanta c bernilai 7, dan konstanta m bernilai 84
Sebagai contoh dengan nilai pseudonoise diatas maka
seed(1) = (17 * 101 + 7) mod 84 = 44
seed(2) = (17 * 44 + 7) mod 84 = 83
seed(3) = (17 * 83 + 7) mod 84 = 74
seed(4) = (17 * 74+ 7) mod 84 = 5

Dim daftarSeed(hasilDemodulasi.Length - 1) As Byte
For i As Integer = 0 To daftarSeed.Length - 1
	If i = 0 Then
		daftarSeed(i) = pseudonoise
	Else
		daftarSeed(i) = (17 * daftarSeed(i - 1) + 7) Mod 84
	End If
Next i

5d. Lakukan proses demodulasi dari bit modulasi dan seed
Yaitu lakukan proses operasi XOR antara bit modulasi dengan nilai seed yang telah didapatkan sebelumnya
Sebagai contoh dengan menggunakan 4 buah string diatas
00100011 XOR (nilai konversi 8-bit dari 44 = 00101100) = 00001111
10101100 XOR (nilai konversi 8-bit dari 83 = 01010011) = 11111111
01000101 XOR (nilai konversi 8-bit dari 74 = 01001010) = 00001111
00000101 XOR (nilai konversi 8-bit dari 5 = 00000101) = 00000000

Dim pesanSkala4(hasilDemodulasi.Length - 1) As Byte
For i As Integer = 0 To pesanSkala4.Length - 1
	pesanSkala4(i) = hasilDemodulasi(i) Xor daftarSeed(i)
Next i

5e. Lakukan perhitungan pada masing-masing hasil demodulasi
Lakukan perhitungan untuk mendapatkan isi sebenarnya dari hasil demodulasi
Yaitu dengan cara menyusutkan hasil demodulasi dengan skala pembagi 4
Sehingga setiap 4 bit yang ditemukan akan disusutkan menjadi 1 bit saja
Sebagai contoh, dengan hasil perhitungan demodulasi sebelumnya
00001111
11111111
00001111
00000000

Maka akan menghasilkan sebuah string dengan nilai 01110100

For i As Integer = 0 To pesanSkala4.Length - 1 Step 4
	Dim tmp As String = StringToBinary(ChrW(pesanSkala4(i)))
	Dim tmp2 As String = StringToBinary(ChrW(pesanSkala4(i + 1)))
	Dim tmp3 As String = StringToBinary(ChrW(pesanSkala4(i + 2)))
	Dim tmp4 As String = StringToBinary(ChrW(pesanSkala4(i + 3)))

	Dim tmpPesan As String = tmp.Substring(0, 1) + tmp.Substring(4, 1) + _
		tmp2.Substring(0, 1) + tmp2.Substring(4, 1) + _
		tmp3.Substring(0, 1) + tmp3.Substring(4, 1) + _
		tmp4.Substring(0, 1) + tmp4.Substring(4, 1)

	bytePesan(idxPesan) = Convert.ToByte(tmpPesan, 2)
	idxPesan += 1
Next i

* Gunakan fungsi ini untuk mengubah Binary menjadi String
contoh: teks ‘010000010100001001000011’ akan menjadi ‘ABC’

Public Shared Function BinaryToString(ByVal teks As String) As String
	Dim hasil As String = ""

	For i As Integer = 0 To teks.Length - 1 Step 8
		Dim tmpBinary As String = teks.Substring(i, 8)
		hasil += ChrW(Convert.ToByte(tmpBinary, 2))
	Next

	Return hasil
End Function

5f. Dapatkan karakter dari masing-masing bit sebagai jawaban karakter hasil dekripsi

Return System.Text.Encoding.ASCII.GetString(bytePesan)


Hasil akhir adalah: (klik untuk perbesar gambar)


Contoh modul / source code dalam bahasa VB (Visual Basic) dapat didownload disini:



Jika membutuhkan jasa kami dalam pembuatan program, keterangan selanjutnya dapat dilihat di Fasilitas dan Harga
Jika ada yang kurang paham dengan langkah-langkah algoritma diatas, silahkan berikan komentar Anda.
Selamat mencoba.

Tinggalkan sebuah komentar

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *