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

Tìm hiểu về chữ ký điện tử và viết ứng dụng minh họa

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.2 MB, 37 trang )

BỘ CÔNG THƯƠNG
TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP THỰC PHẨM TP.HCM
KHOA CÔNG NGHỆ THÔNG TIN


ĐỒ ÁN XÂY DỰNG PHẦN MỀM
ỨNG DỤNG
ĐỀ TÀI: Tìm hiểu về chữ ký điện tử và viết ứng
dụng minh họa

GVHD : Mạnh Thiên Lý
Nhóm SVTH :
1. Nguyễn Huy Lân - 2001110104
2. Lê Minh Luận - 2001110025

TP. HỒ CHÍ MINH – 2014
1


MỤC LỤC
Chương 1: Chữ ký điện tử ........................................................................................... 5
1.1 Giới thiệu........................................................................................................... 5
1.2 Khái niệm về chữ ký điện tử .............................................................................. 5
1.3 So sánh chữ ký điện tử với chữ ký thông thường trên văn bản ........................... 6
1.4 Vị trí, vai trò của chữ ký số điện tử .................................................................... 6
1.5 Sơ đồ tống quan của một hệ thống chữ ký số điện tử ......................................... 7
1.6 Quy trình sử dụng chữ ký điện tử....................................................................... 8
2.1 Hàm băm ......................................................................................................... 11
2.1.1 Tính chất của hàm băm .................................................................................... 11
2.1.2 Hàm băm MD5 ................................................................................................ 12
Hình 2.1: Sơ đồ vòng lặp chính của MD5 ................................................................. 14


2.2 Thuật toán RSA ............................................................................................... 18
2.2.1 Khái niệm hệ mật mã RSA ............................................................................... 19
2.2.2 Phân phối khoá công khai trong RSA ............................................................... 20
2.2.2.1 Mã hóa ................................................................................................ 22
2.2.2.2 Giải mã ............................................................................................... 22
2.3 Một số tính chất của hệ RSA.................................................................... 26
2.4 Độ an toàn của hệ RSA ............................................................................ 27
2.5 Một số biến thể của hệ mã hóa RSA ........................................................ 28
2.6 Đánh giá RSA .......................................................................................... 28
Chương 3 : Hướng dẫn cài đặt và sử dụng phần mềm ............................................... 31
3.1 Cài đặt ............................................................................................................. 31
Hình 3.1 . Giao diện cài đặt phần mềm. .................................................................... 31
Hình 3.2 . Chọn “I accept the agreement” và nhấn next ............................................ 31
Hình 3.3 . Tiếp tục chọn next cho đến khi cài đặt xong. ............................................ 32
Hình 3.2 Hướng dẫn sử dụng phần mềm .................................................................. 32
Hình 3.5 Giao diện ký văn bản .................................................................................. 33
Hình 3.6 Giao diện xác nhận văn bản ........................................................................ 33

2


DANH MỤC HÌNH ẢNH
Hình 1: Tạo chữ ký và kiểm tra chữ ký ............................................................. 11
Hình 2.1: Sơ đồ vòng lặp chính của MD5 ......................................................... 15
Hình 2.2: Sơ đồ các bước thực hiện mã hoá theo thuật toán RSA...................... 21
Hình 2.3: Mô tả thực hiện RSA ....................................................... 24
Hình 3.1 . Giao diện cài đặt phần mềm ............................................................. 30
Hình 3.2 . Chọn “I accept the agreement” và nhấn next .................................... 30
Hình 3.3 . Tiếp tục chọn next cho đến khi cài đặt xong ..................................... 31
Hình 3.4. Giao diện phần tạo khóa .................................................................... 32

Hình 3.5 Giao diện ký văn bản .......................................................................... 33
Hình 3.6 Giao diện xác nhận văn bản ................................................................ 33

3


MỞ ĐẦU
Với sự bùng nổ của mạng Internet hiện nay, mạng máy tính đang ngày
càng đóng vai trò thiết yếu trong mọi lĩnh vực hoạt động của toàn xã hội, và khi
nó trở thành phương tiện điều hành các hệ thống thì nhu cầu bảo mật thông tin
được đặt lên hàng đầu. Để giải quyết vấn đề xác nhận chữ ký truyền thống (ký
tay) trong kinh doanh mua bán, việc áp dụng công nghệ thông tin thay đổi và
giúp tối ưu việc xử lý và bảo mật hơn ở các văn bản giao dịch. Người ta đưa ra
một cách giải quyết hiệu quả và đó chính là áp dụng chữ ký điện tử vào công
việc.
Đề tài “Tìm hiểu về chữ ký điện tử và viết ứng dụng minh họa” sẽ tìm hiểu
vấn đề nêu trên và cài đặt chương trình ký số minh họa.
Những vấn đề nhóm chúng em tìm hiểu và viết ứng dụng minh họa bao gồm:
 Tìm hiểu về chữ ký điện tử.
 Tìm hiểu phương pháp mã hóa bất đối xứng ứng dụng trong chữ ký điện tử.
 Tìm hiểu về hàm băm MD5.
 Tìm hiểu về hệ mã hóa công khai RSA.

4


Chương 1: Chữ ký điện tử
1.1 Giới thiệu
Trong đời sống hàng ngày, chữ ký trên một văn bản là một minh chứng về
“bản quyền” hoặc ít nhất cũng là sự “tán đồng”, thừa nhận các nội dung trong văn

