Tải bản đầy đủ (.pdf) (66 trang)

Một số giao thức chứng minh không tiết lộ thông tin và ứng dụng xác thực tài khoản trực tuyến

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 (1.96 MB, 66 trang )

BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC SƯ PHẠM HÀ NỘI 2

LẠI THỊ THÚY

MỘT SỐ GIAO THỨC CHỨNG MINH
KHÔNG TIẾT LỘ THÔNG TIN VÀ ỨNG DỤNG
XÁC THỰC TÀI KHOẢN TRỰC TUYẾN

LUẬN VĂN THẠC SĨ TOÁN HỌC

HÀ NỘI, 2016


BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC SƯ PHẠM HÀ NỘI 2

LẠI THỊ THÚY

MỘT SỐ GIAO THỨC CHỨNG MINH
KHÔNG TIẾT LỘ THÔNG TIN VÀ ỨNG DỤNG
XÁC THỰC TÀI KHOẢN TRỰC TUYẾN
Chuyên ngành: Toán Ứng Dụng
Mã số: 60 46 01 12

LUẬN VĂN THẠC SĨ TOÁN HỌC

Người hướng dẫn khoa học: TS. Trần Văn Dũng

HÀ NỘI, 2016



LỜI CAM ĐOAN

Tôi xin cam đoan:
Những kết quả nghiên cứu trình bày trong luận văn này là hoàn toàn trung thực,
tôi không vi phạm bất cứ điều gì trong luật sở hữu trí tuệ và pháp luật Việt Nam.
Trong quá trình làm luận văn tôi có tham khảo các tài liệu có liên quan và đã ghi rõ
nguồn tài liệu tham khảo đó. Những kiến thức tôi trình bày trong luận văn này chưa
được trình bày hoàn chỉnh trong bất cứ tài liệu nào.

TÁC GIẢ LUẬN VĂN


LỜI CẢM ƠN
Đầu tiên, tôi xin gửi lời cảm ơn chân thành sâu sắc đến các thầy cô giáo trong
trường Đại học Sư Phạm Hà Nội 2 nói chung và các thầy cô trong khoa Toán
nói riêng đã tận tình dạy bảo, truyền đạt lại những kiến thức và kinh nghiệm quý
báu trong suốt thời gian qua.
Tôi xin trân trọng gửi lời cảm ơn tới thầy giáo TS Trần Văn Dũng, người đã
nhiệt tình giúp đỡ, trực tiếp chỉ bảo, hướng dẫn tôi trong suốt quá trình thực hiện
luận văn cao học. Trong quá trình làm việc với thầy, tôi đã tiếp thu thêm được
nhiều kiến thức bổ ích, những kinh nghiệm trong việc bảo mật dữ liệu, kinh nghiệm
trong việc thực hiện luận văn cùng thái độ làm việc nghiêm túc, hiệu quả. Đây là
những kinh nghiệm cần thiết, quý báu giúp tôi áp dụng vào thực tiễn sau này khi
làm việc.
Sau cùng, cho phép tôi cảm ơn các bạn bè, gia đình đã giúp đỡ, ủng hộ tôi rất
nhiều trong toàn bộ quá trình học tập cũng như nghiên cứu hoàn thành luận văn này.

Hà Nội, ngày


tháng

năm 2016

Học viên thực hiện

Lại Thị Thúy


MỤC LỤC
MỞ ĐẦU ............................................................................................................... 1
CHƯƠNG 1: CÁC KHÁI NIỆM VÀ KIẾN THỨC CƠ SỞ ................................... 3
1.1. Số học modulo ........................................................................................... 3
1.1.1. Khái niệm ............................................................................................. 3
1.1.2. Các phép toán trên modulo .................................................................... 4
1.1.3. Logarit rời rạc ....................................................................................... 9
1.2. Hệ mã khóa công khai .............................................................................. 12
1.2.1. Mã khóa công khai RSA ...................................................................... 12
1.2.2. Mã Elgamal ......................................................................................... 14
1.2.3. Trao đổi khóa Diffie – Hellman........................................................... 16
1.2.4. Chữ ký điện tử DSA ............................................................................. 16
CHƯƠNG 2: CÁC GIAO THỨC CHỨNG MINH KHÔNG TIẾT LỘ THÔNG TIN
............................................................................................................................. 19
2.1.Cam kết ..................................................................................................... 19
2.2. Khái niệm chứng minh không tiết lộ thông tin .......................................... 25
2.3. Giao thức Sigma ....................................................................................... 29
2.3.1. Giao thức định danh Schorr ................................................................... 30
2.3.2. Giao thức Chaum – Pederson ................................................................. 33
2.3.3. Giao thức “hoặc” ................................................................................... 36
2.3.4. Giao thức kết hợp ................................................................................... 39

CHƯƠNG III: XÁC THỰC TÀI KHOẢN TRỰC TUYẾN DỰA TRÊN CHỨNG
MINH KHÔNG TIẾT LỘ THÔNG TIN ............................................................... 43
3.1. Vấn đề an ninh của xác thực tài khoản trực tuyến ..................................... 43
3.2. Lược đồ hệ thống xác thực tài khoản trực tuyến ........................................ 44
3.3. Đặc tả các thành phần của hệ thống ........................................................... 47
3.4. Minh họa các bước triển khai .................................................................... 50
3.5. Đánh giá .................................................................................................... 53
KẾT LUẬN, KIẾN NGHỊ VÀ HẠN CHẾ HIỆN TẠI .......................................... 54
TÀI LIỆU THAM KHẢO ..................................................................................... 56


