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
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
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
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,
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.
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
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à
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:
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.
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
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ý
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à 1
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