Anda di halaman 1dari 10

Nama : Mhd.

Riza Maulana Jurusan Teknik Informatika

Nim : 1812000102

Kelas : TIF-A MALAM Sem. VI

UTS Kriptografi

1. Apa yang dimaksud dengan Kriptografi?

Jawab : Kriptografi adalah ilmu yang mempelajari teknik teknik matematika yang
berhubungan dengan aspek keamanan informasi, seperti kerahasiaan data, keabsahan data,
integritas data, serta autentikasi data.

2. Buatlah Kriptografi Vigenere Cipher dan Beafort Cipher dari nama masing-masing, ambil
2 nama dari depan dan tambah lagi dibelakang dengan kata “SECURE” lalu kata kuncinya
“AMAN”, buat enkripsi dan dekripsinya lengkap dengan langkah langkah pembuatannya.

Jawab : A. Vigenere Cipher

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 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

ENKRIPSI

Ci = (Pi + Ki) mod 26

Plaintext = MHD RIZA SECURE

Kunci = AMAN

Cara pengerjaannya:

Kunci nya AMAN dihitung berdasarkan tabel abjad diatas dengan angkanya

A M A N
0 12 0 13

Kemudian diurutkan berdasarkan angka abjad

M H D R I Z A S E C U R E Plaintext
12 7 3 17 8 25 0 18 4 2 20 17 4 Nilai
0 12 0 13 0 12 0 13 0 12 0 13 0 Kunci
M = (12 + 0) mod 26 = 12

H = (7 + 12) mod 26 = 19
D = (3 + 0) mod 26 = 3

R = (17 + 13) mod 26 = 4

I = (8 + 0) mod 26 = 8

Z = (25 + 12) mod 26 = 11

A = (0 + 0) mod 26 = 0

S = (18 + 13) mod 26 = 5

E = (4 + 0) mod 26 = 4

C = (2 + 12) mod 26 = 14

U = (20 + 0) mod 26 = 20

R = (17 + 13) mod 26 = 4

E = (4 + 0) mod 26 = 4

Jadi ciphertext nya adalah MTDEILAFEOUEE

DEKRIPSI

Pi = (Ci – Ki + 26) mod 26

Ciphertext = MTDEILAFEOUEE

Kunci = AMAN

Cara pengerjaannya:

Kunci nya AMAN dihitung berdasarkan tabel abjad diatas dengan angkanya

A M A N
0 12 0 13

Kemudian diurutkan berdasarkan angka abjad

M T D E I L A F E O U E E Ciphertext
12 19 3 4 8 11 0 5 4 14 20 4 4 Nilai
0 12 0 13 0 12 0 13 0 12 0 13 0 Kunci

M = (12 – 0 + 26) mod 26 = 38 mod 26 = 12 (M)


T = (19 – 12 + 26) mod 26 = 33 mod 26 = 7 (H)

D = (3 – 0 + 26) mod 26 = 29 mod 26 = 3 (D)

E = (4 – 13 + 26) mod 26 = 17 mod 26 = 17 (R)

I = (8 – 0 + 26) mod 26 = 34 mod 26 = 8 (I)

L = (11 – 12 + 26) mod 26 = 25 mod 26 = 25 (Z)

A = (0 – 0 + 26) mod 26 = 26 mod 26 = 0 (A)

F = (5 – 13 + 26) mod 26 = 18 mod 26 = 18 (S)

E = (4 – 0 + 26) mod 26 = 30 mod 26 = 4 (E)

O = (14 – 12 + 26) mod 26 = 24 mod 26 = 2 (C)

U = (20 – 0 + 26) mod 26 = 46 mod 26 = 20 (U)

E = (4 – 13 + 26) mod 26 = 17 mod 26 = 17 (R)

E = (4 – 0 + 26) mod 26 = 30 mod 26 = 4 (E)

Jadi plaintext nya adalah MHDRIZASECURE

B. Beaufort Cipher

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 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

ENKRIPSI

Cc = (k - Pc) mod 26

Plaintext = MHD RIZA SECURE

Kunci = AMAN

Cara pengerjaannya:

Kunci nya AMAN dihitung berdasarkan tabel abjad diatas dengan angkanya

A M A N
0 12 0 13

Kemudian diurutkan berdasarkan angka abjad


M H D R I Z A S E C U R E Plaintext
12 7 3 17 8 25 0 18 4 2 20 17 4 Nilai
0 12 0 13 0 12 0 13 0 12 0 13 0 Kunci
(A – M) = (0 – 12) mod 26 = -12 + 26 = 14 mod 26 = 14 = O

(M – H) = (12 – 7) mod 26 = 5 + 26 = 31 mod 26 = 5 = F

(A – D) = (0 – 3) mod 26 = -3 + 26 = 23 mod 26 = 23 = X

