1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Báo cáo bài tập lớn môn cơ sở an toàn thông tin Đề tài tìm hiểu về giải thuật tạo chữ ký số sử dụng rsa

20 0 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

Thông tin cơ bản

Tiêu đề Tìm hiểu về giải thuật tạo chữ ký số sử dụng RSA
Tác giả Nguyễn Văn Linh, Phạm Như Linh, Trịnh Diệu Linh, Vũ Ngọc Linh
Người hướng dẫn PGS.TS. Hoàng Xuân Dậu
Trường học Học Viện Công Nghệ Bưu Chính Viễn Thông
Chuyên ngành Cơ Sở An Toàn Thông Tin
Thể loại Báo cáo bài tập lớn
Năm xuất bản 2024
Thành phố Hà Nội
Định dạng
Số trang 20
Dung lượng 276,16 KB

Nội dung

Một trong những ứng dụng của an toàn thông tin là chữ ký số, với đặc điểm là đơn giản cho người sử dụng mà vẫn đảm bảo được tính bảo mật.. RSA hiện là một trong các giải thuật mã hóa khó

Trang 1

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

KHOA CÔNG NGHỆ THÔNG TIN 1

BÁO CÁO BÀI TẬP LỚN Môn : CƠ SỞ AN TOÀN THÔNG TIN

Đề tài: Tìm hiểu về giải thuật tạo chữ ký số sử dụng RSA

Giảng viên hướng dẫn

Lớp

Nhóm

Danh sách sinh viên

Hoàng Xuân Dậu E22CQCN02-B 02

Mã sinh viên

1 Nguyễn Văn Linh

2 Phạm Như Linh

3 Trịnh Diệu Linh

4 Vũ Ngọc Linh

B22DCVT307 B22DCDT178 B22DCVT310 B22DCDT179

Trang 2

HÀ NỘI - 2024

Trang 3

LỜI NÓI ĐẦU

Ngày nay trong mọi hoạt động của con người thông tin đóng một vai trò quan trọng không thể thiếu Xã hội càng phát triển nhu cầu trao đổi thông tin giữa các thành phần trong xã hội ngày càng lớn Mạng máy tính ra đời đã mang lại cho con người rất nhiều lợi ích trong việc trao đổi và xử lý thông tin một cách nhanh chóng và chính xác Chính từ những thuận lợi này đã đặt ra cho chúng ta một câu hỏi, liệu thông tin đi từ nơi gửi đến nơi nhận có đảm bảo an toàn tuyệt đối, ai có thể đảm bảo thông tin của ta không

bị truy cập bất hợp pháp Đặc biệt khi các phương thức tấn công qua mạng ngày càng tinh

vi, phức tạp có thể dẫn đến mất mát thông tin, thậm chí sụp đổ hoàn toàn hệ thống thông tin tổ chức Vì vậy an toàn thông tin là nhiệm vụ quan trọng, nặng nề và khó đoán trước đối với các hệ thống thông tin

Một trong những ứng dụng của an toàn thông tin là chữ ký số, với đặc điểm là đơn giản cho người sử dụng mà vẫn đảm bảo được tính bảo mật Kỹ thuật sử dụng chữ ký số được sử dụng phổ biến, đa dạng trong hầu hết các lĩnh vực, nhất là Tài chính, Ngân hàng,

Kế toán,…

Hiện nay, Bộ Thông tin và Truyền thông, Bộ Công thương, Bộ Tài chính và Ngân hàng Nhà nước Việt Nam đã được Chính phủ cho phép triển khai chữ ký số và xác thực thanh toán điện tử từ năm 2006 Hiện nay, Hàn Quốc cũng đang giúp ta triển khai hạ tầng

cơ sở khóa công khai PKI trong Chính phủ điện tử

Để có thể ứng dụng các phương pháp trên vào thực tiễn, chúng em đã tìm hiểu về

đề tài “Tìm hiểu về giải thuật tạo chữ ký số RSA”.

