Tải bản đầy đủ (.doc) (96 trang)

Xác thực điện tử và ứng dụng trong giao dịch hành chính

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 (4.69 MB, 96 trang )

ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ

TRẦN XUÂN PHƯƠNG

XÁC THỰC ĐIỆN TỬ
VÀ ỨNG DỤNG TRONG GIAO DỊCH HÀNH CHÍNH

LUẬN VĂN THẠC SĨ NGÀNH CÔNG NGHỆ THÔNG TIN

Hà Nội - 2015


ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ

TRẦN XUÂN PHƯƠNG

XÁC THỰC ĐIỆN TỬ
VÀ ỨNG DỤNG TRONG GIAO DỊCH HÀNH CHÍNH
Ngành: Công nghệ thông tin
Chuyên ngành: Kỹ thuật phần mềm
Mã số: 60.48.01.03

LUẬN VĂN THẠC SĨ NGÀNH CÔNG NGHỆ THÔNG TIN

NGƯỜI HƯỚNG DẪN KHOA HỌC: TS. LÊ PHÊ ĐÔ

Hà Nội - 2015



i

LỜI CẢM ƠN
Luận văn Thạc sĩ này được thực hiện tại Đại học Công nghệ - Đại học Quốc gia
Hà Nội dưới sự hướng dẫn của TS. Lê Phê Đô. Xin được gửi lời cảm ơn sâu sắc đến
thầy về định hướng khoa học, liên tục quan tâm, tạo điều kiện thuận lợi trong suốt
quá trình nghiên cứu hoàn thành luận văn này. Tôi xin được gửi lời cảm ơn đến các
thầy, cô trong Bộ môn Công nghệ phần mềm cũng như Khoa Công nghệ Thông tin
đã mang lại cho tôi những kiến thức vô cùng quý giá và bổ ích trong quá trình theo
học tại trường.
Tôi cũng xin chân thành cảm ơn đến gia đình, bạn bè đã quan tâm và động viên
giúp tôi có thêm nghị lực, cố gắng để hoàn thành luận văn này.
Do thời gian và kiến thức có hạn nên luận văn chắc chắn không tránh khỏi những
thiếu sót nhất định. Tôi rất mong nhận được những sự góp ý quý báu của thầy cô, đồng
nghiệp và bạn bè.
Hà Nội, tháng 10 năm 2015

Trần Xuân Phương


ii

LỜI CAM ĐOAN
Tôi xin cam đoan luận văn “Xác thực điện tử và ứng dụng trong giao dịch
hành chính” là công trình nghiên cứu của cá nhân tôi dưới sự hướng dẫn của TS. Lê
Phê Đô, trung thực và không sao chép của tác giả khác. Trong toàn bộ nội dung nghiên
cứu của luận văn, các vấn đề được trình bày đều là những tìm hiểu và nghiên cứu của
chính cá nhân tôi hoặc là được trích dẫn từ các nguồn tài liệu có ghi tham khảo rõ
ràng, hợp pháp.
Tôi xin chịu mọi trách nhiệm cho lời cam đoan này.

Hà Nội, tháng 10 năm 2015

Trần Xuân Phương


iii

MỤC LỤC


iv

DANH SÁCH CÁC KÝ HIỆU VÀ CHỮ VIẾT TẮT
STT

Từ viết tắt

Ý nghĩa

1

CNTT

Công nghệ thông tin

2

DES

Data Encryption Standard


3

NIST

National Institute of Standards and Technology

4

NBS

National Bureau of Standards

5

RSA

Ron Rivest, Adi Shamir, Len Adleman

6

Sigk

Thao tác ký số

7

Verk

Thao tác kiểm tra chữ ký


8

SHS

Secure Hash Standard

9

SHA

Secure Hash Algorithm

10

MD5

Message-Digest Algorithm 5

11

AES

Advanced Encryption Standard

12

OTP

One Time Password


13

DSA

Digital Signature Algorithm

14



Phép toán XOR

15



Phép nhân hai đa thức

16



Phép nhân trên trường hữu hạn


v

