Bài tập lớn cuối kì môn cấu trúc rời rạc rsa cryptosystem using modular arithmetic

32 3 0
Bài tập lớn cuối kì môn cấu trúc rời rạc rsa cryptosystem using modular arithmetic

Đ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

Hệ mật mã được xây dựng dựa trên tính khó giải của bài toán phân tích một số thành thừa số nguyên tố hay còn gọi là bài toán RSA.Ưu điểm:‐ Mã hóa hay thiết lập chữ kí điện tử với vai trò

Trang 1

BÀI TẬP LỚN CUỐI KÌ MÔN CẤU TRÚC RỜI RẠC

RSA CRYPTOSYSTEM USINGMODULAR ARITHMETIC

Người hướng dẫn: GV TRẦN LƯƠNG QUỐC ĐẠINgười thực hiện: NGUYỄN TRIỆU VI – 52100143

Lớp : 21050201Khoá : K25

THÀNH PHỐ HỒ CHÍ MINH, NĂM 2023

Trang 2

BÀI TẬP LỚN CUỐI KÌ MÔN CẤU TRÚC RỜI RẠC

RSA CRYPTOSYSTEM USINGMODULAR ARITHMETIC

Người hướng dẫn: GV TRẦN LƯƠNG QUỐC ĐẠINgười thực hiện: NGUYỄN TRIỆU VI – 52100143

Lớp : 21050201Khoá : K25

THÀNH PHỐ HỒ CHÍ MINH, NĂM 2023

Trang 3

LỜI CẢM ƠN

Trong học kì nay, Khoa đã giúp cho em tiếp cận với môn Cấu trúc rời rạc ứng dụng cho CNTT, em cảm thấy môn này khá hay và hữu ích cho sinh viên CNTT.

Em xin chân thành cảm ơn thầy Đại đã giảng dạy và hướng dẫn nhiệt tình để em có đủ kiến thức để có thể hoàn thành chuyên đề báo cáo cho môn “Cấu trúc rời rạc ứng dụng cho CNTT”.

Với kiến thức còn hạn chế của mình cũng như thời gian trải nghiệ cọn hạn chế nên bài không tránh khỏi thiếu sót Em rất mong nhận được sự chỉ bảo và đóng góp của thầy cô.

Một lần nữa em xin chân thành cảm ơn và lời tri ân sâu sắc nhất.

Trang 4

ĐỒ ÁN ĐƯỢC HOÀN THÀNHTẠI TRƯỜNG ĐẠI HỌC TÔN ĐỨC THẮNG

Tôi xin cam đoan đây là sản phẩm đồ án của riêng tôi / chúng tôi và được sự hướng dẫn của TS Trần Lương Quốc Đại; Các nội dung nghiên cứu, kết quả trong đề tài này là trung thực và chưa công bố dưới bất kỳ hình thức nào trước đây Những số liệu trong các bảng biểu phục vụ cho việc phân tích, nhận xét, đánh giá được chính tác giả thu thập từ các nguồn khác nhau có ghi rõ trong phần tài liệu tham khảo.

Ngoài ra, trong đồ án còn sử dụng một số nhận xét, đánh giá cũng như số liệu của các tác giả khác, cơ quan tổ chức khác đều có trích dẫn và chú thích nguồn gốc.

Nếu phát hiện có bất kỳ sự gian lận nào tôi xin hoàn toàn chịu trách nhiệmvề nội dung đồ án của mình Trường đại học Tôn Đức Thắng không liên quan đến

những vi phạm tác quyền, bản quyền do tôi gây ra trong quá trình thực hiện (nếu có).

TP Hồ Chí Minh, ngày tháng năm Tác giả

(ký tên và ghi rõ họ tên)Vi

Nguyễn Triệu Vi

Trang 5

PHẦN XÁC NHẬN VÀ ĐÁNH GIÁ CỦA GIẢNG VIÊN

Trang 6

TÓM TẮT

Trình bày tóm tắt vấn đề nghiên cứu, các hướng tiếp cận, cách giải quyết vấn đề và một số kết quả đạt được, những phát hiện cơ bản trong vòng 1 -2 trang.

Trang 7

MỤC LỤC

CHƯƠNG 1 – TÌM NGHỊCH ĐẢO MODULO 2

1.1 Lý thuyết về nghịch đảo modulo 2

1.1.1 Phép chia 2

1.1.2 Đồng dư Modulo 3

1.1.3 Giải thuật Euclid mở rộng 5

1.2 Tính nghịch đảo Modulo tìm UCLN 6

CHƯƠNG 2 – HỆ THỐNG MẬT MÃ RSA 12

2.1 Cơ sở toán học 12

2.2 Bài toán RSA 16

2.2.1 Thuật toán sinh khóa cho mã khóa công khai RSA 16

