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

An Toàn Và Bảo Mật Thông Tin

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 (937.37 KB, 37 trang )

AN TOÀN VÀ BẢO MẬT THÔNG TIN

HÀ NỘI - 2019


MỤC LỤC
Chương 1: Một số khái niệm cơ bản ................................................................................. 4
1.1. CÁC KHÁI NIỆM TRONG TOÁN HỌC ........................................................... 5
1.1.1. Một số khái niệm trong số học ...................................................................... 5
1.1.1.1. Số nguyên tố ............................................................................................ 5
1.1.1.2. Ước số và bội số ...................................................................................... 5
1.1.1.3. Ước số chung và bội số chung ................................................................ 6
1.1.1.4. Số nguyên tố cùng nhau .......................................................................... 6
1.1.1.5. Khái niệm Đồng dư ................................................................................. 7
1.1.2. Một số khái niệm trong đại số ....................................................................... 7
1.2. VẤN ĐỀ MÃ HÓA DỮ LIỆU............................................................................. 8
1.2.1. Khái niệm Mã hóa.......................................................................................... 8
1.2.2. Phân loại mã hóa ............................................................................................ 9
1.2.2.1. Hệ mã hóa khóa đối xứng........................................................................ 9
1.2.2.2. Hệ mã hóa khóa công khai .................................................................... 10
1.3. VẤN ĐỀ CHỮ KÝ SỐ ...................................................................................... 12
1.3.1. Khái niệm “chữ ký số”................................................................................. 12
1.3.1.1. Giới thiệu “chữ ký số” ........................................................................... 12
1.3.1.2. Sơ đồ “chữ ký số”.................................................................................. 13
1.3.2. Phân loại chữ ký số” .................................................................................... 14
1.3.2.1. Phân loại chữ ký theo đặc trưng kiểm tra chữ ký .................................. 14
1.3.2.2. Phân loại chữ ký theo mức an toàn ....................................................... 14
1.3.2.3. Phân loại chữ ký theo ứng dụng đặc trưng ............................................ 14
Chương 2: Tấn công chữ ký số ........................................................................................ 16
2.1. TẤN CÔNG CHỮ KÝ RSA .............................................................................. 16
2.1.1. Mô tả sơ lược ............................................................................................... 16


2.1.2. Tạo khóa ...................................................................................................... 16
2.1.3. Mã hóa và giải mã ........................................................................................ 18
2.1.3.1. Mã hóa ................................................................................................... 18
2.1.3.2. Giải mã .................................................................................................. 18
2.1.4. Các phương thức tấn công ........................................................................... 18
2.1.4.1. Tấn công dựa trên thời gian................................................................... 19
2.1.4.2. Tấn công lựa chọn thích nghi bản mã ................................................... 20
Trang - 2


2.1.5. Ứng dụng mã hóa theo chữ ký số RSA ....................................................... 21
2.1.5.1. Thuật giải mã hóa .................................................................................. 21
2.1.5.2. Thực nghiệm chương trình mã hóa theo chữ ký số RSA ...................... 21
2.2. TẤN CÔNG CHỮ KÝ MD5 ............................................................................. 22
2.2.1. Khái quát về thuật toán MD5....................................................................... 22
2.2.2. Các ứng dụng quan trọng của MD5 ............................................................. 22
2.2.3. Thuật giải ..................................................................................................... 22
2.2.4. Cấu trúc thuật toán MD5 ............................................................................. 23
2.2.5. Những Lỗ Hổng ........................................................................................... 23
2.2.6. Ứng dụng mã hóa theo chữ ký số MD5 ....................................................... 25
2.2.6.1. Thuật giải mã hóa .................................................................................. 25
2.2.6.2. Thực nghiệm chương trình mã hóa theo chữ ký số MD5 ..................... 26
2.3. TẤN CÔNG CHỮ KÝ DES .............................................................................. 28
2.3.1. Tổng quát ..................................................................................................... 28
2.3.1.1. Hàm Feistel (F) ...................................................................................... 29
2.3.1.2. Quá trình tạo khóa con .......................................................................... 30
2.3.2. Các loại tấn công phổ biến ........................................................................... 31
2.3.2.1. Tấn công brute-force (vét cạn) .............................................................. 31
2.3.2.2. Các kiểu tấn công khác hiệu quả hơn phương pháp brute-force ........... 32
2.3.3. Một vài đặc điểm về cách giải mã ............................................................... 33

2.3.4. Ứng dụng mã hóa theo chữ ký số DES ........................................................ 34
2.3.4.1. Thuật giải mã hóa .................................................................................. 34
2.3.4.2. Thực nghiệm chương trình mã hóa theo chữ ký số DES ...................... 35
TÀI LIỆU THAM KHẢO................................................................................................ 37

Trang - 3


DANH SÁCH CÁC HÌNH
Hình 1.1. 10 số nguyên tố lớn đã được tìm thấy ............................................................ 5
Hình 1.2. Mã hoá và giải mã .......................................................................................... 8
Hình 2.1. Thực nghiệm chương trình theo chữ ký số RSA .......................................... 21
Hình 2.2.1. Thực nghiệm tạo cơ sở dữ liệu chữ ký số MD5 ........................................ 26
Hình 2.2.2. Thực nghiệm chương trình theo chữ ký MD5 ........................................... 27
Hình 2.3.1 Thực nghiệm tạo cơ sở dữ liệu chữ ký số MD5 ......................................... 27
Hình 2.3.2. Thực nghiệm chương trình theo chữ ký MD5 ........................................... 27
Hình 2.4. Cấu trúc thuật toán Feistel dùng trong DES ................................................. 28
Hình 2.5. Hàm F (F-function) dùng trong DES............................................................ 29
Hình 2.6. Quá trình tạo khóa con trong DES ............................................................... 30
Hình 2.7. Hệ thống phá mã DES .................................................................................. 31
Hình 2.8.1. Thực nghiệm chương trình mã hóa theo chữ ký số DES .......................... 35
Hình 2.8.2. Thực nghiệm lỗi chương trình theo chữ ký DES ...................................... 35
Hình 2.9. Thực nghiệm chương trình theo chữ ký DES, RSA và MD5....................... 36

Trang - 4