DANH MỤC BẢNG BIỀU
[


DANH MỤC HÌNH VẼ


1

MỞ ĐẦU
Hành chính điện tử đang phát triển mạnh mẽ ở nhiều quốc gia trên thế giới trong đó
có Việt Nam. Với hành chính điện tử, người dân và các doanh nghiệp dễ dàng tiếp cận,
trao đổi công việc với các cơ quan nhà nước. Đồng thời thúc đẩy công cuộc cải cách
hành chính nhằm giảm thiểu sự cồng kềnh của bộ máy tổ chức, nâng cao hiệu quả làm
việc, đáp ứng nhu cầu công khai và minh bạch trong công tác quản lý cũng như giảm
thiểu số lượng và thời gian cho các hoạt động thủ tục hành chính.
Trên thế giới, hành chính điện tử được nhiều quốc gia bắt tay xây dựng từ sớm và
đạt được những thành quả nhất định như: Singapore, Anh, Hàn Quốc… Đặc biệt, tại
Singapore hàng ngàn dịch vụ công được cung cấp đến người dân và doanh nghiệp
thông mạng internet, máy tính và các thiết bị di động. Người dân có thể truy cập tất cả
các dịch vụ công thông qua một cổng thông tin quốc gia duy nhất.
Tại Việt Nam, nền hành chính điện tử cũng từng bước phát triển và đạt được nhiều
thành tựu. Nhiều cơ quan nhà nước, các tỉnh thành đã triển khai các dịch vụ công trực
tuyến. Có thể kể đến như tổng cục Hải quan, tổng cục thuế, thành phố Đà Nẵng…
được người dân và các doanh nghiệp đánh giá cao.
Trong nền hành chính điện tử, vấn đề chứng minh tính hợp pháp của người dùng,
đảm bảo an toàn, xác thực nguồn gốc và tính nguyên vẹn của thông tin trong các giao
dịch hành chính là một việc hết sức quan trọng và cần thiết. Trên thế giới và tại Việt
Nam đã áp dụng nhiều phương pháp bảo mật và xác thực như sử dụng một mật khẩu
chung duy nhất cho các dịch vụ, sử dụng mã xác thực OTP, các thuật toán mã hóa và
chữ ký số… Trong luận văn này, tôi sẽ tìm hiểu, nghiên cứu một số thuật toán nền tảng
trong xác thực điện tử, nghiên cứu về các phương pháp xác thực phổ biến hiện nay,
đồng thời ứng dụng chữ ký số RSA và thuật toán mã hóa AES, xây dựng ứng dụng hỗ

trợ gửi và nhận văn bản tại trường Cao đẳng nghề Cơ khí nông nghiệp.
Nội dung của luận văn gồm các chương sau:
Chương 1. Trình bày cơ sở toán học của xác thực điện tử, số nguyên tố, số học
modulo, các phương pháp kiểm tra số nguyên tố.
Chương 2. Phân tích các hệ mật mã được sử dụng trong xác thực điện tử: hệ mật
RSA và các biến thể, hệ mật AES, hàm băm SHA-1, SHA-2, SHA-3
Chương 3. Trình bày các vấn đề về xác thực điện tử. Xác thực dữ liệu, xác thực
thực thể và xác thực hai yếu tố.
Chương 4. Trình bày các vấn đề về giao dịch hành chính điện tử. Phân tích, thiết kế
và thử nghiệm chương trình ứng dụng chữ ký số RSA và mã hóa AES trong việc quản
lý, gửi và nhận văn bản tại trường Cao đẳng nghề cơ khí nông nghiệp.
Kết luận và hướng phát triển: Rút ra kết luận và hướng phát triển của luận văn.


2

Chương 1: CƠ SỞ TOÁN HỌC CỦA XÁC THỰC ĐIỆN TỬ
Trong chương này, tác giả trình bày các cơ sở toán học của xác thực điện tử. Đầu
tiên, tác giả trình bày về số nguyên tố, một số dạng số nguyên tố đặc biệt được ứng
dụng phổ biến trong các hệ mật mã. Tiếp theo, tác giả trình bày một số lý thuyết về số
học modulo và các tiêu chuẩn và phương pháp kiểm tra số nguyên tố.
1.1. Số nguyên tố
Trong tập các số nguyên Z = {…, - 2, -1, 0, 1, 2, …}, chúng ta xét các số nguyên
dương mà chỉ chia hết cho 1 và chính nó. Tập các số như vậy được gọi là tập các số
nguyên tố.
Ví dụ các số nguyên tố: 2, 3, 5, 7, 11, …, 1299827, …
Số nguyên tố lớn nhất được tìm ra cho đến nay là 2 57885161 – 1 bao gồm 17425170
chữ số.
Theo ta có các kết quả sau:
Bảng 10 số nguyên tố lớn nhất được phát hiện ra cho tới thời điểm này:

Bảng 1.1. Bảng 10 số nguyên tố lớn nhất [18]
rank

prime

digits

who

when

reference

1

257885161-1

17425170

G13

2013

Mersenne 48??

2

243112609-1

12978189


G10

2008

Mersenne 47??

3

242643801-1

12837064

G12

2009

Mersenne 46??

4

237156667-1

11185272

G11

2008

Mersenne 45?


5

232582657-1

9808358

G9

2006

Mersenne 44

6

230402457-1

9152052

G9

2005

Mersenne 43

7

225964951-1

7816230


G8

2005

Mersenne 42

8

224036583-1

7235733

G7

2004

Mersenne 41

9

220996011-1

6320430

G6

2003

Mersenne 40


10
213466917-1
4053946
G5 2001
Mười số nguyên tố sinh đôi lớn nhất được tìm thấy là:

Mersenne 39

Bảng 1.2. Bảng 10 số nguyên tố sinh đôi lớn nhất [18]
rank

prime

digits

who

when

reference

1

3756801695685·2666669+1 200700 L1921 2011 Twin (p+2)

2

3756801695685·2666669-1 200700 L1921 2011 Twin (p)



3

3

65516468355·2333333+1 100355

L923 2009 Twin (p+2)

4

65516468355·2333333-1 100355

L923 2009 Twin (p)

5

4884940623·2198800+1

59855 L4166 2015 Twin (p+2)

6

4884940623·2198800-1

59855 L4166 2015 Twin (p)

7

2003663613·2195000+1


58711

L202 2007 Twin (p+2)

8

2003663613·2195000-1

58711

L202 2007 Twin (p)

9

38529154785·2173250+1

52165 L3494 2014 Twin (p+2)

10

38529154785·2173250-1

52165 L3494 2014 Twin (p)

Cho đến nay, mười số nguyên tố dạng Mersener lớn nhất tìm được cũng chính là
mười số nguyên tố lớn nhất ở thời điểm này.
Người ta còn nghiên cứu các số nguyên tố dạng p#±1 (tích của các số nguyên tố nhỏ
hơn hoặc bằng p cộng trừ 1). Số nguyên tố lớn nhất dạng p#±1 là số 1.098.133#-1 gồm
476.311 chữ số, được phát hiện ra vào tháng 3 năm 2012. Mười số nguyên tố lớn nhất

dạng p#±1:
Bảng 1.3. Bảng 10 số nguyên tố dạng p# ± 1 [18]
rank

