1. Trang chủ
  2. » Kinh Tế - Quản Lý

Bài tập lớn An Ninh Mạng: Hệ mật mã hóa Elgamal

33 1 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Nội dung

Trang 1

B THÔNG TIN & TRUY N THÔNG ỘỀ

H C VI N CÔNG NGH ỌỆỆ BƯU CHÍNH VIỄN THÔNG

AN TOÀN M NG THÔNG TIN

Trang 2

Tiểu lu n môn ANMTT ậ

Nhóm 9 page 1

thuyết còn lại của chương I, viết phần ví d minh hụ ọa và thám mã

đánh giá tính an toàn và ưu

Elgamal

Trang 3

Tiểu lu n môn ANMTT ậ

Nhóm 9 page 2

MỤC LỤC

Chương I Lý thuyết về hệ mật mã hóa Elgamal 6

1.1 Gi i thi u chung 6ớ ệ1.1.1 M c tiêu 6ụ1.1.2 Giới thiệu v h mề ệ ật mã hóa 6

1.2 H m t mã Elgamal 7ệ ậ1.2.1 Giới thiệu chung v h m t mã Elgamal 7ề ệ ậ1.2.2 Bài toán logarit rời rạc 8

1.2.3 T o khóa 8ạ1.2.4 Mã hóa 8

1.2.5 Giải mã 9

1.2.6 Ví d minh h a 9ụ ọ1.2.7 Thám mã h Elgamal 11ệ1.2.8 Qu n lý khóa 13ảChương II Triển khai hệ mật mã Elgamal và ứng dụng thực tiễn 14

2.1.Tri n khai code 14ể2.1.1 Xây d ng hàm cho quá trình mã hóa và giự ải mã 14

2.5.1.Khái quát các ng d ng c a Elgamal 26ứ ụ ủ2.5.2 ng d ng trong viỨ ụ ệ ạc to ch ký s 26ữ ố

Trang 4

Tiểu lu n môn ANMTT ậ

Elliptic

Trang 5

Tiểu lu n môn ANMTT ậ

B ng 2 1: K t qu vào ra khi d u toàn là ch s ả ế ả ữ liệ ữ ố 23

B ng 2 2: K t qu vào ra khi d u g m ch và các ký t c bi t ả ế ả ữ liệ ồ ữ ự đặ ệ 24

Danh mục hình ảnh :Hình 1 1: Quá trình truy n tin h mề ệ ật mã hóa khóa đối xứng 7Hình 1 2: Quá trình truy n tin h mề ệ ật mã hóa khóa bất đố ứng 7i x

Trang 6

Tiểu lu n môn ANMTT ậ

Nhóm 9 page 5 LỜI NÓI ĐẦU

Trong thời đại công ngh s , vệ ố ấn đề ả b o mật thông tin luôn được quan tâm T xa ừ

tin M t mã h c là mậ ọ ột lĩnh vực, m t ngành có l ch s rộ ị ử ất lâu đời và v n ti p t c phát ẫ ế ụ

( ngo i tr vài th p niên tr lạ ừ ậ ở ại đây), mật mã h c chính là nh ng nhọ ữ ững phương pháp mật mã cổ điể – các phương pháp mận t mã hóa v i bút và gi y ớ ấ

Vào những năm đầu c a thủ ế kỷ XX, sự xuất hi n cệ ủa các cơ cấu cơ khí và điện cơ,

nh ng thữ ập kỷ ần đây đã tạo điề g u kiện để m t mã h c phát tri n nh y v t lên mậ ọ ể ả ọ ột t m ầcao mới R t nhi u các h ấ ề ệ thống mật mã hiện đại đã lần lượt ra đờ ựa trên cơ sởi d đại s ố

Logarit rời rạc.

v h mề ệ ật mã hóa Elgamal, nhóm đã tiến hành xây d ng và mô ph ng h m t mã ự ỏ ệ ậ

sót về m t ki n thặ ế ức, rất mong được s góp ý ch d n c a Cô! ự ỉ ẫ ủ

Trang 7

Tiểu lu n môn ANMTT ậ

Nhóm 9 page 6

Chương I Lý thuyết v h m t mã hóa Elgamal ề ệậ

1.1 Giới thi u chung

1.1.1 M c tiêu ụ

công khai quan trọng trong lĩnh vực b o m t thông tin Bài ti u lu n này t p trung vào ả ậ ể ậ ậ

thông tin C ụ thể:

1.1.2 Giới thiệu v h mề ệ ật mã hóa

