Tải bản đầy đủ (.docx) (83 trang)

Nghiên cứu hệ mật mã RSA và ứng dụng trong chữ kí điện tử

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (756.56 KB, 83 trang )

LỜI CAM ĐOAN
Tôi cam đoan đây là công trình nghiên cứu của riêng tôi.
Nghiên cứu về thuật toán trong hệ mật mã khóa công khai RSA, có sử dụng
các tài liệu tham khảo qua sách báo và tài liệu tham khảo khác Các số liệu, kết quả
nêu trong luận văn là trung thực và rõ ràng.
TÁC GIẢ

BÙI VĂN BÌNH


LỜI CẢM ƠN
Trước tiên, tôi xin bày tỏ lòng biết ơn đến quý thầy cô của trường Học Viện
Công Nghệ Bưu Chính Viễn Thông đã tận tình truyền đạt những kiến thức quý báu,
dìu dắt, giúp đỡ tôi hoàn thành nhiệm vụ của khóa học và luận văn tốt nghiệp.
Đặc biệt, tôi xin bày tỏ lòng biết ơn sâu sắc đến PGS TS LÊ HỮU LẬP. Thầy
đã tận tình truyền đạt những kiến thức khoa học chuyên ngành, đã giúp đỡ tôi trong
suốt quá trình học tập và đã hướng dẫn tận tình, cho tôi những ý kiến đóng góp quý
báu để hooàn thành tốt luận văn.
Xin được gửi lời cảm ơn chân thành đến các bạn cùng lớp Cao học Hệ Thống
Thông Tin Khóa 2015 đợt 1. Xin cảm ơn bạn bè, gia đình, đồng nghiệp đã giúp đỡ
tạo điều kiện cho tôi hoàn thành khóa học. Xin trân trọng cảm ơn!

Tác giả
BÙI VĂN BÌNH


MỤC LỤC
LỜI CAM ĐOAN.................................................................................................... 1
LỜI CẢM ƠN.......................................................................................................... 2
BẢNG CÁC TỪ VIẾT TẮT VÀ THUẬT NGỮ.................................................... 6
DANH MỤC CÁC BẢNG BIỂU............................................................................ 7


DANH MỤC CÁC HÌNH VẼ................................................................................. 8
PHẦN I: MỞ ĐẦU.................................................................................................. 1
1. Lý do chọn đề tài.............................................................................................. 1
2. Mục đích nghiên cứu........................................................................................ 1
3. Phƣơng pháp nghiên cứu................................................................................ 1
4. Nội dung luận văn............................................................................................ 2
PHẦN II: NỘI DUNG............................................................................................. 3
CHƢƠNG 1: GIỚI THIỆU MẬT MÃ VÀ HỆ MÃ HÓA CÔNG KHAI RSA. .3
1.1

Giới thiệu về mật mã và hệ mật mã.......................................................... 3

1.1.1

Khái quát về mật mã và hệ thống mã hóa..............................................3

1.1.2

Phân loại hệ mã hóa...............................................................................4

1.1.3

Phân tích các ưu nhược điểm của các hệ mật mã...................................6

1.2

Hệ mã hóa công khai RSA.........................................................................7

1.2.1


Trình bày các khái niệm liên quan.........................................................7

1.2.2

Thuật toán hệ mã hóa công khai............................................................9

1.2.3

Một số cách thức tấn công hệ mật mã RSA......................................... 12

1.2.4

Phương pháp phòng tránh tấn công...................................................... 15

1.2.5

Chi phí và tốc độ thực hiện của thuật toán RSA..................................16

1.2.6

Ứng dụng của hệ mã RSA................................................................... 17

Kết luận chƣơng 1............................................................................................. 18
CHƢƠNG 2: ỨNG DỤNG THUẬT TOÁN TRONG HỆ MẬT MÃ RSA ĐỂ
XÂY DỰNG VÀ XÁC THỰC CHỮ KÝ ĐIỆN TỬ............................................ 19
2.1 Các khái niệm............................................................................................... 19
2.1.1 Chữ ký điện tử......................................................................................... 19


2.1.2 Chữ ký số................................................................................................. 20

2.1.3 Phương tiện điện tử.................................................................................. 20
2.1.4 Giao dịch điện tử...................................................................................... 21
2.1.5 Thông điệp điện tử................................................................................... 21
2.1.6 Chứng thực điện tử.................................................................................. 22
2.1.7 Lịch sử hình thành và phát triển của chữ ký điện tử................................. 23
2.2 Trình bày các thuật toán, các hàm.............................................................. 27
2.2.1 Thuật toán Euclide - Tìm UCLN của hai số nguyên................................27
2.2.2 Thuật toán Euclide mở rộng..................................................................... 27
2.2.3 Thuật toán tính a-1 mod n........................................................................ 28
2.2.4 Thuật toán Rabin-Miller........................................................................... 29
2.2.5 Thuật toán tính Xp mod n........................................................................ 30
2.2.6 Định lý Ferma.......................................................................................... 31
2.2.7 Định lý Euler............................................................................................ 31
2.2.8 Hàm Băm................................................................................................. 31
2.2.9 Hàm băm MD5........................................................................................ 32
2.2.10 Hàm băm SHA1..................................................................................... 37
2.3 Lƣợc đồ chữ ký điện tử RSA...................................................................... 40
2.3.1 Định nghĩa lược đồ chữ ký....................................................................... 40
2.3.2 Phân loại các lược đồ chữ ký số............................................................... 40
2.3.3 Lược đồ chữ ký RSA............................................................................... 44
2.3.4. Một số lược đồ chữ ký khác (DSA, EL Gamal)......................................46
2.4 Quá trình ký và xác thực chữ ký điện tử.................................................... 51
2.4.1 Ký văn bản điện tử................................................................................... 51
2.4.2 Xác thực chữ ký điện tử........................................................................... 52
Kết luận chƣơng 2............................................................................................... 53
CHƢƠNG 3: XÂY DỰNG VÀ THỬ NGHIỆM ỨNG DỤNG CHỮ KÝ ĐIỆN
TỬ........................................................................................................................... 54
3.1 Các yêu cầu của thử nghiệm........................................................................ 54