1
MỞ ĐẦU
1. Lý do chọn đề tài
Ngày nay Internet đã trở thành một phần không thể thiếu trong mỗi người dân
Việt Nam nói riêng cũng như mỗi người dân trên thế giới nói chung. Thông tin
không ngừng trao đổi, mua bán trên mạng Internet, do đó việc bảo mật, đảm bảo an
toàn thông tin đang là nhu cầu cấp thiết. Trước các yêu cầu cần thiết đó, lý thuyết
mật mã thông tin ra đời nhằm đảm bảo tính an toàn dữ liệu tại nơi lưu trữ cũng như
khi dữ liệu được truyền trên mạng.
Luận văn này tập trung vào nghiên cứu các khái niệm cơ bản, cơ sở lý thuyết
toán học modulo sử dụng trong bảo mật thông tin, các phương pháp “chứng minh
không tiết lộ thông tin” là một trong các giao thức an ninh nâng cao mà ở đó các
bên tham gia giao thức không tin cậy lẫn nhau và đặc biệt là ứng dụng của “chứng
minh không tiết lộ thông tin” trong xác thực đăng nhập người dùng trên internet.
Chứng minh không tiết lộ thông tin đã được nghiên cứu từ những năm
80, là phương pháp chứng minh không có nghĩa là “không để lộ thông tin” mà “để
lộ thông tin ở mức ít nhất” về sự vật, sự việc cần chứng minh. Với việc “không để
lộ” người xác minh sẽ không có nhiều hiểu biết về sự vật sự việc, họ chỉ thu được
chút ít thông tin (coi như là không) về đặc điểm tính chất của nó.

Ngành mật mã học luôn phát triển không ngừng, trong phạm vi khóa luận này,
tôi chỉ trình bày một vấn đề nhỏ về phương pháp “chứng minh không tiết lộ thông
tin” đồng thời tìm hiểu một số ứng dụng thực tế của cơ sở lý thuyết này.
2. Mục đích nghiên cứu
- Nghiên cứu các lý thuyết cơ bản làm nền tảng cho xây dựng hệ thống chứng
minh không tiết lộ thông tin.
- Nghiên cứu một số giao thức chứng minh không tiết lộ thông tin, với các yêu
cầu và kỹ thuật khác nhau.
- Ứng dụng vào bài toán xác thực trực tuyến, mà không cần truyền mật khẩu trên
môi trường mạng không tin cậy.


2
3. Đối tượng và phạm vi nghiên cứu
- Đối tượng nghiên cứu: lý thuyết toán học về hệ mã khoá công khai, số học
modulo, logarit rời rạc, giao thức an ninh nâng cao và ứng dụng.
- Phạm vi nghiên cứu: cơ sở toán học của chứng minh không tiết lộ thông tin
và đưa ra lược đồ xác thực trực tuyến an toàn.
4. Phương pháp nghiên cứu
- Nghiên cứu lý thuyết
- Trình bày qua các ví dụ
- Thực nghiệm qua bài toán thực tế
5. Dự kiến đóng góp mới
- Trình bày cơ sở lý thuyết rõ ràng, có ví dụ minh hoạ và lược đồ xác
thực trực tuyến chi tiết.


3
CHƯƠNG I: CÁC KHÁI NIỆM VÀ KIẾN THỨC CƠ SỞ
Nội dung chương này bao gồm: lý thuyết về modulo, Định lý Fecma, Định lý Euler,

Định lý phần dư Trung hoa, logarithm rời rạc, mã công khai RSA và chữ ký điện tử
DSA.
1.1.

Số học modulo

1.1.1. Khái niệm
1.1.1.1. Modulo số học
Cho n là số nguyên dương. Giả sử a, b là các số nguyên: ta ký hiệu a b(mod n),
khi và chỉ khi b = a + kn trong đó k là số nguyên. Khi đó ta nói a và b đồng dư với
nhau theo modulo n. Nếu trong đó a là số nguyên dương nhỏ hơn n, thì a được gọi
là phần dư của b khi chia cho n, đôi khi a được gọi là thặng dư của b theo modulo n.
Tập hợp các số nguyên từ 0 đến n – 1 được gọi là tập hợp thặng dư hoàn toàn
modulo n. Điều này có nghĩa là, với mỗi số nguyên a, thặng dư modulo n là một số
từ 0 đến n – 1 .
Modulo số học cũng như số học bình thường, bao gồm các phép cộng và nhân
giao hoán với các tính chất kết hợp và phân phối. Mặt khác, giảm mỗi giá trị trung
gian trong suốt quá trình tính toán.
(a + b) mod n = ((a mod n) + (b mod n)) mod n
(a – b) mod n = ((a mod n) - (b mod n)) mod n
(a  b) mod n = ((a mod n)  (b mod n)) mod n
(a  (b +c)) mod n = ((a  b) + (a  c)) mod n

Ví dụ 1.1: (1+ 6) mod 5 = ((1 mod 5) + (6 mod 5)) mod 5
(8 14) mod 6 = ((8 mod 6)  (14 mod 6)) mod 6
1.1.1.2. Số nguyên tố
Số nguyên tố là một số nguyên dương lớn hơn 1, nhưng chỉ chia hết cho 1 và
chính nó, ngoài ra không còn số nào có thể chia hết nữa. Số 2 là một số nguyên tố.
Do vậy 7, 17, 53, 73, 2365247734339 cũng là một số nguyên tố. Số các số nguyên