g i là hacker) l y cọ ấ ắp thông tin Để đảm b o vi c truy n tin qua l i gi a các thi t b ả ệ ề ạ ữ ế ị

làm việc theo nguyên lý sau:

• P (Plaintext – văn bản g c): là d ố ữ liệu ban đầu hoặc thông tin mà ta mu n b o v ố ả ệb ng cách s d ng h mằ ử ụ ệ ật mã hóa

thông tin mà tin tặc muốn đánh cắp

Khóa giải mã (Decryption key): khóa này dùng để giải mã (ciphertext) và

người đư c y quyền m i có thể truy cập và sử d ng nó ợ ủ ớ ụ

thuật toán và khóa mã hóa

b ng ằ cách sử ụ d ng khóa gi i mã và thu t toán giả ậ ải mã tương ứng

Trang 8

Tiểu lu n môn ANMTT ậ

Nhóm 9 page 7 H m t mã hóa khóa i x ng (hay còn g i là m t mã khóa bí mệ ậ đố ứ ọ ậ ật): Là nh ng h ữ ệ

gi bí m khóa là r t quan tr ng ữ ật ấ ọ

m ật.

1.2.1 Giới th ệi u chung v h m t mã Elgamal ề ệ ậ

bi n th cế ể ủa sơ đồ phân khối Diffie-Hellman

Elgamal phát triển d a trên bài toán Logarithm r i rự ờ ạc Độ an toàn ph ụ thuộ ớn c lvào độ phức tạp của bài toán Logarithm

Trang 9

Tiểu lu n môn ANMTT ậ

Nhóm 9 page 8

Logarithm rời r c là s k t n i cạ ự ế ố ủa phép tính logarithm trên trường số thực vào các nhóm h u h n Ta nh c l i r ng v i 2 s ữ ạ ắ ạ ằ ớ ố thực x, y và cơ số α >0, α ≠0 nếu αx=y thì

B ng 1 1: ả lũy thừa rờ ạc modulo pi r

của p

nguyên th y củ ủa p nếu các lũy thừa của 𝛼 (mod p) t o thành t t c các ph n t trong ạ ấ ả ầ ửnhóm modulo p, tr ừ 0 Nghĩa là, { 𝛼1mod p, 𝛼2mod p, 𝛼3mod p, , 𝛼p-1mod p, } s ẽ chứa tất cả các số nguyên t ừ 1 đến p-1 m t cách duy nh ộ ất.

Tạo khóa:

• Tạo một số nguyên X bA ất kì, sao cho 1 < XA < –p 1

1.2.4 Mã hóa

• Biểu di n bễ ản tin dướ ại d ng m t s nguyên M thu c khoộ ố ộ ảng 0 ≤ M ≤ –p 1 Các bản tin dài hơn được gửi như một chu i các khỗ ối mà trong đó mỗi kh i là m t s ỗ ộ ố

Trang 10

Tiểu lu n môn ANMTT ậ

Nhóm 9 page 9 1.2.5.Gi i mã ả

Khóa công khái là (109, 6, 25)

Trang 11

Tiểu lu n môn ANMTT ậ

k=input ('nhap k= '); p=input ('nhap p= ');

Trang 12

Tiểu lu n môn ANMTT ậ

Nhóm 9 page 11 for i=1:p-1

if check == 1 break; endend disp(i);

Để thám mã h Elgamal, ta c n ph i gi i bài toán Logarit r i r c V i hai s ệ ầ ả ả ờ ạ ớ ố thực x, y và một cơ số a a>0 và a≠1, nếu ax = y thì x được gọi là Logarit cơ số a c a y V y ủ ậ

để giải đư c bài toán trên là: ợThuật toán Shank

em sẽ tìm hiểu và trình bày về thuật toán Shank Thuật toán Shank:

Input: một s nguyên t p, ph n t nguyên th y a c a Z*p và mố ố ầ ử ủ ủ ột số nguyên y

Thuật toán:

G i m = [ ( p 1 )ọ – 1/2 ] ( lấy c n trên ) ậBước 1: Tính ami mod p với ( 0 ≤ i ≤ m - 1)

Bước 3: Tính yaj mod p với ( 0 ≤ j ≤ m - 1 ).

b ng v i giá tr ằ ớ ị ( ami mod p )

Input: p = 109, a = 6, k = 44 Output : x = ?

Giải :

m = [ ( p 1 )– 1/2 ] = 11.

Trang 13