3.1.1 Giới thiệu về thử nghiệm......................................................................... 54
3.1.2 Các yêu cầu cần thiết............................................................................... 54
3.2 Hệ thống tạo lập chữ ký............................................................................... 55
3.2.1 Môi trường xây dựng............................................................................... 55
3.2.2 Quá trình xây dựng.................................................................................. 55
3.3 Cài đặt và thiết lập....................................................................................... 56
3.3.1 Chạy thử demo và ghi nhận kết quả đạt được.......................................... 56
3.3.2. Demo ký – xác thực chữ ký.................................................................... 57
3.3.3 Phân tích ưu nhược điểm của ứng dụng thực tế....................................... 59
Kết luận chƣơng 3.......................................................................................... 60
PHẦN III: KẾT LUẬN......................................................................................... 61
MÃ NGUỒN CHƢƠNG TRÌNH THỬ NGHIỆM............................................. 62
DANH MỤC TÀI LIỆU THAM KHẢO.............................................................. 67


BẢNG CÁC TỪ VIẾT TẮT VÀ THUẬT NGỮ
Các từ viết tắt
CA

Certificate Authority

DEA

Data Encryption Algorithm

DES

Data Encryption Standard

IDEA


International Data Encryption
Algorithm

MAC

Message Authentication Code

MD5

Message Digest algorithm 5 (MD
được thiết kế bởi Ronald Rivest
năm 1991)

MIT

Massachusets Institute of
Technology.

PKI

Public Key Infrastructure

SHA

Secure Hash Algorithm

Các ký hiệu
C


C

D

D

Dauth
E

E

Eauth
K

k

P

P

Zn

T


DANH MỤC CÁC BẢNG BIỂU
Bảng 1.1 Bản mã ASCII............................................................................................ 5
Bảng 1.2: Tóm tắt giải thuật RSA............................................................................ 8
Bảng 1.3 Bảng quy ước mã hóa thông điệp............................................................. 11
Bảng 2.1: Bảng sau tính toán từng bước 37


27

mod 101........................................... 31

Bảng 2.2: Giá trị hằng số của mảng T có 64 phần tử............................................... 35
Bảng 2.3: Xây dựng các tác vụ................................................................................ 36


DANH MỤC CÁC HÌNH VẼ
Hình 1.1 Mô hình hệ mã khoá bí mật....................................................................................4
Hình 1.2: quá trình mã hóa khóa công khai..........................................................................7
Hình 2.1: Ứng dụng chữ ký số trong quá trình cấp giấy phép lái xe mới...........................26
Hình 2.2: Hoạt động của một hàm băm..............................................................................31
Hình 2.3: Tạo message_digest sử dụng MD5....................................................................33
Hình 2.4: Xử lý MD5 trên một khối đơn 512 bít..................................................................34
Hình 2.5: Tác vụ của MD5[abcd k s i]...............................................................................35
Hình 2.6: Mô hình tổng quát lược đồ chữ ký có kèm bản rõ..............................................42
Hình 2.7: Lược đồ chữ ký số tự khôi phục bản rõ..............................................................43
Hình 2.8: Lược đồ chữ ký số kèm theo bản rõ thu được...................................................44
Hình 2.9: Sơ đồ quá trình ký văn bản điện tử.....................................................................51
Hình 2.10: Sơ đồ quá trình xác thực chữ ký điện tử...........................................................52
Hình 3.1: Giao diện chính của chương trình.......................................................................56
Hình 3.2: Quá trình giải mã.................................................................................................57
Hình 3.3: Quá trình mã hoá.................................................................................................58


1

PHẦN I: MỞ ĐẦU