Prime

digits

who

when

Reference

1

1098133#-1

476311

p346

2012

Primorial

2

843301#-1


365851

p302

2010

Primorial

3

392113#+1

169966

p16

2001

Primorial

4

366439#+1

158936

p16

2001


Primorial

5

145823#+1

63142

p21

2000

Primorial

6

42209#+1

18241

p8

1999

Primorial

7

24029#+1


10387

C

1993

Primorial

8

23801#+1

10273

C

1993

Primorial

9

18523#+1

8002

D

1989


Primorial

10

15877#-1

6845

CD

1992

Primorial

Số nguyên tố lớn nhất dạng n!+1 là số 150.209!+1 gồm 712.355 chữ số, được
chứng minh vào tháng 10 năm 2011. Mười số nguyên tố lớn nhất dạng n!+1
Bảng 1.4. Bảng 10 số nguyên tố lớn nhất dạng n! + 1 [18]
rank

prime

digits

Who

When

reference



4

1

150209!+1

712355

p3

2011

Factorial

2

147855!-1

700177

p362

2013

Factorial

3

110059!+1


507082

p312

2011

Factorial

4

103040!-1

471794

p301

2010

Factorial

5

94550!-1

429390

p290

2010


Factorial

6

34790!-1

142891

p85

2002

Factorial

7

26951!+1

107707

p65

2002

Factorial

8

21480!-1


83727

p65

2001

Factorial

9

6917!-1

23560

g1

1998

Factorial

10

6380!+1

21507

g1

1998


Factorial

Số nguyên tố p được gọi là số nguyên tố dạng Sophie German nếu 2p+1 cũng là số
nguyên tố. Số nguyên tố dạng Sophie Germain có ứng dụng nhiều trong mật mã.
Chẳng hạn, hệ mật ElGamal sẽ có độ mật cao nếu số nguyên tố ta chọn có dạng 2p+1,
nghĩa là p là số nguyên tố Sophie Germain. Những số nguyên tố dạng Spophie
Germain đầu tiên là: 2, 3, 5, 11, 23, 29, 41, 53, 83, 89, 113, 131, 173, 179, 191, 233,
239, 251, 281, 293, 359, 419, 431, 443, 491, 509, 593, 641, 653, 659, 683, 719, 743,
761, 809, 911, 953, 1013, 1019, 1031, 1049, 1103, 1223, 1229, 1289, 1409, 1439,
1451, 1481, 1499, 1511,1559
Mười số nguyên tố dạng Sophie German lớn nhất là:
Bảng 1.5. Bảng 10 số nguyên tố dạng Sophie German lớn nhất [18]
rank

Prime

digits

who when

reference

1

18543637900515·2666667-1 200701 L2429 2012 Sophie Germain (p)

2

183027·2265440-1 79911 L983 2010 Sophie Germain (p)


3

648621027630345·2253824-1 76424

x24 2009 Sophie Germain (p)

4

620366307356565·2253824-1 76424

x24 2009 Sophie Germain (p)

5

607095·2176311-1 53081 L983 2009 Sophie Germain (p)

6

48047305725·2172403-1 51910

L99 2007 Sophie Germain (p)

7

137211941292195·2171960-1 51780

x24 2006 Sophie Germain (p)

8


31737014565·2140003-1 42156

L95 2010 Sophie Germain (p)

9

14962863771·2140001-1 42155

L95 2010 Sophie Germain (p)

10
33759183·2123458-1 37173 L527 2009 Sophie Germain (p)
1.2. Hai số nguyên tố cùng nhau


5

Hai số m và n được gọi là nguyên tố cùng nhau nếu ước số chung lớn nhất của
chúng bằng 1. Ký hiệu gcd(m,n) = 1
Ví dụ: 9 và 14 là nguyên tố cùng nhau vì gcd(9,14) = 1.
1.3. Số học modulo
1.3.1 Hàm Euler
Hàm Euler: Cho số nguyên dương n, số lượng các số nguyên dương bé hơn n và
nguyên tố cùng nhau với n ký hiệu φ (n) được gọi là hàm Euler.
Nhận xét: Nếu p là số nguyên tố thì φ ( p) = p − 1 .
Định lý về hàm Euler:
Nếu n là tích của hai số nguyên tố n = p.q, thì:
φ (n) = φ ( p ).φ (q) = ( p − 1)(q − 1)

1.3.2. Không gian Zn, Zn*

Không gian Zn: là tập các số nguyên {0, 1, 2, ..., n - 1}. Các phép toán trong Z n như
cộng, trừ, nhân, chia đều được thực hiện theo modulo n.
Ví dụ:
Z9 = {0, 1, 2, 3, 4, 5, 6, 7, 8}
Các phép toán trong Z9 được thực hiện theo modulo 9:
7 + 8 = 6 vì 7 + 8 = 15 mod 9 = 6.
Không gian Zn*: là tập các số nguyên a ∈ Zn, nguyên tố cùng nhau với n.
Ký hiệu:
Zn* = {a ∈ Zn | gdc(n,a)=1}; Số phần tử của Zn* là φ (n)
Nếu n là một số nguyên tố thì: Zn* = {a ∈ Zn | 1 ≤ a ≤ n - 1}
Ví dụ: Z5 = {0, 1, 2, 3, 4} thì Z5* = {1, 2, 3, 4}
1.3.3. Đồng dư thức
Cho số nguyên dương n, hai số nguyên a, b được gọi là đồng dư theo modulo n nếu
n|(a-b). Ký hiệu là:
a ≡ b (mod n)
* Phần tử nghịch đảo:
Cho hai số nguyên dương n và a ∈ Z n* . Số x ∈ {0,1,2...,n-1) sao cho: ax ≡ 1 (mod
n) được gọi là phần tử nghịch đảo của a theo modulo n. Ký hiệu là: x = a -1 (mod n).
1.3.4. Giá trị thặng dư bậc hai – Ký hiệu Legendre[5]


