Nim : 1812000102
UTS 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.
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
Kunci = AMAN
Cara pengerjaannya:
Kunci nya AMAN dihitung berdasarkan tabel abjad diatas dengan angkanya
A M A N
0 12 0 13
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
I = (8 + 0) mod 26 = 8
A = (0 + 0) mod 26 = 0
E = (4 + 0) mod 26 = 4
C = (2 + 12) mod 26 = 14
U = (20 + 0) mod 26 = 20
E = (4 + 0) mod 26 = 4
DEKRIPSI
Ciphertext = MTDEILAFEOUEE
Kunci = AMAN
Cara pengerjaannya:
Kunci nya AMAN dihitung berdasarkan tabel abjad diatas dengan angkanya
A M A N
0 12 0 13
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
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
Kunci = AMAN
Cara pengerjaannya:
Kunci nya AMAN dihitung berdasarkan tabel abjad diatas dengan angkanya
A M A N
0 12 0 13
(A – D) = (0 – 3) mod 26 = -3 + 26 = 23 mod 26 = 23 = X
(A – I) = (0 – 8) mod 26 = -8 + 26 = 18 mod 26 = 18 = S
(A – A) = (0 – 0) mod 26 = 0 + 26 = 26 mod 26 = 0 = A
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
(A – A) = (0 – 0) mod 26 = 0 + 26 = 26 mod 26 = 0 = A
(A – G) = (0 – 6) mod 26 = -6 + 26 = 20 mod 26 = 20 = U
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 :
2. n = p . q (tidak rahasia)
6. m (plainteks) (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 :
print("Kripto:\t", curve.g)
print("==========================")
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)
import collections
import random
curve = EllipticCurve(
'secp256k1',
p=0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f,
a=0,
b=7,
g=(0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798,
0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8),
n=0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141,
h=1,
)
if k < 0:
# k ** -1 = p - (-k) ** -1 (mod p)
return p - inverse_mod(-k, p)
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
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
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:
x3 = m * m - x1 - x2
y3 = y1 + m * (x3 - x1)
result = (x3 % curve.p, -y3 % curve.p)
assert is_on_curve(result)
return result
if k < 0:
return scalar_mult(-k, point_neg(point))
result = None
addend = point
while k:
if k & 1:
k >>= 1
assert is_on_curve(result)
return result