1. Lý do chọn đề tài
Bảo mật thông tin và an toàn dữ liệu là vấn đề rất được quan tâm trong thời
kỳ có quá nhiều thông tin như hiện nay. Đây là một vấn đề rộng có liên quan đến
nhiều lĩnh vực trong đời sống xã hội như: quốc phòng, tài chính ngân hàng, thương
mại,… Ngày nay, ở các nước phát triển cũng như các nước đang phát triển, mạng
máy tính đang ngày càng đóng vai trò quan trọng, khi đó thì vấn đề bảo mật thông
tin trên mạng được đặt lên hàng đầu.
Với sự phát triển không ngừng của chính phủ điện tử cùng với trao đổi thông
tin, yêu cầu an toàn thông tin ngày càng có vai trò vô cùng quan trọng. Để đáp ứng
yêu cầu trao đổi và an toàn thông tin thì giải pháp “mã hóa thông tin” được xem là
phương án tốt nhất. Vì vậy, mỗi tổ chức, quốc gia đều có những cơ chế mã hóa riêng
để bảo mật hệ thống thông tin của mình. Cơ chế mã hóa thông dụng hiện nay là hệ
mật mã RSA.
Trong mật mã vấn đề bảo mật luôn đi đôi với vấn đề xác thực nguồn gốc
thông tin, đặc biệt trong hệ thống mật mã khóa công khai, vấn đề xác thực nguồn
gốc thông tin là rất quan trọng. Chữ ký số (chữ ký điện tử) ra đời với yêu cầu cần có
mã khóa phù hợp là điều tất yếu.
Với các lý do đã nêu trên, tôi chọn đề tài “Nghiên cứu hệ mật mã RSA và
Ứng dụng trong Chữ ký điện tử” làm nội dung nghiên cứu cho luận văn, nhằm
trang bị những kiến thức cần thiết để xây dựng một hệ thống trao đổi thông tin công
khai nhưng đảm bảo bí mật.

2. Mục đích nghiên cứu
Nghiên cứu về thuật toán trong hệ mật mã khóa công khai RSA và các ứng
dụng trong thực nghiệm tạo chữ ký điện tử để ký và xác thực chữ ký.

3. Phƣơng pháp nghiên cứu
Nghiên cứu các tài liệu về mã hóa, các hệ mật mã của các tác giả trong và
ngoài nước, các bài báo, thông tin trên mạng Internet có trình bày chọn lọc.



2

4. Nội dung luận văn
Luận văn bao gồm những phần:
PHẦN I: MỞ ĐẦU
PHẦN II: NỘI DUNG
Trong phần này có 3 chương như sau:
 Chương I: giới thiệu mật mã và hệ mã hóa công khai rsa
Trình bày thuật toán và định lý toán học dùng trong các hệ mã công khai.
Xác định các tính chất, đặc điểm nội dung cơ bản của hệ mã khóa
 Chương II: ứng dụng thuật để xây dựng và xác thực chữ ký điện tử
Giới thiệu trình bày khái niệm chữ kí điện tử, phân loại các lược đồ chữ ký
số, trình bày chi tiết và có các ví dụ minh họa.Giới thiệu Hàm Băm và giải
thuật được dùng phổ biến là MD5 và SHA1.
 Chương III: xây dựng ứng dụng chữ ký điện tử
Phân tích cách thực hiện các quá trình tạo khóa, mã hóa – giải mã và ký –
xác nhận chữ ký. Viết mã xây dựng chương trình thử nghiệm

PHẦN III: Kết luận
Tóm tắt những kết quả đạt được đồng thời nêu ra những hạn chế của luận văn
và hướng phát triển có thể được theo hướng nghiên cứu của luận văn trong tương
lai.
Do thời gian làm luận văn còn hạn hẹp và trình độ chuyên môn còn hạn chế nên
không tránh khỏi nhiều thiếu sót. Vì vậy kính mong các thầy cô, các bạn đồng
nghiệp đóng góp ý kiến xây dựng để luận văn được hoàn thiện chặt chẽ hơn và đề
tài được đưa vào ứng dụng thực tế chuyên sâu.


3


PHẦN II: NỘI DUNG
CHƯƠNG 1: GIỚI THIỆU MẬT MÃ VÀ HỆ MÃ HÓA CÔNG
KHAI RSA
1.1 Giới thiệu về mật mã và hệ mật mã
1.1.1 Khái quát về mật mã và hệ thống mã hóa
Mật mã (Cryptogaraphy) là một ngành khoa học nghiên cứu các giải pháp mã
hóa, biến đổi thông tin thành một dạng khác với mục đích che dấu thông tin và ý
nghĩa thông tin cần mã hóa. Đây là một ngành quan trọng có nhiều ứng dụng trong
cuộc sống xã hội. Cùng với sự phát triển của khoa học máy tính và Internet, các
nghiên cứu và ứng dụng của khoa học mật mã càng ngày trở nên đa dạng hơn, ứng
dụng của khoa học mật mã không chỉ đơn thuần là mã hóa và giải mã thông tin mà
còn bao gồm nhiều vấn đề cần được nghiên cứu: Chứng thực nguồn gốc thông tin
đó là chữ ký điện tử, chứng nhận tính xác thực về người sở hữu mã khóa, các quy
trình giúp trao đổi thông tin và thực hiện giao dịch điện tử an toàn.
Một hệ mật mã (Cryptosystem) là một bộ năm (P, C, K, E, D) thỏa mãn các
điều kiện:
-

P là một tập hữu hạn các bản rõ (chứa thông tin cần mã hóa).

rõ).

