Tải bản đầy đủ (.docx) (50 trang)

Tìm hiểu chữ kí điện 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 (1.65 MB, 50 trang )

MỤC LỤC

1


DANH MỤC HÌNH

2


DANH MỤC BẢNG

3


DANH MỤC TỪ VIẾT TẮT
STT

Từ viết tắt

Nội dung

1

RSA

Rivest Shamir Adleman

2

SHA



Secure Hash Algorithm

3

MD5

Message Digest

4

DSS

Digital Signature Standard

5

PKI

Public Key Infrastructure

6

Logs

Log-in

7

MD


MD buffer

4


LỜI NÓI ĐẦU
Trong sự phát triển của xã hội loài người, kể từ khi có sự trao đổi thông tin, an
toàn thông tin trở thành một nhu cầu cấp thiết trên mọi lĩnh vực. Đặc biệt trong thời
đại mà thương mại điện tử đang lên ngôi thì việc có được các công cụ đầy đủ để đảm
bảo cho sự an toàn trao đổi thông tin liên lạc là vô cùng cần thiết. Cùng với đó, tính
linh hoạt của internet cũng tạo cơ hội cho “bên thứ ba” có thể thực hiện các hành động
bất hợp pháp như nghe trộm, giả mạo, mạo danh. Do vậy để đảm bảo an toàn trong các
thương mại điện tử và các giao dịch điện tử cần có các hình thức bảo mật hiệu quả
nhất, công nghệ phổ biến hiện nay được sử dụng là chữ ký điện tử, đây cũng là nội
dung nghiên cứu chính của chuyên đề.
Hàng ngày chúng ta vẫn hay dùng chữ ký trên các văn bản, trên các tài liệu hay
trên các hợp đồng kinh tế, những chữ ký như vậy gọi là chữ ký viết tay. Từ những vấn
đề an toàn và hợp lý về giao dịch của chữ ký bằng tay thì chữ ký điện tử ra đời có
những nét đặc trưng tương tự. Nhưng thông tin trên máy tính luôn được sao chép một
cách dễ dàng, việc thay đổi hoặc đánh cắp thông tin của một văn bản là rất đơn giản,
cách sử dụng hình ảnh của chữ ký viết tay là không thể áp dụng được do vậy tạo ra
một chữ ký điện tử người ta phải áp dụng những công nghệ như mã hóa, chứng thực…
Mục tiêu của chuyên đề là tìm hiểu về mật mã học khóa công khai tạo ra chữ ký
điện tử; ứng dụng của nó vào các tài liệu văn bản được soạn trên Word và trong email.
Trong đó, hệ mã hóa RSA là hệ mã hóa điển hình của mật mã công khai cùng với hàm
băm mật mã học một chiều chính là những công cụ chính trong việc tạo ra chữ ký điện
tử.
Phương pháp nghiên cứu chủ đạo là tập trung vào nghiên cứu cơ sở lý luận về
chứng thực thông tin, một số sơ đồ chữ ký điện tử phổ biến, hàm băm kết hợp cho chữ

ký điện tử mô hình hóa và ứng dụng của chữ ký điện tử trong email.
Chuyên đề này gồm bốn chương đề cập tới vấn đề chữ ký điện tử và ứng dụng
chữ ký điện tử.
Chương 1: Tổng quan về chữ ký điện tử.
Nội dung: Khái niệm về chữ ký điện tử, chữ ký số, quy trình tạo, kiểm tra chữ
ký điện tử và một số sơ đồ chữ ký điện tử phổ biến.
Chương 2: Mã hóa dữ liệu.
Nội dung: Khái niệm về mã hóa dữ liệu, phân loại và các ứng dụng của mã hóa
dữ liệu.
Chương 3: Hàm băm kết hợp hàm băm vào chữ ký điện tử.
Nội dung: Định nghĩa hàm băm các tính chất cơ bản, vai trò và một số giải
thuật băm thông dụng như: Thuật toán hàm băm SHA, thuật toán MD5.
Chương 4: Lợi ích và ứng dụng chữ ký điện tử.
Nội dung: Lợi ích chữ ký điện tử và ứng dụng chữ ký điện tử trong Word và
email.

5


1

TỔNG QUAN VỀ CHỮ KÝ ĐIỆN TỬ

1.1. Tổng quan về chữ ký điện tử
1.1.1. Lịch sử của chữ ký điện tử
Con người đã sử dụng các hợp đồng dưới dạng điện tử từ hơn 100 năm nay với
việc sử dụng mã Morse và điện tín. Vào năm 1889, tòa án tối cao bang New
Hampshire (Hoa Kỳ) đã phê chuẩn tính hiệu lực của chữ ký điện tử, thỏa thuận đầu
tiên được ký kết mang tính điện tử là giữa USA và Ireland năm 1998. Tuy nhiên, chỉ
với những phát triển của khoa học kỹ thuật gần đây thì chữ ký điện tử mới đi vào cuộc

sống một cách rộng rãi.
Hiện nay chữ ký điện tử có thể bao hàm các cam kết gửi bằng email, nhập các
số định dạng cá nhân (PIN) vào các máy ATM, ký bằng bút điện tử tại quầy tính tiền,
ký các hợp đồng điện tử online…
1.1.2. Khái niệm
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 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 chức
năng xác định được người chủ cùng một dữ liệu nào đó có bị thay đổi không. [6]
Hiện nay chuẩn phổ biến được dùng cho chữ kí điện tử là OpenPGP (hỗ trợ bởi
PGP và GnuPG).
Chữ ký điện tử thường được phân thành hai loại chính:
- Chữ ký số (Digital Signature).
- E-Sign.
Mô hình chung của chữ ký điện tử:

Hình 1.1. Mô hình chung của chữ ký điện tử.

6


1.1.3. So sánh chữ ký thông thường và chữ ký điện tử
Bảng 1.1. So sánh chữ ký thông thường và chữ ký điện tử. [1]
Vấn đề so sánh

Ký một tài liệu

Chữ ký thường

Chữ ký số


Chữ ký điện tử không gắn
kiểu vật lý vào bức thông
Chữ ký là một phần vật lý điệp nên thuật toán được
của tài liệu.
dùng phải “không nhìn
thấy” theo một cách nào đó
trên bức thông điệp.

Kiểm tra