bản của việc mua bán, ký kết trong xã hội. Chữ ký viết tay trên văn bản thì được
dùng để xác nhận người ký. Những yếu tố nào làm nên sức thuyết phục, về mặt lý
tưởng thì bao gồm:
 Chữ ký là bằng chứng thể hiện người ký có chủ định khi ký văn bản.
 Chữ ký thể hiện “chủ quyền”, nó làm cho người nhận văn bản biết rằng ai đích
thị là người đã ký văn bản.
 Chữ ký không thể “tái sử dụng”, tức là nó là một phần của văn bản mà không
thể sao chép sang các văn bản khác.
 Văn bản đã ký không thể thay đổi được.
 Chữ ký không thể giả mạo và cũng là thứ không thể chối bỏ ( người đã ký văn
bản không thể phủ định việc mình đã ký văn bản và người khác không thể tạo
ra chữ ký đó ).
Để có được những đặc tính như trên, giao thức “ký trong thế giới điện tử”
cần phải có sự hỗ trợ của công nghệ mã hóa. Sơ đồ chữ ký số là phương pháp ký
một thông báo được lưu dưới dạng điện tử:
 Người gửi (chủ nhân của văn bản) ký văn bản bằng cách mã hóa nó với khóa bí
mật của mình.
 Người gửi chuyển văn bản đã ký cho người nhận.
 Người nhận văn bản kiểm tra chữ ký bằng việc sử dụng chìa khóa công khai
của người gửi để giải mã văn bản.
1.2 Khái niệm về chữ ký điện tử
Chữ ký điện tử là thông tin đi kèm theo dữ liệu (văn bản, hình ảnh, video…)
nhằm mục đích xác nhận người chủ của dữ liệu đó. Chữ ký điện tử được sử dụng
trong các giao dịch điện tử. Xuất phát từ thực tế, chữ ký điện tử cũng cần đảm bảo
các chức năng: xác định được người chủ của một dữ liệu nào đó.
5


1.3 So sánh chữ ký điện tử với chữ ký thông thường trên văn bản
Chữ ký điện tử và chữ ký thường có nhiều điểm khác nhau:

 Về tài liệu được ký: Với tài liệu thông thường, nó là một phần vật lý của tài
liệu. Ngược lại, chữ ký điện tử không phải theo kiểu vật lý gắn vào thông báo
nên không nhìn thấy trên bức điện.
 Về vấn đề kiểm tra chữ ký: Chữ ký thông thường được kiểm tra bằng cách so
sánh nó với các chữ ký xác thực khác (chữ ký mẫu). Điểm yếu của chữ ký
thông thường là không an toàn, và dễ có thể giả mạo. Ngược lại, chữ ký điện
lại được kiểm tra nhờ dùng thuật toán kiểm tra công khai, bất kỳ ai cũng có thể
kiểm tra được. Việc dùng một sơ đồ chữ ký an toàn có thể ngăn chặn được giả
mạo.
1.4 Vị trí, vai trò của chữ ký số điện tử
 Xu hướng quốc tế hóa và toàn cầu hóa đã và đang ảnh hưởng đến sự phát triển
của thế giới. Việc trao đổi thông tin cũng từ đó yêu cầu nhanh gọn, chính xác
và đặc biệt là phải an toàn. Việc trao đổi thông tin, chứng thực thông tin theo
phong cách truyền thống làm giảm tốc độ, cũng như sự chính xác của thông tin.
Những cộng việc đó mang tính chất thủ công gây ra sự chậm trễ và thiếu chính
xác trong trao đổi.
 Chính khó khăn đã nảy sinh sự phát triển mạnh mẽ của công nghệ thông tin và
công nghệ mã hóa. Hiện nay, ở tất cả các nước phát triển cũng như đang phát
triển, mạng máy tính đang ngày càng đóng vai trò thiết yếu trong mọi lĩnh vực
hoạt động của toàn xã hội và nhu cầu bảo mật thông tin được đặt lên hàng đầu.
Điển hình là việc mã hóa bảo mật các thông tin số của doanh nghiệp, dùng chữ
ký số xác thực email trao đổi thông tin, kiểm soát truy cập vào các sàn thương
mại điện tử và các đơn đặt hàng, ngân hàng điện tử, mua sắm trực tuyền… mà
vai trò chủ yếu là chữ ký số điện tử.
 Trên thực tế, chữ ký điện tử không chỉ được thực hiện cho các giao dịch điện tử
trên mạng Internet mà còn qua hệ thống mạng viễn thông di động. Đặc biệt,
hiện nay nhiều nước trên thế giới không chỉ triển khai ứng dụng chữ ký điện tử
trên mạng máy tính mà còn áp dụng trên mạng điện thoại di động để thực hiện
6



các giao dịch điện tử. Hướng đi này giúp đẩy nhanh giao dịch, đơn giản hóa
mua sắm trực tuyến và giúp người dùng có thể truy cập mọi lúc, mọi nơi.
 Sự ra đời của chữ ký điện tử khẳng định được lợi ích to lớn về chiến lược và
kinh tế, đồng thời các vấn đề liên quan đến chữ ký điện tử cũng là nhưng chủ
đề quan trọng nhất của mật mã học.
1.5 Sơ đồ tống quan của một hệ thống chữ ký số điện tử
Một sơ đồ chữ ký điện tử là bộ 5 (P,A,K,S,V) thỏa mãn các điều kiện dưới
đây:
- P là tập hữu hạn các bức điện (thông điệp, bản rõ) có thể.
- A là tập hữu hạn các chữ ký có thể.
- K là tập hữu hạn các khóa có thể.
- S là tập các thuật toán ký.
- V là tập các thuật toán xác minh.
Với mỗi khoá K € k tồn tại một thuật toán ký SigK € S và một thuật toán xác
minh VerK € V. Mỗi Sigk: P → A và verK: P x A → {TRUE, FALSE} là những
hàm sao cho mỗi bức điện x € P và mỗi chữ ký y € A thoả mãn phương trình dưới
đây:
True nếu y = sig(x)
Ver (x, y) =
False nếu y ≠ sig(x).
Với mỗi k thuộc K, hàm SigK và VerK là các hàm thời gian đa thức, Verk là
hàm công khai còn Sigk là hàm mật.