Tiểu lu n môn ANMTT ậ

Nhóm 9 page 12 Bước 1: Tính ami mod p với ( 0 ≤ i ≤ m -1 ).

Trang 14

Tiểu lu n môn ANMTT ậ

Kiểm nghi m l i aệ ạ x mod p = y

khai

trữ m t cách b o mộ ả ật Thông thường, khóa riêng tư được b o v b ng m t khả ệ ằ ậ ẩu

phép

ph i v i b t k ai mu n gố ớ ấ ỳ ố ửi thông điệp mã hóa cho ngườ ở ữu khóa riêng tư i s h

công khai ph c tứ ạp

Trang 15

Tiểu lu n môn ANMTT ậ

Nhóm 9 page 14

hoặc bị ộ l , thì tính bí mật của thông điệp có th b ể ị đe dọa.

Chương II Triển khai h m t mã Elgamal và ng d ng th c ti n ệậứụựễ

Trong lý thuy t c a phế ủ ần mã hóa Elgamal ta đề ập đế c n vi c ph i x lý các s ệ ả ử ốv i s ớ ố mũ rất lớn nhưng với python vi c ki u d ệ ể ữ liệu không b h n ch nên ta v n có th ị ạ ế ẫ ể

vấn đề và thu n ti n trong viậ ệ ệc quan sát cách hàm mod này được thực hi n: ệdef powermod(base, exponent modulus):,

result= 1

whileexponent> 0: ifexponent% 2 == : 1

result = (result base) % modulus *

exponent //= 2

print("Base:", base, "Exponent:", exponent, "Modulus:", modulus) returnresult

thời đặc biệt là với số nguyên tố rất l n có r t nhi u ch s Vi c này n u lớ ấ ề ữ ố ệ ế ặp đi lặ ại p lnhi u l n về ầ ới những l n ta ch y test s gây t n nhi u thầ ạ ẽ ố ề ời gian cũng như tài nguyên cần s d ng vì v y ta s xây dử ụ ậ ẽ ựng chương trình để tạo ra s nguyên t vố ố ới điều ki n nh ệ ỏ hơn m t sộ ố quy định Từ những s nguyên tố ố được sinh ra ta sẽ tiếp t c ti n hành quá trình ụ ế

Trang 16

Tiểu lu n môn ANMTT ậ

Nhóm 9 page 15 fornumberinrange(2, limit):

isprime(if number):

file.write(str(number) + " "\n) print("Đã tạo xong tệp prime_numbers.txt")

if name == " main ": main()