Chữ ký kiểm tra bằng cách
so sánh nó với chữ ký xác
thực khác. Tuy nhiên đây
không phải là một phương
pháp an toàn vì dễ bị giả
mạo

Chữ ký điện tử có thể kiểm
tra nhờ dùng một thuật
toán “kiểm tra công khai”.
Như vậy, bất kì ai cũng có
thể kiểm tra được chữ ký
điện tử. Việc dùng chữ ký
điện tử an toàn có thể chặn
được giả mạo.

Bản copy thông điệp được



Bản copy thông điệp được
ký bằng chữ ký thông
thường có thể khác với bản
gốc.

Bản copy thông điệp được
ký bằng chữ ký điện tử thì
đồng nhất với bản gốc,
điều này có nghĩa là cần
phải ngăn chặn một bức
thông điệp ký số không bị
dùng lại

1.1.4. Chữ ký số (Digital signature)
Chữ ký số (digital signature) là đoạn dữ liệu ngắn đính kèm với văn bản gốc để
chứng thực tác giả (người ký văn bản) của văn bản và giúp người nhận kiểm tra tính
toàn vẹn của nội dung văn bản gốc.
Có thể hiểu chữ ký số là một tập con của chữ ký điện tử, có độ an toàn cao và
được sử dụng rộng rãi thông qua nhà cung cấp chính thức.
Chữ ký số khóa công khai là mô hình sử dụng các kỹ thuật mật mã để gắn với
mỗi người sử dụng một cặp khóa công khai – bí mật và qua đó có thể ký các văn bản
điện tử cũng như trao đổi các thông tin mật.
Chữ ký số chứng minh được tính tin cậy của thông tin, có khả năng kiểm tra
được người ký và thời gian ký, có khả năng xác thực các nội dung tại thời điểm ký,
nghĩa là có thể cho phép kiểm định được thông tin đúng là do một người gửi chứ
không phải là người thứ 3 mạo danh và thông tin không bị sửa đổi.
Các thành viên thứ 3 có thể kiểm tra chữ ký để giải quyết các tranh chấp nếu có.
Phương pháp chữ ký số chủ yếu bao gồm ba giải thuật chính:
- Tạo 1 cặp Private Key (khóa riêng tư) và Public Key (khóa công khai).
- Một giải thuật Signing (đăng ký).

- Một giải thuật Verification (xác minh).
7


Hình 1.2. Giải thuật chữ ký số.
1.1.5. E-SIGN
Là dạng chữ ký thường không sử dụng PKI (Public Key Infrastructure – cơ sở
hạ tầng khóa công khai), chủ yếu quản lý dựa vào danh tính và nhận dạng Logs (Login).
Có tính bảo mật không cao nên chỉ thích hợp cho các hệ thống đóng.
1.1.6. Yêu cầu của chữ ký điện tử
Phụ thuộc vào thông điệp được ký (đảm bảo kiểm tra tính xác thực của thông điệp).
Việc tạo ra chữ ký điện tử phải thật đơn giản, thuận tiện, dễ dàng cho việc kiểm
tra, người nhận có thể dễ dàng trong việc kiểm định chữ ký để xác nhận tính hợp lệ
của thông tin nhận được, khó giả mạo chữ ký.
Phải lưu giữ được bản sao của chữ ký điện tử.
1.1.7. Yêu cầu trong thực tế
Tất cả các mô hình chữ ký số cần phải đạt được một số yêu cầu để có thể được
chấp nhận trong thực tế:
- Chất lượng của thuật toán phải đảm bảo.
- Chất lượng của phần mềm hay phần cứng thực hiện thuật toán.
- Khóa bí mật phải được giữ an toàn.
- Quá trình phân phối khóa công khai phải đảm bảo mối liên hệ giữa khóa và
thực thể sở hữu khóa là chính xác. Việc này thường được thực hiện bởi hạ tầng khóa
công khai (PKI) và mối liên hệ hai chiều giữa khóa với người sở hữu được chứng thực
bởi những người điều hành PKI. Đối với hệ thống PKI mở, nơi mà tất cả mọi người
đểu có thể yêu cầu sự chứng thực trên thì khả năng sai sót là rất thấp. Tuy nhiên các
PKI thương mại cũng đã gặp nhiều vấn đề có thể dẫn đến những văn bản bị ký sai.
8



- Những người sử dụng (và phần mềm) phải thực hiện các quá trình đúng thủ
tục (giao thức). Chỉ khi tất cả các điều kiện trên được thỏa mãn thì chữ ký số mới là
bằng chứng xác định người chủ (hoặc người có thẩm quyền) của văn bản.
1.1.8. Luật pháp về chữ ký điện tử
Một số cơ quan lập pháp, dưới sự tác động của các doanh nghiệp hy vọng thu
lợi từ PKI hoặc với mong muốn là người đi tiên phong trong lĩnh vực mới đã ban hành
các điều luật cho phép, xác nhận hay khuyến khích việc sử dụng chữ ký điện tử. Liên
hợp quốc cũng có những dự án đưa ra những bộ luật mẫu trong vấn đề này. Tuy nhiên,
các quy định này lại thay đổi theo từng nước tùy theo điều kiện về trình độ khoa học
(mật mã học). Chính sự khác nhau này làm bối rối những người sử dụng tiềm năng,
gây khó khăn cho việc kết nối giữa các quốc gia và do đó làm chậm lại tiến trình phổ
biến chữ ký điện tử.
Ở Việt Nam, luật giao dịch điện tử có hiệu lực từ ngày 01/3/2006 công nhận giá
trị pháp lý của chữ ký điện tử, Quyết định số 25/2006/QĐ-BTM về quy chế sử dụng
chữ ký điện tử của Bộ Thương mại. Sau đó, ngày 15/2/2007 Thủ Tướng Chính phủ đã
ban hành Nghị định 26 về chữ ký số và dịch vụ chứng thực chữ ký số.
1.1.9. Quy trình tạo và kiểm tra chữ ký điện tử
- Quy trình tạo chữ ký điện tử:
+ Dùng giải thuật băm để thay đổi thông điệp cần truyền đi, kết quả ta được
một message digest (thông tin đã được rút gọn), dùng giải thuật MD5 ta được digest có
chiều dài 128 bit, dùng giải thuật SHA ta có chiều dài 160 bit.
+ Sử dụng private key để mã hóa message digest thu được ở bước 1, thông
thường ở bước này ta dùng giải thuật RSA.