Chương 1: Một số khái niệm cơ bản
1.1. CÁC KHÁI NIỆM TRONG TOÁN HỌC
1.1.1. Một số khái niệm trong số học

1.1.1.1. Số nguyên tố
a) Khái niệm
Số nguyên tố là số tự nhiên lớn hơn 1 và chỉ có hai lớp là 1 và chính nó.
b) Ví dụ
Các số 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37 là số nguyên tố.
Số 2 là số nguyên tố chẵn duy nhất.
Số nguyên tố có vai trò và ý nghĩa to lớn trong số học và lý thuyết mật mã. Bài
toán kiểm tra tính nguyên tố của một số nguyên dương n và phân tích một số n ra thừa
số nguyên tố là các bài toán rất được quan tâm.
Ví dụ: 10 số nguyên tố sau:
Rank

Prime
32582657

Digits

Who

When

Reference

1

2

-1

9808358 G9


2006

Mersenne 44??

2

230402457 - 1

9152052 G9

2005

Mersenne 43??

3

225964951 - 1

7816230 G8

2005

Mersenne 42??

4

224036583 - 1

7235733 G7


2004

Mersenne 41??

5

220996011 - 1

6320430 G6

2003

Mersenne 40??

6

213466917 - 1

4053946 G5

2001

Mersenne 39??

7

19249.213018586 +1

3918900 SB10


2007

8

27653.29167433 + 1

2759677 SB8

2005

9

28433.27830457 +1

2357207 SB7

2004

10

33661.27031232 +1

2116617 SB11

2007

Hình 1.1. 10 số nguyên tố lớn đã được tìm thấy

1.1.1.2. Ước số và bội số

a) Khái niệm
Cho hai số nguyên a và b, b + 0. Nếu có một số nguyên q sao cho a = b*q, thì ta
Trang - 5


nói rằng a chia hết cho b, kí hiệu b\a. Ta nói b là ước của a, và a là bội của b.
b) Ví dụ
Cho a= 6, b = 2, ta có 6 = 2*3, ký hiệu 2\6. Ở đây 2 là ước của 6 và 6 là bội
của 2.
Cho các số nguyên a, b = 0, tồn tại cặp số nguyên (q, r) (0 < < /b/) duy nhất sao
cho a=b*q+r. Khi đó gọi là thương nguyên, r gọi là số dư của phép chia a cho b. Nếu
I=0 thì ta có phép chia hết.
Ví dụ:
Cho a = 13, b =5, ta có 13 = 5*2 + 3. Ở đây thương là q= 2, số dư là = 3.

1.1.1.3. Ước số chung và bội số chung
a) Khái niệm
Số nguyên d được gọi là ước chung của các số nguyên a,a,...,a, nếu nó là ước
của tất cả các số đó.
Số nguyên m được gọi là bội chung của các số nguyên a,a,...,a,, nếu nó là bội
của tất cả các số đó.
Một ước chung d> 0 của các số nguyên a ,a,,...,a,, trong đó mọi ước chung
của a,a,,...,a, đều là ước của d, thì d được gọi là ước chung lớn nhất (UCLN) của
a,a,...,a,. Ký hiệu d= gcd (a,a,..,a, hay d=UCLN(a,a,...,a,).
Một bội chung m > 0 của các số nguyên a ,a,,...,a, trong đó mọi bội chung của
a,a,...,a, đều là bội của m, thì m được gọi là bội chung nhỏ nhất (BCNN) của a,a,...,a,.
Ký hiệu m = 1cm( a,a,...,a,) hay m = BCNN( a,a, ...,a,).
b) Ví dụ:
Cho a = 12, b = 15, ged(12, 15) = 3, Icm(12, 15) = 60.


1.1.1.4. Số nguyên tố cùng nhau
a) Khái niệm
Nếu gcd( 4 ,a, ...,a,)= 1, thì các số a,a,...,a, gọi là nguyên tố cùng nhau.
Trang - 6


b) Ví dụ:
Hai số 8 và 13 là nguyên tố cùng nhau, vì gcd(8, 13)= 1.

1.1.1.5. Khái niệm Đồng dư
a) Khái niệm
Cho hai số nguyên a, b, c (m > 0). Ta nói rằng a và b “đồng dư” với nhau theo
modulo m, nếu chia a và b cho m, ta nhận được cùng một số dư.
Ký hiệu: a = b (mod m).
b) Ví dụ:
17 = 5 (mod 3) vì chia 17 và 5 cho 3, được cùng số dư là 2.

1.1.2. Một số khái niệm trong đại số
a) Nhóm
Nhóm là một bội (G, *), trong đó G 48, * là phép toán hai ngồi trên 6 thỏa
mãn ba tính chất sau:
+ Phép toán có tính kết hợp: (x*x)*2=x*(y+z) với mọi x, y, z + G. + Có phần tử trung
lập e & G; x*e = e*x = x với mọi x 6 G. +Với mọi x 6 G, có phần tử nghịch đảo xe G:
x*x^ = x^*x = e. Cấp của nhóm G được hiểu là số phần tử của nhóm, ký hiệu là G.
Cấp của nhóm có thể là do nếu G có vô hạn phần tử.
Nhóm Abel là nhóm (G, *), trong đó phép toán hai ngôi * có tính giao hoán. Tính
chất: Nếu a+b = a*c, thì b = c.
Nếu a*c = b*c, thì a = b.
b) Ví dụ
* Tập hợp các số nguyên Z cùng với phép cộng (+) thông thường là nhóm giao

hoán, có phần tử đơn vị là số 0. Gọi là nhóm cộng các số nguyên.
* Tập Q các số hữu tỷ khác 0 (hay tập Ro các số thực khác 0), cùng với phép
nhân (*) thông thường là nhóm giao hoán. Gọi là nhóm nhân các số hữu tỷ (số thực)
khác 0.

Trang - 7


* Tập các vectơ trong không gian với phép toán cộng vectơ là nhóm giao hoán.
1.2. VẤN ĐỀ MÃ HÓA DỮ LIỆU.