Do khả năng còn hạn chế, nên mặc dù chúng em đã cố gắng nhằm hoàn thành tốt nhiệm vụ của mình nhưng vẫn không thể tránh khỏi những thiếu sót Nhóm em mong nhận được những lời nhận xét quý giá từ thầy để có thể tiếp tục hoàn thiện hơn nữa Cuối cùng, nhóm xin được gửi lời cảm ơn đến thầy PGS.TS Hoàng Xuân Dậu đã hướng dẫn nhóm trong suốt quá trình hoàn thành tiểu luận

Chúng em xin chân thành cảm ơn thầy!

Trang 4

MỤC LỤC

1 GIỚI THIỆU 4

1.1.Khái niệm 4

1.2 Giải thuật mã hóa RSA 4

1.3 Chữ ký số mã hóa RSA 5

1.4 Hàm băm (Hash function) 5

2 NỘI DUNG 6

2.1 Kiến trúc 6

2.1.1 Quá trình ký (bên gửi) 6

2.1.2 Quá trình kiểm tra chữ ký (bên nhận) 7

2.2 Giải thuật mã hóa RSA 8

2.3 Cài đặt thử nghiệm tạo và kiểm tra chữ ký số để đảm bảo toàn vẹn dữ liệu 9

2.3.1 Sử dụng python3 để cài đặt chương trình tạo và kiểm tra chữ ký số 9

2.3.2 Nhận xét 13

2.4 Ưu điểm của giải thuật tạo chữ ký số RSA 13

2.4.1 Tính bảo mật cao 13

2.4.2 Hỗ trợ rộng rãi trong các hệ thống và tiêu chuẩn 13

2.4.3 Chữ ký số không phụ thuộc vào dữ liệu gốc 13

2.5 Điểm yếu của giải thuật tạo chữ ký số RSA 14

2.6 Các dạng tấn công 15

2.6.1 Tìm cách xác định khóa bí mật 15

2.6.2 Giả mạo chữ ký 16

2.6.3 Tấn công người dùng 16

2.7 Ứng dụng 17

3 KẾT LUẬN 17

4 TÀI LIỆU THAM KHẢO 18

Trang 5

1 GIỚI THIỆU

1.1.Khái niệm

Chữ ký số (Digital Signature) là những thông tin đi kèm với dữ liệu nhằm chứng thực

nguồn gốc và nội dung của văn bản Chữ ký số được dựa trên cơ sở lý thuyết hệ mã hóa công khai, còn gọi là mã hóa bất đối xứng được tạo ra để giải quyết câu hỏi: “Làm thế nào

để định nghĩa một chữ ký cho các văn bản số, với các tính chất tương tự như chữ ký viết tay?”

Mã hóa công khai hay còn gọi là mã hóa bất đối xứng: Sử dụng 2 khóa có quan hệ toán

học với nhau, khóa công khai dùng để mã hóa, được công bố rộng rãi Khóa còn lại là khóa bí mật dùng để giải mã, được giữ bí mật Cơ sở toán học của hệ mã hóa bất đối xứng

là dùng những hàm một chiều, tức là những hàm để tính theo chiều thuận thì dễ còn chiều ngược lại thì không khả thi với máy tính hiện tại

Chữ ký số bao gồm 3 thành phần:

1 Thuật toán tạo ra khóa

2 Hàm tạo chữ ký là hàm tính toán chữ ký trên cơ sở khóa mật và dữ liệu cần ký

3 Hàm kiểm tra chữ ký là hàm kiểm tra xem chữ ký đã cho có đúng với khóa công cộng không (Khóa này mọi người có quyền truy cập nên mọi người đều có thể kiểm tra được chữ ký)

Giải thuật tạo ra chữ ký số (Digital Signature generation algorithm) là một phương

pháp sinh chữ ký số

Giải thuật kiểm tra chữ ký số (Digital Signature verification algorithm) là một phương

pháp xác minh tính xác thực của chữ ký số, có nghĩa là nó thực sự được tạo ra bởi 1 bên chỉ định

