Zanuramdan Dwi Saputra - Plantlet

You might also like

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 6

Nama : Zanuramdan Dwi Saputra

NIM : 165150201111241

Kelas : Kriptografi – B

Bagian 1

Modifikasi Program :
Plantlet.py
key = [None] * 80
iv = [None] * 90
lfsr = [None] * 61
nfsr = [None] * 40
temp_g = [None] * 15
counter_bit = [None] * 9
temp_h = [None] * 5
plaintext = [None] * 10
ciphertext = [None] * 10
keystream = [None] * 320

selected_key = None
g, z, h = None, None, None

def set_counter():
for i in range(len(counter_bit)):
counter_bit[i] = False

def set_g():
temp_g[0]=nfsr[0]
temp_g[1]=nfsr[13]
temp_g[2]=nfsr[19]
temp_g[3]=nfsr[35]
temp_g[4]=nfsr[39]
temp_g[5]=nfsr[2]&nfsr[25]
temp_g[6]=nfsr[3]&nfsr[5]
temp_g[7]=nfsr[7]&nfsr[8]
temp_g[8]=nfsr[14]&nfsr[21]
temp_g[9]=nfsr[16]&nfsr[18]
temp_g[10]=nfsr[22]&nfsr[24]
temp_g[11]=nfsr[26]&nfsr[32]
temp_g[12]=nfsr[33]&nfsr[36]&nfsr[37]&nfsr[38]
temp_g[13]=nfsr[10]&nfsr[11]&nfsr[12]
temp_g[14]=nfsr[27]&nfsr[30]&nfsr[31]
global g

g=temp_g[0]^temp_g[1]^temp_g[2]^temp_g[3]^temp_g[4]^temp_g[5]^temp_g[6]^temp_g[
7]^temp_g[8]^temp_g[9]^temp_g[10]^temp_g[11]^temp_g[12]^temp_g[13]^temp_g[14]

def set_z():
global z
z=h^lfsr[30]^(nfsr[1]^nfsr[6]^nfsr[15]^nfsr[17]^nfsr[23]^nfsr[28]^nfsr[34])

def set_h():
temp_h[0]=nfsr[4]&lfsr[6]
temp_h[1]=lfsr[8]&lfsr[10]
temp_h[2]=lfsr[17]&lfsr[32]
temp_h[3]=lfsr[19]&lfsr[23]
temp_h[4]=nfsr[4]&lfsr[32]&nfsr[38]
global h
h=temp_h[0]^temp_h[1]^temp_h[2]^temp_h[3]^temp_h[4]
def set_key_iv():
for i in range(len(iv)):
if i < len(key):
key[i] = 0
iv[i] = 0
else:
iv[i] = 0

def clock_nfsr():
for i in range(len(nfsr)-1):
nfsr[i] = nfsr[i+1]
nfsr[len(nfsr)-1] = z^g^selected_key^lfsr[0]^counter_bit[4]

def clock_lfsr():
for i in range(59):
lfsr[i] = lfsr[i+1]
lfsr[59]=lfsr[54]^lfsr[43]^lfsr[34]^lfsr[20]^lfsr[14]^lfsr[0]^z;
lfsr[60]=True;

def clock_nfsr_prga():
for i in range(39):
nfsr[i] = nfsr[i+1]
nfsr[39] = g^selected_key^lfsr[0]^counter_bit[4];

def clock_lfsr_prga():
for i in range(59):
lfsr[i] = lfsr[i+1]
lfsr[59]=lfsr[54]^lfsr[43]^lfsr[34]^lfsr[20]^lfsr[14]^lfsr[0]^z
lfsr[60]=lfsr[54]^lfsr[43]^lfsr[34]^lfsr[20]^lfsr[14]^lfsr[0]