Hình 1.3. Quy trình tạo chữ ký điện tử.
- Quy trình kiểm tra:
+ Dùng public key của người gửi (khóa này được thông báo đến mọi người) để
giải mã chữ ký số của message.
+ Dùng giải thuật MD5 hoặc SHA băm message đính kèm.


9


+ So sánh kết quả thu được ở các bước trên. Nếu trùng nhau ta kết luận
message này không bị thay đổi trong quá trình truyền và message này là của người
gửi. [2]

Hình 1.4. Quy trình kiểm tra chữ ký điện tử.
1.1.10. Một số tổ chức chứng thực chữ ký điện tử
Tổ chức Entrust, một trong những hãng đi đầu về phát triển PKI, Entrust là một
tổ chức chứng thực điện tử tin cậy trên thế giới được các công ty thuộc lĩnh vực
thương mại điện tử trên thế giới tin cậy. Các sản phẩm của Entrust theo chuẩn X509
V3, ngoài ra còn tuân theo các chuẩn quốc tế về mã hóa như PKCS, RFC.
Tổ chức chứng thực điện tử tại Việt Nam VASC, công ty VASC đã xây dựng
thành công hệ thống quản lý và cung cấp chứng chỉ số của mình từ tháng 4/2002 và từ
tháng 8/2002 đã chính thức phục vụ khách hàng.

1.2. Một số sơ đồ chữ ký điện tử phổ biến
1.2.1. Rivest Shamir Adleman (RSA)
1.2.1.1. Mô tả hệ mật mã RSA
Như đã đề cập ở chương 1, năm 1978, Rivest, Shamir và Adleman tìm ra một
hệ mật mã khóa công khai và một sơ đồ chữ ký điện tử hoàn toàn có thể ứng dụng
trong thực tiễn mà nay gọi là RSA, đây là bước ngoặt có tính cách mạng trong lịch sử
khoa học mật mã hiện đại.
Sơ đồ chung của hệ mật mã khóa công khai được cho bởi
S = (P, C, K, E, D)
Trong đó P là tập ký tự bản rõ, C là tập ký tự bản mã, K là tập các khóa k, mỗi
khóa k gồm có hai phần k = (k’, k’’), k’ là khóa công khai dành cho việc lập mã, còn
k’’ là khóa bí mật dành cho việc giải mã. Với mỗi ký tự bản rõ x ∈ P, thuật toán lập
mã E cho ta ký tự mã tương ứng y = E(k’, x) ∈ C, và với ký tự mã y thuật toán giải mã

D sẽ cho ta lại ký tự bản rõ x D(k’’, y) = D(k’’, E(k’ ,x)) = x.
Để xây dựng một hệ mật mã khóa công khai RSA, ta chọn trước một số nguyên
n = p.q là tích của hai số nguyên tố lớn, chọn một số e sao cho gcd(e, φ(n)) = 1, và tính
10


số d sao cho e.d ≡ 1(mod φ(n)). Mỗi cặp k = (k’, k’’), với k’ = (n, e) và k’’ = d sẽ là
một cặp khóa của một hệ mật mã RSA cụ thể cho một người tham gia.
Như vậy sơ đồ chung của hệ mật mã RSA được định nghĩa bởi danh sách, trong
đó:
P = C = Zn, n là số nguyên Blum (tích của hai số nguyên tố);
K = {k = (k’, k’’) k’ = (n, e) và k’’ = d, gcd (e, φ(n)) = 1, e.d ≡ 1(mod φ(n))};
E và D được xác định bởi:
E (k’, x) = x¬e mod n, với mọi x ∈ P,
D (k’’, y) = yd mod n, với mọi y ∈ C.
Để chứng tỏ định nghĩa trên là hợp thức, ta phải chứng minh rằng với mọi cặp
khóa k = (k’, k’’), và mọi x ∈ P ta đều có
D (k’’, E(k’, x)) = x.
Thực vậy, do e.d e.d ≡ 1(mod φ(n)) ta có thể viết e.d = t.φ(n) + 1. Nếu x nguyên
tố với n thì ta có D (k’’, E(k’, x)) = xed ≡ x^(tφ(n)).x(mod n) = x.
Nếu x không nguyên tố với n, thì do n = p.q, hoặc x chia hết cho p và nguyên tố
với q, hoặc x chia hết cho q và nguyên tố với p, và φ(n) = (p-1)(q-1), trong cả hai
trường hợp ta đều có:
x ^(t φ(n)+1) ≡ x(mod p),
x ^(t φ(n)+1) ≡ x(mod q);
từ đó suy ra x^(t φ(n)+1) ≡ x(mod n), tức D(k’’, E(k’, x)) = x.
Ví dụ giả sử chọn n = p.q = 2357 . 2511 = 6012707, ta sẽ có φ(n) = (p-1)(q-1) =
2356 . 2550 = 6007800. Chọn e = 3674911, và tính được d = 422191 sao cho e.d ≡
1(mod φ(n)). Một người dùng A có thể chọn khóa công khai là k’ = (n = 6012707, e =
3674911) và giữ khóa bí mật k’’ = d = 422191. Một đối tác B muốn gửi cho A một

thông báo x = 5234673, sẽ dùng khóa công khai để tạo bản mật mã y = xe =
52346733674911mod 6012707 = 5234673.
1.2.1.2. Thực hiện hệ mật mã RSA ứng dụng trong chữ ký số
Để thực hiện hệ mật mã RSA cho một mạng truyền tin bảo mật, ngoài việc xây
dưng các chương trình tính toán hàm E (với tham biến đầu vào là n, e và x) và hàm D
(với tham biến đầu vào là n, d và y), ta còn phải chọn cho mỗi người tham gia một bộ
(n,e,d) để tạo các khoá công khai k' và khoá bí mật k". Hệ mã của mỗi người tham gia
chỉ có khả năng bảo mật khi n = p.q là số nguyên rất lớn (và do đó p q cũng phải là
những số nguyên tố rất lớn); rất lớn có nghĩa là p q phải có biểu diễn thập phân cỡ hơn
100 chữ số, do đó n có cỡ hơn 200 chữ số thập phân, hay n > 10200!
Tính toán các số e d, hay thực hiện các hàm E, D, đều chủ yếu là thực hiện các
phép tính số học trên các số nguyên rất lớn.
Lược đồ chữ ký số ứng dụng RSA:
- Tạo khóa:
Sơ đồ chữ ký cho bởi bộ năm (P, C, K, E, D)
Cho n=pq, với mỗi p, q là các số nguyên tố lớn khác nhau φ(n) = (p - 1)(q - 1).
11