6

Cho n là một số nguyên, y thuộc Zn được gọi là thặng dư bậc hai modulo n nếu tồn
tại x

Zn sao cho y ≡ x2 (modulo n).
a

Nếu p là số nguyên tố lẻ và a là một số tự nhiên thì kí hiệu Legendre  ÷ được xác

 p
định như sau:

a
 ÷ =
 p

0

nếu a ≡ 0 (mod p)

1

nếu a là giá trị thặng dư bậc hai của p

-1

nếu a không phải là giá trị thặng dư bậc hai của p.

1.3.5. Ký hiệu Jacobi[5]
t
t
t
Cho n là một số nguyên dương lẻ có phân tích chuẩn n = p1 p2 ... pm ở đây
1

2

m


pi , i = 1, 2,..., m là các số nguyên tố. Khi a là một số nguyên tố cùng nhau với n thì ký

a
n

hiệu Jacobi  ÷ được định nghĩa như sau:
t1

t2

tm

 a  a   a 
a
a 
=
=  ÷  ÷ ... ÷
 ÷  t t
t ÷
 n   p1 p2 ... pm   p1   p2   pm 
1

2

m

Ví dụ:
 14   14  14   2  4 
 ÷ =  ÷ ÷ =  ÷ ÷ = −1.1 = −1
 15   3  5   3  5 


1.4. Các tiêu chuẩn và phương pháp kiểm tra số nguyên tố
1.4.1. Tiêu chuẩn Euler và số giả nguyên tố Euler
Euler chứng minh rằng với mọi số nguyên tố p và số a, 1 ≤ a < p thì:
a
( p −1)/2
mod p
 ÷≡ a
 p

Ví dụ: a = 6, p = 7
(6/7) – Ký hiệu Legendre = -1
6(7-1)/2 (mod 7) = 6
Số giả nguyên tố Euler: Hợp số n được gọi là số giả nguyên tố Euler cơ sở a (1 < a
< n) nếu:
a
( n −1)/2
mod n
 ÷= a
n


7
a

Trong đó:  ÷ là ký hiệu Jacobi.
n
1.4.2. Định lý nhỏ Fermat và số giả nguyên tố Fermat
Định lý Fermat: Nếu p là số nguyên tố, a là số nguyên thì a p ≡ a (mod p ) .
Một cách phát biểu khác của định lý như sau:

Nếu p là số nguyên tố và a là số nguyên tố cùng nhau với p thì a p-1 - 1 sẽ chia hết
cho p, nghĩa là:
ap-1 ≡ 1 (mod p)
Ví dụ: 47 4 (mod 7); 47-1 1 (mod 7).
Số nguyên tố Fermat: Là một số nguyên dương có dạng:
n

Fn = 2 2 + 1
Rất nhiều số Fermat là số nguyên tố nên một thời người ta cho rằng tất cả các số có
dạng đó đều là số nguyên tố. Với n là số không âm. Các số Fermat đầu tiên bao gồm:
F0 = 21 + 1 = 3

F1 = 22 + 1 = 5

F2 = 24 + 1 = 17

F3 = 28 + 1 = 257

F4 = 216 + 1 = 65.537

F5 = 232 + 1 = 4.294.967.297

F6 = 264 + 1 = 18.446.744.073.709.551.617
F7 = 2128 + 1 = 340.282.366.920.938.463.463.374.607.431.768.211.457
F8 = 2256 + 1 =
115.792.089.237.316.195.423.570.985.008.687.907.853.269.984.665.640.564.039.457
.584.007.913.129.639.937
1.4.3. Số nguyên tố Mersenne
Số nguyên tố Mersenne là một số Mersenne có dạng lũy thừa của 2 trừ 1: 2n − 1.
Một số định nghĩa yêu cầu lũy thừa n phải là số nguyên tố.

Điều kiện cần để Mn là số nguyên tố là n là số nguyên tố nhưng ngược lại không
đúng.
Ví dụ:
31 = (25 - 1) là một số nguyên tố
15 = (24 -1) là hợp số vì 4 là hợp số.
Số Mersenne 2047 = 211 − 1 với 11 là số nguyên tố nhưng 2027 không phải số
nguyên tố vì nó chia hết cho 89 và 23.


8

1.4.4. Một số phương pháp kiểm tra số nguyên tố
1.4.4.1. Thuật toán Soloway - Strassen
Giả sử p là số nguyên tố lẻ và a là số nguyên không chia hết cho p. Khi đó theo
chuẩn Euler thì:
a

p −1
2

a
≡  ÷( mod p ) .
 p

Như vậy, để kiểm tra tính nguyên tố của một số nguyên dương lẻ n, ta có thể lấy
một số nguyên a nguyên tố cùng nhau với n và kiểm tra đồng dư thức
a

n −1
2


a
≡  ÷( mod n ) ,
n

Trong đó, vế phải của đồng dư thức là ký hiệu Jacobi. Nếu việc kiểm tra này không
đúng thì n chắc chắn là hợp số. Ngược lại, ta chưa kết luận được chính xác n là số
nguyên tố, nhưng nhiều khả năng n là số nguyên tố.
Thuật toán Solovay - Strassen:
Input: Số nguyên dương lẻ n và tham số k.
Output: Kết luận n là nguyên tố hay hợp số.
1. Khi i chạy từ 1 đến k thì tiến hành làm
1.1 Chọn ngẫu nhiên số nguyên a, 1 < a < n – 1.
1.2 Tính r = a

