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 2Tiể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 3Tiể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 4Tiểu lu n môn ANMTT ậ
Elliptic
Trang 5Tiể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 6Tiể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 7Tiể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 8Tiể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 9Tiể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 10Tiể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 11Tiểu lu n môn ANMTT ậ
k=input ('nhap k= '); p=input ('nhap p= ');
Trang 12Tiể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 13Tiể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 14Tiể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 15Tiể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 16Tiể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 17Tiể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 18Tiể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 19Tiể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 20Tiể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 21Tiể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 22Tiể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 23Tiể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 24Tiể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 25Tiể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 26Tiể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 ả ệ ấ ố ề ờ