Cho P = C = Zn và xác định k ={(n, p, q, e, d) e.d ≡ 1(mod φ(n))}
Các giá trị n, d là công khai các giá trị p, q, e là các giá trị bí mật.
- Tạo chữ ký:
Với mỗi k = (n, p, q, e, d) xác định Sig k’(x) = xe mod n
- Kiểm tra chữ ký:
Ver k’’ (x, y) = true tương đương x ≡ yd mod n (x, y ∈ Zn).
Người ta có thể giả mạo chữ ký bằng cách chọn y sau đó tính x = Ver k’’(y), khi
đó y = sign k’(x). Một cách khắc phục khó khăn này là việc yêu cầu x phải có nghĩa.
Do đó chữ ký giả mạo thành công với xác xuất rất nhỏ. Hơn nữa việc sử dụng hàm
hash liên kết với lược đồ chữ ký loại bỏ phương pháp giả mạo.
1.2.1.3. Tính bảo mật của hệ mật mã RSA

Nếu ta biết hai thừa số p,q của n thì dễ tìm được x từ y, và nói chung có bằng
chứng để coi rằng bài toán RSA (hay bài toán thám mã RSA) là có độ khó tương
đương với bài toán phân tích số nguyên (Blum) thành thừa số nguyên tố. Do đó, giữ
tuyệt mật khoá bí mật d, hay giữ tuyệt mật các thừa số p, q, là có ý nghĩa rất quyết
định đến việc bảo vệ tính an toàn của hệ mật mã RSA.
Một mạng truyền tin bảo mật sử dụng sơ đồ các hệ mật mã RSA được xem là an
toàn, nếu tuân thủ các điều kiện cơ bản mỗi người tham gia phải độc lập lựa chọn các
tham số n, e, d của riêng mình, chọn n cũng có nghĩa là chọn các thừa số p, q của n (n
= p.q), và do có p,q nên tính được φ(n) = (p – 1)(q – 1), và từ đó tìm được e, d tương
đối dễ dàng. Nhưng cũng chính vì vậy mà sau khi đã chọn thì mỗi người tham gia phải
giữ tuyệt đối bí mật các giá trị p, q, d, chỉ công bố khóa công khai (n, e) mà thôi. [6]
Tuy nhiên đó là điều kiện chung còn trong thực tế vẫn có thể còn nhiều sơ hở mà
người thám mã có thể sử dụng để tấn công vào tính bảo mật của các hệ mã RSA khó
mà lường trước hết được. Ví dụ:
- Dùng môđun n chung Giả sử có hai người tham gia A và B cùng sử dụng một
môđun chung n trong khóa công khai của mình, chẳng hạn A chọn khoá công khai (ne)
và giữ khóa bí mật d, B chọn khóa công khai (n,a) và giữ khóa bí mật b. Một người
tham gia thứ ba C gửi một văn bản cần bảo mật x đến cả A và B thì dùng các khoá
công khai nói trên để gửi đến A bản mật mã y = xe mod n và gửi đến B bản mật mã z
= xa mod n. Ta sẽ chứng tỏ rằng một người thám mã O có thể dựa vào những thông tin
n, e ,a, y, z trên đường công khai mà phát hiện ra bản rõ x như sau:
+ Tính c= e-1mod a;
+ Sau đó tính h= (ce-1)/a;
+ Và ta được x= yc (zh)-1 mod n.
Thưc vậy, theo định nghĩa trên, ce -1 chia hêt cho a, và tiếp theo ta có yc(zh)1mod n = xec . (xa(ce-1)/a)-1 modn = xce.(xce-1)-1 modn = x. Như vậy, trong trường
hợp này việc truyền tin bảo mật không còn an toàn nữa. Vì vậy, ta cần nhớ khi dùng
các hệ RSA để tổ chức mạng truyền tin bảo mật, cần tránh dùng môđun n chung cho
các người tham gia khác nhau.
- Dùng số mũ lập mã e bé Để cho việc tính toán hàm lập mã được hiệu quả, ta dễ
có xu hướng chọn số mũ e của hàm lập mã là một số nguyên bé, chẳng hạn e =3. Tuy

12


nhiên, nếu trong một mạng truyền tin bảo mật dùng các hệ mật mã RSA, nếu có nhiều
người cùng chọn số mũ lập mã e bé giống nhau thì sẽ có nguy cơ bị tấn công bởi việc
thám mã như sau Giả sử có ba người tham gia chọn ba khoá công khai là (n1, e), (n2,
e), (n3, e) với cùng số mũ e =3. Một người tham gia A muốn gửi một thông báo x cho
cả ba người đó, và để bảo mật, gửi bản mã c = X mod n cho người thứ i. Ba môđun n
là khác nhau, và có phần chắc là từng cặp nguyên tố với nhau. Một người thám mã có
thể dùng định lý số dư Trung quốc để tìm một số m (0< m < n1n2n3) thoả mãn:
m = c1 mod n1
im = c2 mod n2
m = c3 mod n3
Vì x< n, nên x3 < n1n2n3, do đó ắt có m =x3. Vậy là ta đã đưa được bài toán tìm
căn bậc ba theo nghĩa đồng dư mod n về bài toán tìm căn bậc ba theo nghĩa số học
thông thường, tìm căn bậc ba của m ta được x, tức được bản rõ. Với những lý do khác,
người ta đã có những bằng chứng để chứng tỏ rằng hệ RSA cũng không bảo đảm an
toàn nếu ta dùng các khoá có số mũ giải mã là số nguyên bé, dù rằng khi đó thuật toán
giải mã có làm việc hiệu quả hơn. Vì thế, khi sử dụng các hệ mật mã RSA, để bảo đảm
an toàn ta nên chọn các số mũ e và d là những số nguyên lớn, có kích cỡ lớn gần như
bản thân số n.
1.2.2. Chữ ký ElGamal
1.2.2.1. Mô tả hệ mật mã ElGamal [2]
Hệ mật mã ElGamal được T. ElGamal đề xuất năm 1985, dựa vào độ phức tạp
của bài toán tính lôgarit rời rạc, và sau đó đã nhanh chóng được sử dụng rộng rãi
không những trong vấn đề bảo mật truyền tin mà còn trong các vấn đề xác nhận và chữ
ký điện tử.
Lược đồ chữ ký ElGamal được định nghĩa như sau:
- Tạo khóa:
Cho p là số nguyên tố sao cho bài toán logarit rời rạc trong Zp là khó và giả sử