- Ý nghĩa của sơ đồ:
Khi một người dùng muốn ký lên một thông báo x thì người đó dùng thuật toán
an toàn để tạo ra chữ ký y = sig(x) nhận được và gửi cho người nhận. Người nhận
nhận được chữ ký sig(x) thì dùng thuật toán xác minh ver(x,y) để xác định tính
đúng đắn của chữ ký số (trả về true hoặc false).
7



1.6 Quy trình sử dụng chữ ký điện tử
Chữ ký điện tử hoạt động dựa trên hệ thống mã hóa khóa công khai. Hệ thống
mã hóa này gồm hai khóa, khóa bí mật và khóa công khai. Mỗi chủ thể co một cặp
khóa như vậy, chủ thể đó sẽ giữ khóa bí mật, còn khóa công khai của chủ thể sẽ
được đưa ra công cộng để bất kỳ ai cũng có thể biết. Nguyên tắc của hệ thống mã
hóa khóa công khai đó là nếu mã hóa bằng khóa bí mật thì chỉ khóa công khai mới
giải mã đúng thông tin được và ngược lại, nếu mã hóa bằng khóa công khai, thì chỉ
có khóa bí mật mới giải mã đúng được.
Ngoài ra, chữ ký còn đảm bảo phát giác được bất kỳ sự thay đổi nào trên dữ
liệu đã được “ký”. Để ký lên một văn bản, phần mềm ký sẽ nghiền dữ liệu để gói
gọn bằng một vài dòng, được gọi là thông báo tóm tắt, bằng một tiến trình được gọi
là “kỹ thuật băm”, rồi tạo thành chữ ký điện tử. Cưới cùng, phần mềm ký tên sẽ
gắn chữ ký điện tử này vào văn bản.
Ví dụ: Giả sử bên A có tài liệu P cần ký. Bên A sẽ thực hiện băm văn bản thành
một bản tóm lược X, sau đó dùng khóa bí mật của mình ký lên bản tóm lược X để
được văn bản chữ ký điện tử Y, say đó gửi tài liệu P kèm theo chữ ký Y cho A.
Giả sử B muốn xác nhận tài liệu P là của A, với chữ ký là bản mã Y. Bên B sẽ
dùng khóa công khai của A để xác nhận chữ ký Y của A ký trên văn bản P gửi có
đúng hay không, nếu xác nhận đúng thì chữ ký Y chính là A ký trên văn bản P,
ngược lại thì không phải hoặc bản ký đã được thay đổi.
Một số trường hợp xảy ra với chữ ký điện tử, cũng giống như các trường hợp
xảy ra với chữ ký truyển thống. Ví dụ: Khi tài liệu của A bị thay đổi (dù chỉ một ký
tự, một dấu chấm, hay một ký hiệu bất kỳ), thì B xác nhận, anh ta sẽ thấy bản giải
mã khác với tài liệu của anh A. B sẽ kết luận rằng tài liệu đó đã bị thay đổi, không
phải là tài liệu của A đã ký.
Trường hợp khác, nếu A để lộ khóa bí mật, nghĩa là văn bản tài liệu của A có
thể ký bởi người khác có khóa bí mật của A. Khi một ai đó xác nhận tài liệu được
cho là của A ký, chữ ký vẫn là hợp lệ, mặc dù không phải chính A ký. Như vậy,

chữ ký của A sẽ không còn giá trị pháp lý nữa. Do đó, việc giữ khóa bí mật là tuyệt
đối quan trọng trong hệ thống chữ ký điện tử.
8


Trong trường hợp ví dụ trên, A có một cặp khóa để có thể ký trên văn bản, tài
liệu số. Tương tự như vậy, B hay bất kỳ ai sử dụng chữ ký điện tử, đều có một cặp
khóa như vậy. Khóa bí mật được giữ riêng, còn khóa công khai được đưa ra công
cộng. Vậy vấn đề đặt ra là làm thế nào để biết một khóa công khai thuộc về A, B
hay một người nào đó.
Hơn nữa, giả sử trong môi trường giao dịch trên Internet, cần sự tin cậy cao, A
muốn giao dịch với một nhân vật X. X và A cần trao đổi thông tin cá nhân cho
nhau, các thông tin đó gồm họ tên, địa chỉ, số điện thoại, email… Vậy làm sao để
A có thể chắc chắn rằng mình đang giao dịch với nhân vật X chứ không phải là ai
khác giả mạo X? Chứng chỉ số được tạo ra để giải quyết vấn đề này! Chứng chỉ số
có cơ chế để xác nhận thông tin chính xác về các đối tượng sử dụng chứng chỉ số.
Thông tin giữa A và X sẽ được xác nhận bằng một bên trung gian mà A và X tin
tưởng.
Bên trung gian đó là nhà cung cấp chứng chỉ số CA (Certificate Authority). CA
có một chứng chỉ số của riêng mình, CA sẽ cấp chứng chỉ số cho A và X cũng như
những đối tượng khác.
Trở lại vấn đề trên, A và X sẽ có cách kiểm tra thông tin của nhau dựa trên
chứng chỉ số như sau: khi A giao dịch với X, họ sẽ chuyển chứng chỉ số cho nhau,
đồng thời họ cũng có chứng chỉ số của CA, phần mềm tại máy tính của A có cơ chế
để kiểm tra chứng chỉ số của X có hợp lệ không, phần mềm sẽ kết hợp chứng chỉ số
của nhà cung cấp CA và chứng chỉ của X để thông báo cho A về tính xác thực của
đối tượng X.
Nếu phần mềm kiểm tra và thấy chứng chỉ của X là phù hợp với chứng chỉ CA,
thì A có thể tin tưởng vào X.
Cơ chế chữ ký điện tử và chứng chỉ số sử dụng các thuật toán mã hóa đảm bảo

