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

Mã cổ điển mã RSA và định lý ơle định lý fecma trong bảo mậ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 (457.53 KB, 39 trang )

Mã cổ điển, mã RSA và Định lý Ơle định lý Fecma
trong bảo mật

LỜI NÓI ĐẦU
Lý thuyết mật mã và an toàn thông tin đã và đang chiếm lĩnh sự quan tâm
của nhiều người, điều đó xuất phát từ nhu cầu đảm bảo an toàn thông tin trong thời
đại bùng nổ công nghệ và sự giao lưu thông tin ngày càng phát triển mạnh mẽ như
hiện nay.
Lý thuyết này đã ra đời từ rất lâu trong lịch sử loài người, tuy nhiên nó chỉ
thực sự được nghiên cứu và đưa vào ứng dụng trong nhiều lĩnh vực của đời sống
xã hội chỉ trong vài chục năm gần đây.
Phần trình bày trong tài liệu này tập trung vào một số vấn đề như: mã cổ
điển Burrows Wheeler, Thuật toán mã hoá công khai RSA và ứng dụng vào chữ ký
điện tử, ngoài ra trong tài liệu cũng trình bày một khía cạnh toán học nhỏ liên quan
đến vấn đề bảo mật dữ liệu, mà cụ thể là một số kiến thức rất cơ bản có liên quan
đến định lý Ơle và Fecma.
Do nội dung trình bày chỉ trong phạm vi của một tài liệu tham khảo môn học,
nên một số vấn đề lý thuyết toán học không liên quan trực tiếp đến nội dung của
môn học sẽ không được trình bày, hoặc chỉ phát biểu kết quả mà không chứng minh
chi tiết.
Phần phụ lục minh họa cài đặt các thuật toán bằng ngôn ngữ lập trình pascal
giúp bạn đọc hiểu rõ hơn các thuật toán.
Chắc chắn tập tài liệu không thể không có một vài thiếu sót, rất mong bạn
đọc lượng thứ.




Trang 1

PHẦN I


MÃ HOÁ CỔ ĐIỂN BURROWS WHEELER
Burrows Wheeler đề xuất phương pháp mã hoá thông tin như sau: ví dụ ta
cần mã hoá từ BANANA, các bước tiến hành là:
Bước 1: Từ cần mã hoá được dịch chuyển vòng tròn và tạo thành một ma trận L*L
ký tự, trong đó L là độ dài của từ. Ta có:
BANANA
ANANAB
NANABA
ANABAN
NABANA
ABANAN
Bước 2: Sắp xếp lại các dòng của ma trận theo thứ tự từ điển:
ABANAN
ANABAN
ANANAB
BANANA
NABANA
NANABA
Bước 3: Trích xâu từ các ký tự cuối ở mỗi dòng, thông báo xâu này và cho biết từ
gốc là từ thứ mấy trong ma trận nhận được ở bước 2. Ta có (NNBAAA,4)
Yêu cầu: Hãy viết chương trình mã hoá và giải mã.
Dữ liệu: Vào từ file CODE.INP, dòng đầu là một số 0 hoặc 1:
- Nếu là số 0 thì ta phải thực hiện thao tác mã hoá; và tiếp theo là một hoặc
nhiều nhóm dòng, mỗi dòng là một xâu ký tự cần mã hóa.
Dữ liệu ra bao gồm một hoặc nhiều nhóm hai dòng, dòng đầu là xâu ký tự đã mã
hoá, dòng tiếp theo là số nguyên dương cho biết vị trí từ gốc.
- Nếu là số 1 thì ta phải thực hiện thao tác giải mã; và tiếp theo là một hoặc

Trang 2
nhiều nhóm hai dòng, dòng đầu là xâu ký tự đã mã hoá, dòng tiếp theo là số nguyên

dương cho biết vị trí từ gốc.
Dữ liệu ra bao gồm một hoặc nhiều nhóm dòng, mỗi dòng là một xâu ký tự đã giải
mã.
Ví dụ 1:
CODE.INP
0
BANANA
COGUMELO
RONALDO
CODE.OUT
NNBAAA
4
OMOEULCG
1
NLAORDO
7
Ví dụ 2:
CODE.INP
1
NNBAAA
4
OMOEULCG
1
NLAORDO
7
CODE.OUT
BANANA
COGUMELO
RONALDO


Trang 3
Cho biết các xâu có thể có độ dài tới 1000 ký tự (L1000).
Dễ thấy rằng, với bài toán này chúng ta cần tìm ra một thuật giải và cấu trúc
dữ liệu phù hợp nếu không sẽ không thể giải được với dữ liệu đầu bài cho khá lớn
như vậy. Chẳng hạn, ta không thể khai báo một mảng A:array[1 1000,1 1000] để
chứa mảng ký tự do hạn chế về miền nhớ dành cho biến tĩnh của ngôn ngữ lập trình
Pascal. Chúng ta sẽ cùng phân tích để tìm lời giải tối ưu cho bài toán.
Để có thể mã hoá, ta cần phải biết được các ký tự cuối của các từ (và đương
nhiên là phải biết vị trí từ gốc); vì các từ được dịch chuyển vòng tròn nên nếu ta có
thể có một "mảng vòng tròn" để lưu các xâu và một mảng chỉ số để lưu vị trí bắt
đầu của các xâu thì sẽ tiết kiệm đáng kể chi phí về miền nhớ. Để tạo ra mảng vòng
tròn như vậy, ta coi một mảng một chiều như là mảng vòng tròn với lưu ý là phần
tử ở cuối mảng được coi như đi trước phần tử đầu tiên. Với ví dụ đầu bài ta có mảng
chứa xâu và mảng chỉ số của các xâu được chuyển vòng tròn là:
B
A
N
A
N
A

1
2
3
4
5
6
Dựa vào hai mảng này ta dễ dàng xác định được các xâu sau khi dịch chuyển
với lưu ý là ký tự ở vị trí cuối cùng đi trước ký tự đầu tiên. Ví dụ: xâu thứ 2 (bắt
đầu từ vị trí thứ hai trong mảng chỉ số) là: ANANAB, xâu thứ 5 (bắt đầu từ vị trí

thứ 5 trong mảng chỉ số) là: NABANA Việc sắp xếp các xâu thực chất ta chỉ làm
việc trên hai mảng này. Sau khi sắp xếp các xâu theo thứ tự từ điển, mảng chỉ số có
dạng:
6
4
2
1
5
3
Mảng này cho ta biết vị trí các xâu sau khi sắp xếp, xâu thứ nhất (xâu
BANANA) ở vị 4, xâu xâu thứ 2 (xâu ANANAB) ở vị trí 3…Từ đó, chúng ta dễ
dàng suy ra xâu mã hoá bằng cách trích ra các ký tự ở vị trí ngay trước của xâu
tương ứng. Cụ thể như sau: Lấy ký tự trước vị trí đầu tiên của xâu 6: do xâu 6 bắt
đầu từ vị trí 6 nên ta lấy ký tự ở vị trí 5 của mảng ban đầu, là ký tự N. Lấy ký tự
trước vị trí đầu tiên của xâu 4: do xâu 4 bắt đầu từ vị trí 4 nên ta lấy ký tự ở vị trí 3
của mảng ban đầu, là ký tự N. Cứ như vậy, ta thu được xâu kết quả là: NNBAAA.