n −1
2

mod n bằng phương pháp bình phương liên tiếp.

1.3 Nếu r ≠ 1 và r ≠ n – 1 thì RETURN (hợp số).

a
1.4 Tính kí hiệu Jacobi s =  ÷
n
1.5 Nếu r ≠ s (mod n) thì RETURN (hợp số)
2. RETURN (nguyên tố).
Độ phức tạp của thuật toán: O (n2)

1.4.4.2. Thuật toán Miler-Rabin

* Tiêu chuẩn Miler – Rabin:
Giả sử p là một số nguyên tố lẻ, khi đó p - 1 là số chẵn và ta có thể viết p − 1 dưới
dạng: p – 1 = 2s . m, trong đó s là một số tự nhiên >=1 và m là số lẻ.
- Điều này nghĩa là ta rút hết các thừa số 2 khỏi p − 1. Lấy số a bất kỳ trong tập
{1,2,..,p-1}.


9
k

Xét dãy số xk ≡ a 2 .m với k=0,1,2,...,s.
2
p −1
Khi đó xk = ( xk −1 ) , với k=1,2,...,s và xs = a

Từ định lý Fermat nhỏ:
a p −1 ≡ 1(mod p )

hay
xs ≡ 1(mod p )

hay
xs2−1 ≡ 1(mod p )

Do đó, hoặc xs −1 ≡ 1(mod p ) hoặc xs −1 ≡ −1(mod p ) .
Nếu xs −1 ≡ −1(mod p ) ta dừng lại,
Ngược lại ta tiếp tục với xs − 2 .
Sau một số hữu hạn bước:
- hoặc ta có một chỉ số k, 0 ≤ k ≤ s − 1 sao cho xk ≡ −1(mod p) ,
- hoặc tới k=0 ta vẫn có xk ≡ 1(mod p ) .

=> Ta có mệnh đề Q(p,a) như sau:
Nếu p là số nguyên tố lẻ và p - 1 = 2s.m thì với mọi a: 0k

- hoặc xk = a 2 .m ≡ 1(mod p) với mọi k=0,1,2,...,s
k

- hoặc tồn tại k: 0 ≤ k ≤ s sao cho xk = a 2 .m ≡ −1(mod p) .
* Thuật toán Miller – Rabin:
INPUT: Số tự nhiên lẻ n.
OUTPUT : Kết luận n là nguyên tố hay hợp số
1. Phân tích n – 1 = 2S. m trong đó s >= 1 và m là số tự nhiên lẻ
2. Chọn ngẫu nhiên số tự nhiên a {2,...,n-1}.
3. Đặt b = am (mod n)
4. Nếu b ≡ 1 (mod n) thì RETURN (nguyên tố). Kết thúc.
5. Cho k chạy từ 0 đến s-1:
5.1. Nếu b ≡ −1 (mod n) RETURN (nguyên tố). Kết thúc.
5.2. Thay b:= b2 (mod n).


10

6. RETURN (hợp số). Kết thúc.
Độ phức tạp của thuật toán: O (n2)
Ví dụ: Kiểm tra tính nguyên tố của số n = 23:
N = 23 => N – 1 = 22 = 21.11
Chọn a = 10
b = am (mod n) ⇔ b = 1011 (mod 23) = 22
=> b ≡ −1(mod 23) => n là số nguyên tố.
1.4.4.3. Thuật toán AKS

Tháng 8 năm 2002, ba tác giả Manindra Agrawal, Neeraj Kayal va Nitin Saxena
(Viện công nghệ Kanpur Ấn Độ) công bố thuật toán kiểm tra tính nguyên tố với độ
phức tạp đa thức (thường gọi là thuật toán AKS).
Thuật toán xuất phát từ ý tưởng sau:
Một số nguyên n (n>2) là số nguyên tố khi và chỉ khi:
( x − a ) n ≡ ( x n − a )(mod n)

( *)

Đúng với mọi số nguyên a là số nguyên tố cùng nhau với n (hoặc chỉ cần đúng với
số giá trị của a, đặc biệt khi a = 1).
Với định lý trên, thời gian tính của thuật toán sẽ là một hàm mũ. Tiến hành rút gọn
hai vế của đẳng thức trên theo modulo x r - 1. Sau đó lại rút gọn các hệ số của kết quả
thu được theo modulo n. Ta được thức sau:
( x − a ) n ≡ ( x n − a )(mod x r − 1, n)

(**)

Hay ta có:

( x − a)

n

− ( x n − a ) = nf + ( x r − 1) g (***)

Biểu thức (**) có thể xảy ra trong một số trường hợp p là hợp số, nhưng người ta đã
chứng minh được rằng không hợp số p nào thoả mãn (**) với mọi a nằm trong vùng
1 < a < r log p . Như vậy việc kiểm tra (**) cho các số a nằm trong vùng này sẽ tương


đương với việc kiểm tra tính nguyên tố của p và thuật toán có độ phức tạp là đa thức.
Ví dụ:
Với n = 3, a = 1:

( x − a)
Với n = 3, a = 2:

n

mod n = ( x − 1) mod 3 = ( x 3 − 3x 2 + 3x − 1) mod 3
3

= ( x 3 − 1) mod3 = ( x n − a ) mod n


11

( x − a)

n

mod n = ( x − 2 ) mod3 = ( x 3 − 6 x 2 + 12 x − 8 ) mod 3
3

= ( x3 − 2 ) mod3 = ( x n − a ) mod n

Thuật toán AKS:
INPUT: Số tự nhiên n > 1.
OUTPUT: Prime
1. if (n is of the form ab, b<1) output COMPOSITE;