4
tố vô tận. Hê ̣mật mã thường dùng số nguyên tố cỡ 512 bits và thậm chí lớn hơn
vậy.
1.1.1.3. Ước số chung lớn nhất
Hai số được gọi là cặp số nguyên tố cùng nhau khi mà chúng không có thừa số
chung nào khác 1, hay nói một cách khác, nếu ước số chung lớn nhất của a và n
bằng 1, chúng ta có thể̉ viết như sau:
Gcd(a,n) = 1
Một cách dễ nhất để tính toán ra ước số chung lớn nhất của hai số là nhờ vào thuật
toán Euclid Knuth.
Thuật toán:
int UCLN(int a,int b)
{
return (b==0)?a:UCLN(b, a%b);
}
int ucln3(int a,int b,int c)
{
return UCLN(UCLN(a,b),c)
}
Ví dụ 1.2: Gcd(3,5) = 1
1.1.2. Các phép toán trên modulo
1.1.2.1. Số nghịch đảo Modulo
Số nghịch đảo của 10 là 1/10, bởi vì 10  1/10 = 1. Trong số học modulo thì
vấn đề nghịch đảo phức tạp hơn:
4  x  1 mod 7
Phương trình trên tương đương với tìm x và k sao cho:
4x = 7k + 1 với điều kiện cả x và k đều là số nguyên.
Vấn đề chung đặt ra tại đây là tìm x sao cho:
1 = (a  x) mod n

Có thể viết lại như sau:


5
a-1  x (mod n)
Sư ̣ thu nhỏ vấn đề modulo là rất khó giải quyết. Đôi khi nó là một vấn đề, nhưng
đôi khi lại không phải vậy.
Trong trường hợp chung a-1  x (mod n) chỉ duy nhất một lời giải nếu a và n là
một cặp số nguyên tố cùng nhau. Nếu a và n không phải là một cặp số nguyên tố
cùng nhau, thì a-1  x (mod n) không có lời giải nào. Thuật toán Euclid có thể tính
ra được số nghịch đảo của số modulo n, đôi khi thuật toán này còn gọi là thuật toán
Euclid mở rộng.
static void update (int *un, int *vn, int q)
{
int tn;
tn=*un – vn*q;
*un = *vn;
*vn = tn;
}

int extended euclidian(int u, int v, int u1_out, int
u2_out)
{
int u1 = 1;
int u3 = u;
int v1 = 0; int v3 = v;
int q;
while (v3>0)
{
q = u3/v3;

Update(&u1, &v1, q);
Update(&u3, &v, q);
}


6
*u1_out = u1;
*u2_out = (u3 - u1*u)/v;
return u3
}

Ví dụ 1.3: Nghịch đảo của 5 modulo 14 là 3 bởi:
5  3 = 15  1 (mod 14)
Định lý Fermat
Nếu m là số nguyên tố, và a không phải là bội số của m thì định lý Fermat phát biểu
như sau:
am-1  1(mod m)
Ví dụ 1.4: 27-1 mod 7 =1 (= 26 mod 7 = 64 mod 7 = 1)
35-1 mod 5 = 1 (= 34 mod 5 = 81 mod 5 = 1)
1.1.2.2. Định lý Euler
Hàm Euler. Cho n là một số nguyên dương. Khi thực hiện phép tính đồng dư
n của mọi số nguyên khác ta nhận được tập đầy đủ các phần dư có thể có là:
0, 1, 2,…, n – 1.
Từ tập trên ta tìm tập rút gọn bao gồm các số nguyên tố cùng nhau với n và
quan tâm đến số lượng các phần tử như vậy đối với số nguyên dương n cho trước.
Ví dụ 1.5: Với n = 10:
Tập đầy đủ các phần dư là {0,1,2,3,4,5,6,7,8,9}.
Tập rút gọn các phần dư nguyên tố với 10 là {1,3,7,9}.
Số các phần tử của tập rút gọn trên là giá trị của hàm Euler Ф(n). Như vậy,
Ф(10) = 4.

Muốn tính Ф(n) việc đếm số các số nguyên tố cùng nhau với n và nhỏ hơn n
được loại bỏ vì đây là bài toán tốn nhiều công sức. Nói chung có thể tính hàm Euler
của một số dựa trên biểu thức phân tích ra thừa số của số đó.
- Dễ dàng thấy, nếu p là số nguyên tố, thì Ф(p) = p – 1
- Nếu p và q là hai số nguyên tố khác nhau, thì có thể chứng minh được rằng:


7
- Ф(p.q) = (p – 1).(q – 1)
- Nếu p là số nguyên tố, thì Ф(pn) = pn – pn-1
- Nếu s và t là hai số nguyên tố cùng nhau, thì Ф(s.t) = Ф(s).Ф(t)
Ví dụ 1.6:
Ф(37) = 37 – 1 = 36
Ф(21) = (3–1)×(7–1) = 2×6 = 12
Ф(72) = Ф(8.9) = Ф(8). Ф(9) = Ф(23). Ф(32)
= (23 – 22).(32 – 31) = 4.6 = 24
Định lý Euler là tổng quát hoá của Định lý Ferma, khẳng định như sau:
a(n) mod n = 1
với mọi cặp số nguyên dương nguyên tố cùng nhau a và n: gcd(a,n) =1.
Ví dụ 1.7:

a = 3; n = 10; Ф(10)=4;