Trang 4
Công việc còn lại là đi tìm thuật toán để giải mã hiệu quả. Để có thể giải mã,
ta cần biết xâu mã hoá s và vị trí n của xâu gốc. Thuật toán được đưa ra như sau:
- Sắp xếp các từ trong s theo thứ tự từ điển để thu được xâu s', phải đảm bảo giữ
nguyên thứ tự của các từ giống nhau trong xâu s (nên dùng phương pháp sắp xếp
nổi bọt). Ví dụ với s=NNBAAA thì s'=AAABNN.
-Bắt đầu từ vị trí thứ n trong xâu s' và tiến hành duyệt lần lượt trên hai xâu để thu
được kết quả. Cụ thể: ký tự đầu tiên ở vị trí n=4 của s', là B; tiếp theo vì B ở vị trí
thứ 3 trong s nên ký tự thứ hai ở vị trí 3 trong s', là A; tiếp theo vì A ở vị trí thứ 6
trong s nên ký tự thứ ba ở vị trí 6 trong s', là N…cứ như vậy ta thu được kết quả là
BANANA.
Lưu ý: nếu phương pháp sắp xếp không đảm bảo giữ nguyên thứ tự của các từ trong
xâu gốc thì có thể dẫn đến một số test bị sai. Chẳng hạn, bạn đọc có thể tự kiểm tra

khẳng định này để thấy rằng nếu giải mã xâu (NPMAAA, 6) thì có thể sẽ cho
PAMANA nhưng đáp án đúng phải là PANAMA. Trong ví dụ minh hoạ ở trên, các
ký tự A tại vị trí 4, 5 và 6 của xâu s=NNBAAA phải tương ứng với các ký tự A tại
các vị trí 1, 2 và 3.
PHẦN II
THUẬT TOÁN MÃ HOÁ CÔNG KHAI RSA
VÀ ỨNG DỤNG VÀO CHỮ KÝ ĐIỆN TỬ
Phần tiếp theo giới thiệu một số nét cơ bản về thuật toán mã hoá công khai
RSA và ứng dụng của nó trong chữ ký điện tử (chữ ký số).
Mật mã được dùng để bảo vệ bí mật thông tin khi thông tin được truyền trên
các kênh không bảo mật như thư tín, điện thoại, mạng truyền thông máy tính Giả
sử có hai người muốn trao đổi thông tin với nhau là A và B. Khi đó, chẳng hạn A
muốn gửi thông tin là một văn bản nào đó, gọi là bản rõ cho B, muốn được bảo mật
thì A phải lập mã cho bản rõ đó, được bản mã, và gửi cho B. Như vậy, giữa A và B
phải có sự thoả thuận nào đó về việc dùng khoá để A có thể mã hoá thông tin để
được bản mã và B giải mã thông tin từ bản mã nhằm thu được bản rõ. Khi đó, một
người nào đó không có khoá thì dù họ có lấy được bản mã trên đường truyền thì

Trang 5
cũng không thể dịch ngược thành bản rõ. Tuy nhiên họ vẫn có thể làm mất tính toàn
vẹn của của bản mã khi thêm bớt các đoạn mã, nhưng điều này có thể được phát
hiện khi B giải mã bản mã nhận được và kiểm tra sự hợp lý trong nội dung của nó.
Người ta chia các hệ mã làm hai loại chính là hệ mã cổ điển và hệ mã hiện
đại (hay mã công khai: public-key cryptosystem). Các hệ mã cổ điển thực hiện việc
bảo mật đều dựa trên cơ sở là có một khoá để dùng chung cho việc lập mã và giải
mã. Các hệ mã hoá công khai được nghiên cứu và phát triển từ những năm 1970. Ý
tưởng cơ bản của các hệ mã này là xây dựng những hệ thống sao cho mỗi người
tham gia vào quá trình truyền tin (người nhận tin và người gửi tin) sẽ có hai khoá
khác nhau: một khoá công khai (public key) dùng để lập mã và một khoá mật
(private key) dùng để giải mã. Khoá công khai được công khai hoá cho mọi người,

còn khoá mật của mỗi người được giữ bí mật. Cho dù biết khoá công khai và thuật
toán mã hoá thì cũng rất khó tìm được cách giải mã bởi độ bảo mật được đảm bảo
bằng độ phức tạp tính toán rất lớn. Nội dung phần này tập trung trình bày đôi nét về
một trong những hệ mã công khai nổi tiếng- hệ mã RSA và ứng dụng của nó trong
chữ ký điện tử.
Hệ mã công khai RSA của ba tác giả là Rivest, Shamir và Adleman phát minh
vào năm 1978 là một trong những hệ mã hiện đại được nhiều người biết đến. Thuật
toán này có nhiều ứng dụng trong bảo mã hoá và mật dữ liệu do tính năng vượt trội
của nó về mã hoá bảo mật dữ liệu so với nhiều thuật toán khác. Tính bảo mật của
thuật toán dựa trên độ phức tạp của bài toán phân tích một số ra thừa số nguyên tố.
Các bước của thuật toán được mô tả như sau:
1. Chọn hai số nguyên tố p, q lớn (khoảng trên một trăm chữ số).
2. Tính n=p.q
3. Tính hàm Ơle (n) =(q-1).(p-1)
4. Tìm số d thoả mãn điều kiện UCLN(d, (n)) = 1 (d và (n) nguyên tố cùng
nhau). Thông thường, chọn d [max(p,q)+1, n-1] và thoả biểu thức trên.

Trang 6
5. Tính e thoả mãn biểu thức: ed % (n) =1 (ký hiệu % là phép chia theo
môđun, trong Pascal nó được thực hiện bởi phép toán MOD).
Khi đó: khoá công khai là cặp số (e,n) và khoá mật là cặp số (d,n).
Cách thức mã hoá và giải mã như sau:
Gọi Seg
n
=[0, ,n-1] là miền mã; C và D lần lượt là các hàm mã hoá và hàm giải
mã.
+Thao tác mã hoá(Encoding): với x  Seg
n
tìm c = E(x) = x
e

% n.
+Thao tác giải mã (Decoding): với c, tìm D(c) = c
d
% n.
Ví dụ minh hoạ với các số nhỏ: p = 53, q = 61, n = 3233,  =3120, d =791 và e
=71. Khi đó x[0 3232] ta có E(x) = x
71
% 3233 và D(x) = x
791
% 3233.
Tính chất của RSA: ED(x) = DE(x) = x, với x  Seg
n
. Hay nói cách khác là
(x
e
% n)
d
% n = (x
d
% n)
e
% n = x, với x  Seg
n
.
Thuật toán RSA thoả mãn 5 yêu cầu của một hệ mã hiện đại:
1. Độ mật cao (nghĩa là để giải mã được mà không biết khoá mật thì phải tốn
hàng triệu năm).
2. Thao tác nhanh (thao tác mã hoá và giải mã phải tốn ít thời gian).
3. Dùng chung được.
4. Có ứng dụng rộng rãi.