1.2.1. Khái niệm Mã hóa
Để bảo đảm An toàn thông tin (ATTT) lưu trữ trong máy tính (giữ gìn thông tin
cố định) hay bảo đảm An toàn thông tin trên đường truyền tin (trên mạng máy tính),
người ta phải “Che Giấu” các thông tin này.
“Che” thông tin (dữ liệu) hay “Mã hóa” thông tin là thay đổi hình dạng thông tin
gốc, và người khác “khó nhận ra.
“Giấu” thông tin (dữ liệu) là cất giấu thông tin trong bản tin khác, và người khác
cũng “khó” nhận ra.
Trong phần này chúng ta bàn về “Mã hóa” thông tin.
a) Hệ mã hóa:
Việc mã hóa phải theo quy tắc nhất định, quy tắc đó gọi là Hệ mã hóa. Hệ mã
hóa được định nghĩa là bộ năm (P, C, K, E, D), trong đó: P là tập hữu hạn các bản rõ
có thể. C Là tập hữu hạn các bản mã có thể. K là tập hữu hạn các khóa có thể. E là tập
hữu hạn các hàm lập mã.
D là tập các hàm giải mã. Với khóa lập mã ke K, có hàm lập mã e, e E, e: P+C,
Với khóa giải mã kd 6 K, có hàm giải mã dự 6 D, d, C P, sao cho d(eg (x)) = x, V x 6
P.
Ở đây x được gọi là bản rõ, e (x) được gọi là bản mã.
b) Mã hóa và Giải mã:


Hình 1.2. Mã hoá và giải mã
Trang - 8


Người gửi G muốn gửi bản tin T cho người nhận N. Để bảo đảm bí mật, G
mã hóa bản tin bằng khóa lập mã ke, nhận được bản mã e (T), sau đó gửi cho N.
Tên tặc có thể trộm bản mã e (T), nhưng cũng “khó” hiểu được bản tin gốc T nếu
không có khóa giải mã kd.
Người N nhận được bản mã, họ dùng khóa giải mã kd, để giải mã e, (T),
sẽ nhận được bản tin gốc T = d(ek (T)).

1.2.2. Phân loại mã hóa
Hiện có 2 loại mã hóa chính: mã hóa khóa đối xứng và mã hóa khóa công khai.
Hệ mã hóa khóa đối xứng có khóa lập mã và khóa giải mã “giống nhau”, theo nghĩa
biết được khóa này thì “dễ tính được khóa kia. Vì vậy phải giữ bí mật cả 2 khóa.
Hệ mã hóa khói công khai có khóa lập mã khác khóa giải mã (ke + kd), biết
được khóa này cũng “khó” tính được khóa kia. Vì vậy cần bí mật khóa giải mã, còn
công khai khóa lập mã.

1.2.2.1. Hệ mã hóa khóa đối xứng
Mã hóa khóa đối xứng là Hệ mã hóa mà biết được khóa lập mã thì có thể “dễ
tính được khóa giải mã và ngược lại. Đặc biệt một số Hệ mã hóa có khóa lập mã và
khóa giải mã trùng nhau (ke = kd), như Hệ mã hóa “dịch chuyển” hay DES. Hệ mã
hóa khóa đối xứng còn gọi là Hệ mã hóa khóa bí mật, hay khóa riêng, vì phải giữ bí
mật cá 2 khóa. Trước khi dùng Hệ mã hóa khóa đối xứng, người gửi và
người nhận phải thỏa thuận thuật toán mã hóa và khóa chung (lập mã hay giải mã),
khóa phải giữ bí mật. Độ an toàn của Hệ mã hóa loại này phụ thuộc vào khóa.
Ví dụ:
+ Hệ mã hóa cổ điển là Mã hóa khóa đối xứng: dễ hiểu, dễ thực thi, nhưng có

độ an toàn không cao. Vì giới hạn tính toán chỉ trong phạm vi bảng chữ cái, sử dụng
trong bản tin cần mã, ví dụ là 2, nếu dùng các chữ cái tiếng Anh. Với hệ mã hóa cổ
điển, nếu biết khóa lập mã hay thuật toán lập mã, có thể dễ” xác định được bản rõ, vì
“dễ tìm được khóa giải mã.
Trang - 9


+ Hệ mã hóa DES (1973) là Mã hóa khóa đối xứng hiện đại, có độ an toàn cao.
a). Đặc điểm của Hệ mã hóa khóa đối xứng.
Ưu điểm:
Hệ mã hóa khóa đối xứng mã hóa và giải mã nhanh hơn Hệ mã hóa khóa công
khai.
Hạn chế:
+ Mã hóa khóa đối xứng chưa thật an toàn với lý do sau: Người nhận mã hóa
và người giải mã phải có “chung” một khóa. Khóa phải được giữ bí mật tuyệt đối, vì
biết khóa này “dễ” xác định được khóa kia và ngược lại.
+ Vấn đề thỏa thuận khóa và quản lý khóa chung là khó khăn và phức tạp.
Người gửi và người nhận phải luôn thống nhất với nhau về khóa. Việc thay đổi khóa
là rất khó và dễ bị lộ. Khóa chung phải được gửi cho nhau trên kênh an toàn.
Mặt khác khi hay người (lập mã, giải mã) cũng biết “chung” một bí mật, thì
càng khó giữ được bí mật!
b). Nơi sử dụng Hệ mã hóa khóa đống xứng.
Hệ mã hóa khóa đối xứng thường được sử dụng trong môi trường mà khóa
chung có thể dễ dàng trao chuyển bí mật, chẳng hạn trong cùng một mạng nội bộ. Hệ
mã hóa khóa đối xứng thường dùng để mã hóa những bản tin lớn, vì tốc độ mã hóa và
giải mã nhanh hơn Hệ mã hóa khóa công khai.

1.2.2.2. Hệ mã hóa khóa công khai
Hệ mã hóa khóa phi đối xứng là Hệ mã hóa có khóa lập mã và khóa giải mã
khác nhau (ke + kd), biết được khóa này cũng “khó” tính được khóa kia.

Hệ mã hóa này còn được gọi là Hệ mã hóa khóa công khai, vì: Khóa lập mã cho công
khai, gọi là khóa công khai (Public key). Khóa giải mã giữ bí mật, còn gọi là khóa
riêng (Private key) hay khóa bí mật.
Một người bất kỳ có thể dùng khóa công khai để mã hóa bản tin, nhưng chỉ
người nào có đúng khóa giải mã thì mới có khả năng đọc được bản rõ. Hệ mã hóa