2.2.2 Thuật toán mã hóa RSA 19

2.2.2 Code về thuật toán mã hóa RSA 21

2.3 Hiệu quả và tính bảo mật RSA 24

2.4 Mối đe dọa 24

2.5 Khuyến nghị dành cho hệ thống RSA 25

Trang 8

CHƯƠNG 1 – TÌM NGHỊCH ĐẢO MODULO 1.1 Lý thuyết về nghịch đảo modulo

1.1.1 Phép chia

1.1.1.1 Phép chia số nguyên

Cho a là số nguyên và k là số nguyên dương Khi đó tồn tại số nguyên duy nhất q và r, với 0≤r k< , sao cho a=kq r+

1.1.1.2 Phép toán MOD, DIV

Trong phép chia số nguyên, gọi: n là số chia, a là số bị chia, q là thương số và r là số dư Mod và Div lần lượt là các ký hiệu phép toán được sử dụng biểu diễn thương số và phần dư: a÷n=q,amod n r=

Nếu số nguyên a chia hết cho số nguyên n thì amod n=0 Ví dụ: 15mod4=3 , 15÷4=3

115mod7=3 ,115÷7=6

Trong lập trình, ta có kí hiệu như sau: ‐ a mod n được viết là a%n ‐ a div n được viết là a/n

Hình 1.1.1.2.1 Minh họa phép toán mod và div trong lập trình

Trang 9

Hình 1.1.1.2.2 Minh họa phép toán mod và div ngoại lệ

Trang 10

Định nghĩa: Nếu a và b là số nguyên và m là số nguyên dương thì a dồng dư

với b theo modulo m nếu amod m=bmod m Ký hiệu a≡b(modm) để chỉ ra rằng a là đồng dư với b theo modulo m.

Định lý 1: Cho a và b là các số nguyên, và m là một số nguyên dương Khi đó

a≡b (modm ) khi và chỉ khi m∨(a−b), (hay gọi là m là ước của a−b).

Trang 11

Định lý 2: Cho a và b là các số nguyên, và m là một số nguyên dương Khi đó

a≡b (modm ) khi và chỉ khi tồn tại một số nguyên k sao cho a=b+km.

Định lý 3: Cho m là số nguyên dương Nếu a≡b (modm ) vàc≡ d (modm ) thì

a+c≡ b+d (modm) và ac≡bd (modm ).

1.1.3 Giải thuật Euclid mở rộng

Phương trình diophantine: ax+by c= (1)

Theo định lí Bézout (Bézout’s indentify): Cho hai số nguyên a, b khi đó luôn tồn tại hai số x, y sao cho: ax+by=GCD(a,b).

Nếu d=GCD(a,b) thì tồn tại các số nguyên x,y sao cho ax+by d=

Thuật toán Euclide mở rộng: a, b không đồng thời bằng 0.

Trang 12

Hình 1.1.3.1 Minh họa thuật toán Euclid mở rộng

1.2 Tính nghịch đảo Modulo tìm UCLN

Định nghĩa: Cho b là số nguyên và x, m là các số nguyên dương (x<m), nếu x*b mod

m đồng dư 1 thì x là nghịch đảo của b mod m, kí hiệu là b−1modm.

Trang 13

Vậy không có giá trị của 6−1mod10

Lưu ý: để tồn tại số nghich đảo của b (mod m) là b và m là hai số nguyên tố cùng

nhau

Ví dụ minh họa: Tìm các giá trị của 320−1mod1253

Thuật toán Euclidean tìm

Trang 14

Các bước của thuật toán Euclidean mở rộng luôn có dạng ri=1253 yi+230 xi