5. Có thể dùng để xác định chủ nhân (dùng làm chữ ký điện tử).
Việc chứng minh tính đúng của thuật toán RSA rất dễ dàng, cuj:

Phần dưới đây trình bày chi tiết về phần cài đặt của thuật toán.
Bước 1. Tạo khoá
1. Chọn hai số nguyên tố p, q lớn (khoảng một trăm chữ số).
2. Tính n=p.q

Trang 7
3. Tính hàm Ơle (n) =(q-1).(p-1)
4. Tìm số d [max(p,q)+1, n-1] thoả mãn biểu thức: UCLN(d, (n)) = 1 theo
thuật toán Ơclit.
Thuật toán Ơclit:
Cho r
0
= a và r
1
= b là các số nguyên thoả mãn a  b> 0. Thực hiện
phép chia liên tiếp để thu được các kết quả r
j
= r
j + 1
q
j + 1
+ r
j + 2
với 0 < r
j+2
<
r

j+1
(j = 0, 1,…,n-2) và r
n+1
là phần dư cuối cùng bằng 0 thì (a,b) =r
n
.
5. Tính e thoả mãn biểu thức: ed % (n) =1 (ký hiệu % là phép chia theo
môđun) theo thuật toán Ơclit mở rộng.
Thuật toán Ơclit mở rộng:
Cho a và b là các số nguyên dương. Khi đó
(a,b) = s
n
a + t
n
b,
với n = 0,1,2, , trong đó s
n
và t
n
là số hạng thứ n của dãy đệ quy định
nghĩa bởi
s
0
= 1, t
0
= 0,
s
1
= 0, t
1

= 1,

s
j
= s
j - 2
– q
j -1
s
j –1
, t
j
= t
j – 2
– q
j – 1
t
j – 1

với j = 2,3, ,n; các q
j
là các thương số trong các phép chia của thuật toán
Ơclit khi nó được sử dụng để tìm (a,b). (Định lý này có thể chứng minh bằng phương
pháp quy nạp toán học).
Áp dụng thuật toán này với hai tham số vào là ad và một biến b lấy giá trị
của hàm . Khi đó ta sẽ tìm được s và t thoả (a,b) = sa + tb =1 => (as +tb) % b =1
=>as%b =1 hay s chính là giá trị e cần tìm (nếu s âm, để e đạt giá trị dương thì ta
chỉ cần cộng thêm một bội lần b vào s).
Bước 2. Mã hoá file văn bản


Trang 8
- Giả sử file văn bản cần mã hoá là VANBAN.TXT. Ta chuyển đổi từ dạng ký
tự sang dạng số (có thể tuỳ chọn cách chuyển đổi, chẳng hạn, có thể lấy mã
tương ứng của ký tự trong bảng mã ASCII).
- Tách thành các số m: 0≤ n ≤ n-1.
- Tính m’= m
e
% n và lưu m’ vào file, chẳng hạn m’ được lưu vào file
MATMA.TXT.
Bước 3. Giải mã
- Mở file MATMA.TXT, lần lượt đọc các giá trị ra biến m’.
- Tính m = m’
d
% n.
- Chuyển đổi ngược lại m thành dạng ký tự và ghi vào file GIAIMA.TXT
Bạn nào có nhu cầu thì có thể liên hệ với toà soạn để có chương trình nguồn (chương
trình được viết bằng ngôn ngữ Pascal). Một số lưu ý trong chương trình minh hoạ:
mới chỉ thao tác với các số nhỏ (trong phạm vi longint, bạn có thể tự cài đặt lại với
các số lớn), các số nguyên tố được sinh ra ngẫu nhiên mỗi khi chạy chương trình và
ghi vào file PRIME.TXT (trong thực tế các số phải lớn hàng trăm chữ số và khoá
mật phải được giữ kín).
Khả năng bị tấn công của hệ mã RSA:
Một hệ mật mã bị tấn công (hay bị thám mã) nếu như một người khác không
tham gia vào quá trình truyền tin (không biết khoá mật) có thể giải mã bản mã để
thu được bản rõ. Trong hệ mã RSA, nếu biết khoá công khai (e,n) thì rất khó tìm
được khoá mật (d,n) vì để tìm d (là số nghịch đảo của e theo môđun (n)) thì trước
tiên cần phải tìm hàm (n) = (pq) = (p-1)(q-1). Nhưng để tìm (n) thì ta phải phân
tích n thành dạng tích, mà công việc này phải tốn hàng triệu năm nếu như p và q
là các số có khoảng 100 chữ số (tức là n có khoảng 200 chữ số). Nếu tìm được
(n) thì ta có hệ

pq=n
(p-1)(q-1) = (n)


Trang 9
pq=n
p + q = n - (n) +1

Do đó p và q là nghiệm của phương trình bậc hai: x
2
-(n- (n) +1)x + n =0.
Ví dụ: nếu biết n = 84773093 và biết (n) = 84754668 thì sau khi giải phương
trình tương ứng ta sẽ được nghiệm p = 9539 và q = 8887.
Không thể chứng minh được rằng: không thể giải mã những thông tin đã
được mã hoá bằng thuật toán mã hoá RSA nếu không phân tích n thành dạng tích.
Thế nhưng từ trước tới nay, các thuật toán đưa ra nói chung đều tương đương với
việc phân tích n thành dạng tích. Nếu không có phương pháp giải mã nào hiệu quả
hơn cho thuật toán mã hoá RSA ngoài phương pháp phân tích thành tích thì độ bảo
mật của thuật toán được đảm bảo (theo nghĩa để có thể giải mã được thì phải tốn
kém rất nhiều về thời gian), nếu có sự cải tiến nào đó trong phương pháp phân tích
và khả năng của máy tính cũng tăng nên thì cần phải tăng kích thước của n. Tuy
nhiên, nếu việc phân tích trở nên khả thi hơn thì đồng nghĩa với thời gian thông tin
mã hoá được bảo mật sẽ giảm xuống.
Cần có chú ý khi lựa chọn các số nguyên tố p và q để tăng độ bảo mật của thông
tin được mã hoá. Chẳng hạn, p - 1 và q - 1 đều có những ước nguyên tố lớn; (p - 1,
q - 1) nhỏ; p và q có số chữ số chênh lệch nhau nhiều. Các kỹ thuật này giúp cản
trở việc phân tích của những phương pháp phân tích đặc thù nào đó. Bởi vì, chẳng
hạn như kỹ thuật phân tích của Ferma đặc biệt hiệu quả khi phân tích một số nguyên
dương thành tích hai số khi hai hệ số đó có độ lớn tương đương.
Một số tác giả hiện nay đã đề xuất nhiều kỹ thuật để cải tiến thuật toán mã hoá