không thể giả mạo CA để cấp chứng chỉ không hợp pháp, mọi chứng chỉ giả mạo
đều có thể dễ dàng bị phát hiện.
Trở lại với việc ký văn bản, tài liệu, khóa bí mật sẽ dùng để ký các văn bản, tài
liệu của chủ sở hữu. Như đã đề cập trong ví dụ ở trên, giả sử A muốn gửi một văn
9


bản kèm với chữ ký của mình trên văn bản đó, A sẽ dùng khóa bí mật để mã hóa
thu được bản mã văn bản, bản mã đó chính là chữ ký điện tử của A trên văn bản.
Khi A gửi văn bản và chữ ký, để người khác có thể xác nhận văn bản của mình
với thông tin đầy đủ về chủ sở hữu, A sẽ gửi cả chứng chỉ của mình đi kèm với văn
bản.
Giả sử X nhận được văn bản A gửi kèm với chứng chỉ, khi đó X có thể dễ dàng
xác nhận tính hợp pháp của văn bản đó.

Hình 1: Tạo chữ ký và kiểm tra chữ ký.

10


Chương 2: Tìm hiểu thuật toán
Qua những phần tìm hiểu nhóm chúng em đã đi đến quyết định lựa chọn hàm
băm MD5 và thuật toán RSA để áp dụng vào phần viết chương trình ứng dụng
minh họa cho đề tài của nhóm.
2.1 Hàm băm
Hàm băm là các thuật toán không sử dụng khóa để mã hóa (ở đây ta dùng thuật
ngữ “băm” thay cho “mã hóa”), nó có nhiệm vụ “lọc” (băm) thông điệp được đưa
vào theo một thuật toán h một chiều nào đó, rồi đưa ra một bản băm gọi là văn bản
đại diện có kích thước cố định. Do đó người nhận không biết được nội dung hay độ
dài ban đầu của thông điệp đã được băm bằng hàm băm.

Giá trị của hàm băm là duy nhất, và không thể suy ngược lại được nội dung
thông điệp từ giá trị băm này.
2.1.1 Tính chất của hàm băm
Tính đụng độ: Theo nguyên lý Diricle: nếu có (n+1) con thỏ được bỏ vào n cái
chuồng thì phải tồn tại ít nhất một cái chuồng mà trong đó có ít nhất là hai con thỏ
ở chung. Rõ ràng với không gian giá trị Băm nhỏ hơn rất nhiều so với không gian
tin về mặt kích thước thì chắc chắn sẽ tồn tại đụng độ, nghĩa là có hai tin x # x’ mà
giá trị Băm của chúng là giống nhau, tức h(x) = h(x’).
Sau đây chúng ta sẽ xét các dạng tấn công có thể có, từ đó rút ra các tính chất
của hàm Băm:
Tính chất 1: Hàm băm không va chạm yếu
Hàm băm h là không va chạm yếu nếu khi cho trước một bức điện x, không thể
tiến hành về mặt tính toán để tìm ra một bức điện x’  x mà h(x’) = h(x). [1 - tr110]
Ví dụ: Người A gửi cho B (x, y) với y = SigA(h(x)). Nhưng trên đường truyền,
tin bị lấy trộm. Tên trộm, bằng cách nào đó tìm được một bản thông điệp x’ có
h(x’) = h(x) mà x’  x. Sau đó, tên trộm đưa x’ thay thế x rồi truyền tiếp cho người
B. Người B nhận được và vẫn xác thực được thông tin đúng đắn.
11


Để tránh tấn công trên, hàm băm phải không va chạm yếu.
Tính chất 2: Hàm băm không va chạm mạnh
Hàm băm h là không va chạm mạnh nếu không có khả năng tính toán để tìm ra
hai bức thông điệp x và x’ mà x  x’ và h(x) = h(x’).
Ví dụ: Đầu tiên, tên giả mạo tìm ra được hai bức thông điệp x’ và x (x’  x) mà
có h(x’) = h(x) (ta coi bức thông điệp x là hợp lệ, còn x’ là giả mạo). Tiếp theo,
tên trộm đưa cho ông A và thuyết phục ông này kí vào bản tóm lược h(x) để nhận
được y. Khi đó (x’, y) là bức điện giả mạo nhưng hợp lệ.
Để tránh kiểu tấn công này, hàm h phải thỏa mãn tính không va chạm mạnh
Tính chất 3: Hàm băm một chiều