def create_Generator(p generators = []

phi_p= p - 1 # Số Euler phi của p for ginrange(2, p

ifmath.gcd(g p) != 1 # Bỏ qua nếu không nguyên tố cùng nhau với p continue

prime_factors = set( factorint(phi_p)

) # Chuyển đổi thành tập hợp để tối ưu hóa việc kiểm tra forprime_factor inprime_factors:

ifpow(g phi_p // prime_factor p, , ) == : 1 isGenerator = False

def main():

input_file = "number/prime_numbers.txt"

Trang 17

Tiểu lu n môn ANMTT ậ

Nhóm 9 page 16 output_file= "number/generators.csv"

withopen(input_file, "r") asfile_in, open( output_file, "w", newline="", encoding="utf-8"

Đối v i nhớ ững trường h p dợ ữ liệu ta nhận đượ ừ ảc t b n rõ cần để mã hóa có th ếlà các ch cái, s , ký t c bi t vi c x lý tr c ti p là không th vì v y ta c n th c hiữ ố ự đặ ệ ệ ử ự ế ể ậ ầ ự ện

def generate_unique_values(cd): values = []

whilelen(values) < 26+ 9+ 5:

value= random.randint(pow(10, - cd 1), pow(10, cd) - ) 1 if"0"not in str(value) andvaluenot in values:

values.append(value) returnvalues

def main(): cd= 2

values= generate_unique_values(cd) # print(values)

# print(type(values)) mapping = {} # Ánh xạ các chữ cái a-z

forchar_code inrange(ord("a"), ord("z") + 1

Trang 18

Tiểu lu n môn ANMTT ậ

Nhóm 9 page 17 char= chr(char_code)

mapping[char] = values.pop(0) # Ánh xạ các số từ 1-9

fornumber inrange(1 10):, number= str(number)

# Ký tự đặc biệt

special_characters = ["@" "#" "$" "%" "&", , , , ] forspecial inspecial_characters:

mapping[special] = values.pop(0) # Lưu bảng ánh xạ vào file mapping.csv

withopen("map/mapping.csv", "w", newline="") ascsvfile: writer = csv.writer(csvfile)

writer.writerow(["Character" "Number", ]) forchar number, inmapping.items(): writer.writerow([char number]),

if name == " main ": main()

liệu t d ng text sang s ừ ạ ố nguyên và ngược lại cũng từ ố s nguyên v text: ề• Chuyển đối dạng text sang số nguyên:

def load_mapping(filename): mapping = {}

withopen(filename, "r") ascsvfile: reader= csv.reader(csvfile)

forrow inreader: char number, = row

returnmapping

def convert_text_to_number(text mapping):,

numbers = [mapping.get(char char) , forchar intext] return ""join(numbers)

Trang 19

Tiểu lu n môn ANMTT ậ

Nhóm 9 page 18 # Đường dẫn đến file mapping.csv

mapping_file = "./map/mapping.csv"

# Đường dẫn đến file text_in.txt text_in_file = "run/text_in.txt"

# Đọc dữ liệu từ file text_in.txt

withopen(text_in_file, "r") asfile: text= file.read()

# Tạo bảng ánh xạ từ file mapping.csv mapping = load_mapping(mapping_file) # Chuyển đổi văn bản sang dạng số

numbers = convert_text_to_number(text, mapping) # Lưu dữ liệu số vào file input.txt

withopen("./data/input.txt" "w", ) as file: file.write(numbers)

def load_mapping(filename): mapping = {}

withopen(filename, "r") ascsvfile: reader= csv.reader(csvfile)

forrow inreader: char number, = row

# Đọc dữ liệu từ file output.txt

withopen(output_file, "r") asfile: numbers= file.read split()().# Tạo bảng ánh xạ từ file mapping.csv mapping = load_mapping(mapping_file)

Trang 20

Tiểu lu n môn ANMTT ậ

Nhóm 9 page 19 text = ""

# print(numbers) # print(type(numbers)) numbers = numbers[0# print(numbers) # print(type(numbers))

for iinrange(0, len(numbers), 2): number= numbers[ ] + i numbers[ + 1] char= mapping.get("".join(number)) ifcharis not None:

def get_random_prime_and_generator(file_path): prime_numbers = []

withopen(file_path, "r") asfile: reader= csv.reader(file)

forrow inreader:

prime_number = int(row[0]) # Lấy giá trị số nguyên tố từ cột đầu tiên

random_prime_number= random.choice(prime_numbers) withopen(file_path, "r") asfile:

reader= csv.reader(file)

Trang 21

Tiểu lu n môn ANMTT ậ

Nhóm 9 page 20

forrow inreader:

ifint(row[0]) == random_prime_number: generators= row[1 split(",")

key_pair = {"public_pgy": [p g y], , "secrets_px": [p x]} returnkey_pair

def trans_data_in(data p):, i= 0

num= ""

data_array = [] while i< len(data): num += data[] num1= int(num)

ifnot math.isnan(num1) and num1> p: num = num[:-1]

-i = 1

num2= int(num) data_array.append(num2) num = ""

i+= 1 ifnum != : ""

num2= int(num)

returndata_array

def encrypt(data key_public):, p= key_public[0]

Trang 22

Tiểu lu n môn ANMTT ậ

Nhóm 9 page 21 g= key_public[1]

y= key_public[2]

data_array= trans_data_in(data p, ) = [] C

k= random.randint(2, - ) p 1 K= pow(y k p, , )

R= pow(g k p, , )

for iinrange(len(data_array)): Cappend(( * data_array[]) % ) p Ciphertext = {"information": C, "R": R} returnCiphertext

key_secret= keys["secrets_px"] key_public= keys["public_pgy"] data_send= encrypt(data key_public, ) print(data_send)

# Lưu trường "information" vào file data_send.json withopen("./data/data_send.json" "w", ) asfile: json.dump(data_send["information"], file) # Lưu trường "R" vào file public.txt

withopen("./data/key_trans.txt" "w", ) asfile: R= data_send["R"]

file.write(str(R))

# Lưu key_public vào file key_public.json withopen("./data/key_public.json" "w", ) asfile:

Trang 23

Tiểu lu n môn ANMTT ậ

Nhóm 9 page 22 json.dump(key_public file, )

# Lưu key_secret vào file key_secret.json withopen("./data/key_secret.json" "w", ) as file: json.dump(key_secret file, )

if name == " main ": main_input()

Chương trình chạy để giải mã:

for iinrange(len(Information_receive)):

temp = (Information_receive[] * K1) % key_receive[0] M1= str(temp)

M+= M1 return Mdef main_output():

Trang 24

Tiểu lu n môn ANMTT ậ

Nhóm 9 page 23 # Đọc key_know từ file key_secret.json

withopen(key_know_file, "r") asfile: key_know= json.load(file)[1] # print(key_know)

Việc xây d ng b test s ự ộ ẽ đề ra các trường hợp d ữ liệu có th x y ra, nh ng ể ả ữ trường h p h p có kh ợ ợ ả năng sẽ ảy ra đối v i d x ớ ữ liệ u thực tế Ngoài vi c x ệ ử lý dữ liệu đầu vào h ệ thống cũng cần ph i bả ắt được những l i có th x y ra trong quá trình x ỗ ể ả ử lý dữ liệ u

TH1: Dữ liệu đầu vào ch ỉ toàn là số

• Dữ liệu đầu vào có m t s ộ ố chữ ố s 0 liên ti p ế ở đầu, giữa và cuối của dữ liệ u vào • Dữ u là các s nh liệ ố ỏ có ít hơn 18 chữ ố s

• Dữ u vào là các s vô cùng l n có nhiliệ ố ớ ều hơn 18 chữ ố s

Trang 25

Tiểu lu n môn ANMTT ậ

Nhóm 9 page 24 • Dữ liệu đầu vào là ký t ự đặc biệt

• Dữ u gliệ ồm vả chữ cái và ký t ự đặc biệt

B ng 2 2: Kả ết quả vào ra khi d u gữ liệ ồm chữ và các ký t c bi ự đặ ệt

File d ữ liệu có đuôi json:

Empty JSON file : file trống

File d ữ liệu có đuôi txt:

Empty text file _: file trống

File d ữ liệu có đuôi csv:

Empty CSV file _: file trống

2.3.Đánh giá độ an toàn

ph ụ thuộc vào vi c l a ch n các tham sệ ự ọ ố, kích thước của các khóa, và cách tri n khai c ể ụ

các cu c t n công s d ng thu t toán phân tích nguyên t Trong th c tộ ấ ử ụ ậ ố ự ế, kích thước p

L a ch n g (ph n t nguyên g c): Giá tr c a g phự ọ ầ ử ố ị ủ ải được ch n c n th n N u g ọ ẩ ậ ế

mã sẽ không còn an toàn

Chống l i các cu c t n công: M t mã ElGamal có thạ ộ ấ ậ ể chống l i nhi u lo i cuạ ề ạ ộc

Trang 26

Tiểu lu n môn ANMTT ậ

Nhóm 9 page 25 gian-thời gian (time-space trade-off) và cu c t n công l a chộ ấ ự ọn văn bản (chosen plaintext attack)

s c n tr ng và hi u biự ẩ ọ ể ết sâu rộng v cách tri n khai và qu n lý khóa ề ể ả2.4 Ưu nhược điểm c a h Elgamal ủệ

công khai để gửi tin nhắn cho người nhận

VD: Trong ứng d ng qu n lý h ụ ả ệ thống, một người qu n tr có th chia s khóa công khai ả ị ể ẻ

dùng khác có th mã hóa d u cho qu n tr b ng khóa công khai cể ữ liệ ả ị ằ ủa anh ta, đảm bảo tính riêng tư của dữ liệu trong quá trình truy n ề

vào b t k bên th ấ ỳ ứ ba nào Ngườ ửi và người g i nhận có th t o ra các khóa c a riêng h ể ạ ủ ọmà không cần đến một tổ chức trung gian

l p k t n i an toàn gi a máy tính cá nhân và máy ch t xa mà không c n sậ ế ố ữ ủ ừ ầ ự tin tưởng

tiếp và thi t l p k t n i an toàn ế ậ ế ố

d u ữ liệ

thể s d ng khóa bí m t cử ụ ậ ủa mình để ạ t o chữ ký điện t cho tài li u hoử ệ ặc email, đảm b o r ng tài li u không b ả ằ ệ ị thay đổi trong quá trình truyền và người nh n có th xác minh ậ ể

s h mố ệ ật mã khác như RSA Điều này có thể làm gi m hi u su t và t n nhi u th i gian ả ệ ấ ố ề ờ

Ngày đăng: 26/06/2024, 17:26

TỪ KHÓA LIÊN QUAN

w