def kla():
for i in range(102):
if i <= 40:
nfsr[i] = iv[i]
elif i >= 41 and i <= 90:
lfsr[i-41] = iv[i]
else:
lfsr[50]=True
lfsr[51]=True
lfsr[52]=True
lfsr[53]=True
lfsr[54]=True
lfsr[55]=True
lfsr[56]=True
lfsr[57]=True
lfsr[58]=True
lfsr[59]=False
lfsr[60]=True

def ksa():
for t in range(320):
if t % 16 == 0:
counter_bit[4] = (not counter_bit[4])
global selected_key
selected_key = key[t%80]
set_g()
set_h()
set_z()
clock_nfsr()
clock_lfsr()

def prga():
for t in range(320):
if t % 16 == 0:
counter_bit[4] = (not counter_bit[4])
global selected_key
selected_key = key[t%80]
set_g()
set_h()
set_z()
keystream[t] = z
clock_nfsr_prga()
clock_lfsr_prga()

def enkripsi():
for i in range(len(plaintext)):
ciphertext[i] = plaintext[i]^keystream[i]

def dekripsi():
for i in range(len(plaintext)):
plaintext[i] = ciphertext[i]^keystream[i]

set_counter()
set_key_iv()
kla()
ksa()
prga()
print("Key: ")
print(key)
print("IV: ")
print(iv)
print("ENKRIPSI")
enkripsi()
print("Plaintext: ")
print(plaintext)
print("Ciphertext: ")
print(ciphertext)
print("DEKRIPSI")
dekripsi()
print("Ciphertext: ")
print(ciphertext)
print("Plaintext: ")
print(plaintext)

1. Apa sajakah input algoritme tersebut


 Key, iv, plaintext, lfsr, nfsr, keystream
2. Berapa bit input algoritme tersebut
 320 bit
3. Pada program, tandai bagian kode yang merupakan input (jawaban no 1) dengan warna merah
 Terdapat pada kodingan di atas
4. Apa sajakah output algoritme tersebut
 Ciphertext, g, z, h
5. Berapa bit output algoritme tersebut
 320 bit
6. Pada program, tandai bagian kode yang merupakan output (jawaban no 4) dengan warna biru
 Terdapat pada kodingan di atas

Bagian 2

1. Modifikasilah kode program tersebut sehingga algoritme tersebut mampu menghasilkan output
sebanyak 1.000.000 (satu juta ) bit, dan screen shot hasilnya.
 Berikut kodingan yang telah dimodifikasi supaya mampu menghasilkan output sebanyak
1000000 bit.
Plantlet.py
key = [None] * 80
iv = [None] * 90
lfsr = [None] * 61
nfsr = [None] * 40
temp_g = [None] * 15
counter_bit = [None] * 9
temp_h = [None] * 5
plaintext = [None] * 10
ciphertext = [None] * 10
keystream = [None] * 1000000

selected_key = None
g, z, h = None, None, None

def set_counter():
for i in range(len(counter_bit)):
counter_bit[i] = False

def set_g():
temp_g[0]=nfsr[0]
temp_g[1]=nfsr[13]
temp_g[2]=nfsr[19]
temp_g[3]=nfsr[35]
temp_g[4]=nfsr[39]
temp_g[5]=nfsr[2]&nfsr[25]
temp_g[6]=nfsr[3]&nfsr[5]
temp_g[7]=nfsr[7]&nfsr[8]
temp_g[8]=nfsr[14]&nfsr[21]
temp_g[9]=nfsr[16]&nfsr[18]
temp_g[10]=nfsr[22]&nfsr[24]
temp_g[11]=nfsr[26]&nfsr[32]
temp_g[12]=nfsr[33]&nfsr[36]&nfsr[37]&nfsr[38]
temp_g[13]=nfsr[10]&nfsr[11]&nfsr[12]
temp_g[14]=nfsr[27]&nfsr[30]&nfsr[31]
global g

g=temp_g[0]^temp_g[1]^temp_g[2]^temp_g[3]^temp_g[4]^temp_g[5]^temp_g[6]^temp_g[
7]^temp_g[8]^temp_g[9]^temp_g[10]^temp_g[11]^temp_g[12]^temp_g[13]^temp_g[14]