Một hệ chữ ký số (Digital Signature Scheme) bao gồm giải thuật tạo chữ số và giải

thuật kiểm tra chữ ký số

Quá trình tạo chữ ký số (Digital Signature signing process) bao gồm:

 Giải thuật tạo chữ ký số

 Phương pháp chuyển dữ liệu thông điệp thành dạng có thể ký được

Quá trình kiểm tra chữ ký số (Digital signature verification process) bao gồm:

 Giải thuật kiểm tra chữ ký số

 Phương pháp khôi phục dữ liệu từ thông điệp

1.2 Giải thuật mã hóa RSA

Giải thuật mã hóa RSA là một hệ mã hóa bất đối xứng được 3 nhà khoa học người Mỹ

là R.Rivest, A.Shamir và L.Adleman phát minh năm 1977 và tên giải thuật RSA được đặt theo chữ cái đầu của tên 3 đồng tác giả Độ an toàn của RSA dựa trên tính khó của việc phân tích số nguyên rất lớn, với độ lớn cỡ hàng trăm chữ số thập phân RSA sử dụng một cặp khóa, trong đó khóa công khai dùng để mã hóa và khóa riêng dùng để giải mã Chỉ khóa riêng RSA cần giữ bí mật, còn khóa công khai có thể công bố rộng rãi

Trang 6

Hiện nay, các khóa RSA có kích thước nhỏ hơn 1024 bit được coi là không an toàn do tốc độ các hệ thống máy tính tăng nhanh Để đảm bảo an toàn, khuyến nghị sử dụng khóa

2048 bit trong giai đoạn 2010-2020 Trong tương lai, cần sử dụng khóa RSA lớn hơn, chẳng hạn 3072 bit

RSA hiện là một trong các giải thuật mã hóa khóa bất đối xứng được sử dụng rộng rãi nhất trên thực tế: RSA có thể được sử dụng để mã hóa thông điệp, để tạo và kiểm tra chữ

ký số Hoạt động của RSA dựa trên 4 bước chính: sinh khóa, chia sẻ khóa, mã hóa và giải mã

1.3 Chữ ký số mã hóa RSA

Chữ ký số mã hóa RSA là loại chữ ký số sử dụng hệ mã hóa RSA để tăng độ an toàn

và bảo mật cho thông điệp dữ liệu

RSA đóng vai trò quan trọng trong việc tạo ra chữ ký số bằng cách sử dụng cặp khóa không đối xứng: khóa công khai và khóa bí mật Quy trình tạo chữ ký số với thuật toán RSA diễn ra như sau: 

 Người gửi phải sở hữu cặp khóa công khai (Public key) và khóa bí mật (Private key) Khóa công khai được công khai tới người nhận

 Người gửi sử dụng khóa bí mật để tạo chữ ký số cho thông điệp (bản chất là sử dụng khóa bí mật để mã hóa chuỗi đại diện cho thông điệp)

 Người nhận sử dụng khóa công khai của người gửi để kiểm tra chữ ký số của thông điệp (bản chất là sử dụng khóa công khai để giải mã khôi phục chuỗi đại diện cho thông điệp)

1.4 Hàm băm (Hash function)

Hàm băm là hàm toán học chuyển đổi thông điệp (message) có độ dài bất kỳ (hữu hạn)

thành một dãy bit có độ dài cố định (tùy thuộc vào thuật toán băm) Dãy bit này được gọi

là thông điệp rút gọn (message digest) hay giá trị băm (hash value), đại diện cho thông điệp ban đầu

Ví dụ hàm băm SHA-256 (Thuật toán băm an toàn 256-bit) là hàm băm được sử dụng rộng rãi, tạo ra giá trị băm 256-bit Nó là một phần của họ hàm băm SHA-2 và được biết đến với các đặc tính bảo mật mạnh mẽ, bao gồm khả năng chống tiền ảnh, khả năng chống tiền ảnh thứ hai và khả năng chống va chạm SHA-256 thường được sử dụng trong các thuật toán chữ ký số như RSA, DSA và ECDSA