α � Z*p là phần tử nguyên thủy.
Cho P = Z*p, A = Z*p × Zp-1 và định nghĩa :
K = {(p, a, α, β) β = αa mod p}.
Các giá trị p, α, β là công khai, a là bí mật.
- Tạo chữ ký:
Với K = (p, a, α, β) và với số ngẫu nhiên k � Z*p-1, định nghĩa sigk(r, s) trong đó:
r = αk mod p và s = (x – ar) k-1 mod(p – 1).
- Kiểm tra chữ ký số:
Với x, r � Z*p và s � Zp-1, ta định nghĩa:
Ver(x, r, s) = true  βr.rβ ≡ αx mod p.
- Chứng minh:
Nếu chữ ký được thiết lập đúng thì hàm kiểm tra sẽ thành công vì:
13


=> βr.rβ ≡ αa.r αr.s mod p ≡ αx mod p (vì ar + rs ≡ x mod(p – 1)).
A tính chữ ký bằng các dùng cả giá trị bí mật a (là một phần của khóa) lẫn số
ngẫu nhiên bí mật k (dùng để ký trên x). Việc kiểm tra có thể được thực hiện duy nhất
bằng thông tin công khai.
Ví dụ Giả sử p = 467, α = 2, a = 127, khi đó β = αa mod p = 2127mod467 =
132. Giả sử A có thông báo x = 100 và A chọn ngẫu nhiên k = 213 vì (213,466) = 1 và
213-1mod466 = 431, A ký trên x như sau:
r = αk mod p = 2213mod467 = 29.
s = (x – ar)k-1mod(p – 1) = (100 – 127.29).431 mod 466 = 51.
Chữ ký của A trên x = 100 là (29, 51).
Bất kỳ người nào cũng có thể kiểm tra chữ ký bằng cách:
13229.2951 ≡ 189 mod 467.
2100 ≡ 189 mod 467.
Do đó chữ kỹ là tin cậy.
1.2.2.2. Tính an toàn của sơ đồ chữ ký ElGamal [7]

Sơ đồ chữ ký ElGamal được xem là an toàn, nếu việc ký trên một văn bản là
không thể giả mạo được, nói cách khác, không thể có một người nào ngoài chủ thể hợp
pháp có thể giả mạo chữ ký của chủ thể hợp pháp đó trên một văn bản bất kỳ. Vì vậy,
việc giữ bí mật khoá k' = a dùng để tạo chữ ký là có ý nghĩa quyết định đối với việc
bảo đảm tính an toàn của chữ ký. Có thể để lộ khoá bí mật k' = a trong những trường
hợp nào, và có thể không để lộ k' = a mà vẫn giả mạo chữ ký được không?
Đầu tiên, để kiểm tra chữ ký thì cần phải kiểm tra bất đẳng thức r < p. Nếu như
r > p thì có khả năng bị tấn công, cách này đề xuất bởi Bleichenbacher. Giả sử (r,s) là
chữ ký của bức điện m. Tội phạm có thể giả mạo chữ ký với một bức điện bất kỳ m’
bằng cách hình thành như sau:
u ← m' m −1 (mod p − 1)

s ' = su (mod p − 1)
r ' ≡ ru (mod p − 1)
r ' ≡ r (mod p )
Tính r’, thỏa mãn điều kiện

. Điều này có
thể làm được nhờ áp dụng định lý phần dư Trung Hoa.

Chúng ta thấy bức điện m’ với chữ ký (r’, s’), khóa mở β = yA thỏa mãn điều
kiện:

y Ar ' r 's ' = y Aru r su ≡ ( y Ar r s )u ≡ α mu ≡ α m ' (mod p )
Tấn công kiểu như thế này là không thể nếu như r < p, bởi vì trong trường hợp
này giá trị r’ được tính toán theo bước 3 ứng dụng định lý phần dư Trung Hoa theo
modul p (p-1).

α


Z *p

Thứ hai, người A cần phải lựa chọn phần tử ngẫu nhiên
từ nhóm
. Nếu
như tham số này không được lựa chọn bởi A (điều này là có thể, khi hệ thống người sử
14


α

dụng có một tham số mở
và p), thì cần phải kiểm tra một số lần rằng
nhiên (điều này có thể áp dụng hàm tạo số giả ngẫu nhiên).

α

là số ngẫu

α

Giả sử rằng các tham số mở
và p được lựa chọn bởi tội phạm O. Tham số p
hình thành trên cơ sở phương pháp chuẩn Giả sử p-1=bq, với q là số nguyên tố đủ lớn,
nhưng b có thể có thừa số nguyên tố nhỏ, và tính toán logarit trong nhóm bậc b không
khó.
O hình thành tham số theo cách sau:

α = β t (mod p )
Với


β = cq

và c < b.

Chúng ta biết rằng việc tính toán logarit rời rạc của khóa mở yA là bài toán khó.
y Aq
αq
Thế nhưng tính toán logarit của độ lớn
theo cơ số
không tạo nên một sự khó
khăn nào. Logarit rời rạc này bằng

z ≡ x A (mod b)

, có nghĩa thỏa mãn đồng dư thức sau:

y Aq = (α q ) z (mod p)
Khi tính được giá trị z thì O có thể giả mạo chữ ký của A bằng các lệnh sau
đây:

r ← β = cq,
s ← t (m − cqz )(mod p − 1).
Chúng ta xem việc thẩm tra chữ ký:
t ( m − cqz )
y Ar r s ≡ y cq
≡ α cqzα m − cqz ≡ α m (mod p)
A (β )

Rõ ràng chúng ta thấy cặp (r, s) là chữ ký của bức điện m, nhưng việc tạo thành