Hàm băm h là một chiều nếu khi cho trước một bản tóm lược thông báo z,
không thể thực hiện về mặt tính toán để tìm bức điện x sao cho h(x) = z.
Việc giả mạo các chữ kí trên bản tóm lược thông báo z ngẫu nhiên thường xảy
ra với sơ đồ chữ kí. Giả sử tên giả mạo tính chữ kí trên bản tóm lược thông báo z
ngẫu nhiên như vậy. Sau đó anh ta tìm x sao cho z = h(x). Nếu làm được như vậy
thì (x,y) là bức điện giả mạo hợp lệ. Để tránh được tấn công này, h cần thoả mãn
tính chất một chiều:
2.1.2 Hàm băm MD5
MD5 (Message Digest).
Ronald Rivest là người đã phát minh ra các hàm Băm MD2, MD4 (1990) và
MD5 (1991). Do tính chất tương tự của các hàm Băm này, sau đây chúng ta sẽ xem
xét hàm Băm MD5, đây là một cải tiến của MD4 và là hàm Băm được sử dung
rộng rãi nhất, nguyên tắc thiết kế của hàm băm này cũng là nguyên tắc chung cho
rất nhiều các hàm băm khác.
Miêu tả MD5:

12


Đầu vào là những khối 512 bit, được chia cho 16 khối con 32 bit. Đầu ra của
thuật toán là một thiết lập của 4 khối 32 bit để tạo thành một hàm Băm 128 bit duy
nhất.
Đầu tiên, ta chia bức điện thành các khối 512 bit, với khối cuối cùng (đặt là x
và x < 512bit) của bức điện, chúng ta cộng thêm một bit 1 vào cuối của x, theo sau
đó là các bit 0 để được độ dài cần thiết (512 bit). Kết quả là bức điện vào là một
chuỗi M có độ dài chia hết cho 512, vì vậy ta có thể chia M ra thành các N khối
con 32 bit (N khối này sẽ chia hết cho 16).
Bây giờ, ta bắt đầu tìm cốt của bức điện với 4 khối 32 bit A, B, C và D (được
xem như thanh ghi) :
A = 0x01234567

B = 0x89abcdef
C = 0xfedcba98
D = 0x76543210.
Người ta thường gọi A, B, C, D là các chuỗi biến số (chaining variables).
Bức điện được chia ra thành nhiều khối 512 bit, mỗi khối 512 bit lại được chia
ra 16 khối 32 bit đi vào bốn vòng lặp của MD5. Giả sử ta đặt a, b, c và d thay cho
A, B, C và D đối với khối 512 bit đầu tiên của bức điện. Bốn vòng lặp trong MD5
đều có cấu trúc giống nhau. Mỗi vòng thực hiện 16 lần biến đổi: thực hiện với một
hàm phi tuyến của 3 trong 4 giá trị a, b, c và d; sau đó nó cộng kết quả đến giá trị
thứ 4, tiếp đó cộng với một khối con 32 bit và một hằng số. Sau đó, nó dịch trái
một lượng bit thay đổi và cộng kết quả vào một trong 4 giá trị a, b, c hay d. Kết quả
cuối cùng là một giá trị mới được thay thế một trong 4 giá trị a, b, c hay d.

13


Khối của bức điện

A
B

A
Vòng
1

Vòng
2

Vòng
3


Vòng
4

B

C

C

D

D

Hình 2.1: Sơ đồ vòng lặp chính của MD5
Có bốn hàm phi tuyến, mỗi hàm này được sử dụng cho mỗi vòng:
F(X,Y,Z ) = (X and Y) or ((not X) and Z)
G(X,Y,Z ) = ((X and Z) or (Y and (not Z)))
H(X,Y,Z ) = X xor Y xor Z
I(X,Y,Z ) = Y xor (X or (not Z)).
Những hàm này được thiết kế sao cho các bit tương ứng của X, Y và Z là độc
lập và không ưu tiên, và mỗi bit của kết quả cũng độc lập và ngang bằng nhau.
Nếu Mj là một biểu diễn của khối con thứ j (j = 16) và <<s bit, thì các vòng lặp có thể biểu diễn như sau:
FF(a,b,c,d,Mj,s,ti) được biểu diễn a = b + ((a + F(b,c,d) + Mj + ti) <<< s)
GG(a,b,c,d,Mj,s,ti) được biểu diễn a = b + ((a + G(b,c,d) + Mj + ti) <<< s)
HH(a,b,c,d,Mj,s,ti) được biểu diễn a = b + ((a + H(b,c,d) + Mj + ti) <<< s)
II(a,b,c,d,Mj,s,ti) được biểu diễn a = b + ((a + I(b,c,d) + Mj + ti) <<< s).
Bốn vòng (64 bước) sẽ thực hiện như sau:
Vòng 1:

14


FF (a, b, c, d, M0, 7, 0x76aa478)
FF (d, a, b, c, M1, 12, 0xe8c7b756)
FF (c, d, a, b, M2, 17, 0x242070db)
FF (b, c, d, a, M3, 22, 0xc1bdceee)
FF (a, b, c, d, M4, 7, 0xf57c0faf)
FF (d, a, b, c, M5, 12, 0x4787c62a)
FF (c, d, a, b, M6, 17, 0xa8304613)
FF (b, c, d, a, M7, 22, 0xfd469501)
FF (a, b, c, d, M8, 7, 0x698098d8)
FF (d, a, b, c, M9, 12, 0x8b44f7af)
FF (c, d, a, b, M10, 17, 0xffff5bb1)
FF (b, c, d, a, M11, 22, 0x895cd7be)
FF (a, b, c, d, M12, 7, 0x6b901122)
FF (d, a, b, c, M13, 12, 0xfd987193)
FF (c, d, a, b, M14, 17, 0xa679438e)
FF (b, c, d, a, M15, 22, 0x49b40821).
Vòng 2:
GG (a, b, c, d, M1, 5, 0x61e2562)
GG (d, a, b, c, M6, 9, 0xc040b340)
GG (c, d, a, b, M11, 14, 0x265e5a51)
GG (b, c, d, a, M0, 20, 0xe9b6c7aa)
GG (a, b, c, d, M5, 5, 0xd62f105d)
GG (d, a, b, c, M10, 9, 0x02441453)
15