Ta có: ri=ri−2modri −1; qi=[ri−2

Trang 16

Hình 1.1.4.2 Minh họa nghịch đảo modulo dùng thuật toán Euclideantrường hợp không tìm ra giá trị.

Trang 17

Hình 1.1.4.3 Minh họa nghịch đảo modulo dùng thuật toán Euclidean

Trang 18

CHƯƠNG 2 – HỆ THỐNG MẬT MÃ RSA

Thuật toán RSA (Rivest- Shamir- Adleman) được phát triển năm 1977 và công bố vào 1978 RSA là một hệ mật mã khối, trong đó bản gốc và bản mã là số nguyên thuộc đoạn (0, n-1) với n < 21024.

RSA là một hệ mã hóa bất đối xứng và đucợ sử dụng rộng rãi trong công tác mã hóa và công nghệ chữ kí điện tử Trong hệ mã hóa này, public key có thể chia sẻ công khai cho tất cả mọi người.

Hoạt động của RSA dựa trên 4 bước chính: sinh khóa, chia sẻ key, mã hóa và giải mã Hệ mật mã được xây dựng dựa trên tính khó giải của bài toán phân tích một số thành thừa số nguyên tố hay còn gọi là bài toán RSA.

Ưu điểm:

‐ Mã hóa hay thiết lập chữ kí điện tử với vai trò mã hóa công khai.

‐ Mã hóa dữ liệu muốn gửi đi nhưng giải mã cần có sự hỗ trợ của khóa bí mật ‐ RSA chứa hai khóa: công khai và bí mật đảm nhận nhiệm vụ bất đối xứng là mã

hóa và giải mã.

‐ Khóa bí mật của RSA không truyền được tin ra bên ngoài kể cả bị tấn công Nhược điểm: Gây bất lợi cho người nhận thông khi không biết cách giải mã để xem được thông tin bên trong.

2.1 Cơ sở toán họcThuật toán lũy thừa:

 Là thuật toán tính nhanh lũy thừa tự nhiên của một số thực hoặc một số nguyên trong trường hợp số nguyên có thể rút gọn theo một modun nào

Trang 20

Số nguyên tố: là một số nguyên dương lớn hơn 1 và chỉ có 2 ước số dương là 1

và chính nó Các số khác gọi là số hợp số

Ví dụ, các số nguyên tố đầu tiên là: 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31,

Hình 2.1.2 Minh họa kiểm tra số nguyên tố

Thuật toán modular: là phép tính toán thực hiện trên một tập hợp các số

nguyên gọi là mô đun Phép tính modular của một số nguyên a với một số nguyên dương n được định nghĩa là phần dư của a chia hết cho n.

Ví dụ: 17 mod 2 =1, vì 17 chia cho 2 dư 1.

Thuật toán Euclid mở rộng (Extended Euclidean Algorithm): là một thuật

toán trong đại số tuyến tính để tìm ra giá trị của hai số nguyên a, b sao cho tồn tại các số nguyên không âm x, y sao cho hàm tuyến tính ax + by = gcd(a, b) được thỏa mãn GCD là tên viết tắt của Greatest Common Divisor (Ước chung lớn nhất) của hai số nguyên a, b.

Ví dụ: gcd(15,20) = 5 và tồn tại x=-1 và y=1 sao cho 15x+20y=gcd(15,20).

Trang 21

Sử dụng thuật toán Euclid mở rộng, có thể tìm ra các giá trị để thõa phương trình tuyến tính.

Hình 2.1.3 Minh họa thuật toán Euclid mở rộng

Phân tích thừa số nguyên tố (Prime Factorization hay Factorization): là quá

trình tìm tất cả các thừa số nguyên tố của một số nguyên dương Quá trình này có thể được thực hiện bằng nhiều phương pháp khác nhau như kiểm tra từng số nguyên dương liên tiếp để xác định các thừa số hoặc sử dụng algortihm Pollard-Rho.

Ví dụ: phân tích thừa số nguyên của 100, ta được kết quả là 100=2*2*5*5 Vậy thừa số nguyên tố của 100 là 2, 2, 5, 5.

Trang 22

Hình 2.1.4 Minh họa phân tích thừa số nguyên tố

2.2 Bài toán RSA

Với mọi x,y∈ Zn

Các giá trị n, e được công khai, các giá trị p, q, d được giữ kín.

2.2.1 Thuật toán sinh khóa cho mã khóa công khai RSA

Các bước thực hiện sinh khóa:

1 Sinh hai số nguyên tố lớn p và q có giá trị xấp xỉ nhau.

Trang 23

Cần chọn p và q sao cho y <2i-1<n<2i, với i=1024 thì n là một số nguyên dài khoảng 309 chữ số.

2 Tính n=p*q, và φ(n )=( p−1)∗( q−1)

3 Cho một số ngẫu nhiên e, 1<e <φ(n), sao cho gcd(e,φ (n 0))=1 4 Sử dụng thuật toán Euclide để tính số d, 1<d <φ (n) sao cho

Giải phương trình d * 17 ≡ 1 (mod 616).

Ta dùng thuật toán Euclid mở rộng để tìm nghịch đảo modular của 17

Trang 25

2.2.2 Thuật toán mã hóa RSA

Trang 26

Sử dụng khóa bí mật d để giải mã: x=y mod ne

Hình 2.2.2.1 Minh họa thuật toán mã hóa RSA

Trang 27

2.2.2 Code về thuật toán mã hóa RSA

fromcryptography.hazmat.primitives.asymmetricimportrsa padding,fromcryptography.hazmat.primitivesimportserialization hashes,

# Trích xuất khóa công khai

public_key = private_key.public_key public_bytes()(

defencrypt(msg public_key,):

public_key = serialization.load_pem_public_key public_key()

Trang 28

private_key = serialization.load_pem_private_key private_key passwo(,

private_key public_key = generate_key,()print("Khóa công khai: ",public_key.decode())print("Khóa bí mật: ",private_key.decode())

msg ="hello world"

encrypted_msg = encrypt msg public_key(,)print("Tin nhắn được mã hóa: ",encrypted_msg)

decrypted_msg = decrypt encrypted_msg private_key(,)print("Tin nhắn được giải mã: ",decrypted_msg)

Kết quả về đoạn mã trên:

Khóa công khai: -BEGIN PUBLIC

-END PUBLIC

KEY -Khóa bí mật: -BEGIN PRIVATE

Trang 29

-END PRIVATE KEY -Tin nhắn được mã hóa:

Trang 30

2.3 Hiệu quả và tính bảo mật RSA

RSA là một trong những thuật toán mã hóa khóa công khai được sử dụng phổ biến nhất hiện nay Thuật toán RSA có hiệu quả khi áp dụng với các số nguyên p và q có độ dài bằng nhau và khoảng 2048 bit, khi đó việc mã hóa và giải mã có thể được thực hiện một cách nhanh chóng và đáng tin cậy.

Tuy nhiên, RSA có một vài vấn đề liên quan đến tính bảo mật Đầu tiên, việc chọn p và q cần được thực hiện cẩn thận và ngẫu nhiên, vì nếu một trong hai giá trị này được dự đoán hoặc tính toán được, thì sẽ dễ dàng phá được thuật toán Ngoài ra, nếu không được lưu trữ và sử dụng đúng cách, khóa bí mật có thể bị lộ ra ngoài và dẫn đến việc mã hóa bị phá Các tấn công khác bao gồm các tấn công brute-force hoặc tấn công dựa trên các khả năng số học để phân tích các thừa số của n.

2.4 Mối đe dọa

Một trong những mối đe dọa lớn nhất là tấn công tìm ẩn bằng cách phân tích tổng quát trên phương trình: c = m mod ne

Trong đó:

 m là thông điệp cần mã hóa

 e và n là khóa công khai của hệ thống mã hóa RSA  c là thông điệp đã được mã hóa

Mục đích của tấn công này là tìm ra bộ ba (n, e, d), trong đó d là khóa bí mật được tính dựa trên p và q - hai thừa số nguyên tố của n.

Tuy nhiên, để tìm ra giá trị d đòi hỏi một lượng tính toán và tài nguyên lớn, do đó tấn công tìm ẩn là khá khó khăn và không thực tế, đặc biệt khi giá trị của p và q rất lớn và được chọn ngẫu nhiên.

Một hạn chế của hệ thống mật mã RSA đó là kích thước của khóa phải đủ lớn để đảm bảo tính bảo mật của mã hóa Vì nếu kích thước của khóa quá nhỏ, tấn công brute-force sẽ trở nên dễ dàng Tuy nhiên, kích thước khóa lại đòi hỏi tài nguyên to lớn để tính toán và lưu trữ, do đó cần cân nhắc tìm một sự cân bằng hợp lý giữa cả tính bảo mật và hiệu quả của hệ thống mã hóa RSA.

Ngoài ra, RSA cũng không thể bảo vệ được các vấn đề liên quan đến việc lưu trữ và

quản lý khóa, đặc biệt là khi khóa bị đánh cắp hoặc mất mát

Trang 31

2.5 Khuyến nghị dành cho hệ thống RSA

‐ Sử dụng khóa đủ lớn: Việc sử dụng khóa đủ lớn có độ dài trung bình khoảng 2048 bit sẽ đảm bảo tính bảo mật của hệ thống mã hóa RSA.

‐ Đảm bảo bảo mật của khóa bí mật: Việc lưu trữ và quản lý khóa bí mật là rất quan trọng Do đó, cần đảm bảo tính bảo mật của khóa bí mật bằng cách lưu trữ và quản lý khóa một cách an toàn và đáng tin cậy.

‐ Sử dụng cấu trúc khóa mới: Việc sử dụng các cấu trúc khóa mới hoặc các thuật toán mã hóa khác sẽ giúp tăng tính bảo mật và tránh các vấn đề liên quan đến RSA.

‐ Sử dụng mật mã RSA kết hợp với các phương thức mã hóa và bảo mật khác ‐ Kiểm tra bảo mật thường xuyên: Các tổ chức, doanh nghiệp và cá nhân nên

thường xuyên kiểm tra bảo mật cho hệ thống mã hóa RSA của mình.

Trang 32

TÀI LIỆU THAM KHẢO

‐ Thuật toán Euclid mở rộng – Extended euclid algorithm – Lập trình thi đấu (wordpress.com)

‐ Số học đồng dư (Phần 1): Đồng dư thức và Nghịch đảo modulo (viblo.asia)

‐ Giải mã thuật toán RSA (ichi.pro)

Ngày đăng: 14/04/2024, 23:23

Tài liệu cùng người dùng

Tài liệu liên quan