RSA. Chi tiết về một số kỹ thuật cải tiến và phân tích số có thể tìm thấy trong các
tài liệu [3], [4].
Ngoài ra, còn một số khả năng khác cũng dẫn tới việc hệ mã RSA bị tấn công.
Tuy nhiên, nội dung tài liệu này không có điều kiện đề cập đến. Chi tiết về một số
khả năng tấn công khác có thể tìm thấy trong tài liệu [2].


Trang 10
Áp dụng của hệ mã RSA cho chữ ký điện tử:
Thông tin truyền đi trên mạng cũng cần thiết phải được xác nhận người gửi,
tức là xác nhận trách nhiệm của người gửi với thông tin đó. Giống như văn bản
thông thường (dưới dạng viết tay), các văn bản truyền trên mạng (dưới dạng số hoá)
cần phải có chữ ký của người gửi để xác nhận trách nhiệm của người gửi. Tuy nhiên,
chữ ký dùng ở đây không giống như chữ ký dưới dạng viết tay, nó là một dãy bit và
được gọi là “chữ ký điện tử”; nó được dùng để “ký” cho từng bit của văn bản chứ
không phải chỉ là một chữ ký rời ở cuối văn bản (như trong văn bản giấy thông
thường).
Chữ ký là một thể hiện (thường là thông qua các ký hiệu) đặc trưng cho người
chủ của chữ ký. Mọi chữ ký cần thoả mãn tối thiểu ba tiêu chuẩn:
1. Nhận biết được: mọi người liên quan đến chữ ký đều có thể nhận biết được
chủ của chữ ký đó.
2. Chữ ký khó giả mạo.
3. Khó chối bỏ (chủ nhân của một chữ ký nào đó khó có thể chối bỏ rằng đó
không phải là chữ ký của họ).
Mọi hệ thống trên máy tính thực hiện được ba chức năng trên đều gọi là hệ
thống trợ giúp cho chữ điện tử.
Giả sử trong hệ mã công khai, A gửi cho B một văn bản rõ m. Để B có thể
nhận biết được rằng văn bản đó là do chính A gửi thì trong văn bản phải có chữ ký
của A. Thực chất thao tác “ký vào văn bản” là mã hoá văn bản đó với khoá công
khai của A. Gọi E

X
và D
X
lần lượt là hàm mã hoá và hàm giải mã của người X. Khi
đó, sơ đồ chữ ký điện tử dùng mã công khai bao gồm bốn bước sau:
Bước 1. A ký vào văn bản: m’ = D
A
(m)
Bước 2. A gửi tin cho B: A mã m’ theo khoá công khai của B: m’’= E
B
(m’)
và gửi m’’ cho B.
Bước 3. Khi nhận được m’’ thì B thực hiện hai thao tác:

Trang 11
- D
B
(m’’) = D
B
E
B
(m’) = m’ (vì theo tính chất của hệ mã RSA)
- E
A
(m’) = E
A
D
A
(m) = m.
Bước 4. (Kiểm thử chữ ký) Một “trọng tài” đứng ra kiểm tra giúp B để khẳng

định rằng A chính là người gửi (nhằm đề phòng trường hợp A chối bỏ chữ ký của
mình).
- B gửi m, m’ tới cho trọng tài
- Trọng tài tính: E
A
(m’) và thu được m*
- So sánh hai văn bản m* và m: nếu chúng giống nhau thì chứng tỏ văn bản
được gửi đến B có chữ ký của A, bởi vì trọng tài không thể tự tạo ra m’.
Tuy nhiên, hoạt động của sơ đồ này không luôn luôn đảm bảo chính xác. Bởi
vì ta thấy rằng các hàm mã hoá E và giải mã D đều ánh xạ từ tập [0 n-1] vào chính
nó (vì các giá trị của hàm đều phải thuộc tập [0 n-1]). Do đó, nếu hai người tham
gia truyền tin A và B có các giá trị n
A
và n
B
khác nhau thì sơ đồ sẽ hoạt động sai, vì
chẳng hạn hàm hợp: E
B
(m’) = E
B
D
A
(m) (= m’’) tại bước 2 sẽ cho kết quả sai nếu
n
A
> n
B
. Hiện tượng này được gọi là sự không tương thích về khoá. Một trong các
giải pháp được đưa ra như sau:+ Nếu n
A

< n
B
thì thực hiện giống như sơ đồ ở trên.+
Nếu n
A
> n
B
thì thực hiện như sau: Thứ tự các bước 1 và 2 ở trên hoán được hoán
vị cho nhau, nghĩa là bước 1- mã hoá theo khoá công khai của B, bước 2- A ký vào
văn bản; ta thu được m’’ = D
A
(m’) = D
A
E
B
(m) và giá trị này được gửi tới B. Khi
thu được m’’ thì B thực hiện lần lượt các hàm E
A
và D
B
để thu được m =
D
B
E
A
D
A
E
B
(m). Sau đó m và m’’ được gửi đến cho trọng tài, trọng tài tính E

A
(m’’)
để thu được m
1
và E
B
(m) để thu được m
2
. Rồi tiến hành so sánh m
1
và m
2
tương tự
như bước 4 trong sơ đồ trên.

PHẦN III
MỘT SỐ VẤN ĐỀ BẢO MẬT DỮ LIỆU
LIÊN QUAN ĐẾN ĐỊNH LÝ ƠLE VÀ FECMA
I. Cơ sở lý thuyết liên quan

Trang 12
1. Định lý 1.1 (Phương pháp quy nạp toán học).
a. Nguyên lý 1. Một tập các số nguyên dương có chứa số 1 và với mỗi một số
nguyên dương n đều có tính chất là nếu n thuộc tập đó thì n +1 cũng thuộc tập đó,
khi đó tập đã cho là tập của tất cả các số nguyên dương.
b. Nguyên lý 2. Một tập các số nguyên dương có chứa số 1 và có tính chất là với
mọi số nguyên dương n cho trước mà tập đó chứa tất cả số nguyên dương 1,2, ,n,
thì nó cũng chứa số nguyên n+1, khi đó tập đã cho là tập của tất cả các số nguyên
dương.
2.Một số định nghĩa

2.1 Ước chung lớn nhất và bội chung nhỏ nhất
Cho a, b là các số nguyên, a0, a được gọi là ước của b (a chia hết b, ký hiệu a|
b) và cũng gọi là b là bội của a (b chia hết cho a, ký hiệu ba) nếu c Z sao cho b
= ac.
Một ước chung d của các số nguyên a
1
, a
2
, …, a
n
gọi là ước chung lớn nhất của
a
1
, a
2
, …, a
n
nếu mọi ước chung của a
1
, a
2
, …, a
n
đều là ước của d. Ta ký hiệu d =
(a
1
, a
2
, …, a
n

).
Một bội chung m của các số nguyên a
1
, a
2
, …, a
n
gọi là bội chung nhỏ nhất của
a
1
, a
2
, …, a
n
nếu mọi bội chung của a
1
, a
2
, …, a
n
đều là bội của m. Ta ký hiệu m =
[a
1
, a
2
, …, a
n
].
2.2 Môđun
Cho m là một số nguyên dương, a và b là các số nguyên. Ta nói rằng a là đồng