Vì vậy 34 = 81 = 1 mod 10
a = 2; n =11; Ф(11)=10;
Do đó 210 = 1024 = 1 mod 11
a =4; n=15; Ф(15)=8;
Do đó 48 mod 15 = 1,
Ta có thể tính trực tiếp 48 mod 15 = (42)4 mod 15 = 1
Như vậy, cho các số nguyên dương a, n, m bất kỳ, áp dụng tính chất của phép nhân

modulo và Định lý Euler ta luôn có:
am mod n = (a mod n)(n mod (n)) mod n
Chẳng hạn: 4518 mod 20 = (45 mod 20)18 mod (20) mod 20 = 52 mod 20 = 1.
1.1.2.3. Định lý phần dư Trung Hoa
Nếu bạn biết cách tìm thừa số nguyên tố của một số n, thì bạn có thể đã sử dụng,
điều gọi là phần dư trung hoa để giải quyết trong suốt hê ̣ phương trình.Bản dịch cơ
bản của định lý này được khám phá bởi toán học Trung Hoa vào thế kỷ thứ nhất.
Giả sử, sự phân tích thừa số của n = p1  p2  … pt thì hệ phương trình:
(x mod pi) = ai, với i=1,2….t
có duy nhất một nghiệm với x nhỏ hơn n.