chữ ký này không có sự tham gia của khóa mật xA (mà có sự tham gia của số xA (mod b)).
Chú ý rằng trong quá trình hình thành chữ ký giả mạo thì số q là ước số của r.
Dẫn đến cách tấn công của Bleichenbacher có thể ngăn chặn nếu như trong lúc kiểm
tra B kiểm tra điều kiện q không là ước số của r (giả sử rằng quá trình lựa chọn p thì q
là tham số mở).
Thứ ba, liên quan đến chiều dài của tham số k. Tạo ra chữ ký theo sơ đồ
Elgamal là thuật toán ngẫu nhiên bởi vì tham số k được hình thành ngẫu nhiên. A
không bao giờ dùng khóa để ký các bức điện khác nhau là có thời gian sống ngắn. Nếu
như tham số k sử dụng trở lại đối với chữ ký của hai bức điện m1 và m2, mà hai bức
m1 ≠ m 2 (mod p − 1)
điện thỏa mãn
, thì từ phương trình tính s của sơ đồ chữ ký chúng
ta có:

l ( s1 − s2 ) ≡ m1 − m2 (mod p − 1)
15


Bởi vì

l −1 (mod p − 1)

tồn tại, và từ bất đẳng thức

m1 ≠ m 2 (mod p − 1)

dẫn đến:

l −1 ≡ ( s1 − s2 ) /( m1 − m2 )(mod p − 1)
l −1


Có nghĩa
bị lộ. Nhưng quan trọng nhất là khóa mật A x A có thể tính toán từ
công thức hình thành s, và suy ra xA theo công thức:

x A ≡ (m1 − ls1 ) / r (mod p − 1)
Điều này cho chúng ta thấy chỉ được sử dụng tham số k một lần duy nhất.
1.2.3. Họ sơ đồ chữ ký Elgama
Sau khi đăng sơ đồ chữ ký Elgamal, thì sau đó một số cải tiến của sơ đồ này
xuất hiện. Quan trọng nhất trong số đó là sơ đồ chữ ký Schnorr và chuẩn chữ ký DSS
(Digital Signature Standard).
1.2.3.1. Sơ đồ chữ ký Schnorr
Đây là sơ đồ chữ ký thuộc họ của Elgamal nhưng có những tính chất tốt hơn so
với sơ đồ Elgamal. Sơ đồ chữ ký được cho ở dưới:
Thiết lập tham số hệ thống:
- Chọn hai số nguyên tố p và q, thỏa mãn điều kiện q|p-1. Và các số này được
p = 1024
q = 160

chọn sao cho kích thước
- Lựa chọn phần tử

g ∈ Z *p

có bậc là q (Để làm điều này thì cần phải lấy phần tử
f ∈Z
g← f
(mod p )
và thực hiện lệnh
. Nếu như g=1 thì lặp lại lệnh đến khi

*
p

g ≠1

( p−1) / q

).
- Lựa chọn hàm hash H:

{ 0,1} * 

Zq

(Ví dụ có thể chọn SHA-1).

Các tham số (p, q, g, H) sẽ phân bố giữa các người dùng hệ thống.
Hình thành khóa mật và khóa công cộng:
A tạo ra số ngẫu nhiên

x ∈ Z *p

và thực hiện lệnh:

y ← g − x (mod p )

Các tham số công cộng là (p, q, g, y, H) còn x là khóa mật.
- Tạo chữ ký:
Để ký lên bức điện
cặp (e,s), ở đây:


m ∈ { 0,1}

*

, thì A tạo ra số ngẫu nhiên

16

l ∈ Zq

và hình thành


r ← g l (mod p ),
e ← H ( m || r ),
s ← l + xe(mod q ).

- Thẩm tra chữ ký:
Để thẩm tra chữ ký, B thực hiện các bước sau:
r ' ← g s y e (mod p ),
e' ← H ( m || r ' ),

Verify (p, q, g, y, h) (m, (s, e))= TRUE, nếu như e’=e.
Chú ý rằng khi tạo ra các tham số hệ thống, việc tạo phần tử sinh g có thể được
xác định rất nhanh bởi vì q|p-1.
Việc thẩm tra chữ ký đúng nếu như cặp (m,(s, e)) đúng là cặp “bức điện- chữ
ký”, được tạo ra bởi A. Nghĩa là:
r ' ≡ g s y e ≡ g xe + l y e ≡ y − e g l y e ≡ g l ≡ r (mod p )
Zp


Như chúng ta thấy việc ứng dụng nhóm con bậc q của nhóm
cho phép quá
trình ký của sơ đồ Schonorr nhanh hơn nhiều so với sơ đồ Elgamal Để chuyển chữ ký
của Schonorr cần 2|q| bít, trong khi đó để chuyển chữ ký Elgamal cần 2|p| bít. Chữ ký
ngắn hơn rất nhiều cho phép giảm số lệnh cần thiết để hình thành chữ ký và thẩm định
log2 q log2 p )
log3 p
chữ ký trong sơ đồ Schonorr tốn O (
, còn trong sơ đồ Elgamal cần O(
).
1.2.3.2. Chuẩn chữ ký DSS
Đây cũng là phiên bản cải tiến của Elgamal. Nó được để xuất năm 1991, tuy
nhiên nó được chấp nhận làm chuẩn từ 01/12/1994. Giống như sơ đồ chữ ký Schnorr,
chuẩn chữ ký DSS cũng có những ưu điểm so với Elgamal.
Sơ đồ chữ ký được miêu tả như sau:
- Thiết lập tham số hệ thống:
Các tham số hệ thống giống như sơ đồ chữ ký Schnorr. Và chuẩn DSS chọn
hàm hash là SHA-1. Các tham số của hệ thống là (p, q, g, H) xem sơ đồ Schnorr.
- Tạo khóa:
A tạo ra số ngẫu nhiên

x∈Zp

là khóa mật và tính khóa công cộng:

y ← g x (mod p )

Tham số công khai của A bao gồm (p, q, g, y, H) còn x là tham số mật.
- Hình thành chữ ký

Để ký lên bức điện m
(r,s), với

∈ { 0,1}

*

, A tạo số ngẫu nhiên

17

l ∈Zp

và hình thành nên cặp


r ← ( g l (mod p ))(mod q ),
s ← l −1 ( H ( m) + xr )(mod q ).

- Thẩm tra chữ ký
Để thẩm tra chữ ký, B dùng cặp (m,(r,s)) cho tính toán sau
w ← s −1 (mod q ),
u1 ← H ( m) w(mod q ),
u 2 ← rw(mod q ),

Verify(p, q, g, y, h)(m,(r, s))=TRUE, nếu như

r = ( g u1 y u 2 (mod p))(mod q )

.


Chúng ta xem việc kiểm tra chữ ký là hợp lý:
Đặt

v = ( g u1 y u 2 (mod p))(mod q) = [ g H ( m ) s

v = [(g s

−1

( H ( m ) + xr )(mod q )

−1

(mod q )

g xrs

−1

(mod q )

)(mod p )](mod q)

)(mod p )](mod q ) = [ g l (mod p )](mod q ) = r