dư với b theo môđun m, và viết là a  b (mod m) nếu m | (a - b).
2.3 Số nguyên tố
Một số tự nhiên lớn hơn 1 không có ước số dương nào khác 1 và chính nó được
gọi là số nguyên tố.
Một số tự nhiên lớn hơn 1 không là số nguyên tố gọi là hợp số.
2.4 Thặng dư
Các lớp tương đương theo quan hệ đồng dư theo môđun m gọi là các lớp thặng
dư theo môđun m. Số các lớp thặng dư theo môđun m bằng m.

Trang 13
Từ mỗi lớp thặng dư theo môđun m ta lấy ra một đại diện thì ta được một hệ
thặng dư đầy đủ theo môđun m. Nếu các đại diện lấy ra là các số không âm bé nhất
trong lớp thặng dư tương ứng thì ta được hệ thặng dư đầy đủ không âm bé nhất theo
môđun m. Ví dụ: hệ thặng dư đầy đủ không âm bé nhất theo môđun 5 là Z
5
= {0, 1,
2, 3, 4}.
Từ mỗi hệ thặng dư đầy đủ theo môđun m ta lấy ra một thặng dư nguyên tố vói
m thì ta được hệ thặng dư thu gọn theo môđun m. Ví dụ: hệ thặng dư thu gọn theo
môđun 8 là {1, 3, 5, 7}. Số các phần tử của một hệ thặng dư thu gọn theo môđun m
như phần sau sẽ trình bày chính là giá trị của hàm Ơle (m).
2.5 Hàm nhân
Một hàm f: N
+
> Q được gọi là hàm nhân (multiplicative function) nếu nó thoả
mãn hai tính chất sau:
a. f  0.
b.  a,b  N
+
thì f(ab) = f(a)f(b)

3. Một số kết quả
3.1 1 = (a
1
, a
2
, …a
n
) <=> x
1
,

x
2
,…, x
n
Z sao cho 1 = a
1
x
1
+a
2
x
2
+ . . .+ a
n
x
n
3.2 Nếu a,b, m và n là các số nguyên với a | b và b | c, khi đó a | c.
3.3 Nếu a, b và c là các số nguyên dương sao cho (a,b) = 1 và a | bc, thì a | c.
3.4 Nếu (a,c) =1 và (b,c) =1 thì (ab,c) = 1.

3.5 Nếu a, b, c, d, và m là các số nguyên với m > 0 sao cho a  b(mod m), thì
(i) a + c  b + c(mod m),
(ii) a – c  b – c(mod m),
(iii) ac  bc(mod m).
Chứng minh:
Từ a  b(mod m), ta biết rằng m | (a – b). Từ (a + c) – (b + c) = a – b, ta thấy m
| ((a + c) – (b + c)), như vậy suy ra (i). Cũng như vậy, suy ra (ii) từ (a – c) – (b – c)
= a – b. Để thu được (iii), vì ac – bc = c(a - b), nên từ m | (a – b), suy ra m | c(a – b),
và do đó ac  bc(mod m). 

Trang 14
3.6 Nếu a, b, c và m là các số nguyên sao cho m > 0, d = (c,m), và ac  bc(mod
m), thì a  b(mod m/d).
3.7 Nếu a, b, c, d, và m là các số nguyên sao cho m > 0 , (c,m) = 1, và ac 
bc(mod m), thì a  b(mod m).
3.8 (Định lý phép chia với dư của vành số nguyên Z) Cho a, b Z, b  0. Khi đó
tồn tại duy nhất cặp số nguyên q, r sao cho a= bq + r với 0  r < | b |.
3.9 Nếu c và d là các số nguyên sao cho c = dq + r với q và r là các số nguyên
thì (c,d) = (d,r).
Chứng minh
Gọi e = (c,d) và e' =(d,r). Ta có e | c và e | d => e | c - dq => e | r => e | e'=(d,r).
Mặt khác e' =(d,r) => e' | qd +r => e' | c => e' | e =(c,d). Do đó e = e'. 
4. Định lý 1.2 (Thuật toán Ơclit)
Cho r
0
= a và r
1
= b là các số nguyên thoả mãn a  b> 0. Thực hiện phép chia
liên tiếp để thu được các kết quả r
j

= r
j + 1
q
j + 1
+ r
j + 2
với 0 < r
j+2
< r
j+1
(j = 0, 1,…,n-
2) và r
n+1
là phần dư cuối cùng bằng 0 thì (a,b) =r
n
.
Chứng minh
Với r
0
= a và r
1
= b là các số nguyên thoả mãn a  b, thực hiện phép chia liên
tiếp để thu được các kết:
r
0
= r
1
q
1
+ r

2
0  r
2
< r
1
,
r
1
= r
2
q
2
+ r
3
0  r
3
< r
2
,

r
n-3
= r
n-2
q
n-2
+ r
n-1
0  r
n-1

< r
n-2
,
r
n-2
= r
n-1
q
n-1
+ r
n
0  r
n
< r
n-1
,
r
n-1
= r
n
q
n
.
Phép chia liên tiếp này phải kết thúc sau một số hữu hạn bước với số dư r
n + 1
=
0. Vì a = r
0
> r
1

>r
2
> …  0 nên số phép chia không vượt quá a. Theo kết quả 3.9
ta thấy rằng (a,b) = (r
0
,r
1
) = (r
1
,r
2
) = (r
2
,r
3
) =…= (r
n-2
,r
n-1
) = (r
n-1
,r
n
) = (r
n
,0) = r
n
. Do
đó (a,b) = r
n

. 
Ví dụ (252, 198) =18 vì:

Trang 15
252 = 1.198 +54
198 = 3.54 + 36
54 = 1.36 + 18
36 = 2.18
5. Định lý 1.3 (Định lý Lamé)
Số các phép chia cần thiết để tìm ước số chung lớn nhất của hai số nguyên dương
sử dụng thuật toán Ơclit không lớn hơn năm lần số các chữ số thập phân của số nhỏ
hơn trong hai số đó.
6. Định lý 1.4
Cho a và b là các số nguyên dương. Khi đó
(a,b) = s
n
a + t
n
b,
với n = 0,1,2, , trong đó s
n
và t
n
là số hạng thứ n của dãy đệ quy định nghĩa bởi
s
0
= 1, t
0
= 0,
s

1
= 0, t
1
= 1,

s
j
= s
j - 2
– q
j -1
s
j –1
, t
j
= t
j – 2
– q
j – 1
t
j – 1

với j = 2,3, ,n; các q
j
là các thương số trong các phép chia của thuật toán Ơclit
khi nó được sử dụng để tìm (a,b)
.
Chứng minh:
Ta chứng minh rằng
r

