HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG KHOA CÔNG NGHỆ THÔNG TIN BÁO CÁO TIỂU LUẬN MÔN HỌC 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 Lớp CSATTT01 – NHÓM 05 Vũ Nhậ[.]
Trang 1HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
KHOA CÔNG NGHỆ THÔNG TIN
BÁO CÁO TIỂU LUẬN MÔN HỌC: 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
Lớp: CSATTT01 – NHÓM 05:
Vũ Nhật Minh Đức – B20DCAT050 Nguyễn Xuân Giang – B20DCAT051 Đặng Xuân Hải – B20DCAT052
Vũ Trung Hiếu – B20DCAT064 Nguyễn Huy Hoàng – B20DCAT070
Đỗ Ngọc Huế – B20DCAT073
Giảng viên hướng dẫn: Hoàng Xuân Dậu
Hà Nội – 2022
Trang 2Mục Lục
I GIỚI THIỆU 2
II KIẾN TRÚC 2
1 Kiến trúc chữ ký số tổng quát 2
1.1 Quá trình ký quá trình gửi 3
2 Kiến trúc chữ ký số sử dụng RSA 3
2.1 Tạo chữ ký: 4
2.2 Kiểm tra chữ ký: 5
III GIẢI THUẬT RSA 6
1 Giải thuật RSA được dùng trong việc tạo khóa, mã hóa, giải mã 6
2 Tạo khóa: 7
3 Mã hóa và giải mã 9
4 Cài đặt giải thuật RSA trong ngôn ngữ Java 10
IV ĐIỂM YẾU CỦA CHỮ KÝ SỐ SỬ SỤNG GIẢI THUẬT RSA 11
1 Tốc độ của thuật toán RSA: 11
2 Phân phối khóa: 12
3 Chi phí: 12
4 Hiệu suất của thuật toán: 12
V CÁC DẠNG TẤN CÔNG 12
1 Phân phối khóa 12
2 Tấn công dựa trên thời gian 12
3 Tấn công bằng phương pháp lựa chọn thích nghi bản mã 13
VI ỨNG DỤNG CỦA HỆ THỐNG MÃ HÓA RSA 13
VII CÀI ĐẶT VÀ THỬ NGHIỆM 14
VIII KẾT LUẬN 14
Tài liệu tham khảo: 15
Trang 3I GIỚI THIỆU
Một số khái niệm:
Một hệ chữ ký số (Digital Signature Scheme) bao gồm giải thuật tạo chữ ký số và
giải thuật kiểm tra chữ ký số
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
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
Hàm băm (Hash Funtion) 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 bít có độ dài cố định (tùy thuộc vào thuật toán băm) Dãy bít này được gọi là thông điệp rút gọn (message disgest) hay giá trị băm (hash value), đại diện cho thông điệp ban đầu
Trong đó, Hàm băm SHA-1: Thuật toán SHA-1 nhận thông điệp ở đầu vào có chiều dài k<264 bit, thực hiện xử lý và đưa ra thông điệp thu gọn (message digest) có chiều dài cố định 160 bits Quá trình tính toán cũng thực hiện theo từng khối 512bits, nhưng
bộ đệm xử lý dùng 5 thanh ghi 32-bits Thuật toán này chạy tốt với các bộ vi xử lý
có cấu trúc 32 bits
1 Kiến trúc chữ ký số tổng quát:
Trang 41.1 Quá trình ký – quá trình gửi:
1.1.1 Các bước của quá trình ký một thông điệp (bên người gửi):
Tính toán chuỗi đại diện (message digest/hash value) của thông điệp sử dụng một giải thuật băm (Hashing algorithm)
Chuỗi đại diện được ký sử dụng khóa riêng (Private key) của người gửi và một giải thuật tạo chữ ký (Signature/Encryption algorithm) Kết quả là chữ ký số (Digital signature) của thông điệp hay còn gọi là chuỗi đại diện được mã hóa (Encrypted message digest)
Thông điệp ban đầu (message) được ghép với chữ ký số (Digital signature) tạo thành thông điệp đã được ký (Signed message)
Thông điệp đã được ký (Signed message) được gửi cho người nhận
1.1.2 Các bước của quá trình kiểm tra chữ ký (bên người nhận):
Tách chữ ký số và thông điệp gốc khỏi thông điệp đã ký để xử lý riêng
Tính toán chuỗi đại diện MD1 (message digest) của thông điệp gốc sử dụng giải thuật băm (là giải thuật sử dụng trong quá trình ký)
Sử dụng khóa công khai (Public key) của người gửi để giải mã chữ ký số → chuỗi đại diện thông điệp MD2
So sánh MD1 và MD2:
Nếu MD1 = MD2 → chữ ký kiểm tra thành công Thông điệp đảm bảo tính toàn vẹn
và thực sự xuất phát từ người gửi (do khóa công khai được chứng thực)
Nếu MD1 < > MD2 → chữ ký không hợp lệ Thông điệp có thể đã bị sửa đổi hoặc không thực sự xuất phát từ người gửi
2 Kiến trúc chữ ký số sử dụng RSA:
Trang 5 RSA là giải thuật cho phép thực hiện 2 tính năng:
Mã hóa thông điệp:
Người gửi mã hóa thông điệp sử dụng khóa công khai của người nhận
Người nhận giải mã thông điệp sử dụng khóa riêng của mình
Tạo chữ ký số:
Người gửi tạo chữ ký số sử dụng khóa bí mật của mình
Người nhận kiểm tra chữ ký sử dụng khóa công khai của người gửi
Trang 6 Quá trình ký (bên gửi)
Tính toán chuỗi đại diện (message digest/ hash value) của thông điệp sử dụng một giải thuật băm (Hashing algorithm) SHA-1
Chuỗi đại diện được ký sử dụng khóa riêng (Priavte key) của người gửi và giải thuật tạo chữ ký (Signature/ Encryption algorithm) RSA Kết quả chữ ký số (Digital signature) của thông điệp hay còn gọi là chuỗi đại diện được mã hóa bởi giải thuật RSA (Encryted message digest)
Thông điệp ban đầu (message) được ghép với chữ ký số (Digital signature) tạo thành thông điệp đã được ký (Signed message)
Thông điệp đã được ký (Signed message) được gửi cho người nhận
Quá trình kiểm tra chữ ký (bên nhận):
Tách chữ ký số RSA và thông điệp gốc khỏi thông điệp đã ký để xử lý riêng;
Tính toán chuỗi đại diện MD1 (message digest) của thông điệp gốc sử dụng giải thuật băm (là giải thuật sử dụng trong quá trình ký là SHA-1)
Sử dụng khóa công khai (Public key) của người gửi để giải mã chữ ký số
RSA-> chuỗi đại diện thông điệp MD2
So sánh MD1 và MD2:
Nếu MD1 =MD2 -> chữ ký kiểm tra thành công Thông điệp đảm bảo tính toàn vẹn và thực sự xuất phát từ người gửi (do khóa công khai được chứng thực)
Nếu MD1 <>MD2 -> chữ ký không hợp lệ Thông điệp có thể đã bị sửa đổi hoặc không thực sự xuất phát từ người gửi
Trang 7III Giải thuật RSA
Giới thiệu:
Giải thuật mã hóa RSA đượ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
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 20481 bit trong giai đoạn 2010-2020 Trong tương lai, cần sử dụng khóa RSA có kích thước 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, và để tạo và kiểm tra chữ ký số
1 Giải thuật RSA được dùng trong việc tạo khóa, mã hóa, giải mã:
Trang 8 Thuật toán RSA có hai khóa:
Khóa công khai (Public key): được công bố rộng rãi cho mọi người và được dùng
để mã hóa
Khóa bí mật (Private key): những thông tin được mã hóa bằng khóa công khai chỉ
có thể được giải mã bằng khóa bí mật tương ứng
2 Tạo khóa:
RSA cung cấp một thủ tục tạo cặp khóa, gồm khóa công khai và khóa riêng tương
đối đơn giản Cụ thể, thủ tục tạo khóa gồm các bước như sau:
Trang 9 Một số yêu cầu với quá trình sinh khóa:
Dưới đây liệt kê một số yêu cầu cơ bản đặt ra với các tham số sinh khóa và khóa để đảm bảo độ an toàn cho cặp khóa RSA Các yêu cầu cụ thể gồm:
o Yêu cầu với các tham số sinh khóa p và q:
Các số nguyên tố p và q phải được chọn sao cho việc phân tích n (n = p × q) là không khả thi về mặt tính toán
p và q nên có cùng độ lớn (tính bằng bit) và phải là các số đủ lớn.Nếu n có kích thước
1024 bit thì p và q nên có kích thước khoảng 512 bit Nếu n có kích thước 2048 bit thì p và q nên có kích thước khoảng 1024 bit
Hiệu số p – q không nên quá nhỏ, do nếu p – q quá nhỏ, tức p q và p √n Như vậy, có thể chọn các số nguyên tố ở gần √n và thử lần lượt Khi có được p, có thể tính q và tìm ra d là khóa bí mật từ khóa công khai e và (n) = (p - 1)(q - 1)
Nếu p và q được chọn ngẫu nhiên và p – q đủ lớn, khả năng hai số này bị phân tích
từ n giảm đi
Các số nguyên tố p và q nên là số nguyên tố mạnh (Strong prime) Số nguyên tố p được xem là số nguyên tố mạnh nếu nó thỏa mãn 3 điều kiện: (i) p – 1 có một thừa
số nguyên tố lớn, giả thiết là r; (ii) p+1 có một thừa số nguyên tố lớn và (iii) r – 1 có một thừa số nguyên tố lớn
o Vấn đề sử dụng số mũ mã hóa (e) nhỏ:
Khi sử dụng số mũ mã hóa (e) nhỏ, chẳng hạn e = 3 có thể tăng tốc độ mã hóa
Kẻ tấn công có thể nghe lén và lấy được bản mã, từ đó phân tích bản mã để khôi phục bản rõ Do số mũ mã hóa nhỏ nên chi phí cho phân tích, hoặc vét cạn không quá lớn
Do vậy, nên sử dụng số mũ mã hóa e đủ lớn và thêm chuỗi ngẫu nhiên vào khối rõ trước khi mã hóa để giảm khả năng bị vét cạn hoặc phân tích bản mã
o Vấn đề sử dụng số mũ giải mã (d) nhỏ:
Khi sử dụng số mũ giải mã (d) nhỏ, có thể tăng tốc độ giải mã
Nếu d nhỏ và gcd(p-1, q-1) cũng nhỏ thì d có thể tính được tương đối dễ dàng từ khóa công khai(n, e)
Do vậy, để đảm bảo an toàn, nên sử dụng số mũ giải mã d đủ lớn
Trang 103 Mã hóa và giải mã:
Ví dụ về giải thuật RSA:
Trang 114 Cài đặt giải thuật RSA trong ngôn ngữ JAVA:
Sử dụng BigInteger trong gói java.math.* cung cấp hầu hết các hàm dựng và các hàm số học cho phép thao tác thuận lợi với số nguyên lớn
Một số hàm:
Hàm dựng BigInteger (int bitLength, int certainty, Random rnd): sinh số nguyên tố ngẫu nhiên với số bit cho trước
Hàm BigInteger add(BigInteger val): cộng 2 số nguyên lớn
Hàm BigInteger subtract(BigInteger val): trừ 2 số nguyên lớn
Hàm BigInteger multiply(BigInteger val): nhân 2 số nguyên lớn
Hàm gcd(BigInteger val): tìm USCLN của 2 số lớn
Hàm mod(BigInteger m): tính modulo (phần dư) của phép chia nguyên
Hàm BigInteger modInverse(BigInteger m): tính modulo nghịch đảo
(this-1mod m)
Hàm BigInteger modPow(BigInteger exponent, BigInteger m): tính
(thisexponent mod m)
Trang 12 Cụ thể code RSA:
Tạo khóa:
Mã hóa và giải mã:
1 Tốc độ của thuật toán RSA:
Tốc độ của RSA là một trong những điểm yếu của RSA so với các hệ mã đối xứng, so với hệ mã DSA thì RSA chậm hơn từ 100 đến 1000 lần, vì vậy RSA không được
dùng để mã hóa khối lượng dữ liệu lớn mà thường dùng để mã hóa dữ liệu nhỏ
Trang 132 Phân phối khóa:
Cũng giống như các thuật toán mã hóa khác, cách thức phân phối khóa công khai là một trong những yếu tố quyết định đối với độ an toàn của RSA Quá trình phân phối
khóa cần chống lại được tấn công đứng giữa (man-in-the-middle attack)
3 Chi phí:
Để thực hiện thuật toán RSA phần lớn tốn chi phí thực hiện các phép tính cơ bản như : Tạo khóa, mã hóa, giải mã
Quá trình ký và xác thực chữ ký tương đương với chi phí thực hiện các phép tính lũy thừa modulo n
Để đảm bảo cho khóa bí mật được an toàn thì thường chọn mũ công khai e nhỏ hơn nhiều so với số mũ bí mật d
4 Hiệu suất của thuật toán:
Do tốc độ của RSA không nhanh nên RSA không được dùng để ký khối lượng dữ liệu lớn mà thường dùng với giải thuật băm để tăng tính linh hoạt trong việc ký và xác thực chữ ký
V Các dạng tấn công
1 Phân phối khóa:
Cũng giống như các thuật toán mã hóa khác, cách thức phân phối khóa công khai là một trong những yếu tố quyết định đối với độ an toàn của RSA Quá trình phân phối
khóa cần chống lại được tấn công đứng giữa (man-in-the-middle attack) Giả sử kẻ
xấu(C) có thể gửi cho Người gửi thông tin(A) một khóa bất kỳ và khiến (A) tin rằng
đó là khóa (công khai) của Đối tác(B) Đồng thời (C) có khả năng đọc được thông tin trao đổi giữa (A) và (B) Khi đó, (C) sẽ gửi cho (A) khóa công khai của chính mình (mà (A) nghĩ rằng đó là khóa của (B)) Sau đó, (C) đọc tất cả văn bản mã hóa
do (A) gửi, giải mã với khóa bí mật của mình, giữ 1 bản copy đồng thời mã hóa bằng khóa công khai của (B) và gửi cho (B) Về nguyên tắc, cả (A) và (B) đều không phát hiện ra sự can thiệp của người thứ ba Các phương pháp chống lại dạng tấn công này thường dựa trên các chứng thực khóa công khai (digital certificate) hoặc các thành
phần của hạ tầng khóa công khai (public key infrastructure - PKI)
2 Tấn công dựa trên thời gian:
Vào năm 1995, Paul Kocher mô tả một dạng tấn công mới lên RSA: nếu kẻ tấn công nắm đủ thông tin về phần cứng thực hiện mã hóa và xác định được thời gian giải mã
đối với một số bản mã lựa chọn thì có thể nhanh chóng tìm ra khóa d Dạng tấn công
này có thể áp dụng đối với hệ thống chữ ký điện tử sử dụng RSA Năm 2003, Dan Boneh và David Brumley chứng minh một dạng tấn công thực tế hơn: phân tích thừa
số RSA dùng mạng máy tính (Máy chủ web dùng SSL) Tấn công đã khai thác thông tin rò rỉ của việc tối ưu hóa định lý số dư Trung quốc mà nhiều ứng dụng đã thực hiện
Trang 14 Để chống lại tấn công dựa trên thời gian là đảm bảo quá trình giải mã luôn diễn ra trong thời gian không đổi bất kể văn bản mã Tuy nhiên, cách này có thể làm giảm hiệu suất tính toán Thay vào đó, hầu hết các ứng dụng RSA sử dụng một kỹ thuật
gọi là che mắt Kỹ thuật này dựa trên tính nhân của RSA: thay vì tính c d
mod n,
Alice đầu tiên chọn một số ngẫu nhiên r và tính (r e
c) d mod n Kết quả của phép tính
này là rm mod n và tác động của r sẽ được loại bỏ bằng cách nhân kết quả với nghịch
đảo của r Đỗi với mỗi văn bản mã, người ta chọn một giá trị của r Vì vậy, thời gian giải mã sẽ không còn phụ thuộc vào giá trị của văn bản mã
3 Tấn công bằng phương pháp lựa chọn thích nghi bản mã:
Năm 1981, Daniel Bleichenbacher mô tả dạng tấn công lựa chọn thích nghi bản mã (adaptive chosen ciphertext attack) đầu tiên có thể thực hiện trên thực tế đối với một văn bản mã hóa bằng RSA Văn bản này được mã hóa dựa trên tiêu chuẩn PKCS
#1v1, một tiêu chuẩn chuyển đổi bản rõ có khả năng kiểm tra tính hợp lệ của văn bản sau khi giải mã Do những khiếm khuyết của PKCS #1, Bleichenbacher có thể thực hiện một tấn công lên bản RSA dùng cho giao thức SSL (tìm được khóa phiên)
Do phát hiện này, các mô hình chuyển đổi an toàn hơn như chuyển đổi mã hóa bất đối xứng tối ưu (Optimal Asymmetric Encryption Padding) được khuyến cáo sử dụng Đồng thời phòng nghiên cứu của RSA cũng đưa ra phiên bản mới của PKCS
#1 có khả năng chống lại dạng tấn công nói trên
VI Ứng dụng của hệ thống mã hóa RSA
RSA thỏa mãn 5 yêu cầu của 1 hệ mã hóa hiện đại:
Độ bảo mật cao ( nghĩ là để giải mã được mà không biết khóa thì phải tốn hàng triệu năm)
Thao tác nhanh (thao tác mã hóa và giải mã tốn ít thời gian)
Dùng chung được
Có ứng dung rộng rãi
Có thể dùng để xác định chủ nhân (dùng làm chữ ký điện tử)
Vì vậy mà thuật toán RSA được sử dụng rộng rãi trong công tác mã hóa và công nghệ chữ ký điện tử: truyền dẫn quỹ điện tử chuyển đổi thư điện tử, giao dịch tiền điện tử, thương mãi điện tử, tài chính-ngân hàng
Cụ thể như:
Trong giao tiếp (E-Mail, SMS): Khi viết e-mail, ta không cần phải tin tưởng nhà cung cấp email về quyền riêng tư và giả mạo Ta có thể mã hóa thư bằng khóa công khai của người nhận và ký nó ở bên cạnh Bằng cách này, người gửi biết chắc chắn rằng không có sự giả mạo và tin nhắn đến từ đúng người gửi Nó chỉ có thể xảy ra rằng nhà cung cấp không cung cấp thông điệp ở tất cả