Những ưu điểm, những chú ý tương tự sơ đồ chữ ký Schnorr.

18



CHƯƠNG 2 MÃ HÓA DỮ LIỆU

2.1. Tổng quan về mã hóa dữ liệu
2.1.1. Khái niệm về mã hóa dữ liệu
Encrypt (encipher, encryption): mã hóa – đó là quá trình biến đổi thông tin từ
dạng ban đầu - có thể hiểu được thành dạng không thể hiểu được, với mục đích giữ bí
mật thông tin đó.

Hình 2.5. Quy trình mã hóa dữ liệu.
2.1.2. Phân loại mã hóa dữ liệu
2.1.2.1. Phân loại theo các phương pháp
- Mã hóa hai chiều:
Mã hoá đối xứng (Symetric cryptography): Mã hoá đối xứng còn có một số tên
gọi khác như Secret Key Cryptography (hay Private Key Cryptography), sử dụng cùng
một khoá cho cả hai quá trình mã hoá và giải mã.

Hình 2.6. Quy trình mã hóa đối xứng.
19


Trong hệ thống mã hoá đối xứng, trước khi truyền dữ liệu, 2 bên gửi và nhận
phải thoả thuận về khoá dùng chung cho quá trình mã hoá và giải mã. Sau đó, bên gửi
sẽ mã hoá bản rõ (Plaintext) bằng cách sử dụng khoá bí mật này và gửi thông điệp đã
mã hoá cho bên nhận. Bên nhận sau khi nhận được thông điệp đã mã hoá sẽ sử dụng
chính khoá bí mật mà hai bên thoả thuận để giải mã và lấy lại bản rõ (Plaintext). [10]
Mã hóa đối xứng có thể được chia thành hai loại:
- Loại thứ nhất tác động trên bản rõ theo từng nhóm bits: từng khối dữ liệu
trong văn bản ban đầu được thay thế bằng một khối dữ liệu khác có cùng độ dài. Đối
với các thuật toán ngày nay thì kích thước chung của một khối là 64 bits.

- Loại thứ hai tác động lên bản rõ theo từng bit một: dữ liệu của văn bản được
mã hoá từng bit một. Các thuật toán mã hoá dòng này có tốc độ nhanh hơn các thuật
toán mã hoá khối và nó thường được áp dụng khi lượng dữ liệu cần mã hoá chưa biết
trước.
Một số thuật toán nổi tiếng trong mã hoá đối xứng là: DES, Triple DES
(3DES), RC4, AES…
Mã hoá bất đối xứng (Asymetric cryptography): Hay còn được gọi với một cái
tên khác là mã hoá khoá công khai (Public Key Cryptography), nó được thiết kế sao
cho khoá sử dụng trong quá trình mã hoá khác biệt với khoá được sử dụng trong quá
trình giải mã. Một người bất kỳ có thể dùng khoá này để mã hoá dữ liệu nhưng chỉ duy
nhất người mà có khoá giải mã tương ứng mới có thể đọc được dữ liệu mà thôi. Do đó
trong thuật toán này có 2 loại khoá: Khoá để mã hoá được gọi là Public Key, khoá để
giải mã được gọi là Private Key.

Hình 2.7. Quy trình mã hóa bất đối xứng.
Một ví dụ điển hình của mã hóa bất đối xứng là RSA.
- Mã hóa một chiều: Là loại mã hóa mà chỉ có thể mã hóa từ một thông điệp
thành một thông điệp rút gọn mà không thể giải mã để trở lại thông điệp ban đầu.
20


Ví dụ: SHA1, MD5…
2.1.2.2. Phân loại theo số lượng khoá
Mã hoá khoá bí mật (Private-key Cryptography): là một dạng mã hóa mà khi
mã hóa người dùng trao đổi thông tin với nhau không cần trao đổi khóa bí mật, nhưng
khi nhận được thông điệp gửi đến thì không thể xác nhận chính xác người gửi cũng
như nội dung có bị thay đổi hay không.
Mã hoá khoá công khai (Public-key Cryptography): là một dạng mật mã hóa
cho phép người sử dụng trao đổi các thông tin mật mà không cần phải trao đổi các
khóa chung bí mật trước đó. Điều này được thực hiện bằng cách sử dụng một cặp khóa

có quan hệ toán học với nhau là khóa công khai và khóa cá nhân (hay khóa bí mật).
2.1.3. Tầm quan trọng của mã hóa dữ liệu
Thuật toán Cryptography đề cập tới nghành khoa học nghiên cứu về mã hoá và
giải mã thông tin. Cụ thể hơn là nghiên cứu các cách thức chuyển đổi thông tin từ dạng
rõ (clear text) sang dạng mờ (cipher text) và ngược lại. Đây là một phương pháp hỗ trợ
rất tốt cho trong việc chống lại những truy cập bất hợp pháp tới dữ liệu được truyền đi
trên mạng, áp dụng mã hoá sẽ khiến cho nội dung thông tin được truyền đi dưới dạng
mờ và không thể đọc được đối với bất kỳ ai cố tình muốn lấy thông tin đó. Mã hoá
được áp dụng như một biện pháp nhằm giúp chúng ta tự bảo vệ chính mình cũng như
những thông tin mà chúng ta gửi đi. Bên cạnh đó, mã hoá còn có những ứng dụng
khác như là bảo đảm tính toàn vẹn của dữ liệu, tính bí mật, tính xác thực và tính không
thể chối bỏ. [10]

2.2. Các ứng dụng của mã hóa dự liệu
- Securing Email (bảo mật email)
- Authentication System (việc xác thực hệ thống)
- Secure E-commerce (an toàn trong thương mại điện tử)
- Virtual Private Network (bảo mật mạng riêng ảo)
- Wireless Encryption (mã hóa mạng không dây)
- Là nền tảng của kĩ thuật chữ kí điện tử, hệ thống PKI (hạ tầng khóa công khai)…
- Tạo chìa khóa từ mật khẩu. [9]