2. r = 2;
3. while (r4.

if (gcd(n,r) ≠ 1) output COMPOSITE;

5.

if (r is prime)

6.

let q be the largest prime factor of r −1;

7.

if (q ≥ 4 r log(n)) ∧ (n

8.

break;

9.

r −1
q

1(mod r ))

r ← r + 1;


10. }
11. for a = 1 to 2 r log n
12. if (( x −a)n

(xn −a)(mod xr −1 , n )) output COMPOSITE;

13. output PRIME;
Thuật toán AKS trên đây được chứng tỏ là có độ phức tạp thời gian là đa thức cỡ
O(log12n) khi thử trên số n bất kỳ.

1.5. Hàm một chiều
Một hàm một chiều là hàm mà dễ dàng tính toán ra quan hệ một chiều nhưng rất
khó để tính ngược lại.
Ví dụ: biết x thì có thể dễ dàng tính ra f(x), nhưng nếu biết f(x) thì rất khó tính ra
được x. Trong trường hợp này khó có nghĩa là để tính ra được kết quả thì phải mất rất
nhiều thời gian để tính toán.
f(x) được gọi là hàm một phía có cửa sập nếu tính xuôi y = f(x) thì dễ nhưng tính x
= f-1(x) thì khó tuy nhiên nếu có “cửa sập” thì vấn đề tính ngược trở nên dễ dàng. Cửa
sập đây là một điều kiện nào đó giúp chúng ta dễ dàng tính ngược.


12

Ví dụ:
Trong hệ mật RSA, y = x e mod n tính xuôi thì dễ nhưng tính x = y d mod n là khó vì
phải biết d trong đó d thỏa mãn e*d ≡ 1 (mod(ϕ(n)). Nếu biết cửa sập là các giá trị p, q
thì việc tính d trở nên dễ dàng.
1.6. Phép chứng minh không tiết lộ tri thức (thông tin)[2]
“Chứng minh không tiết lộ thông tin” không có nghĩa là “không để lộ thông tin” mà

nghĩa là “để lộ thông tin ở mức ít nhất” về sự vật sự việc cần chứng minh. Với những
“thông tin để lộ”, người xác minh không có nhiều hiểu biết (knowledge) về sự vật sự
việc, họ chỉ thu được chút ít thông tin (coi như “zero knowledge”) về đặc điểm tính
chất của nó.
Giao thức ∑ là giao thức “Hỏi - Đáp” 3 bước để P chứng minh cho V một vấn đề
nào đó.
- P gửi cho V - một giá trị ngẫu nhiên.
- V gửi lại P - một giá trị ngẫu nhiên như là giá trị dùng để kiểm thử.
- P gửi đáp lại V một giá trị.
Kết quả V thừa nhận hoặc bác bỏ vấn đề P chứng minh.
Kết luận chương 1
Trong chương này, luận văn đã tìm hiểu, phân tích các cơ sở toán học của xác thực
điện tử. Luận văn đã trình bày một số vấn đề về số nguyên tố, các khái niệm số học
modulo, các phương pháp kiểm tra số nguyên tố, khái niệm hàm một chiều, phép
chứng minh không tiết lộ tri thức.


13

CHƯƠNG 2: CƠ SỞ MẬT MÃ CỦA XÁC THỰC ĐIỆN TỬ
Hệ mã hóa khóa công khai ngày càng được ứng dụng rộng rãi, đặc biệt trong lĩnh
vực xác thực điện tử. Trong các hệ mã hóa khóa công khai, nổi tiếng và phổ biến nhất
đó là hệ mật RSA. Kể từ khi ra đời đến nay, RSA luôn được tin tưởng và sử dụng trong
các hệ thống đòi hỏi độ bảo mật cao. Để đáp ứng được yêu cầu của thực tế, chống lại
nhiều phương pháp tấn công, hệ mật RSA được nhiều nhà khoa học nghiên cứu, cải
tiến và đề xuất các biến thể mới.
Trong thực tế, hệ mã hóa khóa công khai, tiêu biểu là hệ mật RSA được ứng nhiều
trong lĩnh vực xác thực điện tử bằng chữ ký số. Còn mã hóa dữ liệu thường sử dụng
các hệ mã hóa khóa đối xứng để cải thiện tốc độ. Một trong những hệ mã hóa khóa đối
xứng được sử dụng rộng rãi hiện nay là hệ mật AES (Advanced Encryption Standard).

Nội dung chương này, tác giả sẽ phân tích, trình bày các cơ sở mật mã của xác thực
điện tử; phân tích hệ mật RSA và một số biến thể mới của RSA, đồng thời tác giả cũng
sẽ phân tích cấu trúc và hoạt động của hệ mật AES; phân tích các hàm băm mật mã
được sử dụng trong xác thực điện tử.
2.1. Hệ mã hóa khóa công khai
Một hệ mật mà khóa giải mã khác khóa mã hóa với khóa mã hóa được công khai
được gọi là mật mã khóa công khai. Mỗi khóa K là cặp (K e,Kd) trong đó khóa mã hóa
là Ke được gọi là khóa công khai (có giá trị mà ai cũng biết), khóa giải mã K d được gọi
là khóa riêng hay khóa bí mật và đảm bảo rằng khó tính được Kd từ Ke.
Hệ mật khóa công khai gồm 5 thành phần:
- Bản rõ: là thông điệp có thể đọc, là đầu vào của giải thuật.
- Giải thuật mã hóa.
- Khóa công khai và khóa bí mật: một cặp khóa được chọn sao cho một khóa dùng
để mã hóa và một khóa dùng để giải mật.
- Bản mật: thông điệp ở đầu ra ở dạng không đọc được, phụ thuộc vào bản rõ và
khóa. Với cùng một thông điệp, nếu sử dụng 2 khóa khác nhau sẽ sinh ra 2 bản mã
khác nhau.
- Giải thuật giải mã.
Các bước thực hiện:
- Người nhận B tạo một cặp khóa để mã hóa và giải mã là K e và Kd. Lựa chọn một
khóa làm khóa công khai (Ke) và một khóa làm khóa bí mật (Kd).
- B gửi khóa công khai Ke cho A. Khóa này được công khai và ai cũng có thể biết.
- A dùng Ke để mã hóa thông điệp và gửi thông điệp đã mã hóa cho B.
- B dùng Kd để giải mã thông điệp đã nhận được từ A.


14

Hình 2.1. Sơ đồ hệ mã hóa khóa công khai
2.2. Hệ mật RSA

2.2.1. Giới thiệu hệ mật RSA
Hệ mật được Ron Rivest, Adi Shamir và Len Adleman mô tả lần đầu tiên vào năm
1977 tại Học viện Công nghệ Massachusetts (MIT). Tên của hệ mật lấy từ 3 chữ cái
đầu của tên 3 tác giả.
Hệ mật RSA có hai khóa: khóa công khai (hay khóa công cộng) và khóa bí mật (hay
khóa cá nhân). Mỗi khóa là những số cố định sử dụng trong quá trình mã hóa và giải
mã. Khóa công khai được công bố rộng rãi cho mọi người và được dùng để mã hóa.
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. Nói cách khác, mọi người đều có thể mã hóa nhưng chỉ có người
biết khóa cá nhân (bí mật) mới có thể giải mã được.
Độ an toàn của RSA dựa trên độ khó của bài toán phân tích ra thừa số nguyên tố của
các số nguyên lớn:
"Cho một số nguyên n ∈ N, tìm các số nguyên tố P i, i = 1, 2, ..., r ∈ N, với
r

P1
∏P
i =1

i

ei

, trong đó ei ≥ 1".

Sinh khóa:
Giả sử A và B cần trao đổi thông tin bí mật thông qua một kênh không an toàn (ví
dụ như Internet). Với thuật toán RSA, mỗi người sẽ tạo ra cho mình cặp khóa gồm
khóa công khai và khóa bí mật theo các bước sau:

- Chọn 2 số nguyên tố lớn p và q với p ≠ q.
- Tính: n = p*q


15

- Tính: giá trị hàm số Ơle ∅(n) = (p - 1)*(q - 1).
- 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).
- Tính: d sao cho de ≡ 1 mod ∅(n).
Thành phần công khai (n,e)
Thành phần bí mật (p, q, d)
Mã hóa:
Giả sử A muốn gửi một thông điệp M cho B; B là người nhận và phải giải mã.
Người A sẽ làm theo các bước sau:
- Xác thực khóa công khai (n,e) của B.
- Biểu diễn thông điệp dưới dạng một số nguyên nằm trong đoạn [0, n-1]
- Tính c = m e mod n
- Gửi bản mã hóa c đến B.
Giải mã:
Khi B nhận được c từ A. B làm các thao tác sau để thu được bản rõ:
- Tính giá trị m = cd mod n
- Biến đổi giá trị số m thành thông điệp m (Phương pháp biến đổi đã được A và B thỏa
thuận từ trước).
Ví dụ:
- Chọn p = 181, q = 193. Tính được n = p*q = 34933, φ (n) = 34560.
- e = 173. Ta tính được d = e-1 mod φ (n) = 173-1 mod 34560 = 2597.
Khóa công khai: (173, 34933)
Khóa bí mật: (2597, 34933).
- Giả sử bản rõ M = 68 ta tính được:

C = Me mod n = 68173 mod 34933 = 267
- Giải mã:
M = Cd mod n = 2672597 mod 34933 = 68.
2.2.2. Độ an toàn của hệ mật RSA
RSA là một trong những hệ mật được sử dụng rộng rãi nhất hiện nay; Nó được triển
khai và ứng dụng trong nhiều hệ thống thông tin đòi hỏi có độ bảo mật cao như những


16

hệ thống thông tin thương mại hay các hệ thống thông tin sử dụng trong lĩnh vực hành
chính.
Sự an toàn của hệ mật RSA hay chính là sự an toàn của thành phần khóa bí mật
(private key) phụ thuộc vào tính khó của việc phân tích thừa số nguyên tố của các số
lớn.
Như đã biết Z = (n, e) là thành phần công khai. Nếu biết phân tích thừa số nguyên tố
của n là n = p*q thì sẽ tính được φ (n) = (p− 1)(q − 1) do đó tính được d ≡ e −1 (mod φ (n)) .
Tuy nhiên nếu không biết trước p, q thì không có một thuật toán hiệu quả nào để
phân tích thừa số nguyên tố đối với n, tức là tìm được p, q khi n lớn. Nghĩa là không
thể tìm được φ (n) và do đó không tính được d.
Từ khi ra đời đến nay, RSA đã được phân tích và tìm cách tấn công bằng nhiều
phương pháp khác nhau. Các phương pháp này chủ yếu tập trung vào các kẽ hở của
RSA, có nhiều phương pháp tấn công, có thể kể đến là: tấn công cơ bản, tấn công số
mũ công khai nhỏ, tấn công số mũ bí mật nhỏ, tấn công cài đặt...
2.2.3. Một số phương pháp RSA cải tiến
2.2.3.1. RSA với số mũ giải mã lớn[15]
Như chúng ta đã biết, hệ mật RSA với số mũ giải mã nhỏ là một kẽ hở dễ dàng bị
tấn công theo phương pháp của Wiener. Vì vậy, để đảm bảo an toàn cho hệ mật RSA,
các tác giả Hernández Encinas, Munoz Masqué và Queiruga Dios đã đề xuất phương
pháp sinh khóa giải mã d lớn có kích thước gần bằng modunlus n cho giải thuật RSA.