8
Bởi vậy, với a, b tùy ý sao cho a < p và b < q (với p, q là số nguyên tố) thì tồn tại
duy nhất a, x khi x nhỏ hơn pq thì:
xa (mod p) và xb(mod q)
Để tìm ra x đầu tiên cần sử dụng thuật toán Euclid để tìm u, ví dụ:
uq  1 (mod p)
Khi đó cần tính toán:
x=(((a – b)  u) mod p).q + b
Dưới đây là đoạn mã định lý phần dư trung hoa trong ngôn ngữ C:
int chineseRemainder(size t r, int *m, int *u)
{
size t i;
int modulus;
int n;

modulus = 1;
for(i=0; imodulus *=m[i];

n =0
for(i=0; i
Ví dụ 1.8: Cho S={p1,…,pr} là tập r số nguyên tố phân biệt,và P là đa thức hệ số
nguyên sao cho với mọi n đều tồn tại pi trong S sao cho pi\P(n). Chứng minh rằng
tồn tại i sao cho pi\P(n),∀n∈N.
Chứng minh:
Ta phản chứng điều ngược lại, tức là với mỗi pi trong S tồn tại ai sao cho p P(ai),
khi

đó

bằng

phép

xét

x

thỏa

mãn

hệ

đồng




xai(mod

pi).

Theo định lí Trung Hoa luôn tồn tại x thỏa mãn bài toán, ta suy ra P(x) không có
ước nguyên tố trong S và từ đó ta có sự vô lí nghĩa là phải tồn tại pi thỏa mãn bài
toán, đó là điều cần chứng minh.


9
1.1.3. Logarit rời rạc
1.3.1. Bài toán logarit trên trường số thực R
Định nghĩa logarit: Cho hai số dương a, b với a 1. Số x thỏa mãn đẳng thức
b = ax được gọi là logarit cơ số a của b và được kí hiệu là x = logab. Như vậy ta có:
- Bài toán thuận: b = ax (a,x  R)
- Bài toán ngược: x = logab (a,b > 0, a 1)
Một số tính chất của hàm logarit: Với a, b, c, d > 0, a 1,R, ta có:
y=log1 = 0
y=loga = 1
y=log(a) = 
y  a log b  b

y=log(c.d)= logc+ logd

y  log

c
 log | c |  log | d |
d


1.1.3.2. Bài toán logarit trên trường hữu hạn
Xét vành số Zp, với p là số nguyên tố, vậy ta có Zp= GF(p). Tất cả các phần tử a0
của trường tạo thành nhóm nhân: Z *p  a |1  a  n  1 .
Nếu cấp của a bằng p thì ta nói a là căn nguyên thủy của Zp.
Xét bài toán thuận: Cho y = ax
Ví dụ 1.9: Cho p =19, a= 2. Ta tính y=ax mod 19 với x Zp= GF(p), dễ dàng
thấy 2 là căn nguyên thủy và các giá trị được cho bởi bảng sau:
Tính y = 2x mod19, các cặp nghịch đảo Z19

Các cặp nghịch đảo


10
Nhận xét:
- Do a là phần tử nguyên thủy nên ax sẽ đi qua hết các phần tử trong vành Zp.
- Từ phần tử nguyên thủy a = 2 đã cho ban đầu ta có thể tìm được các phần
tử nguyên thủy khác theo công thức b = ai mod n với (i, (n)) =1. Vậy tập
các phần tử nguyên thủy của Z19 là: {2,13,14,15,3,10}.
- Các phần tử nguyên thủy tạo thành các cặp nghịch đảo:
2=10-1 (do 2.10 mod19=1),
13 = 3-1 (do 3.13mod19=1),
14 = 15-1 (do 14.15mod19 =1)
Xét bài toán ngược: y=logax với a, x  Z *p .
Dựa trên tính chất các hàm logarit ta có:
 y = logabc = (logab+ logac) mod p-1
 y = logab/c = (logab- logac) mod p-1
 y  log a x   log a x  p  1  log a x
1

 y = loga1 = p – 1= 0

Ví dụ 1.10: Cho p = 19, a =2. Ta tính y = logax mod 19 với x Zp= GF(p). Từ
bảng đã tính ở trên ta có các giá trị ngược:

Do 218 =1 vậy nên ta có log21 = 18; 21 = 2 vậy nên ta có log22 =1, tương tư ̣ ta tính
được các phần tử y = log2x khác.
1.1.3.3. Bài toán logarit rời rạc
Cho Zp, với p là số nguyên tố,  là phần tử nguyên thủy  Z *p . Hãy tìm:
y=logx với , x Z *p


11
Nhận xét: Với , x Z *p thì bài toán: y = logx có nghiệm khi  là phần tử nguyên
thủy, bài toán có thể không có nghiệm khi  bất kỳ.
Ví dụ 1.11: Giải bài toán với p =19, ta có 6 điểm nguyên thủy (3 cặp nghịch đảo).
Áp dụng:
y  log a 1 x   log a x  p  1  log a x  log a1 x  log a x  p  1

Xét cặp nguyên thủy (2,10):
Ta có: log10x = p – 1 – log2x với p=19 ta lập được bảng:

1.1.3.4. Bản chất của bài toán logarit rời rạc
Từ những ví dụ trên ta rút ra được những kết luận sau:
Logarit rời rạc là sư ̣tiếp nối của phép tính logarit trên trường số thực vào các
nhóm hữu hạn. Chúng ta đã biết với 2 số thực x, y và cơ số  > 0, 1, nếu ax, thì x
được gọi là logarit cơ số a của y, kí hiệu là: x = logay. Tuy nhiên trong logarit rời
rạc, các số a, x, y đều là các phần tử của nhóm hữu hạn.
Logarit rời rạc có ứng dụng trong hê ̣mã khóa công khai Hê ̣mật mã Elgamal.
Cho p là một số nguyên tố. Xét nhóm nhân các số nguyên modulo p:
Z *p ={1,2,3,…, p – 1}với phép nhân modulo p.


Nếu ta tính lũy thừa bậc k của một số trong nhóm rồi rút gọn theo modulo p thì
ta được một số trong nhóm đó. Quá trình này gọi là lũy thừa rời rạc modulo p.
Chẳng hạn p=17, lấy =3, k=4, ta có:
34 = 81  13 (mod17)
Logarit rời rạc là phép tính ngược lại: biết 3k  13 (mod 17), hãy tìm k. Để giải
chúng ta phải thông qua phép thử lần lượt tính lũy thừa rời rạc, chẳng hạn tính


12
32 mod 17 = 9, 33 mod 17 = 10, 34 mod 17 = 13 và tìm được k = 4. Như vậy bài toán
logarit rời rạc là bài toán khó.
1.2. Hệ mã khóa công khai
1.2.1 Mã khoá công khai RSA
RSA là mã công khai được sáng tạo bởi Rivest, Shamir & Adleman ở
MIT (Trường Đại học Công nghệ Massachusetts) vào năm 1977. RSA là mã công
khai được biết đến nhiều nhất và sử dụng rộng rãi nhất hiện nay. Nó dựa trên các
phép toán lũy thừa trong trường hữu hạn các số nguyên theo modulo nguyên tố. Cụ
thể, mã hóa hay giải mã là các phép toán luỹ thừa theo modulo số rất lớn. Việc thám
mã, tức là tìm khóa riêng khi biết khóa công khai, dựa trên bài toán khó là phân tích
một số rất lớn đó ra thừa số nguyên tố. Nếu không có thông tin gì, thì ta phải lần
lượt kiểm tra tính chia hết của số đó cho tất cả các số nguyên tố nhỏ hơn căn của
nó. Đây là việc làm không khả thi.
Người ta chứng minh được rằng, phép lũy thừa cần O((log n)3) phép toán, nên
có thể coi lũy thừa là bài toán dễ. Cần chú ý rằng ở đây ta sử dụng các số
rất lớn khoảng 1024 bit, tức là cỡ 10350.Tính an toàn dựa vào độ khó của bài toán
phân tích ra thừa số các số lớn. Bài toán phân tích ra thừa số yêu cầu O(elogn log logn)
phép toán, đây là bài toán khó.
Mã công khai RSA gồm hai giai đoạn: khởi tạo khóa RSA và giai đoạn
mã hóa/giải mã.
1.2.1.1. Khởi tạo khóa RSA

Mỗi người sử dụng A tạo một cặp khóa công khai – riêng như sau: Chọn ngẫu
nhiên hai số nguyên tố lớn p và q khác nhau.
Tính số N làm modulo của hệ thống: N = p.q
Ta đã biết Ф(N) = (p - 1)(q - 1)
Chọn ngẫu nhiên khóa mã e làm khóa công khai, sao cho 1gcd(e,Ф(N)) = 1, tức là e và Ф(N)là hai số nguyên tố cùng nhau. Nghịch đảo của e
theo modulo Ф(N) là khóa riêng d, vậy tìm d từ phương trình
(e.d) mod Ф(N) = 1, với 0< d < Ф(N) hay d = e-1 mod Ф(N)


13
Chú ý: vai trò của e và d có thể thay đổi cho nhau, tức là có thể lấy e làm khóa
mật, khi đó tính d nghịch đảo của e làm khóa công khai. Người sử dụng A in khóa
mã công khai: KU = {e, N} và thông báo cho mọi người biết.
Người sử dụng A giữ bí mật khóa riêng: KR = {d, p, q}
1.2.1.2. Sử dụng RSA
Để mã hóa mẩu tin M, người gửi B:
Lấy khóa công khai của người nhận A: KU = {e, N}
Mã hóa thông điệp M bằng khóa công khai của người nhận A:
C = Me mod N, trong đó 0 ≤ M < N
Để giải mã bản mã, người sử dụng A:
Sử dụng khóa riêng KR = {d, p, q}
Giải mã thông điệp, tính M = Cd mod N
Lưu ý rằng bản tin M < N, do đó khi cần chia khối bản rõ thành các khối nhỏ để
thỏa mãn tính chất này.
Ví dụ 1.12: Tạo khóa công khai cho người sử dụng A, sau đó người sử dụng B
dùng khóa công khai của A mã hóa thông điệp gửi cho A và cuối cùng A sử dụng
khóa riêng của mình để giải mã thông điệp.
Tạo bộ khóa công khai cho người sử dụng A
1. Chọn các số nguyên tố: p = 17 và q = 11.

2. Tính N = p.q, N = 17.11 = 187
3. Tính Ф(N) = (p –1).(q – 1) = 16.10 = 160
4. Chọn e: gcd(e, 160) = 1; Lấy e = 7
5. Xác định d: (e.d) mod 160 = 1 và d < 160
Giá trị cần tìm là d = 23, vì 23.7 = 161 = 10.160 + 1
6. In khóa công khai của người sử dụng A: KU={7, 187}
7. Giữ khóa riêng bí mật riêng của A: KR={23, 17, 11}
B sử dụng khóa công khai của A để mã hóa mã thông điệp gửi cho A:
Cho mẩu tin M = 88 (thỏa mã điều kiện 88 < 187)
Mã C = 887 mod 187 = 11


14
Người sử dụng A dùng khóa riêng của mình để giải mã như sau:
M = 1123 mod 187 = 88
Có thể dùng định lý phần dư Trung Hoa để giải mã cho nhanh như sau:
Tính 1123 mod 11 = 0
Tính 1123 mod 17 = (-6)23mod 17 = (-6)16(-6)4 (-6)2 (-6) mod 17 = 3
Vì (-6)2 mod 17 = 2, nên (-6)4 mod 17 = 4, (-6)8 mod 17 = -1;
(-6)16 mod 17 =1
11-1 mod 17 = (-6)-1mod 17 = 14 nên c2 = 11.(11-1 mod 17) = 11.(14 mod 17) = 154
Vậy M = (3.154) mod 187 = 462 mod 187 = 88.
Giải mã hiệu quả:
Như chúng ta thấy qua ví dụ trên, nếu biết N = p.q, thì ta có thể giải mã nhanh
bằng cách sử dụng định lý phần dư Trung Hoa tính toán theo các modulo p và q.
Sau đó kết hợp lại để tìm ra bản rõ. Vì ở đây người sử dụng sở hữu khóa riêng, nên
biết được p và q, do đó có thể sử dụng kỹ thuật này. Nếu sử dụng định lý phần dư
Trung Hoa để giải mã thì hiệu quả là nhanh gấp bốn lần so với giải mã tính trực
tiếp.
Sinh khóa RSA

Người sử dụng RSA cần phải xác định ngẫu nhiên hai số nguyên tố rất lớn,
thông thường khoảng 512 bit. Do đó việc sinh ra ngẫu nhiên p, q và kiểm tra xác
suất tính nguyên tố của chúng có nhiều giải pháp khác nhau với độ tin cậy cao. Sau
khi chọn được một khóa e hoặc d nguyên tố cùng nhau với Ф(N), dễ dàng tính được
khóa kia chính là số nghịch đảo của nó qua thuật toán Euclide mở rộng.
1.2.2. Mã Elgamal
1.2.2.1. Hệ mã hóa Elgamal
Chọn số nguyên tố p sao cho bài toán logarit rời rạc trong Zp là khó giải, g là phần
tử sinh trong Zp*. Chọn tập bản rõ A = Zp, chọn tập bản mã:
C ={(a, b) / a, b ∈ Zp }. Chọn khóa bí mật là a ∈ Zp*, khóa công khai là:
h = ga. Để mã hóa m, ta chọn số ngẫu nhiên bí mật k, bản mã là:
(x,y) = Ek (m) = (gk, hk m). Tài liệu được giải mã là m= y / xa.


15
1.2.2.2. Khái niệm mã hóa đồng cấu.
Cho tập bản rõ P tạo thành nhóm với phép tính⊕, tập bản mã C tạo thành nhóm
với phép tính

. Ek (m) là hàm mã hoá bản rõ m theo tham số ngẫu nhiên bí mật k.

Hệ mã hóa E được gọi là có tính chất (⊕,
thỏa mãn công thức đồng cấu: Ek1 (m1)

)- đồng cấu, nếu với tham số k=k1 +k2,
Ek2(m2) = Ek (m1 ⊕ m2), trong đó m1, m2

là 2 bản rõ, k1, k2 là 2 tham số ngẫu nhiên bí mật.
Ví dụ 1.13:
Cho p=2579, =2, a=765. Khi đó:

=2765 mod 2579= 949
Bây giờ ta giả sử Alice muốn gửi thông báo x=1299 tới Bob. Giả sử số ngẫu nhiên k
mà cô chọn là k=853. Sau đó cô ta tính:
y1=2853 mod 2579 =435
y2= 1299949853 mod 2579= 2396
Khi đó Bob thu được bản mã y =(435, 2396), anh ta tính
x = 2396  (435765)-1 mod 2579 = 1299
Đó chính là bản rõ mà Alice đã mã hóa.
1.2.2.3. Hệ mã hóa Elgamal có tính chất đồng cấu
Hệ mã hóa Elgamal có tính chất đồng cấu vì, với k=k1+k2, ta có:

E k1 (m1)= ( g k1 , h k1 m1)
E k 2 (m2)= ( g k 2 , h k2 m2)
Thỏa mãn công thức đồng cấu:

E k1 (m1)* E k 2 (m2) = ( g k1 g k 2 , h k1 h k2 m1 m2)
= (g

k1  k 2

, h k1  k2 m1 m2)

= (gk, hk m1 m2)
= Ek (m1 m2).
Phép toán ⊕,

ở đây chính là tổng và tích của các tham số.

- Trường hợp chọn thông tin m=gv, trong đó v=0 hoặc v=1. Bởi vì:



16
E k i ( g v i ) = (xi, yi) = ( g k i , h k i g v i ), i = 1,2.
Do đó:
(x1, y1)* (x2, y2) = (x1 x2, y1 y2) = ( g k1  k 2 , h k1  k 2 g v1  v 2 ).
1.2.3. Trao đổi khoá Diffie - Hellman
Mọi người dùng thỏa thuận dùng tham số chung: Lấy số nguyên tố rất lớn q;
Chọn α là căn nguyên tố của q.
Mỗi người dùng (A chẳng hạn) tạo khoá của mình:
Chọn một khoá mật (số) xA < q;
Tính khoá công khai yA =  xA mod q
Mỗi người dùng thông báo công khai khóa của mình yA.
Khóa bộ phận dùng chung cho hai người sử dụng A, B là KAB
KAB =  xA .xB mod q
= y xAB mod q (mà B có thể tính)
= yxBA mod q (mà A có thể tính)
Ví dụ 1.14. Hai người dùng A và B muốn trao đổi khoá phiên: Đồng ý chọn số
nguyên tố q = 11 và α = 2;
A chọn khoá riêng xA = 9; Tính các khoá công khai:
yA =  xA mod q = 29 mod 11 = 6
B chọn khóa riêng xB = 3; Tính các khoá công khai:
yB=  xB mod q = 23 mod 11 = 8
A tính khoá phiên chung: KAB = yxBA mod q = 89 mod 11 = 7
B tính khoá phiên chung: KAB = y xAB mod q = 63 mod 11 = 7 (B)
1.2.4. Chữ ký điện tử DSA
Sinh khóa DSA
Chia sẻ giá trị khóa công khai tổng thể (p, q, g):
Số nguyên tố lớn p = 2L, ở đó L= 512 đến 1024 bit và là bội của 64;
Chọn q là số nguyên tố 160 bit và là ước của p-1;



17
Chọn g = h(p-1)/q, ở đó h < p-1, h(p-1)/q (mod p) > 1;
Người sử dụng A chọn khóa riêng và tính khóa công khai
Chọn khóa riêng: x < q
Tính khóa công khai: y = gx (mod p)
1.2.4.1. Tạo chữ ký DSA
Để ký mẩu tin M người gửi trước hết cần:
 Sinh khóa chữ ký ngẫu nhiên k: k < p, k phải là số ngẫu nhiên, được xóa sau khi
dùng và không bao giờ dùng lại;
Sau đó tính cặp chữ ký: r = (gk(mod p)) (mod q)
s = (k-1(SHA(M)+ x.r) (mod q)
Gửi cặp chữ ký (r, s) cùng với bản tin M.
1.2.4.2. Kiểm chứng chữ ký DSA
Nhận được bản tin M cùng với chữ ký (r, s)
Để kiểm chứng chữ ký người nhận cần tính:
w = s-1(mod q)
u1 = (SHA(M).w) (mod q)
u2 = (r.w) (mod q)





v  g u1 .y u2  mod p   mod q 
Nếu v = r thì chữ ký đã được kiểm chứng
Ví dụ 1.15. Tạo chữ ký điện tử:
Chọn p = 23, q = 11, h = 7
g = h2 mod 23 = 3
Chọn x = 5, y = 35 mod 23 = 13

k = 6, H(M) = 9
r = (gk (mod p))(mod q)
r = (36 mod 23) mod 11 = (42) mod 11 = 5
s = (k-1 (H(M)+ x.r))(mod q)
s = (6-1.(9 + 5.5))mod 11 = 2
Chữ ký điện tử (5,2)


18
Kiểm tra chữ ký điện tử
w = 2 – 1 mod 11 = 6
u1 = (9.6) mod 11 = 10
u2 = (5.6) mod 11 = 8
v = (310.138 mod 23) mod 11 = (43.3.138 mod 23) mod 11
= (16) mod 11 = 5
v = 5 = r, chữ ký đúng
Như vậy, bản tin nhận được là toàn vẹn, không bị sửa và thư được gửi bởi đúng
người như đã tuyên bố.

TÓM TẮT CHƯƠNG I
Trong chương 1, luận văn đã giới thiệu được các lý thuyết đại số căn bản được
dùng để bổ trợ và xây dựng nên khung cơ sở lý luận cho các bài toán chứng minh
không tiết lộ thông tin như lý thuyết về toán học modulo và mô hình bài toán
Logarith rời rạc, các loại mã hóa, cũng như các định lý Fermat, Euler..v.v. Tiếp đó,
luận văn cũng đã mô tả và đi sâu vào các khái niệm về chữ ký điện tử và một số các
chuẩn chữ ký điện tử được dùng trong việc xây dựng và áp dụng chứng minh không
tiết lộ thông tin vào thực tế. Ngoài ra, luận văn cũng đã đi sâu phân tích từng kĩ
thuật trong các loại mô hình chữ ký điện tử đã nêu. Trong chương tiếp theo, luận
văn sẽ tiếp tục phân tích và đánh giá cụ thể hơn về khái niệm chính của chứng minh
không tiết lộ thông tin.



19
CHƯƠNG II: CÁC GIAO THỨC CHỨNG MINH KHÔNG TIẾT LỘ
THÔNG TIN
Nội dung chương này bao gồm: khái niệm cam kết, trình bày các giao thức mã hóa
dự liệu trong chứng minh không tiết lộ thông tin: giao thức định danh Schnorr, giao
thức Chaum-Pederson và các giao thức nâng cao khác
2.1. Cam kết
Giả sử Alice muốn chơi 'giấy-kéo-đá' qua điện thoại với Bob. Ý tưởng của trò
chơi này là Alice và Bob cả hai lựa chọn đồng thời là một trong những tập {giấy,
kéo, đá}. Sau đó, kết quả trò chơi được quyết định bởi các quy tắc:
 Giấy bọc đá. Do đó nếu Alice chọn giấy và Bob chọn đá khi đó Alice
thắng.
 Đá làm cùn kéo. Do đó nếu Alice chọn đá và Bob chọn kéo khi đó Alice
thắng.
 Kéo cắt giấy. Do đó nếu Alice chọn kéo và Bob chọn giấy khi đó Alice
thắng.
Nếu cả Alice và Bob chọn mục giống nhau khi đó trò chơi được công bố là một
trận hòa. Khi tiến hành qua điện thoại, chúng tôi có bài toán mà bất cứ ai đi đầu tiên
sẽ thua các trò chơi.
Một giải pháp cho vấn đề này là dành cho bên những người đi đầu tiên “cam
kết” cho lựa chọn của họ, theo cách mà các bên khác không thể xác định những gì
đã cam kết. Sau đó, hai bên có thể tiết lộ sự lựa chọn của họ, với ý tưởng rằng bên
kia sau đó có thể xác minh rằng các bên tiết lộ đã không thay đổi sự lựa chọn của
mình giữa lúc cam kết và giai đoạn tiết lộ. Một hệ thống như vậy được gọi là một
lược đồ cam kết. Một cách dễ dàng để làm điều này là sử dụng một hàm băm mật
mã như sau:
A → B; hA = H(RA giấy),
B→ A; kéo,

A→ B; RA, giấy.
Vào cuối của giao thức Bob cần phải xác minh rằng hA gửi bởi Alice bằng


20
H(RA giấy). Nếu các giá trị đồng nhất, anh ấy biết rằng Alice đã không lừa dối.
Kết quả của giao thức này là Alice thua trò chơi, vì kéo cắt giấy.
Chúng ta hãy nhìn vào lập luận trên từ quan điểm của Alice. Cô lần đầu tiên
cam kết giá trị giấy bằng cách gửi Bob giá trị băm hA. Điều này có nghĩa rằng Bob
sẽ không thể để xác định rằng Alice đã cam kết với giá trị là giấy, vì Bob không biết
giá trị ngẫu nhiên của RA sử dụng và Bob là không thể đảo ngược các hàm băm.
Thực tế là Bob không thể xác định những giá trị đã được cam kết, đó được gọi là
che giấu, hoặc tính chất che giấu của một lược đồ cam kết.
Ngay sau khi Bob gửi giá trị kéo cho Alice, cô ấy biết cô đã bị thua nhưng không
thể ăn gian, khi đó để lừa gạt cô ấy sẽ cần phải đưa ra một giá trị khác nhau của RA,
tuyên bố R’A, thỏa mãn
H(RA giấy) = H(R’A đá).
Nhưng điều này có nghĩa rằng Alice có thể tìm thấy các xung đột trong hàm băm,
mà đối với một hàm băm chọn thích hợp được cho là không thể. Trên thực tế chúng
ta có yêu cầu hàm băm là bền vững trong trường hợp này. Tính chất này của lược
đồ cam kết, mà Alice không thể thay đổi suy nghĩ của mình sau quy trình cam kết,
được gọi là trói buộc.
Bây giờ chúng ta nghiên cứu các đặc tính che giấu và ràng buộc một cách chi
tiết hơn. Nhớ lại rằng một hàm mã hóa có thông tin bảo mật về mặt lý thuyết, nếu
một kẻ thù có sức mạnh tính toán vô hạn không thể phá vỡ lược đồ này, trong khi
một hàm mã hóa được gọi là an toàn tính toán, nếu nó chỉ được bảo đảm khi phải
đối mặt với một kẻ thù có sức mạnh tính toán đa thức bị chặn. Sự phân chia tương
tự có thể được thực hiện với lược đồ cam kết, nhưng bây giờ chúng ta có hai tính
chất an ninh là che giấu và ràng buộc. Một công cụ bảo vệ quyền lợi của người gửi,
và một công cụ bảo vệ quyền lợi của người nhận. Để đơn giản hóa trình bày của

chúng tôi, chúng tôi sẽ biểu thị chương trình cam kết trừu tượng của chúng tôi bằng
một thuật toán, c = C (x, r) trong đó có một giá trị x cần cam kết và một số ngẫu
nhiên r và tạo ra một cam kết c. Để xác nhận một cam kết người cam kết chỉ đơn


×