Trang - 10


khóa công khai hay Hệ mã hóa phi đối xứng do Diffie và Hellman
phát minh vào những năm 1970.
a). Đặc điểm của Hệ mã hóa khóa công khai.
Ưu điểm:
+ Hệ mã hóa khóa công khai có ưu điểm chủ yếu sau: Thuật toán được viết một
lần, công khai cho nhiều lần dùng, cho nhiều người dùng, họ chỉ cần giữ bí mật khóa
riêng của mình.
+ Khi biết các tham số ban đầu của hệ mã hóa, việc tính ra cặp khóa công khai
và bí mật là “dễ”, tức là trong thời gian đa thức. Người gửi có bản rõ P và khóa công
khai, thì “dễ” tạo ra bản mã C. Người nhận có bản mã C và khóa bí mật, thì “dễ” giải
được thành bản rõ P.
+ Người mã hóa dùng khóa công khai, người giải mã giữ khóa bí mật. Khả
năng lộ khóa bí mật khó hơn vì chỉ có một người giữ gìn.
+ Nếu thám mã biết khóa công khai, cố gắng tìm khóa bí mật, thì chúng phải
đương đầu với bài toán “khó”.
+ Nếu thám mã biết khóa công khai và bản mã C, thì việc tìm ra bản rõ P cũng
là bài toán “khó”, số phép thử là vô cùng lớn, không khả thi.
Hạn chế:
Hệ mã hóa khóa công khai: mã hóa và giải mã chậm hơn hệ mã hóa khóa đối
xứng.
b). Nơi sử dụng Hệ mã hóa khóa công khai.

Hệ mã hóa khóa công khai thường được sử dụng chủ yếu trên các mạng công
khai như Internet, khi mà việc trao chuyển khóa bí mật tương đối khó khăn.
Đặc trưng nổi bật của hệ mã hóa công khai là khóa công khai (public key) và
bản mã (ciphertext) đều có thể gửi đi trên một kênh truyền tin không an toàn. Có biết
cả khóa công khai và bản mã, thì thám mã cũng không dễ khám phá được bản rõ.
Nhưng vì có tốc độ mã hóa và giải mã chậm, nên hệ mã hóa khóa công khai chỉ
dùng để mã hóa những bản tin ngắn, vì dụ như mã hóa khóa bí mật gửi đi.
Trang - 11


Hệ mã hóa khóa công khai thường được sử dụng cho cặp người dùng thỏa
thuận khóa bí mật của Hệ mã hóa khóa riêng.
1.3. VẤN ĐỀ CHỮ KÝ SỐ

1.3.1. Khái niệm “chữ ký số”.
1.3.1.1. Giới thiệu “chữ ký số”
Để chứng thực nguồn gốc hay hiệu lực của một tài liệu (ví dụ: đơn xin học,
giấy báo nhập học, ...), lâu nay người ta dùng chữ ký “tay”, ghi vào phía dưới của mỗi
tài liệu. Như vậy người ký phải trực tiếp “ký tay” vào tài liệu.
Ngày nay các tài liệu được số hóa, người ta cũng có nhu cầu chứng thực nguồn
gốc hay hiệu lực của các tài liệu này. Rõ ràng không thể “ký tay vào tài liệu, vì chúng
không được in ấn trên giấy. Tài liệu “số” (hay tài liệu điện tử”) là một xâu các bít (0
hay 1), xâu bít có thể rất dài (nếu in trên giấy có thể hàng nghìn trang). “Chữ ký” để
chứng thực một xâu bít tài liệu cũng không thể là một xâu bít nhỏ đặt phía dưới xâu
bít tài liệu. Một “chữ ký” như vậy chắc chắn sẽ bị kẻ gian sao chép để đặt dưới một tài
liệu khác bất hợp pháp.
Những năm 80 của thế kỷ 20, các nhà khoa học đã phát minh ra “chữ ký số” để
chứng thực một “tài liệu số”. Đó chính là “bản mã” của xâu bít tài liệu.
Người ta tạo ra “chữ ký số” (chữ ký điện tử) trên “tài liệu số” giống như tạo ra
“bản mã” của tài liệu với “khóa lập mã”.

Như vậy “ký số” trên “tài liệu số” là “kỷ” trên từng bít tài liệu. Kẻ gian khó thể
giả mạo “chữ ký số” nếu nó không biết “khóa lập mã”.
Để kiểm tra một “chữ ký số” thuộc về một “tài liệu số”, người ta giải mã “chữ
ký số” bằng “khóa giải mã”, và so sánh với tài liệu gốc.
Ngoài ý nghĩa để chứng thực nguồn gốc hay hiệu lực của các tài liệu số hóa.
Mặt mạnh của “chữ ký số” hơn “chữ ký tay” là ở chỗ người ta có thể “ký” vào tài liệu
từ rất xa trên mạng công khai. Hơn thế nữa, có thể “ký” bằng các thiết bị cầm tay (ví
dụ điện thoại di động) tại khắp mọi nơi (Ubikytous) và di động (Mobile), miễn là kết
Trang - 12


nối được vào mạng. Đỡ tốn bao thời gian, sức lực, chi phí, ...
Ký số” thực hiện trên từng bít tài liệu, nên độ dài của “chữ ký số ” ít nhất cũng
bằng độ dài tài liệu. Do đó thay vì ký trên tài liệu dài, người ta thường dùng “hàm
băm” để tạo “đại diện” cho tài liệu, sau đó mới “Ký số” lên “đại diện” này.

1.3.1.2. Sơ đồ “chữ ký số”.
Sơ đồ chữ ký là bộ năm (P, A, K, S, V), trong đó:
Sơ đồ chữ ký là bộ năm (P, A, K, S, V), trong đó:
P

là tập hữu hạn các văn bản 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 kiểm thử.

Với mỗi khóa k thuộc K, có thuật toán ký Sigk
có thuật toán kiểm tra chữ ký

S: PA,
đúng, sai}, thỏa mãn điều kiện

sau với mọi