j
= s
j
a + t
j
b (1)
với j = 0,1, ,n. Vì (a,b) = r
n
, do đó nếu chứng minh được (1) thì ta sẽ thu được
(a,b) = s
n
a + t
n
b.
Ta chứng minh (1) sử dụng nguyên lý thứ hai của phương pháp quy nạp toán
học. Với j = 0 ta có a = r
0
= 1.a +

0.b = s
0
a + t
0
b. Do đó, (1) là đúng với j = 0. Cũng
như vậy, b = r
1
= 0.a + 1.b = s
1
a + t
1

b, vì vậy (1) là đúng với j = 1.
Bây giờ ta giả sử rằng
r
j
= s
j
a + t
j
b
với j = 1,2, ,k-1. Khi đó, từ bước thứ k của thuật toán Ơclit, ta có
r
k
= r
k-2
– r
k-1
q
k-1


Trang 16
Theo giả thuyết quy nạp, ta thấy
r
k
= (s
k-2
a + t
k-2
b) – (s
k-1

a + t
k-1
b)q
k-1

= (s
k-2
– s
k-1
q
k-1
)a + (t
k-2
– t
k-1
q
k-1
)b
= s
k
a + t
k
b. 
7. Định lý 1.5
Nếu r
1
, r
2
, ,r
m

là một hệ thặng dư đầy đủ theo môđun m, và nếu a là một số
nguyên dương với (a,m) = 1, thì dãy số ar
1
+ b, ar
2
+ b, , ar
m
+ b cũng là một hệ
thặng dư đầy đủ theo môđun m với bất kỳ số nguyên b nào.
Chứng minh:
Ta cho thấy rằng không có hai trong các số nguyên ar
1
+ b, ar
2
+ b, , ar
m
+ b là
đồng dư với nhau theo môđun m. Bởi vì nếu giả sử ar
j
+ b  ar
k
+ b(mod m) => ar
j

= ar
k
(mod m), mà (a,m) = 1 nên ta suy ra r
j
 r
k

(mod m); điều này mâu thuẫn với
giả thiết r
1
, r
2
, ,r
m
là một hệ thặng dư đầy đủ theo môđun m. Do đó dãy m số nguyên
này tạo thành một hệ thặng dư đầy đủ theo môđun m. 
II. Định lý Ơle và định lý Fecma
1.Định nghĩa (Hàm Ơle ).
Gọi n là một số nguyên dương, hàm Ơle (n) được định nghĩa là số các số nguyên
dương không vượt quá n mà nguyên tố cùng nhau với n.
Ví dụ: Xét (n) với n = 1, 2, , 10, Hàm  sẽ có giá trị như sau:
(1) = 0 (6) = 2
(2) = 1 (7) = 6
(3) = 2 (8) = 4
(4) = 2 (9) = 6
(5) = 4 (10) = 4
2. Định lý 2.1(Định lý Fecma)
Nếu p là số nguyên tố và a là một số nguyên dương với p a, thì a
p – 1
 1(mod
p).
Chứng minh:
Xét p – 1 số nguyên a, 2a, , (p - 1)a.

Trang 17
Không có số nào trong các số này có thể chia hết cho p, vì nếu p | ja thì ta có p |
j (do p a). Điều này là vô lý vì 1  j  p – 1. Do đó p -1 số này nguyên tố với p.

Hơn thế nữa, không có hai trong các số nguyên a, 2a, , (p – 1)a là đồng dư với
nhau theo môđun p. Bởi vì nếu giả sử ja  ka(mod p) với 1  j < k  p –1, thì từ
(a,p) = 1 ta có j  k(mod p). Điều này là vô lý vì j và k là các số nguyên dương nhỏ
hơn p –1.
Do các số nguyên a, 2a, ,(p - 1)a là một tập p – 1 số nguyên tất cả không đồng
dư với 0 theo môđun p, và không có hai số nào đồng dư với nhau theo môđun p.
Nên thặng dư dương bé nhất của các số a,2a, ,(p – 1)a, lấy theo một thứ tự nào đó,
phải là số nguyên 1, 2, , p – 1. Từ đó, tích số của a, 2a, , (p – 1)a là đồng dư theo
môđun p với tích của p – 1 số nguyên dương đầu tiên:
a.2a (p – 1)a  1.2 (p – 1)(mod m).
=> a
p – 1
(p – 1)!  (p – 1)!(mod p).
=> a
p – 1
 1(mod m). 
Ví dụ:
Cho p = 5, a = 3.
Khi đó 1.3  3(mod 5) , 2.3  1(mod 5) , 3.3  4(mod 5) , 4.3  2(mod 5)
Tương đương (1.3).(2.3).(3.3).(4.3) = 3.1.4.2(mod 5)
vì vậy 3
4
.1.2.3.4  1.2.3.4(mod 5), do đó 3
4
.4!  4!(mod 5) hay 3
4
 1(mod 5)
Từ định lý này ta suy ra hai hệ quả sau:
Hệ quả 1. Nếu p là số nguyên tố và a là một số nguyên dương thì a
p

 a (mod p).
Hệ quả 2. Nếu p là số nguyên tố và a là một số nguyên dương, p a thì a
p-2
là nghịch
đảo của a theo môđun p.
Định lý này có tên gọi chính xác là định lý nhỏ của Fecma để phân biệt với
giả thuyết nổi tiếng của ông có tên gọi là Định lý cuối cùng của Fecma.
3. Định lý 2.2
Nếu r
1
, r
2
, ,r

(n)
là hệ thặng dư thu gọn theo môđun n, và nếu a là một số nguyên
dương với (a,n) = 1, thì tập ar
1
, ar
2
, ,a r

(n)
cũng là một hệ thặng dư thu gọn theo
môđun n.

Trang 18
Chứng minh: Ta phải chứng minh (ar
i
,n) =1 và ax

i
ax
j
(mod n)
Vì (a,n) = 1 và (r
i
,n) = 1 nên (ar
i
,n) =1, i= 1, 2, , (n).
Giả sử rằng ar
j
 ar
k
(mod n), trong đó j  k với 1  j, k  (n); kết hợp với (a,n)
= 1 => r
j
 r
k
(mod m). Điều này vô lý vì r
j
r
k
(mod n). 
4. Định lý 2.3 (Định lý Ơle)
Nếu m là một số nguyên dương và a là một số nguyên với (a,m) = 1, thì a
(m)

1(mod m).
Chứng minh:
Cho r

1
, r
2
, ,r

(m)
là hệ thặng dư rút gọn theo môđun m.
Theo định lý 2.2 => tập ar
1
, ar
2
, ,ar

(m)
cũng là một hệ thặng dư thu gọn theo
môđun m, nên thặng dư dương bé nhất của ar
1
, ar
2
, ,ar

(m)
phải là các số nguyên r
1
,
r
2
, ,r

(m)

lấy theo một thứ tự nào đó. Do đó ta có:
ar
1
ar
2
ar

(m)
 r