(N – R) = (13 – 17) mod 26 = -4 + 26 = 22 mod 26 = 22 = W

(A – I) = (0 – 8) mod 26 = -8 + 26 = 18 mod 26 = 18 = S

(M – Z) = (12 – 25) mod 26 = -13 + 26 = 13 mod 26 = 13 = N

(A – A) = (0 – 0) mod 26 = 0 + 26 = 26 mod 26 = 0 = A

(N – S) = (13 – 18) mod 26 = -5 + 26 = 21 mod 26 = 21 = V

(A –E) = (0 – 4) mod 26 = -4 + 26 = 22 mod 26 = 22 = W

(M – C) = (12 – 2) mod 26 = 10 + 26 = 16 mod 26 = 16 = Q

(A – U) = (0 – 20) mod 26 = -20 + 26 = 6 mod 26 = 6 = G

(N – R) = (13 – 17) mod 26 = -4 + 26 = 22 mod 26 = 22 = W

(A- E) = (0 – 4) mod 26 = -4 + 26 = 22 mod 26 = 22 = W

Jadi ciphertext nya adalah OFXWSNAVWQGWW

DEKRIPSI

Pc = (k – Cc) mod 26

Ciphertext = OFXWSNAVWQGWW

Kunci = AMAN

Cara pengerjaannya:

Kunci nya AMAN dihitung berdasarkan tabel abjad diatas dengan angkanya

A M A N
0 12 0 13
Kemudian diurutkan berdasarkan angka abjad

O F X W S N A V W Q G W W Ciphertext
14 5 23 22 18 13 0 21 22 16 6 22 22 Nilai
0 12 0 13 0 12 0 13 0 12 0 13 0 Kunci
(A – O) = (0 – 14) mod 26 = -14 + 26 = 12 mod 26 = 12 = M

(M – F) = (12 – 5) mod 26 = 7 + 26 = 33 mod 26 = 7 = H

(A – X) = (0 – 23) mod 26 = -23 + 26 = 3 mod 26 = 3 = D

(N – W) = (13 – 22) mod 26 = -9 + 26 = 17 mod 26 = 17 = R

(A – S) = (0 – 18) mod 26 = -18 + 26 = 8 mod 26 = 8 = I

(M – N) = (12 – 13) mod 26 = -1 + 26 = 25 mod 26 = 25 = Z

(A – A) = (0 – 0) mod 26 = 0 + 26 = 26 mod 26 = 0 = A

(N – V) = (13 – 21) mod 26 = -8 + 26 = 18 mod 26 = 18 = S

(A –W) = (0 – 22) mod 26 = -22 + 26 = 4 mod 26 = 4 = E

(M – Q) = (12 – 16) mod 26 = -4 + 26 = 22 mod 26 = 2 = C

(A – G) = (0 – 6) mod 26 = -6 + 26 = 20 mod 26 = 20 = U

(N – W) = (13 – 22) mod 26 = -9 + 26 = 17 mod 26 = 17 = R

(A- W) = (0 – 22) mod 26 = -9 + 26 = 17 mod 26 = 17 = E

Jadi plaintext nya adalah MHDRIZASECURE

3. . Buatlah Kriptografi RSA dari nama masing-masing, ambil 2 nama dari depan dan tambah
lagi dibelakang dengan kata “SECURE” lalu untuk Public Key dan Private Key gunakan
bilangan prima! Buat enkripsi dan dekripsinya lengkap dengan langkah langkah
pembuatannya.

Jawab :

Besaran-besaran yang digunakan pada algoritma RSA:

1. p dan q bilangan prima (rahasia)

2. n = p . q (tidak rahasia)

3. ϕ(n) = (p – 1)(q – 1) (rahasia)


4. e (kunci enkripsi) (tidak rahasia)

5. d (kunci dekripsi) (rahasia)

6. m (plainteks) (rahasia)

7. c (cipherteks) (tidak rahasia)

4. Buatlah program Kriptografi Klasik bebas menggunakan algoritma apa saja dan juga bebas
menggunakan bahasa pemrogramannya, copy paste ke lembar jawaban. Catatan : jika sudah
dikerjakan program kriptografi kalsik dan mau menambah membuat program kriptografi
simetris atau kriptografi asimetris, maka ada nilai tambahan yang tinggi.

Jawab :

Contoh program Caesar Cipher Phyton