Chú ý:
Người ta thường dùng hệ mã hóa khóa công khai để lập “Sơ đồ chữ ký số”. Ở
đây khóa bí mật a dùng làm khóa “ký”, khóa công khai b dùng làm khóa kiểm tra “chữ
ký”.
Ngược lại với việc mã hóa, dùng khóa công khai b để lập mã, dùng khóa bí mật
a để giải mã.
Điều này là hoàn toàn tự nhiên, vì “ký” cần giữ bí mật nên phải dùng khóa bí
mật a để “ký”. Còn “chữ ký” là công khai cho mọi người biết, nên họ dùng khóa công
Trang - 13


khai b để kiểm tra.


1.3.2. Phân loại chữ ký số
Có nhiều loại chữ ký tùy theo cách phân loại, sau đây xin giới thiệu một số
cách.

1.3.2.1. Phân loại chữ ký theo đặc trưng kiểm tra chữ ký
a). Chữ ký khôi phục thông điệp:
Là loại chữ ký, trong đó người gửi chỉ cần gửi “chữ ký”, người nhận có thể khôi
phục lại được thông điệp, đã được “ký” bởi “chữ ký” này. Ví dụ: Chữ ký RSA là chữ
ký khôi phục thông điệp, sẽ trình bày trong mục sau.
b). Chữ ký đi kèm thông điệp:
Là loại chữ ký, trong đó người gửi chỉ cần gửi “chữ ký”, phải gửi kèm cả thông
điệp đã được “ký” bởi “chữ ký” này. Ngược lại, người nhận sẽ không có được thông
điệp gốc. Ví dụ: Chữ ký Elgamal là chữ ký đi kèm thông điệp, sẽ trình bày trong mục
sau.

1.3.2.2. Phân loại chữ ký theo mức an toàn
a). Chữ ký “không thể phủ nhận”:
Nhằm tránh việc nhân bản chữ ký để sử dụng nhiều lần, tốt nhất là người gửi
tham gia trực tiếp vào việc kiểm thử chữ ký. Điều đó được thực hiện bằng một giao
thức kiểm thử, dưới dạng một giao thức mời hỏi và trả lời.
Ví dụ: Chữ ký không phủ định (Chaum- van Antwerpen), trình bày trong mục sau.
b). Chữ ký “một lần”:
Để bảo đảm an toàn, “Khóa ký” chỉ dùng 1 lần (one - time) trên 1 tài liệu. Ví
dụ: Chữ ký một lần Lamport. Chữ ký Fail - Stop (Van Heyst & Pedersen).

1.3.2.3. Phân loại chữ ký theo ứng dụng đặc trưng
Chữ ký “mù” (Blind Signature).
Chữ ký “nhóm” (Group Signature).
Trang - 14



Chữ ký “bội” (Multy Signature).
Chữ ký “mù nhóm” (Blind Group Signature).
Chữ ký “mù bội” (Blind Multy Signature).

Trang - 15


Chương 2: Tấn công chữ ký số
2.1. TẤN CÔNG CHỮ KÝ RSA

2.1.1. Mô tả sơ lược
Thuật toán RSA có hai khóa: khóa công khai (hay khóa công cộng) và khóa bí
mật (hay khóa cá nhân). Mỗi khóa là những số cố định sử dụng trong quá trình mã hóa
và giải mã. Khóa công khai được công bố rộng rãi cho mọi người và được dùng để mã
hóa. Những thông tin được mã hóa bằng khóa công khai chỉ có thể được giải mã bằng
khóa bí mật tương ứng. Nói cách khác, mọi người đều có thể mã hóa nhưng chỉ có
người biết khóa cá nhân (bí mật) mới có thể giải mã được.
Ta có thể mô phỏng trực quan một hệ mật mã khoá công khai như sau: Hùng
muốn gửi cho Lan một thông tin mật mà Hùng muốn duy nhất Lan có thể đọc được.
Để làm được điều này, Lan gửi cho Hùng một chiếc hộp có khóa đã mở sẵn và giữ lại
chìa khóa. Hùng nhận chiếc hộp, cho vào đó một tờ giấy viết thư bình thường và khóa
lại (như loại khoá thông thường chỉ cần sập chốt lại, sau khi sập chốt khóa ngay cả
Hùng cũng không thể mở lại được, không đọc lại hay sửa thông tin trong thư được
nữa). Sau đó Hùng gửi chiếc hộp lại cho Lan. Lan mở hộp với chìa khóa của mình và
đọc thông tin trong thư. Trong ví dụ này, chiếc hộp với khóa mở đóng vai trò khóa
công khai, chiếc chìa khóa chính là khóa bí mật.

2.1.2. Tạo khóa
Giả sử Lan và Hùng cần trao đổi thông tin bí mật thông qua một kênh không an toàn

(ví dụ như Internet). Với thuật toán RSA, Lan đầu tiên cần tạo ra cho mình cặp khóa
gồm khóa công khai và khóa bí mật theo các bước sau:
1. Chọn 2 số nguyên tố lớn p và q với p#q, lựa chọn ngẫu nhiên và độc lập.
2. Tính: n=p*q.
3. Tính: giá trị hàm số Ơle Ø(n)=(p-1)(q-1).
4. Chọn một số tự nhiên e sao cho 1< e < Ø(n), và là số nguyên tố cùng nhau với
Ø(n).
Trang - 16