GG (c, d, a, b, M15, 14, 0xd8a1e681)

GG (b, c, d, a, M4, 20, 0xe7d3fbc8)
GG (a, b, c, d, M9, 5, 0x21e1cde6)
GG (d, a, b, c, M14, 9, 0xc33707d6)
GG (c, d, a, b, M3, 14, 0xf4d50d87)
GG (b, c, d, a, M8, 20, 0x455a14ed)
GG (a, b, c, d, M13, 5, 0xa9e3e905)
GG (d, a, b, c, M2, 9, 0xfcefa3f8)
GG (c, d, a, b, M7, 14, 0x676f02d9)
GG (b, c, d, a, M12, 20, 0x8d2a4c8a).
Vòng 3:
HH (a, b, c, d, M5, 4, 0xfffa3942)
HH (d, a, b, c, M8, 11, 0x8771f681)
HH (c, d, a, b, M11, 16, 0x6d9d6122)
HH (b, c, d, a, M14, 23, 0xfde5380c)
HH (a, b, c, d, M1, 4, 0xa4beea44)
HH (d, a, b, c, M4, 11, 0x4bdecfa9)
HH (c, d, a, b, M7, 16, 0xf6bb4b60)
HH (b, c, d, a, M10, 23, 0xbebfbc70)
HH (a, b, c, d, M13, 4, 0x289b7ec6)
HH (d, a, b, c, M0, 11, 0xeaa127fa)
HH (c, d, a, b, M3, 16, 0xd4ef3085)
HH (b, c, d, a, M6, 23, 0x04881d05)
16


HH (a, b, c, d, M9, 4, 0xd9d4d039)
HH (d, a, b, c, M12, 11, 0xe6db99e5)
HH (c, d, a, b, M15, 16, 0x1fa27cf8)
HH (b, c, d, a, M2, 23, 0xc4ac5665).
Vòng 4:

II (a, b, c, d, M0, 6, 0xf4292244)
II (d, a, b, c, M7, 10, 0x432aff97)
II (c, d, a, b, M14, 15, 0xab9423a7)
II (b, c, d, a, M5, 21, 0xfc93a039)
II (a, b, c, d, M12, 6, 0x655b59c3)
II (d, a, b, c, M3, 10, 0x8f0ccc92)
II (c, d, a, b, M10, 15, 0xffeff47d)
II (b, c, d, a, M1, 21, 0x85845dd1)
II (a, b, c, d, M8, 6, 0x6fa87e4f)
II (d, a, b, c, M15, 10, 0xfe2ce6e0)
II (c, d, a, b, M6, 15, 0xa3013414)
II (b, c, d, a, M13, 21, 0x4e0811a1)
II (a, b, c, d, M4, 6, 0xf7537e82)
II (d, a, b, c, M11, 10, 0xbd3af235)
II (c, d, a, b, M2, 15, 0x2ad7d2bb)
II (b, c, d, a, M9, 21, 0xeb86d391).
Những hằng số ti được chọn theo quy luật sau: ở bước thứ i giá trị ti là phần
nguyên của 232*abs(sin(i)), trong đó i = [0..63] được tính theo radian.

17


Sau tất cả những bước này a, b, c và d lần lượt được cộng với A, B, C và D để
cho kết quả đầu ra, và thuật toán tiếp tục với khối dữ liệu 512 bit tiếp theo cho đến
hết bức điện. Đầu ra cuối cùng là một khối 128 bit của A, B, C và D, đây chính là
hàm Băm nhận được.
Tính bảo mật trong MD5:
Ron Rivest đã phác hoạ những cải tiến của MD5 so với MD4 như sau:
-


Vòng thứ 4 được thêm vào (còn MD4 chỉ có 3 vòng).

-

Mỗi bước được cộng thêm một hằng số duy nhất.

-

Hàm G ở vòng 2 thay đổi từ ((X and Y) or (X and Z) or (Y and Z)) thành

((X and Z) or (Y and (not Z))) nhằm giảm tính đối xứng của G (giảm tính tuyến
tính).
-

Mỗi bước được cộng kết quả của bước trước nó, làm các quá trình có tính

liên kết, phụ thuộc lẫn nhau.
-

Việc các khối con bị thay đổi khi vào vòng 2 và vòng 3 làm cho khuôn

dạng cấu trúc vòng lặp thay đổi theo.
-

Số lượng lượng bit dịch trái của mỗi vòng được tối ưu và các bước dịch ở

mỗi vòng là khác nhau.
Năm 1993, den Boer và Bosselaers đã tìm ra đụng độ trong việc sử dụng hàm
nén (vòng 2 và 3) của MD5. Điều này phá vỡ quy luật thiết kế MD5 là chống lại sự
đụng độ, nhưng MD5 vẫn là hàm Băm được sử dụng rộng rãi hiện nay.

Với những lý do trên vì vậy chúng em lựa chọn hàm băm MD5 để áp dụng vào
viết ứng dụng minh họa.
2.2 Thuật toán RSA