C là tập hữu hạn các bản mã (chứa thông tin đã được mã hóa từ bản

-

K là tập hữu hạn các khóa.

-


E và D lần lược là quá trình mã hóa và giải mã:

Với mỗi khóa kK tồn tại luật mã hóa ek

E và luật giải mã dk D tương

ứng. Luật mã hóa ek: P → C và luật giải mã ek: C → P là hai ánh xạ thỏa mãn
dk(ek(x)) = x ,  xP.
Hệ thống mã hóa khóa bí mật [2][5], là hệ thống mã hóa trong đó quá trình
mã hóa và giải mã đều sử dụng chung một khóa gọi là khóa bí mật (Secret key).
Việc bảo mật thông tin phụ thuộc vào việc bảo mật khóa.
Trong hệ thống mã hóa bí mật, thông điệp nguồn (bản tin rõ) được mã hóa
với khóa k được thống nhất giữa người gửi A và người nhận B. Người A sẽ sử dụng


4

khóa k và để mã hóa thông điệp M thành thông điệp c (bản mã) và gửi c cho B,
người B sẽ sử dụng khóa k để giải mã thông điệp c này, vấn đề an toàn bảo mật
thông tin được mã hóa phụ thuộc vào việc giữ bí mật nội dung khóa k.

Khóa bí mật
Kênh bí
Bản tin rõ

Bản mã

Mã hoá


Bản tin rõ

Giải mã

Hình 1.1 Mô hình hệ mã khoá bí mật

1.1.2 Phân loại hệ mã hóa
- Mã theo chuỗi bit (Stream Cipher)
Trong dạng mã này thông điệp là các bit và khoá được phát sinh bởi bộ phát
sinh ngẫu nhiên. Chuỗi bit khoá được trộn với bản rõ, thường theo phép XOR để
sinh bản mã. Việc giải mã được thực hiện bằng cách tính XOR bản mã với khoá k.
-

Mã theo chữ

Các hệ mã ban đầu thường dựa trên cơ sở phép biến đổi một chữ cái trong
bản rõ thành một chữ cái trong bản mã. Kỹ thuật mã hoá này còn được gọi là mã
thay thế. Để thực hiện phương pháp này, trước hết cần định nghĩa một bản mã (như
bảng ASCII) để số hoá bản rõ, vì các phép toán sẽ làm việc trên các số thay vì các
ký tự. Dạng mã này có độ bảo mật không cao vì một ký tự luôn được mã hoá bằng
một ký tự khác trong bản mã mà với sự tiến bộ của máy tính hiện nay thì sẽ không
khó khăn để giải mã một bản mã được mã hoá bằng phương pháp thay thế như trên.
- Mã khối (Block Cipher)
Rõ ràng, hệ mã theo chữ có độ an toàn không cao, vì thế một cách để tăng độ
an toàn là dùng phương pháp mã khối. Trong mã khối, bản rõ và bản mã được chia
thành từng khối ký tự trước khi thực hiện việc mã hoá hay giải mã. Kỹ thuật mã
khối được mô tả như sau [1]:


5


• Chia văn bản M thành nhiều khối: M = M1M2 … Mj, mỗi khối
Mi với 1≤ i ≤ j là một khối n ký tự.


Chuyển các ký tự thành các số tương đương và xây dựng bản mã:

T

gcd(det(A), n) = 1, B = (B1, B2,…, Bn) , C = (C1, C2,…, Cn)
và Mi = (m1, m2, …, mn)

T

Để giải mã, thực hiện phép toán:
-1

Mi = A (Ci – B)(mod n)
-1

Trong đó A là ma trận nghịch đảo của A.
-

Mã mũ

Mã mũ, do Pohlig và Hellman giới thiệu năm 1976 [2][5], được mô tả như
sau: Chọn p là một số nguyên tố, M là một số tương ứng của bản rõ, với mỗi ký tự
trong bản rõ được thay thế bằng mã tương ứng
Bảng 1.1 Bản mã ASCII


A

B

C

01

02

03

N

O

P

14

15

16

Chia M thành các khối Mi, 0 < Mi < p. Gọi k là một số nguyên thoả 0 < k < p
và gcd(k, p-1) = 1


Mã hoá khối Mi thành Ci = E(k, Mi) ≡ Mik (mod p).




Giải mã Ci theo công thức:
v

Mi = D(v,Ci) ≡ Cik ≡ ( Mik ) ≡ Mi (mod p).

Trong đó k.v ≡ 1(mod p - 1).


6

1.1.3 Phân tích các ưu nhược điểm của các hệ mật mã
-

Ưu điểm
Tốc độ thực hiện nhanh vì các quá trình mã hoá và giải mã sử dụng các phép

toán trên dãy bit nhị phân như: OR, AND, XOR, … là những phép toán gần với lệnh
máy.
-

Nhược điểm
Cả người gửi và người nhận đều phải biết khoá nên phát sinh vấn đề an toàn

khi truyền khoá. Nếu khoá bị đánh cắp thì thông tin được mã hoá bằng khoá đó
không còn được an toàn.
Hạn chế về khả năng quản lý khoá: Đối với mỗi người để liên lạc được với
nhau phải có một khoá riêng, do đó đối với hệ thống lớn có nhiều đối tác giao tiếp
với nhau thì mỗi người phải lưu giữ một số lượng khoá bí mật rất lớn dẫn đến vấn

đề khó khăn trong quản lý và bảo mật khoá.
Đối với phương pháp mã hoá bằng khoá bí mật có thể không xác nhận được
chủ nhân của thông tin, tức nguồn gốc thông tin nhận được. Nên phương pháp mã
hoá bí mật khó ứng dụng vào lĩnh vực cần xác định được nguồn gốc của thông tin
như lĩnh vực chữ ký điện tử.
*

Ứng dụng của mã hoá khoá bí mật
Loại mật mã này thường được dùng trong quân sự, ngoại giao, tức là khi cần

trao đổi thông tin với nhau khá ít, hơn nữa cùng chung quyền lợi nên sẵn sàng bảo
vệ bí mật cho nhau.
Do tốc độ mã hoá nhanh nên các hệ mã khóa bí mật thường được dùng mã
hoá khối lượng dữ liệu lớn (mã hóa các cơ sở dữ liệu).
Ngày nay sự phát triển của xã hội dẫn đến mật mã được dùng hầu hết trong
mọi hoạt động của đời sống như: trong quân sự, ngoại giao, kinh tế, thương mại, …
số lượng người dùng ngày càng lớn. Với mật mã khoá bí mật đòi hỏi số khoá mà
mỗi thành viên cần phải giữ quá nhiều hơn nữa những người dùng cùng một chìa
khoá trong hệ thống hệ mã khoá bí mật đều phải biết khoá của nhau. Do đó nên phải


7

có một hệ mã mới ra đời đó là hệ mật mã khoá công khai (hệ mã bất đối xứng) để
khắc phục những nhược điểm của hệ mật mã khoá bí mật.

1.2 Hệ mã hóa công khai RSA
1.2.1 Trình bày các khái niệm liên quan
Hệ mã khóa công khai RSA là hệ thống mật mã do các giáo sư Ronald
Rivest, Adi Sharmir và Leonard Adleman phát minh năm 1978 tại học viện Công

nghệ Massachusetts (MIT).
Thuật toán RSA là thuật toán đầu tiên phù hợp với việc tạo chữ ký điện tử
đồng thời với việc mã hóa và giải mã. Nó đánh dấu một sự tiến bộ vượt bậc của lĩnh
vực mật mã học trong việc sử dụng hệ mật mã khóa công khai. RSA đang được sử
dụng phổ biến trong thương mại điện tử và đảm bảo an toàn với điều kiện độ dài
khóa đủ lớn.
Hệ mã RSA được xây dựng trên cơ sở mã khối trong đó khóa mã hóa là cặp
(e, n) gồm số mũ e modulo n. Với n là tích số của 2 số nguyên tố rất lớn nào đó, n =
p*q còn (e, φ(n)) = 1, với φ(n) là giá trị hàm Euler của n, trong trường hợp này φ(n)
= (p-1)*(q -1).
Như vậy, thuật toán RSA được thiết kế dựa trên độ khó của bài toán phân tích
ra thừa số nguyên tố trên tập số nguyên Zn. Cụ thể là số nguyên dương n = p*q với
p, q là 2 số nguyên tố. Nếu biết n, muốn tìm p, q phải giải bài toán phân tích một số
ra thừa số nguyên tố và nếu n, p, q đủ lớn thì đòi hỏi phải thực hiện số lượng các
phép tính vô cùng lớn. Trong điều kiện hiện nay thì điều này không khả thi, tuy
nhiên trong tương lai với sự phát triển của máy tính thì bài toán phân tích ra thừa số
nguyên tố vẫn có thể giải được.
Khóa công khai của B

User A

đoạn tin


Hình 1.2: quá trình mã hóa khóa công khai


8

Bảng 1.2: Tóm tắt giải thuật RSA


Tạo 2 số nguyên tố lớn p và q
Tính n = p*q, 0(n) = (p-1)*(q-1)
Chọn 1 số ngẫu nhiên 1-1

Tính d: d = e mod 0(n) (giải thuật Extended
Euclidean)
Khóa công khai
Khóa bí mật

Mã hóa
Đoạn tin: M < n
Mã hóa: C = Me mod n

Giải mã
Đoạn tin mã: C
Giải mã:

M = Cd mod n

+ Mỗi hệ thống cuối trong mạng tạo ra một cặp khóa để dùng cho mã hóa và giải
mã đoạn tin mà nó sẽ nhận.
+

Mỗi hệ thống công bố rộng rãi khóa mã hóa bằng cách đặt khóa vào

một thanh ghi hay một file công khai. Đây là khóa công khai, khóa còn lại được
giữ riêng.
+


Nếu A muốn gửi một đoạn tin tới B thì A mã hóa đoạn tin bằng khóa

công khai của B.
+

Khi B nhận đoạn tin mã hóa, nó giải mã bằng khóa bí mật của mình.

Không một người nào khác có thể giải mã đoạn tin mã này bởi vì chỉ có mình B biết
khóa bí mật đó thôi.


9

1.2.2 Thuật toán hệ mã hóa công khai
1.2.2.1. Thuật toán sinh khóa
Việc tạo ra khóa công khai và khóa bí mật thực hiện theo các bước sau:
(1) Sinh ra 2 số nguyên tố lớn p và q ngẫu nhiên (p ≠ q).
(2) Tính n = p*q.
φ(n) = (p-1)*(q-1).
(3) Chọn một số tự nhiên e sao cho 1 < e < φ(n) và là số nguyên tố cùng
nhau
với φ(n).
(4) Tính d sao cho: d*e ≡ 1 (mod φ(n)) với 1< d < φ(n).
(5) Khóa công khai (e, n), khóa bí mật (d, n).

1.2.2.2. Thuật toán mã hóa
Để gửi dữ liệu cần mã hóa thì người gửi thực hiện:
(1) Thu nhận khóa công khai của người nhận (e, n).
(2) Biến đổi thông điệp muốn gửi M thành những số nguyên m < n theo

một
hàm có thể đảo ngược (từ m có thể xác định được M) được thỏa thuận trước.
e

(3) Tính C = M mod n.

1.2.2.3. Thuật toán giải mã
Để khôi phục lại nội dung dữ liệu M ban đầu, người nhận thực hiện các bước sau:
d

(1) Tính M = C mod n với 0 ≤ m ≤ n.
(2) Thực hiện phép biến đổi ngược từ số m thành chuỗi ký tự tương ứng
chứa
thông tin M ban đầu.

1.2.2.4. Chuyển đổi văn bản rõ
Trước khi thực hiện mã hóa, ta phải thực hiện việc chuyển đổi bản rõ
(chuyển từ M sang m) sao cho không có giá trị nào của M tạo ra bản mã không an
toàn. Nếu không có quá trình này, RSA sẽ gặp một số vấn đề như:
ứng.

Nếu m = 0 hoặc m = 1 sẽ tạo ra các bản mã có giá trị là 0 và 1 tương

Khi mã hóa với số mũ nhỏ (chẳng hạn e = 3) và m cũng có giá trị
nhỏ, giá


e

trị m cũng nhận giá trị nhỏ (so với n). Như vậy phép mođun không có tác dụng và

có thể dễ dàng tìm được m bằng cách khai căn bậc e của c (bỏ qua mođun).


10

-

RSA là phương pháp mã hóa xác định (không có thành phần ngẫu nhiên)

nên người tấn công có thể tấn công lựa chọn bản rõ bằng cách tạo ra một bảng tra
giữa bản rõ và bản mã. Khi gặp một bản mã, người tấn công sử dụng bảng tra để
tìm bản rõ tương ứng.
Trên thực tế, thường gặp hai vấn đề đầu khi gửi các bản tin ASCII ngắn với m là
nhóm vài ký tự ASCII. Một đoạn tin chỉ có 1 ký tự Nul sẽ được gán giá trị là m = 0 và
cho ra bản mã là 0 bất kể giá trị e và n. Tương tự, một ký tự ASCII khác, SOH có giá trị
1 sẽ luôn cho bản mã là 1. Với các hệ thống dùng giá trị e nhỏ thì tất cả ký tự ASCII
3

đều cho kết quả mã hóa không an toàn vì giá trị lớn nhất của m chỉ là 255 và 255 nhỏ
hơn giá trị n chấp nhận được. Những bản mã này sẽ dễ dàng bị phá mã.

Để tránh gặp phải những vấn đề trên, khi thực hiện hệ mã RSA người ta
thường dùng hình thức chuyển đổi ngẫu nhiên m trước khi mã hóa. Quá trình
chuyển đổi này phải đảm bảo rằng m không rơi vào giá trị không an toàn. Sau khi
chuyển đổi, mỗi bản rõ khi mã hóa sẽ cho một trong số khả năng trong tập hợp bản
mã. Điều này làm giảm tính khả thi của phương pháp tấn công lựa chọn bản rõ (một
bản rõ sẽ có thể tương ứng với nhiều bản mã tùy thuộc vào cách chuyển đổi).
Một số tiêu chuẩn, chẳng hạn như PKCS [5], đã được thiết kế để chuyển đổi
bản rõ trước khi mã hóa bằng RSA các phương pháp chuyển đổi này bổ sung thêm
bít vào bản rõ. Các phương pháp chuyển đổi cần thiết kế cẩn thận để tránh những

dạng tấn công phức tạp, tận dụng khả năng biết trước được cấu trúc của bản rõ.
Phiên bản đầu tiên của PKCS dùng phương pháp chuyển đổi mà về sau được biết là
không an toàn trước tấn công lựa chọn bản rõ tương ứng (adaptive chosen ciphertext
attack). Các phương pháp chuyển đổi hiện đại sử dụng kỹ thuật như chuyển đổi mã
hóa bất đối xứng tối ưu (Optimal Asym metric Eneryption Padding-OAEP) để
chống lại tấn công dạng này. Tiêu chuẩn PKCS còn được bổ sung các tính năng
khác để đảm bảo an toàn cho chữ ký RSA (Probabilistic Signature Scheme for RSAPSS).


11

1.2.2.5. Các ví dụ về khóa
Ví dụ 1:

Chọn hai số nguyên tố: p = 101, q = 113.

- Tính n = p * q = 101 * 113 =
11413. φ(n) = (p-1)* (q -1)
=(101- 1)* (113 - 1) = 100*112 = 11200.
-

Chọn e = 3533 vì gcd(e, φ(n)) = gcd(3533, 11200) = 1.

-

Tính d = e mod 11200 = 6597 (Dùng giải thuật Euclide mở rộng).

-

Vậy khóa công khai là (e, n) = (3533, 11413);


-1

khóa bí mật là (d, n) = (6597, 11413).
Ví dụ 2:
-

Chọn hai số nguyên tố p = 43, q = 59.

-

Tính n = 43 * 59 = 2537
φ(n) = 42 * 58 = 2436

-

Chọn e = 13 vì gcd(e, φ(n)) = gcd(13, 2436) = 1

-

Tính d = e mod 2436 = 937. (Dùng giải thuật Euclide mở rộng)

-1

Khóa công khai là (e, n) = (13, 2537).
Khóa bí mật là (d, n) = (937, 2537).
Tiếp theo để mã hóa thông điệp M: “DAI HOC” ta thực hiện như sau:
Bảng 1.3 Bảng quy ước mã hóa thông điệp

A


B

00

01

N

O

13

14

Đầu tiên ta chuyển thông điệp M trên về dạng
0300
Sau đó mã hóa mỗi khối của bản rõ thực hiện như sau :


12

C=m

13

(mod 2537)
13

mod 2537 = 1031.


13

mod 2537 = 1123.

13

mod 2537 = 0331.

Với m = 0300 Ta có C = 0300
m = 0807 Ta có C = 0807
m = 1402 Ta có C = 1402

Để giải mã khối thông điệp C ta thực hiện:
m

=C

937

(mod 2537)
937

mod 2537 = 0300.

937

mod 2537 = 0807.

937


mod 2537 = 1402.

Với C = 1031 ta có: m = 1031
C = 1123 ta có: m = 1123

C = 0331 ta có: m = 0331

Ta đã tìm được bản rõ dưới dạng số, kết hợp với bảng quy ước trên ta khôi
phục lại nội dung thông điệp M là “DAI HOC”.

1.2.3 Một số cách thức tấn công hệ mật mã RSA
1.2.3.1. Tấn công lặp
Simons và Norris đã chỉ ra rằng hệ thống RSA có thể bị tấn công khi sử dụng
tấn công lặp liên tiếp. Đó là khi kẻ tấn công biết khóa công khai (e, n) và bản mã C
thì anh ta có thể tính chuỗi các bản mã sau:
e

C1 = C (mod n)
e

C2 = C1 (mod n)
…………………
e

Ci = Ci-1 (mod n)
Nếu có một phần tử Cj trong chuỗi C1, C2, …, Ci, … sao cho Cj = C thì
khi đó anh ta sẽ tìm được M = Cj-1 bởi vì:
C = C e (mod n)
j


j 1

e

C = M (mod n)
e

Ví dụ: Giả sử ta thu nhận được bản mã C = M mod n = 123 mà A mã hóa
bằng khóa công khai của B là (e, n)= (167, 1793) để gửi cho B.
Ta lặp lại quá trình mã hóa:


13

e

C1 = C mod n = 123

167

167

mod 1793 = 1755,

167

mod 1793 = 1521 ...,

167


mod 1793 = 567,

C2 = C1e mod n = 1327
C3 = C2e mod n = 1755

mod 1793 = 1327,

Ci – 2 = Cie3 mod n = 436

Ci – 1 = Cie2 mod n = 567167 mod 1793 = 30,
167

Ci = Cie1 mod n = 30
167

Vì Ci = 30

mod 1793 = 123 = C, kết thúc quá trình lặp.
167

mod 1973 = C = M

mod 1973 = 123 nên M = Ci – 1 = 30.

1.2.3.2. Tấn công modulo n dùng chung
Simons và Norris cũng chỉ ra rằng hệ thống RSA có thể bị tấn công khi sử
dụng modulo n dùng chung, thực vậy nếu một thông điệp M được mã hóa bằng hai
khóa công khai e1 và e2 từ hai thành viên trong hệ thống thì được:
e1


C1 = M mod n
e2

C2 = M mod n
Sau đó người tấn công dùng thuật toán Euclide mở rộng: (e1)*a + (e2)*b = 1
sao cho gcd(e1, e2) = 1 thì M được khôi phục lại như sau:
M = C1a .C2b mod n
Ví dụ: Ta có 2 cặp khóa công khai (e1, n) và (e2, n) với e1 = 3, e2 = 5.
Ta có modulo n dùng chung là n = 2491
Giả sử thông điệp cần mã hóa M = 777 thì ta dùng hai khóa công khai e1
và e2 ta được 2 bản mã:
3

C1 = 777 mod 2491 = 2277
5

C2 = 777 mod 2491 = 200
Người tấn công dùng thuật toán Euclide mở rộng: (3)*a + (5)*b = 1 và do
gcd(3, 5) = 1 nên tìm được a = 2, b = - 1.
2

Tính C 2 mod n = 2277 mod 2491 = 958.
1

Vậy M = 958 * 2354 mod 2491 = 777


14


*

Nhận xét: Để hệ mã RSA an toàn thì modulo n nên dùng một lần. Hiện nay việc

sinh ra số nguyên tố lớn không khó, nên việc dùng chung modulo n có lẽ không xảy ra.

1.2.3.3. Tấn công khi khóa công khai e nhỏ
Hastad đã đưa ra kiểu tấn khi khóa công khai e nhỏ (e = 3) của hệ mã công
khai RSA như sau :
Giả sử để gửi thông điệp M đến các người dùng P 1, P2, ..., Pk với khóa công
khai là (ei, ni). A mã hóa M bằng khóa công khai (ei, ni) và gửi các bản mã C i đến
người dùng Pi, biết M < ni, với i = 1, 2, ..., n.
Ta có thể nghe trộm kết nối ra ngoài của A và thu thập được k bản mã Ci.
Giả sử các khóa công khai ei = 3 thì có thể khôi phục M nếu k ≥ 3.
Thực vậy, nếu có được C1, C2, C3 với
3

3

3

C1 = M mod n1; C2 = M mod n2; C3 = M mod n3 và gcd(ni, nj) = 1, i ≠ j áp
dụng định lý số dư Trung Quốc với C1; C2; C3 tìm được C‟ Zn1n2n3 thỏa
3

3

C‟ = M mod n1n2n3. Mặt khác, M < ni với i = 1, 2, ..., n  M <
3


3

n1n2n3. Khi đó C‟ ≡ M mod n1n2n3  M là số nguyên
Vậy M = 3 C' .
Ví dụ:
Giả sử A dùng khóa công khai của U1(e1, n1) = (3, 5353); U2(e2, n2) = (3,
391); U3(e3, n3) = (3, 247) mã hóa thông điệp M = 24 thành 3 bản mã C 1, C2, C3 và
gửi đến cho U1, U2, U3.
3

3

Ta thu được 3 bản mã C1 = 24 mod 5353 = 3118, C2 = 24 mod 391 = 139
3

và C3 = 24 mod 247 = 239.
Áp dụng định lý số dư Trung Quốc ta có hệ phương trình đồng dư sau:
x ≡ 3118 (mod 5353)
x ≡ 139 (mod 391)
x ≡ 239 (mod 247)
Do 5353, 391, 247 là các số nguyên tố cùng nhau nên hệ phương trình trên
có nghiệm duy nhất theo modulo = 5353*391*247 = 516976681.


15

Tìm x mod 516976681 tính:
-1

m1 = 516976681/5353 = 96577  y1= 96577 mod 5353 = 5329.

-1

m2 = 516976681/319 = 1322191  y2 = 1322191 mod 319 = 16.
-1

m3 = 516976681/247 = 2093023  y3 = 2093023 mod 247 = 238.
x
= 3118*96577*5329 + 139*1322191*16 + 239*2093023*238 mod
516976681.

x = 13824 mod 516976681.
3

Ta tìm được C‟ = 13824 mod 516976681. Mà C‟ = M mod 516976681.
3

3

Suy ra: M mod 516976681 = 13824 mod 516976681 nên M = 13824.
Vậy M = 3 13842 = 24.
1.2.4 Phương pháp phòng tránh tấn công
Hệ mật RSA là hệ mật phổ biến nhất hiện nay, nó được triển khai và ứng
dụng trong nhiều hệ thống thương mại nhằm cung cấp tính bảo mật cũng như xác
thực của dữ liệu. Từ khi được công bố, RSA đã được phân tích tính an toàn bởi
nhiều nhà khoa học. Và đã có một số cuộc tấn công lên hệ mật RSA xong chúng chủ
yếu là minh họa cho việc sử dụng RSA không đúng cách. Vấn đề thám mã đối với
RSA hiện nay đang được các nhà khoa học tập trung vào các kẽ hở của RSA và
được chia làm 4 loại: tấn công cơ bản, tấn công số mũ công khai hoặc số mũ bí mật
nhỏ và tấn công cài đặt.
Độ an toàn của hệ thống RSA dựa trên 2 vấn đề của toán học: bài toán phân

tích ra thừa số nguyên tố các số nguyên lớn và bài toán RSA. Nếu 2 bài toán trên là
khó (không tìm được thuật toán hiệu quả để giải chúng) thì không thể thực hiện
được việc phá mã toàn bộ đối với RSA. Phá mã một phần phải được ngăn chặn bằng
các phương pháp chuyển đổi bản rõ an toàn.
Bài toán RSA là bài toán tính căn bậc e môđun n (với n là hợp số): tìm số m
sao cho me=c mod n, trong đó (e, n) chính là khóa công khai và c là bản mã. Hiện
nay phương pháp triển vọng nhất giải bài toán này là phân tích n ra thừa số nguyên
tố. Khi thực hiện được điều này, kẻ tấn công sẽ tìm ra số mũ bí mật d từ khóa công
khai và có thể giải mã theo đúng quy trình của thuật toán. Nếu kẻ tấn công tìm được
2 số nguyên tố p và q sao cho: n = pq thì có thể dễ dàng tìm được giá trị (p-1)(q-1)


×