5. Tính: d sao cho de = 1 (mod (n).
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 x, sao cho

(

)(

)


cũng là số tự nhiên. Khi đó sử dụng giá trị mod (p-1)(q-1).


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

= LCM (p-1,q-1), thay cho

=(p-1)(q-

1).
Khóa công khai bao gồm:


n, môđun, và



e, số mũ công khai (cũng gọi là số mũ mã hóa).

Khóa bí mật bao gồm:


n, môđun, xuất hiện cả trong khóa công khai và khóa bí mật, và



d, số mũ bí mật (cũng gọi là số mũ giải mã).

Một dạng khác của khóa bí mật bao gồm:



p và q, hai số nguyên tố chọn ban đầu,



d mod (p-1) và d mod (q-1) (thường được gọi là dmp1 và dmq1),



(1/q) mod p (thường được gọi là iqmp)

Dạng này cho phép thực hiện giải mã và ký nhanh hơn với việc sử dụng định lý
số dư Trung Quốc (tiếng Anh: Chinese Remainder Theorem - CRT). Ở dạng này, tất
cả thành phần của khóa bí mật phải được giữ bí mật.
Lan gửi khóa công khai cho Hùng, 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.

Trang - 17


2.1.3. Mã hóa và giải mã
2.1.3.1. Mã hóa
Giả sử Hùng muốn gửi đoạn thông tin M cho Lan. Đầu tiên Hùng 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. Quá trình này được mô tả ở phần chuyển đổi văn bản rõ.
Lúc này Hùng có m và biết n cũng như e do Lan gửi. Hùng sẽ tính c là bản mã
hóa của m theo công thức: c =me mod n.

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 Hùng gửi c cho Lan.

2.1.3.2. Giải mã
Lan nhận c từ Hùng và biết khóa bí mật d. Lan có thể tìm được m từ c theo
công thức sau: m =ce mod n.
Biết m, Lan 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ó: cd

(

)d

(mod n).

Do ed ≡ 1 (mod p-1) và ed ≡ 1 (mod q-1) nên:

m (mod p) và

m

(mod q).
Do p và q là hai số nguyên tố cùng nhau, áp dụng ta có:
hay cd

m (mod pq)

m (mod n).

2.1.4. Các phương thức tấn công

Việc tìm ra 2 số nguyên tố đủ lớn p và q thường được thực hiện bằng cách thử
xác suất các số ngẫu nhiên có độ lớn phù hợp (dùng phép kiểm tra nguyên tố cho phép
loại bỏ hầu hết các hợp số).
p và q còn cần được chọn không quá gần nhau để phòng trường hợp phân tích n
bằng phương pháp phân tích Fermat. Ngoài ra, nếu p-1 hoặc q-1 có thừa số nguyên tố
nhỏ thì n cũng có thể dễ dàng bị phân tích và vì thế p và q cũng cần được thử để tránh
khả năng này.
Trang - 18


Bên cạnh đó, cần tránh sử dụng các phương pháp tìm số ngẫu nhiên mà kẻ tấn
công có thể lợi dụng để biết thêm thông tin về việc lựa chọn (cần dùng các bộ tạo số
ngẫu nhiên tốt). Yêu cầu ở đây là các số được lựa chọn cần đồng thời ngẫu nhiên và
không dự đoán được. Đây là các yêu cầu khác nhau: một số có thể được lựa chọn ngẫu
nhiên (không có kiểu mẫu trong kết quả) nhưng nếu có thể dự đoán được dù chỉ một
phần thì an ninh của thuật toán cũng không được đảm bảo. Một ví dụ là bảng các số
ngẫu nhiên do tập đoàn Rand xuất bản vào những năm 1950 có thể rất thực sự ngẫu
nhiên nhưng kẻ tấn công cũng có bảng này. Nếu kẻ tấn công đoán được một nửa chữ
số của p hay q thì chúng có thể dễ dàng tìm ra nửa còn lại (theo nghiên cứu của
Donald Coppersmith vào năm 1997)
Một điểm nữa cần nhấn mạnh là khóa bí mật d phải đủ lớn. Năm 1990, Wiener
chỉ ra rằng nếu giá trị của p nằm trong khoảng q và 2q (khá phổ biến) và d < n1/4/3 thì
có thể tìm ra được d từ n và e.
Mặc dù e đã từng có giá trị là 3 nhưng hiện nay các số mũ nhỏ không còn được
sử dụng do có thể tạo nên những lỗ hổng (đã đề cập ở phần chuyển đổi văn bản rõ).
Giá trị thường dùng hiện nay là 65537 vì được xem là đủ lớn và cũng không quá lớn
ảnh hưởng tới việc thực hiện hàm mũ.
RSA có tốc độ thực hiện chậm hơn đáng kể so với DES và các thuật toán mã
hóa đối xứng khác. Trên thực tế, Hùng sử dụng một thuật toán mã hóa đối xứng nào
đó để mã hóa văn bản cần gửi và chỉ sử dụng RSA để mã hóa khóa để giải mã (thông

thường khóa ngắn hơn nhiều so với văn bản).
Phương thức này cũng tạo ra những vấn đề an ninh mới. Một ví dụ là cần phải
tạo ra khóa đối xứng thật sự ngẫu nhiên. Nếu không, kẻ tấn công (thường ký hiệu là
Hắc) sẽ bỏ qua RSA và tập trung vào việc đoán khóa đối xứng.

2.1.4.1. Tấn công dựa trên thời gian
Vào năm 1995, Paul Kocher mô tả một dạng tấn công mới lên RSA: nếu kẻ tấn
công nắm đủ thông tin về phần cứng thực hiện mã hóa và xác định được thời gian giải
mã đối với một số bản mã lựa chọn thì có thể nhanh chóng tìm ra khóa d. Dạng tấn
công này có thể áp dụng đối với hệ thống chữ ký điện tử sử dụng RSA. Năm 2003,
Trang - 19


Dan Boneh và David Brumley chứng minh một dạng tấn công thực tế hơn: phân tích
thừa số RSA dùng mạng máy tính (Máy chủ web dùng SSL). Tấn công đã khai thác
thông tin rò rỉ của việc tối ưu hóa định lý số dư Trung quốc mà nhiều ứng dụng đã
thực hiện.
Để chống lại tấn công dựa trên thời gian là đảm bảo quá trình giải mã luôn diễn
ra trong thời gian không đổi bất kể văn bản mã. Tuy nhiên, cách này có thể làm giảm
hiệu suất tính toán. Thay vào đó, hầu hết các ứng dụng RSA sử dụng một kỹ thuật gọi
là che mắt. Kỹ thuật này dựa trên tính nhân của RSA: thay vì tính cd mod n, An đầu
tiên chọn một số ngẫu nhiên r và tính (rec)d mod n. Kết quả của phép tính này là rm
mod n và tác động của r sẽ được loại bỏ bằng cách nhân kết quả với nghịch đảo của r.
Đối với mỗi văn bản mã, người ta chọn một giá trị của r. Vì vậy, thời gian giải mã sẽ
không còn phụ thuộc vào giá trị của văn bản mã.

2.1.4.2. Tấn công lựa chọn thích nghi bản mã
Năm 1981, Daniel Bleichenbacher mô tả dạng tấn công lựa chọn thích nghi bản
mã (adaptive chosen ciphertext attack) đầu tiên có thể thực hiện trên thực tế đối với
một văn bản mã hóa bằng RSA. Văn bản này được mã hóa dựa trên tiêu chuẩn PKCS

#1 v1, một tiêu chuẩn chuyển đổi bản rõ có khả năng kiểm tra tính hợp lệ của văn bản
sau khi giải mã. Do những khiếm khuyết của PKCS #1, Bleichenbacher có thể thực
hiện một tấn công lên bản RSA dùng cho giao thức SSL (tìm được khóa phiên). Do
phát hiện này, các mô hình chuyển đổi an toàn hơn như chuyển đổi mã hóa bất đối
xứng tối ưu (Optimal Asymmetric Encryption Padding) được khuyến cáo sử dụng.
Đồng thời phòng nghiên cứu của RSA cũng đưa ra phiên bản mới của PKCS #1 có
khả năng chống lại dạng tấn công nói trên.

Trang - 20


2.1.5. Ứng dụng mã hóa theo chữ ký số RSA
2.1.5.1. Thuật giải mã hóa

Ở đây chúng tôi sử dụng hai mã hóa theo khóa chính PRIVATE_KEY_FILE và
khóa công khai PUBLIC_KEY_FILE).