Giải thuật:
1. Chọn số mũ mã hóa là số nguyên dương e > 2.
2. Tạo ngẫu nhiên một số nguyên tố lớn p sao cho rp(rp - 1) ∈ Z e với rp = p (mod e).
*

3. Tính một số nguyên tố lớn q = rp(rp - 1)-1(mod e) + ke, với k là một số thuộc N.
4. Tính n = p.q, ∅(n) = (p - 1)(q - 1) và thỏa mãn 1 < e < ∅(n) và gcd(e, ∅(n))=1.
5. Sử dụng giải thuật Ơclid mở rộng tính giá trị d, 1< d < ∅(n), sao cho e.d ≡ 1
(mod ∅(n)) hoặc tính trực tiếp theo công thức d = (1 + (e - 1) ∅(n))/e.
Với giải thuật trên, ta có thể tạo ra một khóa giải mã d lớn gần bằng giá trị n trong
khi đó khóa mã hóa e lại rất nhỏ nhằm cải thiện tốc độ mã hóa. Đồng thời với giá trị d
lớn, ta có thể loại bỏ các phương pháp tấn công dựa vào số mũ giải mã.
Ví dụ:
- Chọn e = 7
- Chọn p = 17 → rp = p mod e = 17 mod 7 = 3.


17

rp(rp - 1) = 6 ∈ Z 7

*

- Tính q = r(r-1)-1 mod e + ke
q = 3.(2-1 mod 7) + 7 = 19
- Tính n = p.q = 17.19 = 323
- Tính ∅(n) = (p - 1)(q - 1) = 16.18 = 288
- Tính d:
d = e-1 mod ∅(n) = 7-1 mod 288 = 247
hoặc

d = (1 + (7 - 1)288)/7 = 247
- Mã hóa: M = 20
C = 207 mod 323 = 96
- Giải mã
M = 96247 mod 323 = 20
2.2.3.2. HE-RSA[16]
Giải thuật HE-RSA được Faraz Fatemi Moghaddam, Mean T. Alrashdan và
Omidrza Karimi công bố tháng 9 năm 2013. Đây là một biến thể của RSA được phát
triển dựa trên hệ mật RSA chuẩn, biến thể RSA-Small và biến thể Efficient - RSA.
Biến thể này được các tác giả đề nghị sử dụng để bảo mật cho công nghệ điện toán
đám mây. Nó có thể chống lại các cuộc tấn công thời gian, tấn công về toán học cũng
như các tấn công cơ bản.
Giải thuật:
Sinh khóa:
1. Chọn ngẫu nhiên hai số nguyên tố lớn p và q. Tính n = p . q
2. Tính ∅(n) = (p - 1)(q - 1)
3. Tính:
γ (n, h) = (ph - p0)(ph - p1)...(ph - ph-1) + (qh - q0)(qh - q1)...(qh - qh-1)
*
Trong đó h là một số nguyên thỏa mã h ∈ Z n

4. Chọn ngẫu nhiên một số nguyên: r thỏa mãn 1 < r < n và gcd(r, ∅(n)) = 1 và
gcd(r, γ ) =1. (r sẽ là một số nguyên nhỏ)
5. Tính giá trị e thỏa mãn r.e ≡ 1 mod ∅(n) và 1 < e < ∅(n)
6. Tính giá trị d thỏa mãn d.e ≡ 1 mod γ (n,h) và 1 < d < γ (n,h)


18

7. Khóa công khai: (e,n)

8. Khóa bí mật: (r,d,n)
Mã hóa:
1. A cần gửi cho B một thông điệp m. (m được biểu diễn dưới dạng một số nguyên 0
< M < n)
2. B gửi cho A khóa công khai của mình.
3. A thực hiện mã hóa m theo biểu thức sau:
c = me mod n
Giải mã:
1. B nhận được c từ A sẽ thực hiện giải mã để nhận được thông điệp gốc như sau:
m = cd mod n
Ví dụ:
- Chọn p = 13, q = 7 → n = p.q = 91
- Tính: ∅(n) = (p - 1)(q - 1) = 72
- Chọn h = 2 (gcd(2, 91) = 1)
γ (n, h) = (p2-p0)(p2-p1) + (q2-q0)(q2-q0)

=(132 - 130)(132-131) + (72-70)(72-71) = 28224
- Chọn r = 11 vì gcd(11,72) = 1 và gcd(11,28224) =1
- Tính e = r-1 mod ∅(n) = 11-1 mod 72 = 59
- Tính d = e-1 mod γ (n, h) = 59-1 mod 28224 = 3827
- Mã hóa: Giả sử cần mã hóa bản mã M = 8, ta có
C = Me mod n = 859 mod 91 = 57
- Giải mã:
M = Cd mod n = 573827 mod 59 = 8
2.2.3.3. Biến thể RSA của Seema Verman, Deepar Garg[17]
Tháng 7 năm 2014, Seeman Verman và Deepar Garg đã công bố một biến thể mới
của RSA, được phát triển từ Dual RSA và DRSA trước đó, nhằm tận dụng những ưu
điểm về bộ nhớ và tốc độ của hai phương pháp này.
Giải thuật được thực hiện như sau:
* Sinh khóa:

- Lựa chọn khóa bí mật d có độ lớn nd bit (nd > n/2)


×