abjad =
['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']
if __name__ == '__main__':
print('Kelompok 2\nDicky Raychan (1812000087)\nImam Alisyahbana Saragih
(1812000095)\nMhd. Riza Maulana (1812000102)\nMukti Abdi Aditya
(1812000105)\n---------------------')
key = int(input('Masukkan cipher key yang diinginkan : '))
def encode(kalimat,cipher_key):
kalimat = kalimat.lower()
hasil_encode = ''
for karakter in kalimat:
if karakter in abjad:
index_lama = abjad.index(karakter)
index_baru = (index_lama + cipher_key ) % len(abjad)
abjad_baru = abjad[index_baru]
hasil_encode = hasil_encode + abjad_baru
else:
hasil_encode = hasil_encode + ' '
return hasil_encode

kalimat = input('Masukkan kalimat yang ingin dienkripsi :')


# ENKRIPSI
kalimat_hasil = encode(kalimat,key)
print('Kalimat yang dimasukkan adalah:',kalimat)
print('Hasil enkripsi kalimat menggunakan Caesar Cipher dengan key:',key,
'adalah', kalimat_hasil)
# DEKRIPSI (dengan enkripsi ulang menggunakan nilai minus key)
kalimat_awal = encode(kalimat_hasil,-key)
print('Jika ingin di dekripsikan bisa menggunakan nilai negatif dari cipher
key sebelumnya maka kalimat hasilnya adalah:',-key, 'adalah', kalimat_awal)

Hasil Program nya ketika di Run :


Algoritma Asimetris

from Module import curve,scalar_mult


import random

print("Kripto:\t", curve.g)

RizaSecretKey = random.randrange(2, curve.n)


RizaPublicKey = scalar_mult(RizaSecretKey, curve.g)

MaulanaSecretKey = random.randrange(2, curve.n)


MaulanaPublicKey = scalar_mult(MaulanaSecretKey, curve.g)

print("Riza\'s secret key:\t", RizaSecretKey)


print("Riza\'s public key:\t", RizaPublicKey)
print("Maulana\'s secret key:\t", MaulanaSecretKey)
print("Maulana\'s public key:\t", MaulanaPublicKey)

print("==========================")

sharedSecret1 = scalar_mult(MaulanaSecretKey, RizaPublicKey)


sharedSecret2 = scalar_mult(MaulanaSecretKey, MaulanaPublicKey)

print("==========================")
print("Riza\'s shared key:\t", sharedSecret1)
print("Maulana\'s shared key:\t", sharedSecret2)

print("\n==========================")
print("abG: \t", (sharedSecret1[0]))
res=(RizaSecretKey*MaulanaSecretKey) % curve.n

res=scalar_mult(res, curve.g)

print("(ab)G \t", (res[0]))

import collections
import random

EllipticCurve = collections.namedtuple('EllipticCurve', 'name p a b g n h')

curve = EllipticCurve(
'secp256k1',

p=0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f,

a=0,
b=7,

g=(0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798,
0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8),

n=0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141,

h=1,
)

def inverse_mod(k, p):


"""Returns the inverse of k modulo p.
This function returns the only integer x such that (x * k) % p == 1.
k must be non-zero and p must be a prime.
"""
if k == 0:
raise ZeroDivisionError('division by zero')

if k < 0:
# k ** -1 = p - (-k) ** -1 (mod p)
return p - inverse_mod(-k, p)

# Extended Euclidean algorithm.


s, old_s = 0, 1
t, old_t = 1, 0
r, old_r = p, k

while r != 0:
quotient = old_r // r
old_r, r = r, old_r - quotient * r
old_s, s = s, old_s - quotient * s
old_t, t = t, old_t - quotient * t

gcd, x, y = old_r, old_s, old_t

assert gcd == 1
assert (k * x) % p == 1
return x % p

def is_on_curve(point):
"""Returns True if the given point lies on the elliptic curve."""
if point is None:
return True

x, y = point

return (y * y - x * x * x - curve.a * x - curve.b) % curve.p == 0

def point_add(point1, point2):


"""Returns the result of point1 + point2 according to the group law."""
assert is_on_curve(point1)
assert is_on_curve(point2)

if point1 is None:
return point2
if point2 is None:
return point1

x1, y1 = point1
x2, y2 = point2

if x1 == x2 and y1 != y2:
return None

if x1 == x2:

m = (3 * x1 * x1 + curve.a) * inverse_mod(2 * y1, curve.p)


else:
m = (y1 - y2) * inverse_mod(x1 - x2, curve.p)

x3 = m * m - x1 - x2
y3 = y1 + m * (x3 - x1)
result = (x3 % curve.p, -y3 % curve.p)

assert is_on_curve(result)

return result

def scalar_mult(k, point):


"""Returns k * point computed using the double and point_add
algorithm."""
assert is_on_curve(point)

if k % curve.n == 0 or point is None:


return None

if k < 0:
return scalar_mult(-k, point_neg(point))

result = None
addend = point

while k:
if k & 1:

result = point_add(result, addend)

addend = point_add(addend, addend)

k >>= 1

assert is_on_curve(result)

return result

ketika Program di Run

Anda mungkin juga menyukai