2.1.5.2. Thực nghiệm chương trình mã hóa theo chữ ký số RSA

Hình 2.1. Thực nghiệm chương trình theo chữ ký số RSA
Với việc xử lý mã hóa bằng đầu vào text “Nguyen Van Nam” quá trình mã hóa sẽ
hiện thông số
“ChTjPIbKJBCQZuNXs9KM3EUqMm0zjzjK5FrfQbON/m6MCQUmAcobd6E+sJc
Nrm1cRMzQ3As/A4h8hcDSS4UcWsw35WfMybFUNbZMQaefjlak1/uArj1sfSKDhI
LJ/ZJWMjPejyYoZ7ibefOJ+xmbcmzqAfAPEDBw/u/eSotTrbg=” và giải mã ngược
lại như hình trên. Kết quả luôn được chính xác từ nguồn dữ liệu bạn đầu và có đến lúc
được giải mã.

Trang - 21



2.2. TẤN CÔNG CHỮ KÝ MD5

2.2.1. Khái quát về thuật toán MD5
MD5 (Message-Digest algorithm 5) là một hàm băm để mã hóa với giá trị băm
là 128bit. Từng được xem là một chuẩn trên Internet, MD5 đã được sữ dụng rông rải
trong các chương trình an ninh mạng, và cũng thường được dùng để kiểm tra tính
nguyên vẹn của tập tin.
MD5 được thiết kế bởi Ronald Rivest vào năm 1991 để thay thế cho hàm băm
trước đó, MD4 (cũng do ông thiết kế, trước đó nữa là MD2).

2.2.2. Các ứng dụng quan trọng của MD5
MD5 có 2 ứng dụng quan trọng:
MD5 được sử dụng rộng rải trong thế giới phần mềm để đảm bảo rằng tập tin
tải về không bị hỏng. Người sử dụng có thể so sánh giữa thông số kiểm tra phần mềm
bằng MD5 được công bố với thông số kiểm tra phần mềm tải về bằng MD5. Hệ điều
hành Unix sử dụng MD5 để kiểm tra các gói mà nó phân phối, trong khi hệ điều hành
Windows sử dụng phần mềm của hãng thứ ba.
MD5 được dùng để mã hóa mật khẩu. Mục đích của việc mã hóa này là biến
đổi một chuổi mật khẩu thành một đoạn mã khác, sao cho từ đoạn mã đó không thể
nào lần trở lại mật khẩu. Có nghĩa là việc giải mã là không thể hoặc phải mất một
khoãng thời gian vô tận (đủ để làm nản lòng các hacker).

2.2.3. Thuật giải
MD5 biến đổi một thông điệp có chiều dài bất kì thành một khối có kích thước
cố định 128 bits. Thông điệp đưa vào sẻ được cắt thành các khối 512 bits. Thông điệp
được đưa vào bộ đệm để chiều dài của nó sẻ chia hết cho 512. Bộ đệm hoạt động như
sau:
- Trước tiên nó sẻ chèn bit 1 vào cuối thông điệp.
- Tiếp đó là hàng loạt bit Zero cho tới khi chiều dài của nó nhỏ hơn bội số của

512 một khoảng 64 bit .
Trang - 22


- Phần còn lại sẻ được lấp đầy bởi một số nguyên 64 bit biểu diển chiều dài
ban đầu của thông điệp.

2.2.4. Cấu trúc thuật toán MD5
Thuật toán chính của MD5 hoạt động trên một bộ 128 bit. Chia nhỏ nó ra thành
4 từ 32 bit, kí hiệu là A,B,C và D. Các giá trị này là các hằng số cố định. Sau đó thuật
toán chính sẻ luân phiên hoạt động trên các khối 512 bit. Mỗi khối sẻ phối hợp với
một bộ. Quá trình xữ lý một khối thông điệp bao gồm 4 bước tương tự nhau, gọi là
vòng (“round”). Mỗi vòng lại gồm 16 quá trình tương tự nhau dựa trên hàm một chiều
F, phép cộng module và phép xoay trái…
Hình bên dưới mô tả một quá trình trong một vòng. Có 4 hàm một chiều F có thể sử
dụng. Mỗi vòng sử dụng một hàm khác nhau.
Hàm băm MD5 (còn được gọi là hàm tóm tắt thông điệp - message degests) sẽ
trả về một chuổi số thập lục phân gồm 32 số liên tiếp. Dưới đây là các ví dụ mô tả các
kết quả thu được sau khi băm.
MD5("The quick brown fox jumps over the lazy dog") =
9e107d9d372bb6826bd81d3542a419d6
Thậm chí chỉ cần một thay đổi nhỏ cũng làm thay đổi hoàn toàn kết quả trả về:
MD5("The quick brown fox jumps over the lazy cog") =
1055d3e698d289f2af8663725127bd4b
Ngay cả một chuổi rổng cũng cho ra một kết quả phức tạp:
MD5("") = d41d8cd98f00b204e9800998ecf8427e