def set_z():
global z
z=h^lfsr[30]^(nfsr[1]^nfsr[6]^nfsr[15]^nfsr[17]^nfsr[23]^nfsr[28]^nfsr[34])

def set_h():
temp_h[0]=nfsr[4]&lfsr[6]
temp_h[1]=lfsr[8]&lfsr[10]
temp_h[2]=lfsr[17]&lfsr[32]
temp_h[3]=lfsr[19]&lfsr[23]
temp_h[4]=nfsr[4]&lfsr[32]&nfsr[38]
global h
h=temp_h[0]^temp_h[1]^temp_h[2]^temp_h[3]^temp_h[4]

def set_key_iv():
for i in range(len(iv)):
if i < len(key):
key[i] = 0
iv[i] = 0
else:
iv[i] = 0

def clock_nfsr():
for i in range(len(nfsr)-1):
nfsr[i] = nfsr[i+1]
nfsr[len(nfsr)-1] = z^g^selected_key^lfsr[0]^counter_bit[4]
def clock_lfsr():
for i in range(59):
lfsr[i] = lfsr[i+1]
lfsr[59]=lfsr[54]^lfsr[43]^lfsr[34]^lfsr[20]^lfsr[14]^lfsr[0]^z;
lfsr[60]=True;

def clock_nfsr_prga():
for i in range(39):
nfsr[i] = nfsr[i+1]
nfsr[39] = g^selected_key^lfsr[0]^counter_bit[4];

def clock_lfsr_prga():
for i in range(59):
lfsr[i] = lfsr[i+1]
lfsr[59]=lfsr[54]^lfsr[43]^lfsr[34]^lfsr[20]^lfsr[14]^lfsr[0]^z
lfsr[60]=lfsr[54]^lfsr[43]^lfsr[34]^lfsr[20]^lfsr[14]^lfsr[0]

def kla():
for i in range(102):
if i <= 40:
nfsr[i] = iv[i]
elif i >= 41 and i <= 90:
lfsr[i-41] = iv[i]
else:
lfsr[50]=True
lfsr[51]=True
lfsr[52]=True
lfsr[53]=True
lfsr[54]=True
lfsr[55]=True
lfsr[56]=True
lfsr[57]=True
lfsr[58]=True
lfsr[59]=False
lfsr[60]=True

def ksa():
for t in range(1000000):
if t % 16 == 0:
counter_bit[4] = (not counter_bit[4])
global selected_key
selected_key = key[t%80]
set_g()
set_h()
set_z()
clock_nfsr()
clock_lfsr()

def prga():
for t in range(1000000):
if t % 16 == 0:
counter_bit[4] = (not counter_bit[4])
global selected_key
selected_key = key[t%80]
set_g()
set_h()
set_z()
keystream[t] = z
clock_nfsr_prga()
clock_lfsr_prga()

def enkripsi():
for i in range(len(plaintext)):
ciphertext[i] = plaintext[i]^keystream[i]
def dekripsi():
for i in range(len(plaintext)):
plaintext[i] = ciphertext[i]^keystream[i]

set_counter()
set_key_iv()
kla()
ksa()
prga()
print("Key: ")
print(key)
print("IV: ")
print(iv)
print("ENKRIPSI")
enkripsi()
print("Plaintext: ")
print(plaintext)
print("Ciphertext: ")
print(ciphertext)
print("DEKRIPSI")
dekripsi()
print("Ciphertext: ")
print(ciphertext)
print("Plaintext: ")
print(plaintext)

2. Tunjukkan pada bagian program mana yang Anda modifikasi sehingga dapat menghasilkan
output sebanyak 1.000.000 (satu juta) bit. Tandai bagian itu dengan warna hijau.
 Terdapat pada kodingan di atas.

You might also like