1
r
2
r

(m)
(mod m)
hay a
(m)
r
1
r
2
r

(m)
 r
1
r
2
r


(m)
(mod m).
Mặt khác do (r
1
r
2
r

(m)
, m) = 1, nên ta có thể kết luận rằng a
(m)
 1(mod m). 
Ta có thể sử dụng định lý Ơle để tìm các nghịch đảo theo môđun m. Nếu a và m
là nguyên tố cùng nhau, ta biết rằng
a.a
(m) –1
= a
(m)
 1(mod m)
Từ đây, a
(m) –1
là một nghịch đảo của a theo môđun m.
5. Định lý 2.4
Nếu f là một hàm nhân và nếu n = p
1
a1
p
2
a2

p
s
as
là dạng phân tích chính tắc của
số nguyên n, khi đó f(n) = f(p
1
a1
) f(p
2
a2
) f(p
s
as
).
Chứng minh:
Ta sẽ chứng minh định lý sử dụng phương pháp quy nạp toán học dựa trên số
các số nguyên tố trong dạng phân tích chính tắc của n.
Nếu n có một số nguyên tố trong dạng phân tích chính tắc của nó, thì n = p
1
a1
,
với số nguyên tố p
1
nào đó và định lý hiển nhiên đúng.
Giả sử rằng định lý là đúng với tất cả các số nguyên với k số nguyên tố khác
nhau trong dạng phân tích chính tắc của nó. Bây giờ chúng ta giả sử rằng n có k +

Trang 19
1 số nguyên tố khác nhau trong dạng phân tích chính tắc, hay n = p
1

a1
p
2
a2
p
k
ak

p
k+1
ak+1
. Từ f là hàm nhân và (p
1
a1
p
2
a2
p
k
ak
, p
k+1
ak+1
) = 1 => f(n) = f(p
1
a1
p
2
a2


p
k
ak
)f(p
k+1
ak+1
). Theo giả thiết quy nạp: f(p
1
a1
p
2
a2
p
k
ak
) = f(p
1
a1
)f(p
2
a2
)f(p
3
a3
) f(p
k
ak
),
ta suy ra f(n) = f(p
1

a1
)f(p
2
a2
)f(p
3
a3
) f(p
k
ak+1
). 
6. Định lý 2.5
Nếu p là nguyên tố thì (p) = p – 1. Ngược lại, nếu p là một số nguyên dương
với (p) = p – 1, thì p là số nguyên tố.
Chứng minh:
Nếu p là nguyên tố thì mọi số nguyên dương nhỏ hơn p là nguyên tố cùng nhau
với p. Do có p – 1 số nguyên như vậy, ta có (p) = p – 1.
Ngược lại, nếu p là hợp số, thì p có một ước số d với 1 < d < p, và tất nhiên p và
d không nguyên tố cùng nhau. Từ đây ta biết rằng ít nhất một trong p – 1 số nguyên
1,2, ,p – 1, gọi là d, không là nguyên tố cùng nhau với p, (p)  p – 2. Do đó, nếu
(p) = p – 1, thì p phải là số nguyên tố. 
Ví dụ:
Cho p = 7, khi đó (p) = (7) = 6
7. Định lý 2.6
Cho p là một số nguyên tố và a là một số nguyên dương. Khi đó (p
a
) = p
a
– p
a–

1
.
Chứng minh:
Các số nguyên dương nhỏ hơn p
a
mà không nguyên tố cùng nhau với p là các số
nguyên không lớn hơn p
a
mà có thể chia hết cho p. Đây là các số nguyên có dạng
kp trong đó 1  k  p
a –1
. Có chính xác p
a –1
số nguyên như vậy, nên có p
a
– p
a –1
số
nguyên nhỏ hơn p
a
và nguyên tố cùng nhau với p
a
.
Do đó, (p
a
) = p
a
– p
a-1
. 

Ví dụ:
Cho p = 5, a = 2
p
a
= 5
2
= 25 ; p
a-1
= 5
1
= 5
Khi đó (p
a
) = (5
2
) = p
2
– p
2 -1
= (25) = 25 – 5 = 20

Trang 20
8. Định lý 2.7
Cho m và n là các số nguyên dương nguyên tố cùng nhau. Khi đó (mn) = (m)
(n).
Chứng minh:
Ta viết các số nguyên dương không lớn hơn mn theo cách sau
1 m + 1 2m + 1 (n – 1)m + 1
2 m + 2 2m + 2 (n – 1)m + 2
3 m + 3 2m + 3 (n – 1)m + 3

. . . .
. . . .
. . . .
r m + r 2m + r (n – 1)m + r
. . . .
. . . .
. . . .
m 2m 3m mn
Giả sử rằng r là một số nguyên dương không lớn hơn m thoả mãn (m,r) = d > 1.
Khi đó không số nào trong dòng thứ r là nguyên tố cùng nhau với mn, bởi vì bất kỳ
phần tử nào của dòng này cũng đều có dạng km + r, mà d | (km + r) có được do d |
m và d | r (k  Z, 1  k  n – 1).
Vì vậy, để tìm các số nguyên tố cùng nhau với mn, ta cần nhìn vào dòng thứ r
thoả mãn (r,m) = 1. Có tất cả (m) dòng như vậy. Nếu (m,r) = 1 và 1  r  m, ta
phải xác định có bao nhiêu số trong dòng này là nguyên tố cùng nhau với mn. Các
số trong dòng này là r, m + r, 2m + r, , (n - 1)m + r.
+ Do (r,m) = 1, nên mỗi số nguyên này là nguyên tố cùng nhau với m.
+ Theo định lý 1.5 thì có một hệ thặng dư đầy đủ theo môđun n trong dòng thứ
r này. Hay nói chính xác là có (n) số nguyên tố cùng nhau với n.
Như vậy, mỗi dòng có (n) số nguyên nguyên tố cùng nhau với cả m và n hay
nguyên tố với tích mn.

Trang 21
Do có tất cả (m) dòng, mỗi dòng có (n) số nguyên tố cùng nhau với mn nên
ta kết luận rằng (mn) = (m) (n). 
Ví dụ:
Ta có m = 3, n = 5
Khi đó (m) = (3) = 2 , (n) = (5) = 4, (mn) = (3.5) = (15) = 8 = 2.4
9. Định lý 2.8
Cho n = p

1
a1
p
2
a2
p
k
ak
là dạng phân tích chính tắc của số nguyên dương n. Khi
đó




