21


CHƯƠNG 3 HÀM BĂM VÀ KẾT HỢP HÀM BĂM VÀO CHỮ KÝ ĐIỆN TỬ

3.1. Tổng quan về hàm băm
3.1.1. Định nghĩa hàm băm
Hàm băm (Hash function) là một hàm toán học chuyển đổi một thông điệp đầu

vào có độ dài bất kỳ thành một dãy bit có độ dài cố định (tuỳ thuộc vào thuật toán
băm). Dãy bit này được gọi là thông điệp rút gọn (message digest) hay giá trị băm
(hash value), đại diện cho thông điệp ban đầu. [9]
Hàm băm (hash function) là hàm một chiều mà nếu đưa một lượng dữ liệu bất
kì qua hàm này sẽ cho ra một chuỗi có độ dài cố định ở đầu ra.

Hình 3.8. Ví dụ mô tả hàm băm.
3.1.2. Tính chất cơ bản 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 - tri 10]
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.
Để 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
22


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í du: Đầ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 phuc ô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.
[4]
3.1.3. Vai trò hàm băm trong mật mã hiện đại
Vai trò cơ bản của các hàm băm mật mã là một giá trị băm coi như ảnh đại diện
thu gọn, đôi khi gọi là một dấu vết (imprint), vân tay số (digital fingerprint), hoặc tóm
lược thông báo (message digest) của một xâu đầu vào, và có thể được dùng như là một
định danh duy nhất với xâu đó.
Các hàm băm thường được dùng cho toàn vẹn dữ liệu kết hợp với các lược đồ
chữ kí số.
Một lớp các hàm băm riêng được gọi là mã xác thực thông báo (MAC) cho
phép xác thực thông báo bằng các kĩ thuật mã đối xứng.
Các hàm băm lấy một thông báo đầu vào và tạo một đầu ra được xem như là:
- Mã băm (hash code).
- Kết quả băm (hash result).
- Hoặc giá trị băm (hash value). [9]
3.1.4. Phân loại hàm băm

Hình 3.9. Phân loại hàm băm.
23



3.1.5. Danh sách các hàm băm mật mã học
Bảng 3.1. Danh sách các hàm băm mật mã học.

Thuật
toán

Kích thước
đầu ra

Kích
thước
trạng
thái
trong

HAVAL

256/224/192/
160/128

256

MD2

128

MD4

Kích

thước
khối

Độ dài

Kích
thước
world

Xung đột

1024

64

32



384

128

không

8

khả năng
lớn


128

128

512

64

32



MD5

128

128

512

64

32



PANAM
A

256


8736

256

không

32

Có lỗi

RIPEMD

128

128

512

64

32



RIPEMD128/256

128/256

128/256


512

64

32

Không

RIPEMD160/320

160/320

160/320

512

64

32

Không

SHA-0

160

160

512


64

32

Không

SHA-1

160

160

512

64

32

Có lỗi

SHA256/224

256/224

256

512

64


32

Không

SHA512/384

512/384

512

1024

128

64

Không

Tiger192/160/
128

192/160/128

192

512

64


64

Không

WHIRL
POOL

512

512

512

256

8

Không

[3]

24


3.2. Một số giải thuật Băm thông dụng
3.2.1. Thuật toán hàm băm SHA-1
3.2.1.1. Giới thiệu hàm băm SHA-1 [1]
Năm 1990, Ron Rivest đã sáng tạo ra hàm băm MD4. Sau đó năm 1992, ông
cải tiến MD4 và phát triển một hàm băm khác MD5. Năm 1993, Cơ quan An ninh
Quốc gia Hoa Kỳ/Cục An ninh Trung ương (NSA) đã công bố,một hàm băm rất giống

với MD5 được gọi là SHA. Vào năm 1995, sau việc khắc phục những lỗ hổng kỹ
thuật, NSA đã thay đổi SHA trở thành một hàm băm mật mã khác gọi là SHA-1.
SHA-1 (Sercue Hash Algorithm) là thuật toán cũng được xây dựng trên thuật
toán MD4, đang được sử dụng rộng rãi. Thuật toán SHA-1 tạo ra chuỗi mã băm có
chiều dài cố định 160 bit từ chuỗi bit dữ liệu đầu vào x có chiều dài tùy ý.
3.2.1.2. Thuật toán SHA-1
Input thông điệp với độ dài tối đa 264 bits.
Output thông điệp rút gọn (message digest) có độ dài 160 bits.
Giải thuật gồm 5 bước trên khối 512 bits:
- Bước 1 Nhồi dữ liệu:
Thông điệp được nhồi thêm các bit sao cho độ dài L mod 512 luôn đồng dư là 448.
Thông điệp luôn luôn được nhồi thêm các bit.
Số bit nhồi thêm phải nằm trong khoảng 1-512.
Phần thêm vào cuối dữ liệu gồm 1 bit 1 và theo sau là các bit 0.
- Bước 2 Thêm độ dài:
Độ dài khối dữ liệu ban đầu sẽ được biểu diễn dưới dạng nhị phân 64 bit và
được thêm cuối chuỗi nhị phân mà ta thu được ở bước 1.
Độ dài được biểu diễn dưới dạng nhị phân 64 bit không dấu.
Kết quả thu được từ 2 bước là một khối dữ liệu có độ dài là bội số của 512.
(Với cứ 512 bit là một khối dữ liệu).
- Bước 3 Khởi tạo bộ đệm MD (MD buffer):
Một bộ đệm 160 bit được dùng để lưu trữ các giá trị băm trung gian và kết quả.
Bộ đệm được biểu diễn bằng 5 thanh ghi 32-bit với các giá trị khởi tạo ở dạng bigendian (byte có trọng số lớn nhất trong từ nằm ở địa chỉ thấp nhất) và có hai bộ đệm.
Năm thanh ghi của bộ đệm đầu tiên được đánh đặt tên là A, B,C,D,E và tương tự cho
bộ đệm thứ hai là H0, H1, H2, H3, H4. Có giá trị như sau (Theo dạng Hex):
H0=67452301
H2=EFCDAB89
H3= 98BADCFE
H4= 10325476
H5= C3D2E1F0

- Bước 4 Xử lý các khối dữ liệu 512 bit:
25


×