Để tạo chữ ký, người gửi sẽ dùng khóa riêng và người nhận sẽ dùng khóa công khai để xác thực chữ ký đó Tuy nhiên, vì bản tin rất dài nên việc mã hóa toàn bộ bản tin sẽ rất mất thời gian Vì vậy, trong thực hành, chữ ký số thường sử dụng phương pháp mã hóa giá trị băm của bản tin Việc này mang lại rất nhiều lợi ích như:

 Các hàm băm là hàm 1 chiều, vì vậy dù có được giá trị băm cũng không thể biết được bản tin gốc như thế nào

 Độ dài giá trị băm là cố định và thường rất nhỏ, vì vậy sẽ không chiếm quá nhiều dung lượng

 Giá trị băm còn có thể dùng để kiểm tra lại bản tin nhận được có nguyên vẹn hay không?

Trang 7

2 NỘI DUNG

2.1 Kiến trúc

2.1.1 Quá trình ký (bên gửi)

2.1.1.1 Chuẩn bị thông điệp:

 Người ký chuẩn bị một thông điệp (gọi là m) mà họ muốn ký Thông điệp này có thể là bất kỳ chuỗi dữ liệu nào (ví dụ: tài liệu văn bản, hợp đồng, thông điệp điện tử)

2.1.1.2 Tạo hàm băm của thông điệp:

 Trước khi ký, thông điệp cần được băm bằng một hàm băm mật mã (ví dụ như SHA-256) Điều này tạo ra một giá trị băm của thông điệp (gọi là H(m)

 Giá trị băm là một chuỗi có độ dài cố định, đại diện duy nhất cho nội dung thông điệp mmm Việc sử dụng hàm băm giúp đảm bảo tính toàn vẹn của thông điệp và giảm kích thước thông điệp cần ký

2.1.1.3 Mã hóa giá trị băm bằng khóa riêng:

 Người ký sử dụng khóa riêng RSA của mình để mã hóa giá trị băm H(m)

Cụ thể, họ sẽ tính S=H(m)d mod  n trong đó:

 S là chữ ký số

 d là khóa riêng của người ký

 n là mô-đun công khai (nằm trong cặp khóa công khai và khóa riêng của RSA)

 Kết quả của phép mã hóa này là một chuỗi gọi là chữ ký số S Chữ ký này được gửi cùng với thông điệp m đến bên nhận

2.1.1.4 Gửi thông điệp và chữ ký:

 Người ký gửi thông điệp m và chữ ký số S cho người nhận Bên nhận cần phải kiểm tra tính xác thực và toàn vẹn của thông điệp thông qua chữ ký số này

Trang 8

2.1.2 Quá trình kiểm tra chữ ký (bên nhận)

2.1.2.1 Nhận thông điệp và chữ ký số

 Người nhận nhận được cả thông điệp gốc và chữ ký số từ người gửi Thông điệp này là nội dung mà người gửi muốn gửi đi, và chữ ký số là kết quả của việc mã hóa giá trị băm của thông điệp bằng khóa riêng của người gửi

2.1.2.2 Tạo giá trị băm từ thông điệp nhận được

 Người nhận sẽ sử dụng cùng một hàm băm (hash function) mà người gửi

đã sử dụng để tính toán giá trị băm của thông điệp gốc nhận được Kết quả là một giá trị băm (gọi là H′(m))

 H′(m) = Hàm băm(thông điệp)

2.1.2.3 Giải mã chữ ký số bằng khóa công khai của người gửi

 Chữ ký số đã được người gửi mã hóa bằng khóa bí mật, vì vậy người nhận sẽ sử dụng khóa công khai của người gửi để giải mã chữ ký số S

 Giải mã S sẽ cho ra giá trị băm H(m) mà người gửi đã tạo khi ký thông điệp

 Phép giải mã: H(m)=Dpublic key(S) trong đó:

 Dpublickey là phép giải mã sử dựng khoá công khai của người gửi

 S là chữ kí số nhận được

Trang 9

2.1.2.4 So sánh giá trị băm

 Sau khi giải mã chữ ký số, người nhận so sánh giá trị băm H(m) vừa giải

mã với giá trị băm H′(m) mà họ đã tính toán từ thông điệp nhận được

 Nếu hai giá trị băm này trùng khớp, điều đó có nghĩa là:

 Thông điệp không bị thay đổi trong quá trình truyền tải

 Chữ ký số thực sự được tạo ra bởi người gửi (người có khóa riêng tương ứng với khóa công khai mà người nhận sử dụng)

 Nếu hai giá trị băm không trùng khớp, thông điệp có thể đã bị thay đổi hoặc chữ ký số không hợp lệ

2.2 Giải thuật mã hóa RSA

Hoạt động của RSA dựa trên 3 bước chính: sinh khóa, mã hóa và giải mã

Bước 1: Sinh khoá

1 Chọn hai số nguyên tố lớn p và q

2 Tính n = p*q ( n sẽ được dùng làm module trong cả khoá công khai và khoá bí mật,

n có độ dài bit bằng tổng độ dài bit của p và q)

3 Tính hàm Euler ϕ(n) = (p-1)*(q-1) ( Hàm Euler đại diện cho số lượng các số nhỏ hơn n mà nguyên tố cùng nhau với n )

4 Tính giá trị d, là nghịch đảo của e modulo ϕ(n), sao cho d*e=1 mod ϕ(n).d là thành phần của khoá bí mật

 Khoá công khai (n, e)

 Khoá bí mật (n, d)

Bước 2: Mã hoá

Trang 10

Để mã hoá thông điệp M (thường là một số nguyên hoặc chuỗi dữ liệu đã được chuyển đổi thành số nguyên bằng khoá công khai (n, e))

1 Chuyển đổi thông điệp thành một số nguyên M sao cho 0 ≤ M ≤ n

2 Tính bản mã C= Me mod n

Bản mã C là kết quả của phép toán luỹ thừa mô-đun và sẽ được gửi đến người nhận

Bước 3: Giải mã

Để giải mã bản mã C và khôi phục thông điệp M, người nhận sử dụng khoá riêng tư (n,d) bằng công thức : M= Cd mod n (M là thông điệp ban đầu được gửi)

Ví dụ:

Bước 1: Sinh khoá

 Chọn hai số nguyên tố p=3 và q=7

 Tính n = p*q = 3*7 = 21

 Tính ϕ(n) = (p-1) *(q-1) = 2*6 = 12

 Chọn số e sao cho 0 < e < 12 và e, n, ϕ(n) là các số nguyên tố cùng nhau => e = 5

 Tìm d sao cho d*e = 1 mod ϕ(n) => d*5 = 1 mod 12 => d=17 (d=5 không được vì trùng với e)

 Ta có: khóa công khai là (21,5) và khóa riêng là (21,17)

Bước 2: Mã hoá

 Giả sử muốn gửi mã M=2

 Tính bản mã C= Me mod n = 25 mod 21=11

 Gửi bản mã C=11 cho người nhận

Bước 3: Giải mã

 Với bản mã C=11 ta có M= Cd mod n= 1117 mod 21=2

 Vậy bản rõ M=2

2.3 Cài đặt thử nghiệm tạo và kiểm tra chữ ký số để đảm bảo toàn vẹn dữ liệu

2.3.1 Sử dụng python3 để cài đặt chương trình tạo và kiểm tra chữ ký số.

2.3.1.1 Cài đặt thư viện PyCryptodome

Thư viện PyCryptodome được sử dụng để thực hiện các thao tác liên quan

đến mã hóa và bảo mật dữ liệu

pip install pycryptodome

2.3.1.2 Tạo khóa

Sử dụng thư viện PyCryptodome để tạo một cặp khóa RSA 1024 bit, cặp

khóa này được tạo ngẫu nhiên

Khóa riêng tư sẽ được lưu vào file private.key

Khóa công khai sẽ được lưu vào file public.key

Trang 11

from Crypto.PublicKey import RSA

# Tạo ra khóa RSA 1024 bit

key = RSA.generate( 1024 )

# Viế t khóa riếng tư vào file

private_key = key.export_key()

file_out = open("private.key", "wb")

file_out.write(private_key)

file_out.close()

print(private_key)

print()

# Viế t khóa công khai vào file

public_key = key.publickey().export_key()

file_out = open("public.key", "wb")

file_out.write(public_key)

file_out.close()

print(public_key)

print()

Output:

b' -BEGIN RSA PRIVATE KEY -\

nMIICXAIBAAKBgQCqaH/NR4ftKVyB+3mkZZNu5IL36pBYVNVtnQDAsa9r+KrUcjG7\

nO2ttTiDMMA/UH3WnZmqhvuJuqnBTRBRviz9CXqdZ2Awf7jFswdgIpQZ3b82UDCUw\

nAsJmY2I8uHKKGSkxYc0Nm8u6kTqIG0+QKoHspEzYxZS1gW98nYUov7wN9QIDAQAB\

nAoGABpLBW0nHFH7j8p+gsZa5eS2XX7jMmJutH+1OeiBgg+mzrT46bN595ll9KmMw\

nOR59i1eIBXU3hs1MR+n4X9UfO3/2wmcXfwHH9jbxiJ59x3qtULP83i/gCzMEheBE\

nIit41TMh7GzIt36a7P9+Hmapat5IE9P4sfjyNM+fg//SzoECQQC7yQg84/m6mPOV\

njr3DFC4IY81IGcjnNc7SQB4uy9ofv9JoIJhjJGHb94scGSwraT4k7C+moWKg9xFa\

noNamWbADAkEA6E9/MNaE22Vvj/UVaWZXIUG86Y5sTFYAksgaz+27WyIDB4jbbZnz\

ngsnqHn3lIfNCx/2cjxmbnzyyXf9/iH4UpwJBALJo8CuxyRzwnlSUdlP2QznzYCDF\

nZqvM4n+9LS/2u3j4rXYCqeVftp3fVUpP3DguWD2KLEebAvK9ab56GxWXFnMCQHqw\

noYf1g60rYUQyN+C2gAW8Zj0jTubx9NOQgziVYYG78MWl7d1wlT7ZzJ/V9ZF8nCRr\

nOKgK6jmrILisG3rGu7kCQEmpyeZjY8U9lwik/M3W1sF/0vBLB5KNNTbSscUJFNr+\

nFH+OfX4/KaB/vjweVqWvSlHUavuj4wAB231cHn0v8eM=

\n -END RSA PRIVATE KEY -'

b' -BEGIN PUBLIC KEY -\

nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCqaH/NR4ftKVyB+3mkZZNu5IL3\

n6pBYVNVtnQDAsa9r+KrUcjG7O2ttTiDMMA/UH3WnZmqhvuJuqnBTRBRviz9CXqdZ\

n2Awf7jFswdgIpQZ3b82UDCUwAsJmY2I8uHKKGSkxYc0Nm8u6kTqIG0+QKoHspEzY\

nxZS1gW98nYUov7wN9QIDAQAB

\n -END PUBLIC KEY -'

2.3.1.3 Quá trình ký

Nhập thông điệp cần được gửi đi message dưới dạng byte string vì các thuật toán mã hóa như RSA hoặc hàm băm làm việc với byte string thay vì xâu ký

tự thông thường

from Crypto.Signature import pkcs1_15

from Crypto.Hash import SHA256

from Crypto.PublicKey import RSA

# Tạo thông điệp

message = b'Cong hoa Xa hoi Chu nghia Viet Nam'

print(message)

Ngày đăng: 02/10/2024, 16:19

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w