2.2.5. Những Lỗ Hổng
Bất cứ thuật toán mã hóa nào rồi cũng bị giải mã. Với MD5, ngay từ năm 1996,
người ta đã tìm thấy lỗ hổng của nó. Mặc dù lúc đó còn chưa rõ ràng lắm nhưng các

chuyên gia mã hóa đã nghĩ đến việc phải đưa ra một thuật giải khác, như là SHA-1…
Và rồi gần đây, giới mã hoá đã xôn xao với thông tin các thuật toán bên trong
nhiều ứng dụng bảo mật thông dụng, như chữ ký điện tử, cũng... có lỗ hổng (trong đó
Trang - 23


có MD5).
Mọi chuyện bắt đầu từ năm, khi nhà khoa học máy tính người Pháp Antoine
Joux phát hiện ra một lỗ hổng trong thuật toán phổ biến MD5, thường dùng trong
công nghệ chữ ký điện tử. Ngay sau đó, bốn nhà nghiên cứu người Trung Quốc lại
phát hành công trình nghiên cứu chỉ ra cách xuyên phá thuật toán thứ hai có tên SHA0.
Tuy chỉ mới ở giai đoạn nghiên cứu sơ bộ song những phát hiện này có thể tạo
điều kiện để kẻ xấu cài những chương trình cửa sau (backdoor) bí mật vào trong mã
máy tính, hoặc giả mạo chữ ký điện tử. Trừ phi một thuật toán mới, bảo mật hơn được
xây dựng và đưa vào sử dụng!
Một phát hiện thứ ba, được đón đợi và đánh giá rất cao được công bố trong hội
thảo Crypto. Hai nhà nghiên cứu Eli Biham và Rafi Chen của Viện Công nghệ Israel
đã diễn thuyết về cách nhận dạng các hình thức tấn công vào chức năng bảo mật của
thuật toán SHA-0, một thuật toán có sơ hở.
Những lỗ hổng bảo mật được cho là "nghiêm trọng" bên trong thuật toán SHA0 và SHA-1, tuỳ thuộc vào mức độ chi tiết của phần trình bày, có thể làm chấn động
cả ngành bảo mật. Từ trước tới nay, SHA-1 vẫn được coi là chuẩn mực "vàng" về
thuật toán. Nó được tích hợp bên trong rất nhiều chương trình thông dụng như PGP và
SSL, được chứng thực bởi Viện Chuẩn Công nghệ Quốc gia và là thuật toán chữ ký
điện tử duy nhất được Cơ quan Chuẩn Chữ ký Số của chính phủ Mỹ phê chuẩn.
Cả ba thuật toán MD5, SHA-0 và SHA-1 đều được giới khoa học máy tính coi
là "đa chức năng". Chúng có thể nhận mọi dạng dữ liệu đầu vào, từ tin nhắn email cho
đến hạt nhân (kernel) của hệ điều hành, cũng như tạo ra một dấu vân tay số duy nhất.
Chỉ thay đổi một ký tự bất kỳ bên trong file đầu vào cũng tạo ra những dấu vân tay
hoàn toàn khác nhau. Các ứng dụng bảo mật đều dựa vào tính năng "dấu vân tay duy
nhất" này làm nền.

Tuy nhiên, nếu kẻ tấn công có thể tạo ra một dấu vân tay "Dolly" với một dòng
dữ liệu đầu vào khác, dấu vân tay "sinh sản vô tính" này sẽ khiến phần mềm bị gài
backdoor nhận dạng nhầm. Kết quả là chúng có thể tạo ra chữ ký giả để vét sạch tài
khoản ngân hàng của người sử dụng không may. Tất nhiên, từ rất lâu, giới nghiên cứu
Trang - 24


đã hiểu rằng không có thuật toán mã hoá thực tiễn nào là tuyệt đối an toàn và bảo mật.
Tuy vậy, họ vẫn nỗ lực thiết kế ra những thuật toán mà thời gian cần để tạo ra một dấu
vân tay "Dolly" là vô tận, với hy vọng kẻ tấn công sẽ nản lòng. Thế nhưng nếu những
sơ hở tương tự như của SHA0 cũng được tìm thấy trong SHA-1, điều này đồng nghĩa
với việc tốc độ giả mạo một dấu vân tay sẽ được đẩy nhanh lên... 500 triệu lần, hoàn
toàn trong tầm tay của một mạng máy tính tốc độ cao.
Tuy mức độ tác hại ít trầm trọng hơn song sơ hở bảo mật trong thuật toán MD5
có lẽ lại gây hậu quả ngay tức thì. Sản phẩm máy chủ Apache Web nguồn mở đang sử
dụng MD5 để kiểm duyệt những website có mã nguồn chưa bị chỉnh sửa, từ đó sẽ an
toàn khi chạy trong máy. Tương tự, sẽ là cơ sở dữ liệu Solaris của Sun Microsystems,
với khả năng mà theo hãng tự nhận là "xác minh một file đích thực chứ không phải
phiên bản bị điều chỉnh để hạ gục hệ thông bảo mật''.
Lỗ hổng mới phát hiện trong MD5 sẽ cho phép kẻ tấn công tạo ra file giả mạo
chỉ trong vài giờ với một máy tính đạt chuẩn. "Giờ đây, người ta đã chứng minh được
các thuật toán này có lỗ hổng. Trước khi kẻ tấn công lợi dụng khai thác được, đã đến
lúc phải thôi dần việc sử dụng MD5.'' - nhà phân tích Hughes của Viện Chuẩn Công
nghệ Quốc gia nhận định.

2.2.6. Ứng dụng mã hóa theo chữ ký số MD5
2.2.6.1. Thuật giải mã hóa
Chúng ta có một hàm băm trong lớp java.security.MessageDigest . Ý tưởng là
để khởi tạo MessageDigest đầu tiên với loại thuật toán mà tôi muốn sử dụng làm đối
số cho Singleton: MessageDigest.getInstance(String Algorithm)

Và sau đó tiếp tục cập nhật thông báo bằng cách sử dụng hàm update () file:
public void update(byte [] input)
Các chức năng trên có thể được gọi nhiều lần khi nói rằng bạn đang đọc một
tập tin dài. Cuối cùng, chúng ta cần sử dụng hàm digest để tạo mã băm:
public byte[] digest()

Trang - 25


×