k
ppp
nn
1
1
1
1
1
1)(
21



Chứng minh:
(n) = (p
1
a1
p
2
a2
p
k
ak

)
(n) = (p
1
a1
) (p
2
a2
) (p
k
ak
) với j = 1, 2, , k. Định lý 2.4




























k
a
k
aa
p
p
p
p
p
pn
k
1
1
1
1
1
1)(
2
2
1
1
21



Định lý 2.6
=




























k
a
k
aa
ppp
ppp
k
1
1
1
1
1
1
21
21
21


=




























k
ppp
n
1
1
1
1
1
1
21


Ví dụ:

Cho n = 10, n = 2.5. Khi đó ta có:

4
5
1
1
2
1
110)10( 
















10. Định lý 2.9
Cho n là một số nguyên dương lớn hơn 2. Khi đó (n) là chẵn.
Chứng minh:
Giả sử rằng n = p
1

a1
p
2
a2
p
s
as
là dạng phân tích chính tắc của n. Do  là hàm
nhân, nên suy ra rằng



s
j
a
j
j
pn
1
)()(

. Theo định lý 2.6 ta biết rằng
)1()(
11


j
a
j
a

j
ppp
jj

. Chúng ta có thể thấy rằng (p
j
aj
) là chẵn nếu p
j
là một số

Trang 22
nguyên tố lẻ vì p
j
– 1 là chẵn; hoặc nếu p
j
= 2 và a
j
 1, vì p
j
ạj –1
là chẵn. Do n > 2,
nên ít nhất một trong hai điều kiện này thoả mãn, như vậy (p
j
aj
) là chẵn đối với ít
nhất một số nguyên j, 1  j  s. Ta kết luận rằng (n) là chẵn. 
Ví dụ:
Cho n = 6, ta có: (6) = 2 (là chẵn)
11. Định lý 2.10

Cho n là một số nguyên dương. Khi đó


nd
nd
|
)(


Chứng minh:
Ta chia tập các số nguyên từ 1 đến n thành nhiều lớp. Đặt số nguyên m vào trong
lớp C
d
nếu ước chung lớn nhất của m và n là d. Ta thấy rằng m trong C
d
, tức là (m,n)
= d, nếu và chỉ nếu (m/d, n/d) = 1. Do đó, số các số nguyên trong C
d
là số các các
số nguyên dương không lớn hơn n/d mà nguyên tố cùng nhau với số nguyên n/d.
Từ quan sát này, ta thấy rằng có (n/d) số nguyên trong C
d
. Do ta chia các số nguyên
từ 1 đến n thành các lớp rời nhau và mỗi số nguyên trong một lớp, nên n là tổng của
các tất cả các số trong các lớp khác nhau.
Vì vậy


nd
ndn

|
)|(


Khi cho d nhận lần lượt các giá trị nguyên dương mà d chia hết n, thì n/d cũng lần
lượt nhận các ước này, vì vậy:



ndnd
dndn
||
)()|(


Ví dụ:
Với n = 16, Ta phân các số từ 1 đến 16 thành các lớp C
d
trong đó d | 16. Lớp C
d

bao gồm các số nguyên m sao cho (m,16) = d.
Ta có các lớp:
C
1
= {1, 3, 5, 7, 9, 11, 13, 15}  (16/1) = (16) = 8
C
2
= {2, 6, 10, 12, 14}  (16/2) = (8) = 4
C

4
= {4, 12}  (16/4) = (4) = 2
C
8
= {8}  (16/8) = (2) = 1

Trang 23
C
16
= {16}  (16/16) = (1) = 1
Và ta có:
1611248)16|()|(
16||


dnd
dnd


III. Ứng dụng:
1.Chứng minh tính đúng đắn của RSA:
Nhắc lại các bước của thuật toán:
1. Chọn hai số nguyên tố p, q lớn.
2. Tính n=p.q
3. Tính hàm Ơle (n)=(q-1).(p-1)
4. Tìm số d thoả mãn biểu thức: (d, (n))=1
5. Tính e thoả mãn biểu thức: ed % (n) =1
Khi đó: khoá công khai là cặp số (e,n) và khoá mật là cặp số (d,n).
Cách thức mã hoá và giải mã như sau:
Gọi Seg

n
=[0, ,n-1] là miền mã; C và D lần lượt là các hàm mã hoá và giải mã.
+Mã hoá(Encoding): m  Seg
n
tìm c = E(m) = m
e
% n.
+Giải mã (Decoding): D(c) = c
d
% n.
Tính chất của RSA: ED(x) = DE(x) = x, với x  Seg
n
. Hay nói cách khác là
(x
e
% n)
d
% n = (x
d
% n)
e
% n = x, với x  Seg
n
.
Phần tiếp theo sẽ trình bày cơ sở toán học của thuật toán RSA (chứng minh tính
đúng đắn của thuật toán RSA). Trước hết, chúng ta chứng minh hai bổ đề:
Bổ đề 1. Cho a, n và e là các số nguyên dương tuỳ ý, khi đó ta có:
(a%n)
e
% n = a

e
% n
Chứng minh: Giả sử a% n = r hay a=nq+r, qN. Từ đó:
VT = (a%n)
e
% n
= r
e
% n
VP = a
e
% n
= (nq+r)
e
% n
= (nq)
e-i
r
i
) % n
= r
e
% n 
Từ đó, ta suy ra điều phải chứng minh.



e
i
ie

e
C
0

Trang 24
Bổ đề 2. Cho a, b và n là các số nguyên dương tuỳ ý, khi đó ta có:
ab % n = (a % n)(b % n) % n
Chứng minh. Giả sử a% n = r
1
và b% n = r
2
=> a = nq
1
+r
1
và b = nq
2
+r
2
, q
1
,q
2

Z. Khi đó ta có:
VT = ab % n
= (nq
1
+r
1

)(nq
2
+r
2
) % n
= ( n(nq
1
q
2
+q
1
r
2
+q
2
r
1
) + r
1
r
2
) % n
= r
1
r
2
% n.
VP = (a % n)(b % n) % n
= r
1

r
2
% n.
Từ đó, ta suy ra điều phải chứng minh. 
Bây giờ ta chứng minh một định lý là cơ sở toán học cho thuật toán RSA. Ta
đưa vào hai ký hiệu: R(n) = {0, 1, …, n-1} và RR(n) = {xR(n) | (x,n) = 1}.
Định lý 3.1. Cho n=pq, với p, q là hai số nguyên tố khác nhau; d và e là hai số
nguyên dương thoả mãn biểu thức: de % (n) =1. Khi đó: mR(n) ta đều có:
(m
e
% n)
d
% n = m
(m
d
% n)
e
% n = m
Chứng minh. Ta có:  mRR(n) thì
(m
e
% n)
d
% n = (m
e
)
d
% n Bổ đề 1
= m
ed

% n
= m
k(n)+1
% n, kZ de % (n) =1
= (m % n)( m
k(n)
% n) % n Bổ đề 2
= (m % n)( m
(n)
% n)
k

% n
= m định lý Ơle, m<n
Nếu mR(n)\RR(n) thì đẳng thức trên vẫn đúng vì dễ thấy khi đó xảy ra một
hai trường hợp: Hoặc p | m và (m,q) = 1, hoặc q | m và (m,p) =1.
Với trường hợp thứ nhất, vì (m,q) = 1nên áp dụng định lý Ơle ta có:
m
(n)
% q = m
(p) (q)
% q
= (m
(q)
% q)
(p)
Bổ đề 1

×