Với đề tài xây dựng thư viện các hàm mã hoá dùng cho việc bảo mật thông tin
trao đổi trong mô hình Client/Server, thì cần thiết một phương pháp mã hoá để áp
dụng, thuật toán mã hoá công khai đã được lựa chọn cho giải pháp này.
Với nhiều lựa chọn về thuật giải mã hóa công khai thì nhóm chúng em đã lựa
chọn thuật giải RSA để sử dụng cho phần viết chương trình ứng dụng minh họa.
o Khái niệm hệ mật mã RSA.
18


o Phân phối khoá công khai trong RSA.
o Độ an toàn của hệ RSA.
o Một số tính chất của hệ RSA.
2.2.1 Khái niệm hệ mật mã RSA
Khái niệm hệ mật mã RSA đã được ra đời năm 1976 bởi các tác giả R.Rivets,
A.Shamir, và L.Adleman. Hệ mã hoá này dựa trên cơ sở của hai bài toán :
 Bài toán Logarithm rời rạc (Discrete logarith)
 Bài toán phân tích thành thừa số
Trong hệ mã hoá RSA các bản rõ,các bản mã và các khoá (public key và
private key) là thuộc tập số nguyên ZN = {1, . . . , N-1}. Trong đó tập ZN với
N=p×q là các ốs nguyên tố khác nhau cùng với phép cộng và phép nhân .
Modulo N tạo ra modulo số học N.
Khoá mã hoá EKB là cặp số nguyên (N,KB) và khoá giải mã D kB là cặp số
nguyên (N,kB), các số là rất lớn, số N có thể lên tới hàng trăm chữ số.
Các phương pháp mã hoá và giải mã là rất dễ dàng.
Công việc mã hoá là sự biến đổi bản rõ P (Plaintext) thàn h bản mã C
(Ciphertext) dựa trên cặp khoá công khai KB và bản rõ P theo công thức sau đây


Công việc giải mã là sự biến đổi ngược lại bản mã C thành bản rõ P dựa trên
cặp khoá bí mật kB , modulo N theo công thức sau:

Dễ thấy rằng, bản rõ ban đầu cần được biến đổi một cách thích hợp thành bản
mã, sau đó để có thể tái tạo lại bản rõ ban đầu từ chính bản mã đó:

Thay thế (1) vào (2) ta có :

19


Trong toán học đã chứng minh được rằng, nếu N là số nguyên tố thì công thức
(4) sẽ có lời giải khi và chỉ khi KB.kB = 1 (mod N-1), áp dụng thuật toán ta thấy
N=p×q với p, q là số nguyên tố, do vậy (4) sẽ có lời giải khi và chỉ khi:
KB.kB ≡1 (mod γ(N))

(5)

trong đó γ(N) = LCM(p-1,q-1).
LCM (Lest Common Multiple) là bội số chung nhỏ nhất.
Nói một cách khác, đầu tiên người nhận B lựa chọn một khoá công khai KB một
cách ngẫu nhiên. Khi đó khoá bí mật kB được tính ra bằng công thức (5). Điều
này hoàn toàn tính được vì khi B biết được cặp số nguyên tố (p, q)
thì sẽ tính được γ(N).

Hình 2.2: Sơ đồ các bước thực hiện mã hoá theo thuật toán RSA
2.2.2 Phân phối khoá công khai trong RSA
Mỗi bên tự tạo ra một cặp khóa công khai-khóa riêng theo các bước sau:
20



B1.Chọn ngẫu nhiên 2 số nguyên tố đủ lớn p#q
B2.Tính n=pq
B3.Tính

.

B4.Chọn ngẫu nhiên khóa mã hóa e sao cho
cùng nhau với

và là số nguyên tố

.

B5.Tính khóa giải mã: d <= n sao cho

.

Một số lưu ý:


Các số nguyên tố thường được chọn bằng phương pháp thử xác suất.



Các bước 4 và 5 có thể được thực hiện bằng giải thuật Euclid mở rộng (xem
thêm: số học môđun).




Bước 5 có thể viết cách khác: Tìm số tự nhiên

sao cho

cũng là số tự nhiên. Khi đó sử dụng giá trị
.


Từ bước 3, PKCS#1 v2.1 sử dụng

thay cho

.
Công bố khóa mã hóa công khai KU={e,n} trong đó:
e : Số mũ công khai hay số mũ mã hóa
n :Modul
Giữ khóa bí mật giải mã riêng KR={d,n} trong đó:
n :Modul
d :Số mũ bí mật hay số mũ giả mã
Các mã bí mật p,q bị hủy bỏ
Một dạng khác của khóa bí mật bao gồm:
o p, q :2 số nguyên tố chọn ban đầu
o d mod(p-1) và d mod(q-1)
o (1/q) mod p (thường gọi là iqmp)

21


Dạng này cho phép thực hiện giả mã và ký nhanh hơn với việc sử dụng Định lý

số dư Trung Quốc.Ở dạng này tất cả các thành phần của khóa bí mật phải được giữ
bí mật.
Alice gửi khóa công khai cho Bob, và giữ bí mật khóa cá nhân của mình. Ở
đây, p và q giữ vai trò rất quan trọng. Chúng là các phân tố của n và cho phép tính
d khi biết e. Nếu không sử dụng dạng sau của khóa bí mật (dạng CRT) thì p và q sẽ
được xóa ngay sau khi thực hiện xong quá trình tạo khóa.
2.2.2.1 Mã hóa
Giả sử Bob muốn gửi đoạn thông tin M cho Alice. Đầu tiên Bob chuyển M
thành một số m < n theo một hàm có thể đảo ngược (từ m có thể xác định lại M)
được thỏa thuận trước.
Lúc này Bob có m và biết n cũng như e do Alice gửi. Bob sẽ tính c là bản mã
hóa của m theo công thức:

Hàm trên có thể tính dễ dàng sử dụng phương pháp tính hàm mũ (theo môđun)
bằng (thuật toán bình phương và nhân) Cuối cùng Bob gửi c cho Alice.
2.2.2.2 Giải mã
Alice nhận c từ Bob và biết khóa bí mật d. Alice có thể tìm được m từ c theo
công thức sau:

Biết m, Alice tìm lại M theo phương pháp đã thỏa thuận trước. Quá trình giải
mã hoạt động vì ta có :
.
Do ed ≡ 1 (mod p-1) và ed ≡ 1 (mod q-1), (theo Định lý Fermat nhỏ) nên:
.
22



.
Do p và q là hai số nguyên tố cùng nhau, áp dụng định lý số dư Trung Quốc, ta

có:
.
hay:

Tạo khóa RSA
o Chọn 2 số nguyên tố p=17 và q=11
o Tính n=pq=17*11=187
o Tính

=16*10=160

o Chọn e=gcd(e,160)=1 và 1o Xác định d: de = 1 mod 160 và d<=187
o Giá trị d=23 vì 23*7=161=1*160+1
o Công bố khóa công khai KU={7,187}
o Giữ bí mật khóa riêng KR={23,187}
o Hủy bỏ các giá trị bí mật p=17 và q=11

*/ Thực hiện RSA

Hình 2.3: Mô tả thực hiện RSA
23


*/ Lưu ý về việc chọn tham số trong mã hóa RSA:
 Cần chọn p, q đủ lớn
 Thường chọn e nhỏ
 Thường có thể chọn cùng giá trị của e cho tất cả người dung
 Trước đây ta hay lấy giá trị của e là 3nhưng hiện nay thì nó lại được
coi là quá nhỏ

 Thường chọn e= 2 16 -1=65535
 Giá trị của d sẽ lớn và khó đoán
Xét ví dụ sau :
p= 61 <- số nguyên tố đầu tiên
q = 53 <- số nguyêntố thứ hai
p và q phải được giữ bí mật .
m=p*q = 3233
e = 17
e và m được thông báo công khai .
ta tìm được nghịch đảo của 17 modulo Φ(3233) là
d = 2753
d phải được giữ bí mật .
Chìa khóa công cộng là (e ,m).
Chìa khóa riêng là (e,m).
Hàm số mã hóa là:
mã hoá(P) ≡ (P^e) mod m ≡ (P^17) mod 3233
Hàm số giải mã là: giải mã(C) ≡ (C^d) mod m ≡ (C^2753) mod 3233
Để mã hoá số “123”, làm như sau: mã hoá(123) ≡ (123^17) (mod 3233 )≡
337587917446653715596592958817679803 (mod 3233 ) ≡ 855
Như thế “123” được mã hóa thành “855”
Để giải mã “855”, làm như sau: giải mã(855) ≡ (855^2753) ( mod 3233 )≡ 123

Viết kết quả ngay ra đây, thì các bạn thấy qúa dễ dàng.
Vấn đề ở chỗ là tìm ra trị số của 855 khi được nâng lên luỹ thừa 2753.
24


Đây là chỗ mà ta áp dụng phương pháp bình phương liên tiếp: ta có 2753 =
1010110000012
2753 = 1 + 2^6 + 2^7 + 2^9 + 2^11= 1 + 64 + 128 + 512 + 2048

Xét bản luỹ thừa sau đây của 855: 855^1 ≡ 855 (mod 3233) 855^2 ≡ 367 (mod
3233)
855^4 ≡ 367^2 (mod 3233) ≡ 2136 (mod 3233)
855^8 ≡ 2136^2 (mod 3233) ≡ 733 (mod 3233)
855^16 ≡ 733^2 (mod 3233) ≡ 611 (mod 3233)
855^32 ≡ 611^2 (mod 3233) ≡ 1526 (mod 3233)
855^64 ≡1526^2 (mod 3233) ≡ 916 (mod 3233)
855^128 ≡ 916^2 (mod 3233) ≡ 1709 (mod 3233)
855^256 ≡ 1709^2 (mod 3233) ≡ 1282 (mod 3233)
855^512 ≡ 1282^2 (mod 3233) ≡ 1160 (mod 3233)
855^1024 ≡ 1160^2 (mod 3233) ≡ 672 (mod 3233)
855^2048 ≡ 672^2 (mod 3233) ≡ 2197 (mod 3233)
Vậy:
855^2753 (mod 3233) ≡ 855^(1 + 64 + 128 + 512 + 2048) (mod 3233)
≡ 855^1 * 855^64 * 855^128 * 855^512 * 855^2048 (mod 3233)
≡ 855 * 916 * 1709 * 1160 * 2197 (mod 3233)
≡ 794 * 1709 * 1160 * 2197 (mod 3233)
≡ 2319 * 1160 * 2197 (mod 3233)
≡ 184 * 2197 (mod 3233)
≡ 123 (mod 3233)
≡ 123
Ưu điểm của nó là không bao giờ phải làm việc với nhũng số lớn hơn (m-1)^2.
Nếu các bạn có một chương trình điện toán như “bc” có sẵn trong Linux, bạn có
thể tính 855^2753 mod 3233 trực tiếp như sau: 855^2753 mod 3233
Đây là kết quả: 855^2753 mod 3233 ≡
50432888958416068734422899127394466631453878360035
25