SlideShare une entreprise Scribd logo
1  sur  14
1.3.4.3. Hàm băm và chữ ký số.
1. Giới thiệu hàm băm
Việc sử dụng các hệ mật mã và các sơ đồ chữ ký số, thường là mã hóa và ký
số trên từng bit của thông tin, sẽ tỷ lệ với thời gian để mã hóa và dung lượng của
thông tin. Thêm vào đó có thể xảy ra trường hợp: Với nhiều bức thông điệp đầu
vào khác nhau, sử dụng hệ mật mã, sơ đồ ký số giống nhau (có thể khác nhau) thì
cho ra kết quả bản mã, bản ký số giống nhau (ánh xạ N-1: nhiều – một), như Hình
1-6. Điều này sẽ dẫn đến một số rắc rối về sau cho việc xác thực thông tin.
Với các sơ đồ ký số, chỉ cho phép ký các bức thông điệp (thông tin) có kích
thước nhỏ và sau khi ký, bản ký số có kích thước gấp đôi bản thông điệp gốc – ví
dụ với sơ đồ chữ ký chuẩn DSS chỉ ký trên các bức thông điệp có kích thước 160
bit, bản ký số sẽ có kích thước 320 bit. Trong khi đó trên thực tế, ta cần phải ký
các thông điệp có kích thước lớn hơn nhiều, chẳng hạn vài chục MegaByte. Hơn
nữa, dữ liệu truyền qua mạng không chỉ là bản thông điệp gốc, mà còn bao gồm cả
bản ký số (có dung lượng gấp đôi dung lượng bản thông điệp gốc), để đáp ứng
việc xác thực sau khi thông tin đến người nhận.
Thông điệp x

Thông điệp y

Hệ mật mã hay
Sơ đồ ký số

Bản mã
hay Bản
ký số

Thông điệp z
Nguồn

Đích
Hình 1.6: Nhiều thông điệp nguồn cho cùng một kết quả sau mã hóa/ ký số
Một cách đơn giản để giải bài toán (với thông điệp có kích thước vài chục
MB) này là chia thông điệp thành nhiều đoạn 160 bit, sau đó ký lên các đoạn đó
độc lập nhau. Nhưng biện pháp này có một số vấn đề trong việc tạo ra các chữ ký
số:
• Thứ nhất: với một thông điệp có kích thước a, thì sau khi ký kích thước của
chữ ký sẽ là 2a (trong trường hợp sử dụng DSS).
• Thứ hai: với các chữ ký “an toàn” thì tốc độ chậm vì chúng dùng nhiều phép
tính số học phức tạp như số mũ modulo.
• Thứ ba: vấn đề nghiêm trọng hơn đó là kết quả sau khi ký, nội dung của thông
điệp có thể bị xáo trộn các đoạn với nhau, hoặc một số đoạn trong chúng có thể bị mất
mát, trong khi người nhận cần phải xác minh lại thông điệp. Ta cần phải bảo vệ tính toàn
vẹn của thông điệp.

Giải pháp cho các vấn đề vướng mắc đến chữ ký số là dùng hàm băm để trợ
giúp cho việc ký số. Các thuật toán băm với đầu vào là các bức thông điệp có dung
lượng, kích thước tùy ý (vài KB đến vài chục MB thậm chí hơn nữa) – các bức
thông điệp có thể là dạng văn bản, hình ảnh, âm thanh, file ứng dụng v.v… - và
với các thuật toán băm: MD2, MD4, MD5, SHA cho các bản băm đầu ra có kích
thước cố định: 128 bit với dòng MD, 160 bit với SHA.
Như vậy, bức thông điệp kích thước tùy ý sau khi băm sẽ được thu gọn thành
những bản băm – được gọi là các văn bản đại diện – có kích thước cố định (128
bit hoặc 160 bit). Với mỗi thông điệp đầu vào chỉ có thể tính ra được một văn bản
đại diện – giá trị băm tương ứng – duy nhất. Giá trị băm được coi là đặc thù của
thông điệp, giống như dấu vân tay của mỗi người. Hai thông điệp khác nhau chắc
chắn có hai văn bản đại diện khác nhau. Khi đã có văn bản đại diện duy nhất cho
bức thông điệp, áp dụng các sơ đồ chữ ký số ký trên văn bản đại diện đó.
Cơ chế gửi thông tin sử dụng hàm băm trợ giúp cho chữ ký số được mô tả
theo thứ tự các Hình 1.7(1.7a, 1.7b, 1.7c).
Độ dài tuỳ ý
Thông điệp(bản rõ)
x
(văn bản, âm thanh,
hình ảnh,…)

Băm thông điệp
(sử dụng thuật toán MD5
hoặc SHA)

h(x)

Độ dài cố định 128
với MD5 và 160 với
SHA
Bản băm
(văn bản đại diện)
z=h(x)

Hình 1.7a: Băm thông điệp.
Ký số

Bản băm
(văn bản đại diện)
z

(sử dụng các sơ đồ ký số
RSA, DSS)

SigK(z)

Bản ký số
y=SigK(z)

Khoá bí mật
(của người dùng)

Hình 1.7b: Ký trên bản băm.

Người gửi (A)

Thông điệp, Bản ký số
(x, y)

Người nhận (B)

Hình 1.7c: Truyền dữ liệu thông tin cần gửi.
Giả sử A muốn gửi cho B thông điệp x. A thực hiện các bước sau:
1. A băm thông điệp x (Hình 1-7a), thu được bản đại diện z = h(x) – có kích
thước cố định 128 bit hoặc 160 bit.
2. A ký số trên bản đại diện z (Hình 1-7b), bằng khóa bí mật của mình, thu được
bản ký số y = sig K1 (z).
3. A gửi (x, y) cho B (Hình 1.7c).

Khi B nhận được (x, y). B thực hiện các bước sau:
4. B kiểm tra chữ ký số để xác minh xem thông điệp mà mình nhận được có phải
được gửi từ A hay không bằng cách giải mã chữ ký số y, bằng khóa công khai
của A, được z. (Hình 1.8a)
5. B dùng một thuật toán băm – tương ứng với thuật toán băm mà A dùng – để
băm thông điệp x đi kèm, nhận được h(x). (Hình 1.8b)
6. B so sánh 2 giá trị băm z và h(x), nếu giống nhau thì chắc chắn rằng thông điệp
x – mà A muốn gửi cho B – còn nguyên vẹn, bên cạnh đó cũng xác thực được
người gửi thông tin là ai. (Hình 1.8c)

Bản ký số
y

Xác minh chữ ký
VerK(y,z)

True

y = SigK(z)

False

y ≠ SigK(z)

Khoá công khai
của người A

Hình 1.8a: Xác minh chữ ký

Băm thông điệp
Thông điệp(bản rõ)
x

(sử dụng thuật toán
MD5 hoặc SHA)

h(x)

Bản băm
(văn bản đại diện)
h(x)

Hình 1.8b: Tiến hành băm thông điệp x đi kèm

Hình 1.8c: Kiểm tra tính toàn vẹn của thông điệp
Hàm băm đã trợ giúp cho các sơ đồ ký số nhằm giảm dung lượng của dữ liệu
cần thiết để truyền qua mạng (lúc này chỉ còn bao gồm dung lượng của bức thông
điệp gốc và 256 bit (sử dụng MD) hay 320 bit (sử dụng SHA) của bức ký số được
ký trên bản đại diện của thông điệp gốc), tương đương với việc giảm thời gian
truyền tin qua mạng.
Hàm băm thường kết hợp với chữ ký số để tạo ra một loại chữ ký điện tử vừa
an toàn hơn (không thể cắt/dán) vừa có thể dùng để kiểm tra tính toàn vẹn của
thông điệp.
Hàm băm được ứng dụng rất mạnh trong vấn đề an toàn thông tin trên đường
truyền. Các ứng dụng có sử dụng hàm băm không chỉ đảm bảo về mặt an toàn
thông tin, mà còn tạo được lòng tin của người dùng vì họ có thể dễ dàng phát hiện
được thông tin của mình có còn toàn vẹn hay không, họ biết rằng thông tin của
mình chắc chắn được bí mật với phía các nhà cung cấp.
2. Định nghĩa 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 – 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.
3. Đặc trưng
Hàm băm h là hàm băm một chiều (one-way hash) với các đặc tính sau:
•

Với thông điệp đầu vào x thu được bản băm z = h(x) là duy nhất.

•

Nếu dữ liệu trong thông điệp x thay đổi hay bị xóa để thành thông điệp x’ thì
h(x’) ≠ h(x). Cho dù chỉ là một sự thay đổi nhỏ hay chỉ là xóa đi 1 bit dữ liệu
của thông điệp thì giá trị băm cũng vẫn thay đổi. Điều này có nghĩa là: hai
thông điệp hoàn toàn khác nhau thì giá trị hàm băm cũng khác nhau.

Nội dung của thông điệp gốc không thể bị suy ra từ giá trị hàm băm. Nghĩa
là: với thông điệp x thì dễ dàng tính được z = h(x), nhưng lại không thể (thực chất
là khó) suy ngược lại được x nếu chỉ biết giá trị hàm băm h
4. Tính chất
Việc đưa hàm băm h vào dùng trong sơ đồ chữ ký số không làm giảm sự an
toàn của sơ đồ chữ ký số vì nó là bản tóm lược thông báo – bản đại diện cho thông
điệp – được ký chứ không phải là thông điệp gốc. Điều cần thiết đối với h là cần
thỏa mãn một số tính chất sau để tránh bị giả mạo:
Tính chất 1: Hàm băm h là không va chạm yếu
Xét một kiểu tấn công như sau:
Đáng lẽ: thông tin phải được truyền đúng từ A đến B (Hình 1.9a)

Hình 1.9a: Cách đi đúng của thông tin
Nhưng: trên đường truyền, thông tin bị lấy trộm và bị thay đổi (Hình 1.9b)

Hình 1.9b: Thông tin bị lấy trộm và bị thay đổi trên đường truyền
Người A gửi cho B (x, y) với y = sigK(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 đó, hắn đư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.
Do đó, để tránh kiểu tấn công như Hình 1.9b, hàm h phải thỏa mãn tính
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).
Tính chất 2: Hàm băm h là không va chạm mạnh:
Xét một kiểu tấn công như sau: Đầ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, hắn đư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:
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’).
Tính chất 3: Hàm băm h là hàm một chiều:
Xét một kiểu tấn công như sau: Việc giả mạo các chữ ký trên bản tóm lược z
thường xảy ta với các sơ đồ chữ ký số. Giả sử tên giả mạo tính chữ ký trên bản
tóm lược z, sau đó hắn tìm một bản thông điệp x’ được tính ngược từ bản đại diện
z, z = h(x’). Tên trộm thay thế bản thông điệp x hợp lệ bằng bản thông điệp x’ giả
mạo, nhưng lại có z = h(x’). Và hắn ký số trên bản đại diện cho x’ bằng đúng chữ
ký hợp lệ. Nếu làm được như vậy thì (x’, y) là bức điện giả mạo nhưng hợp lệ.
Để tránh được kiểu tấn công này, h cần thỏa mãn tính chất 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 thì không thể
thực hiện về mặt tính toán để tìm ra thông điệp ban đầu x sao cho h(x) = z .
5. Các thuật toán băm
Các hàm băm dòng MD: MD2, MD4, MD5 được Rivest đưa ra thu được kết
quả đầu ra với độ dài là 128 bit. Hàm băm MD4 đưa ra vào năm 1990. Một năm
sau phiên bản mạnh MD5 cũng được đưa ra. Chuẩn hàm băm an toàn: SHA, phức
tạp hơn nhiều cũng dựa trên các phương pháp tương tự, được công bố trong Hồ sơ
Liên bang năm 1992 và được chấp nhận làm tiêu chuẩn vào năm 1993 do Viện
Tiêu Chuẩn và Công Nghệ Quốc Gia (NIST), kết quả đầu ra có độ dài 160 bit.
Như đã nêu trong phần đầu, thông điệp đầu vào cho các hàm băm có thể là:
dạng văn bản, dạng hình ảnh, dạng .exe ….
a. Khái niệm “thông điệp đệm”
“Thông điệp đệm” – messege padding - là một xâu bit có độ dài chia hết cho
512.
“Thông điệp đệm” được lưu trong mảng
M = M[0] M[1] … M[N-1].
Trong đó M[i] là xâu bit có độ dài 32 bit, gọi là word; N mod 16 = 0.
M được xây dựng từ thông điệp a bằng thuật toán:
Bảng 1.7 : Xây dựng thông điệp đệm M từ a
1. d = 447 – (|a| mod 512); (+ 512, trường hợp |a| mod 512 > 447).
2. Giả sử l là kí hiệu biểu diễn nhị phân của |a| mod 264, tl: |l| = 64.
3. M = a || 1 || 0d || l

- Độ dài của xâu a || 1 || 0d

là

|a| + 1 + d = 448 mod 512 .

- Độ dài của “Thông điệp đệm” M là 448 mod 512 + 64 = 512 mod 512.
Ví dụ : Có xâu đầu vào a = “ABC”, ta có kết quả xây dựng M như sau:
a = “ABC” = "01000001 01000010 01000011"

- Độ dài tính theo bit của xâu a:

|a| = 24 bit

=> d = 447 – (|a| mod 512) = 423.
|a| + 1 + d = 24 + 1 + 423 = 448 mod 512.

- Biểu diễn nhị phân của độ dài xâu a là l:
  00
 
l = |a| mod 264 = 24 mod 264 = 24 = 16 + 8 = ( 00..... 11000 )2
59 so

  00
 
=> Độ dài của l là |l| = | 00..... 11000| = 59 + 5 = 64.
59 so

M = a || 1 || 0d || l
.....00   00
 

 
=> M = 01000001 01000010 01000011 || 1 || 00423 so || 00..... 11000
59 so

M = M[0] M[1] … M[N-1], N ≡ 0 mod 16
M[0] = 01000001 01000010 01000011 10000000
  00
 
M[1] = M[2] = ….. = M[13] = M[14] = 00.....
32 so

M[15] = 00000000 00000000 00000000 00011000
Trong việc xây dựng M, ta gắn số 1 đơn lẻ vào sau a, sau đó thêm tiếp các số
0 vào đủ để độ dài của M đồng dư với 448 modulo 512. Cuối cùng nối thêm 64 bit
(chính là |l|) chứa biểu diễn nhị phân về độ dài ban đầu của x (được rút gọn theo
modulo 264 nếu cần).
Xâu kết quả M có độ dài chia hết cho 512. Vì thế khi chặt M thành các word
32 bit, số word nhận được là N sẽ chia hết cho 16.
Mục đích việc tạo ra mảng M – “thông điệp đệm” – là để các hàm băm xử lý
trên từng khối (block) 512 bit, tức là 16 word, cùng một lúc.
b. Hàm băm MD5
Mặc dù MD4 vẫn chưa bị phá, song các phiên bản yếu cho phép bỏ qua hoặc
vòng thứ nhất hay thứ ba đều có thể bị phá không khó khăn gì. Nghĩa là dễ dàng
tìm thấy các va chạm đối với các phiên bản chỉ có hai vòng. Phiên bản mạnh của
dòng MD là MD5 được công bố năm 1991. MD5 dùng bốn vòng thay cho ba và
chậm hơn 30% so với MD4 (khoảng 0,9 MB/giây trên cùng một máy).
Input

: Thông điệp có độ dài tùy ý.

Ouput : Bản băm, đại diện cho thông điệp gốc, độ dài cố định 128 bit.
Mô tả thuật toán:
Giả sử đầu vào là một xâu a có độ dài b bit (b có thể bằng 0)
Bước 1: Khởi tạo các thanh ghi
Có 4 thanh ghi được sử dụng để tính toán nhằm đưa ra các đoạn mã: A, B, C,
D. Bản tóm lược của thông điệp được xây dựng như sự kết nối của các thanh ghi.
Mỗi thanh ghi có độ dài 32 bit. Các thanh ghi này được khởi tạo giá trị hecxa.
word
word
word
word

A := 67 45 23 01
B := EF CD AB 89
C := 98 BA DC FE
D := 10 32 54 76

Bước 2:
Xử lý thông điệp a trong 16 khối word, có nghĩa là xử lý cùng một lúc 16
word = 512 bit (chia mảng M thành các khối 512 bit, đưa từng khối 512 bit đó vào
mảng T[j]). Mỗi lần xử lý một khối 512 bit. Lặp lại N/16 lần.
Gán giá trị cho bốn biến AA, BB, CC, DD lần lượt bằng giá trị của 4 thanh
ghi A, B, C, D.
Bước 3:Thực hiện bốn vòng băm với các khối cần xử lý
Một số phép toán logic được sử dụng trong bốn vòng này.


X ∧ Y là phép toán AND theo bit giữa X và Y



X ∨ Y là phép toán OR theo bit giữa X và Y



X ⊕ Y là phép toán XOR theo bit giữa X và Y



¬ X chỉ phép bù của X



X + Y là phép cộng theo modulo 232



X <<< s là phép dịch vòng trái X đi s vị trí (0 ≤ s ≤ 31)
Bội số của 512 bít
1…512 bit

K bít
Message
512 bit

Y1

512
ABCD

128

HMD5

512 bit
…

512
128

K mod 264

100 … 000

512 bit

Y0

Chiều dài của message

HMD5

Yp

512 bit
…

512
128

HMD5

YL-1
512

128

HMD5
Digest 128 bit

Hình 1.10 : Quá trình tạo bản băm của MD5
Các vòng 1, 2, 3 và 4 dùng tương ứng ba hàm F, G, H và I. Mỗi hàm này là
một hàm boolean tính theo bit. Chúng được xác định như sau:
F(X, Y, Z) = (X ∧ Y) ∨ (( ¬ X) ∧ Z)
G(X, Y, Z) = (X ∧ Z) ∨ (Y ∧ ( ¬ Z))
H(X, Y, Z) = X ⊕ Y ⊕ Z
I(X, Y, Z) = Y ⊕ (X ∨ ( ¬ Z))

Bảng 1.8: Thuật toán MD5
1.

A := 67 45 23 01
B := ef cd ab 89
C := 98 ba dc fe
D := 10 32 54 76
for i := 0 to n/16 - 1 do {
for j := 0 to 15 do T[j] = M[16i + j];
AA := A; Mỗi lần xử lý 16 từ, mỗi từ 32 bit, tl: 512 bit.
BB := B;
CC := C;
DD := D;
round_1();
round_2();
round_3();
round_4();
A = A + AA
B = B + BB
C = C + CC
D = D + DD

2.
3.
4.

5.
6.
7.
8.
9.

}
Bốn vòng trong MD5 là hoàn toàn khác nhau. Mỗi vòng (5, 6, 7, 8) gồm một
trong 16 word trong T.
T = getFromM(i*16, 16)
AA = A
BB = B
CC = C
DD = D
round_1()
round_2()
round_3()
round_4()
A = A + AA
B = B + BB
C = C + CC
D = D + DD
i=i+1

a
M = getBufferMsg(a)
A = 67 45 23
B = ef cd ab
C = 98 ba dc
D = 10 32 54
n = length(M)

01
89
fe
76

i=0

DCBA

F

i > n div 16
-1

T

Hình 1.11: Lược đồ thuật toán MD5
MD5 sử dụng thêm một mảng S[1 … 64] được xây dựng từ hàm sin. Với
S[i], giá trị của phần tử thứ i trong mảng S, tương đương với phần nguyên của
4294967296 × abs(sin(i)), với i tính theo radian.


Vòng 1 sử dụng giá trị trong mảng S[1 … 16]



Vòng 2 sử dụng giá trị trong mảng S[17 … 32]



Vòng 3 sử dụng giá trị trong mảng S[33 … 48]



Vòng 4 sử dụng giá trị trong mảng S[49 … 64]

Ta có mảng S[1 … 64] như sau (tất cả đều để ở hệ cơ số 16):
1. D76AA478

17. F61E2562

33. FFFA3942

49. F4292244

2. E8C7B756

18. D040B340

34. 8771F681

50. 432AFF97

3. 242070DB

19. 265E5A51

35. 6D9D6122

51. AB9423A7

4. C1BDCEEE

20. E9B6C7AA

36. FDE5390C

52. FC93A039

5. F57C0FAF

21. D62F105D

37. A4BEEA44

53. 655B59C3

6. 4787C62A

22. 02441453

38. 4BDECFA9

54. 8F0CCC92
7. A8304613

23. D8A1E681

39. F6BB4B60

55. FFEFF47D

8. FD469501

24. E7D3FBC

40. BEBFBC70

56. 85845DD1

9. 698098D8

25. 21E1CDE6

41. 289B7EC6

57. 6FA87E4F

10. 8B44F7AF

26. C33707D6

42. EAA127FA

58. FE2CE6E0

11. FFFF5BB1

27. F4D50D87

43. D4EF3085

59. A3014314

12. 895CD7BE

28. 455A14ED

44. 04881D05

60. 4E0811A1

13. 6B901122

29. A9E3E905

45. D9D4D039

61. F7537E82

14. FD987193

30. FCEFA3F8

46. E6DB99E5

62. BD3AF235

15. A679438E

31. 676F02D9

47. 1FA27CF8

63. 2AD7D2BB

16. 49B40821

32. 8D2A4C8A

48. D4AC5665

64. EB86D391

Các phép toán được thực hiện trong bốn vòng tạo ra các giá trị mới trong bốn
thanh ghi. Cuối cùng, bốn thanh ghi được cập nhật ở 3.5 bằng cách cộng ngược
các giá trị lưu trước đó ở 2.3. Phép cộng này được xác định là cộng các số nguyên
dương, được rút gọn theo modulo 232.
Vòng 1 (round_1())

Vòng 2 (round_2())

1. A = (A + F(B, C, D) + T0] + S[1] <<< 7

1. A = (A + G(B, C, D) + T[1] + S[17] <<< 5

2. D = (D + F(A, B, C) + T[1] + S[2]) <<< 12
3. C = (C + F(D, A, B) + T[2] + S[3]) <<< 17
4. B = (B + F(C, D, A) + T[3] + S[4]) <<< 22
5. A = (A + F(B, C, D) + T[4] + S[5]) <<< 7
6. D = (D + F(A, B, C) + T[5] + S[6]) <<< 12
7. C = (C + F(D, A, B) + T[6] + S[7]) <<< 17
8. B = (B + F(C, D, A) + T[7] + S[8]) <<< 22
9. A = (A + F(B, C, D) + T[8] + S[9]) <<< 7
10. D = (D + F(A, B, C) + T[9] + S[10]) <<< 12
11. C = (C + F(D, A, B) + T[10] + S[11]) <<< 17
12. B = (B + F(C, D, A) + T[11] + S[12]) <<< 22
13. A = (A + F(B, C, D) + T[12] + S[13]) <<< 7
14. D = (D + F(A, B, C) + T[13] + S[14]) <<< 12
15. C = (C + F(D, A, B) + T[14] + S[15]) <<< 17
16. B = (B + F(C, D, A) + T[15] + S[16]) <<< 22

2. D = (D + G(A, B, C) + T[6] + S[18]) <<< 9
3. C = (C + G(D, A, B) + T[21] + S[19]) <<< 14
4. B = (B + G(C, D, A) + T[0] + S[20]) <<< 20
5. A = (A + G(B, C, D) + T[5] + S[21]) <<< 5
6. D = (D + G(A, B, C) + T[10] + S[22]) <<< 9
7. C = (C + G(D, A, B) + T[15] + S[23]) <<< 14
8. B = (B + G(C, D, A) + T[4] + S[24]) <<< 20
9. A = (A + G(B, C, D) + T[9] + S[25]) <<< 5
10.D = (D + G(A, B, C) + T[14] + S[26]) <<< 9
11.C = (C + G(D, A, B) + T[3] + S[27]) <<< 14
12.B = (B + G(C, D, A) + T[8] + S[28]) <<< 20
13.A = (A + G(B, C, D) + T[13] + S[29]) <<< 5
14.D = (D + G(A, B, C) + T[2] + S[30]) <<< 9
15.C = (C + G(D, A, B) + T[7] + S[31]) <<< 14
16.B = (B + G(C, D, A) + T[12] + S[32]) <<< 20

Vòng 3 (round_1())

Vòng 4 (round_4())

1. A = (A + H(B, C, D) + T[5] + S[33]) <<< 4

1. A = (A + I(B, C, D) + T[0] + S[49]) <<< 6

2. D = (D + H(A, B, C) + T[8] + S[34]) <<< 11
3. C = (C + H(D, A, B) + T[11] + S[35]) <<< 16
4. B = (B + H(C, D, A) + T[14] + S[36]) <<< 23
5. A = (A + H(B, C, D) + T[1] + S[37]) <<< 4
6. D = (D + H(A, B, C) + T[4] + S[38]) <<< 11
7. C = (C + H(D, A, B) + T[7] + S[39]) <<< 16
8. B = (B + H(C, D, A) + T[10] + S[40]) <<< 23
9. A = (A + H(B, C, D) + T[13] + S[41]) <<< 4
10. D = (D + H(A, B, C) + T[0] + S[42]) <<< 11
11. C = (C + H(D, A, B) + T[3] + S[43]) <<<16
12. B = (B + H(C, D, A) + T[6] + S[44]) <<< 23
13. A = (A + H(B, C, D) + T[9] + S[45]) <<< 4
14. D = (D + H(A, B, C) + T[12] + S[46]) <<<
11
15. C = (C + H(D, A, B) + T[15] + S[47]) <<< 16
16. B = (B + H(C, D, A) + T[2] + S[48]) <<< 23

2. D = (D + I(A, B, C) + T[7] + S[50]) <<< 10
3. C = (C + I(D, A, B) + T[14] + S[51]) <<< 15
4. B = (B + I(C, D, A) + T[5] + S[52]) <<< 21
5. A = (A + I(B, C, D) + T[12] + S[53]) <<< 6
6. D = (D + I(A, B, C) + T[3] + S[54]) <<< 10
7. C = (C + I(D, A, B) + T[10] + S[55]) <<< 15
8. B = (B + I(C, D, A) + T[1] + S[56]) <<< 21
9. A = (A + I(B, C, D) + T[8] + S[57]) <<< 6
10. D = (D + I(A, B, C) + T[15] + S[58]) <<< 10
11. C = (C + I(D, A, B) + T[6] + S[59]) <<< 15
12. B = (B + I(C, D, A) + T[13] + S[60]) <<< 21
13. A = (A + I(B, C, D) + T[4] + S[61]) <<< 6
14. D = (D + I(A, B, C) + T[11] + S[62]) <<< 10
15. C = (C + I(D, A, B) + T[2] + S[63]) <<< 15
16. B = (B + I(C, D, A) + T[9] + S[64]) <<< 21

Bước 5: Output
Kết quả ra là đoạn mã có độ dài 128 bit, được thu gọn từ thông điệp a có độ
dài b bit. Đoạn mã này thu được từ 4 thanh ghi A, B, C, D: bắt đầu từ byte thấp
của thanh ghi A cho đến byte cao của thanh ghi D.
1.3.5. Xác thực
Xác thực là thuật ngữ chung dùng để chỉ hai khái niệm xác thực: Xác thực
tính toàn vẹn và xác thực nguồn gốc dữ liệu. Về cơ bản thì các xác thực này được
giải quyết bằng các phương pháp khác nhau.
1.3.5.1. Xác thực nguồn gốc dữ liệu
Nguy cơ mật khẩu truyền qua kênh không an toàn.
Nguy cơ không an toàn khi mật khẩu được lưu trữ trong máy chủ.
Dữ liệu có thực sự đúng là từ một nơi gửi xác định hay không.
1.3.5.2. Xác thực tính toàn vẹn dữ liệu
Phát hiện các lỗi bit do các phương tiện truyền dẫn hoặc do các thiết bị lưu
trữ. Phát hiện những bản tin đã bị sửa đổi một cách bất hợp pháp trong quá trình
truyền dẫn.

Contenu connexe

Tendances

Kiến trúc máy tính và hợp ngữ bài 03
Kiến trúc máy tính và hợp ngữ bài 03Kiến trúc máy tính và hợp ngữ bài 03
Kiến trúc máy tính và hợp ngữ bài 03Nhóc Nhóc
 
Mang khong day va thiet bi khong day
Mang khong day va thiet bi khong dayMang khong day va thiet bi khong day
Mang khong day va thiet bi khong dayVu Nguyentuan
 
ICD-10 Cortnie_Simmons
ICD-10 Cortnie_SimmonsICD-10 Cortnie_Simmons
ICD-10 Cortnie_Simmonsdcavener
 
Ôn tập an toàn thông tin
Ôn tập an toàn thông tinÔn tập an toàn thông tin
Ôn tập an toàn thông tinMozzila Rosa
 
Mã hóa đường cong Elliptic
Mã hóa đường cong EllipticMã hóa đường cong Elliptic
Mã hóa đường cong EllipticLE Ngoc Luyen
 
7 bước xếp thời khóa biểu
7 bước xếp thời khóa biểu7 bước xếp thời khóa biểu
7 bước xếp thời khóa biểuBùi Việt Hà
 
Mã hóa đường cong Elliptic
Mã hóa đường cong EllipticMã hóa đường cong Elliptic
Mã hóa đường cong EllipticLE Ngoc Luyen
 
Luận văn KHAI PHÁ DỮ LIỆU WEB BẰNG KỸ THUẬT PHÂN CỤM_10251112052019
Luận văn KHAI PHÁ DỮ LIỆU WEB BẰNG KỸ THUẬT PHÂN CỤM_10251112052019Luận văn KHAI PHÁ DỮ LIỆU WEB BẰNG KỸ THUẬT PHÂN CỤM_10251112052019
Luận văn KHAI PHÁ DỮ LIỆU WEB BẰNG KỸ THUẬT PHÂN CỤM_10251112052019PinkHandmade
 
Công thức truyền tin
Công thức truyền tinCông thức truyền tin
Công thức truyền tinakprovip
 
Mạng máy tính
Mạng máy tínhMạng máy tính
Mạng máy tínhMai Điệp
 

Tendances (20)

MATMA - Chuong2
MATMA - Chuong2MATMA - Chuong2
MATMA - Chuong2
 
Báo cáo bài tập lớn phân tích thiết kế hệ thống
Báo cáo bài tập lớn phân tích thiết kế hệ thốngBáo cáo bài tập lớn phân tích thiết kế hệ thống
Báo cáo bài tập lớn phân tích thiết kế hệ thống
 
Kiến trúc máy tính và hợp ngữ bài 03
Kiến trúc máy tính và hợp ngữ bài 03Kiến trúc máy tính và hợp ngữ bài 03
Kiến trúc máy tính và hợp ngữ bài 03
 
Mang khong day va thiet bi khong day
Mang khong day va thiet bi khong dayMang khong day va thiet bi khong day
Mang khong day va thiet bi khong day
 
ICD-10 Cortnie_Simmons
ICD-10 Cortnie_SimmonsICD-10 Cortnie_Simmons
ICD-10 Cortnie_Simmons
 
Lttt b11
Lttt b11Lttt b11
Lttt b11
 
Ôn tập an toàn thông tin
Ôn tập an toàn thông tinÔn tập an toàn thông tin
Ôn tập an toàn thông tin
 
Luận văn: Thuật toán mô phỏng mcmc thích nghi và ứng dụng, 9đ
Luận văn: Thuật toán mô phỏng mcmc thích nghi và ứng dụng, 9đLuận văn: Thuật toán mô phỏng mcmc thích nghi và ứng dụng, 9đ
Luận văn: Thuật toán mô phỏng mcmc thích nghi và ứng dụng, 9đ
 
Mã hóa đường cong Elliptic
Mã hóa đường cong EllipticMã hóa đường cong Elliptic
Mã hóa đường cong Elliptic
 
7 bước xếp thời khóa biểu
7 bước xếp thời khóa biểu7 bước xếp thời khóa biểu
7 bước xếp thời khóa biểu
 
Medical Coding 101
Medical Coding 101Medical Coding 101
Medical Coding 101
 
Mã hóa đường cong Elliptic
Mã hóa đường cong EllipticMã hóa đường cong Elliptic
Mã hóa đường cong Elliptic
 
Luận văn KHAI PHÁ DỮ LIỆU WEB BẰNG KỸ THUẬT PHÂN CỤM_10251112052019
Luận văn KHAI PHÁ DỮ LIỆU WEB BẰNG KỸ THUẬT PHÂN CỤM_10251112052019Luận văn KHAI PHÁ DỮ LIỆU WEB BẰNG KỸ THUẬT PHÂN CỤM_10251112052019
Luận văn KHAI PHÁ DỮ LIỆU WEB BẰNG KỸ THUẬT PHÂN CỤM_10251112052019
 
Luận văn tốt nghiệp: Khai phá dữ liệu với R, HAY
Luận văn tốt nghiệp: Khai phá dữ liệu với R, HAYLuận văn tốt nghiệp: Khai phá dữ liệu với R, HAY
Luận văn tốt nghiệp: Khai phá dữ liệu với R, HAY
 
Hệ mật mã elgamal
Hệ mật mã elgamalHệ mật mã elgamal
Hệ mật mã elgamal
 
Cổng logic
Cổng logicCổng logic
Cổng logic
 
Công thức truyền tin
Công thức truyền tinCông thức truyền tin
Công thức truyền tin
 
Đồng dư thức
Đồng dư thứcĐồng dư thức
Đồng dư thức
 
MEDICAL CODING FOR HEALTH PROFESSIONALS
MEDICAL CODING FOR HEALTH PROFESSIONALSMEDICAL CODING FOR HEALTH PROFESSIONALS
MEDICAL CODING FOR HEALTH PROFESSIONALS
 
Mạng máy tính
Mạng máy tínhMạng máy tính
Mạng máy tính
 

En vedette

đề Cương2 (1)
đề Cương2 (1)đề Cương2 (1)
đề Cương2 (1)Sai Lemovom
 
MATMA - Chuong3matmakhoacongkhai
MATMA - Chuong3matmakhoacongkhaiMATMA - Chuong3matmakhoacongkhai
MATMA - Chuong3matmakhoacongkhaiSai Lemovom
 
2. lich t tap_mau bieu bao cao at7_b_ok
2. lich t tap_mau bieu bao cao at7_b_ok2. lich t tap_mau bieu bao cao at7_b_ok
2. lich t tap_mau bieu bao cao at7_b_okSai Lemovom
 
Bài 6: Bảo mật trong SQL SERVER 2008 - Giáo trình FPT
Bài 6: Bảo mật trong SQL SERVER 2008 - Giáo trình FPTBài 6: Bảo mật trong SQL SERVER 2008 - Giáo trình FPT
Bài 6: Bảo mật trong SQL SERVER 2008 - Giáo trình FPTMasterCode.vn
 
THUYẾT TRÌNH VỀ TIẾN TRÌNH LẮNG NGHE
THUYẾT TRÌNH VỀ TIẾN TRÌNH LẮNG NGHETHUYẾT TRÌNH VỀ TIẾN TRÌNH LẮNG NGHE
THUYẾT TRÌNH VỀ TIẾN TRÌNH LẮNG NGHEMasterCode.vn
 

En vedette (7)

đề Cương2 (1)
đề Cương2 (1)đề Cương2 (1)
đề Cương2 (1)
 
MATMA - Chuong3matmakhoacongkhai
MATMA - Chuong3matmakhoacongkhaiMATMA - Chuong3matmakhoacongkhai
MATMA - Chuong3matmakhoacongkhai
 
Ham hash
Ham hashHam hash
Ham hash
 
2. lich t tap_mau bieu bao cao at7_b_ok
2. lich t tap_mau bieu bao cao at7_b_ok2. lich t tap_mau bieu bao cao at7_b_ok
2. lich t tap_mau bieu bao cao at7_b_ok
 
Bao cao detai
Bao cao detaiBao cao detai
Bao cao detai
 
Bài 6: Bảo mật trong SQL SERVER 2008 - Giáo trình FPT
Bài 6: Bảo mật trong SQL SERVER 2008 - Giáo trình FPTBài 6: Bảo mật trong SQL SERVER 2008 - Giáo trình FPT
Bài 6: Bảo mật trong SQL SERVER 2008 - Giáo trình FPT
 
THUYẾT TRÌNH VỀ TIẾN TRÌNH LẮNG NGHE
THUYẾT TRÌNH VỀ TIẾN TRÌNH LẮNG NGHETHUYẾT TRÌNH VỀ TIẾN TRÌNH LẮNG NGHE
THUYẾT TRÌNH VỀ TIẾN TRÌNH LẮNG NGHE
 

Similaire à Hambam

Chuong 6 xac thuc va toan ven thong tin
Chuong 6  xac thuc va toan ven thong tinChuong 6  xac thuc va toan ven thong tin
Chuong 6 xac thuc va toan ven thong tinnp_thanh
 
MATMA - 1.chuong4
MATMA - 1.chuong4MATMA - 1.chuong4
MATMA - 1.chuong4Sai Lemovom
 
HẠ TẦNG KHÓA CÔNG KHAI(PKI)
HẠ TẦNG KHÓA CÔNG KHAI(PKI)HẠ TẦNG KHÓA CÔNG KHAI(PKI)
HẠ TẦNG KHÓA CÔNG KHAI(PKI)ducmanhkthd
 
Bao cao antoanbaomat-hung
Bao cao antoanbaomat-hungBao cao antoanbaomat-hung
Bao cao antoanbaomat-hungLuu Tuong
 
B4-Ma hoa khoa cong khai.ppt
B4-Ma hoa khoa cong khai.pptB4-Ma hoa khoa cong khai.ppt
B4-Ma hoa khoa cong khai.pptKhnhH59
 
Tiểu+luận+antoan
Tiểu+luận+antoanTiểu+luận+antoan
Tiểu+luận+antoanBùi Quân
 
Báo cáo tốt nghiệp Android RSA mã hóa
Báo cáo tốt nghiệp Android RSA mã hóaBáo cáo tốt nghiệp Android RSA mã hóa
Báo cáo tốt nghiệp Android RSA mã hóaPhạm Trung Đức
 
1 Tong quan máy tính
1 Tong quan máy tính1 Tong quan máy tính
1 Tong quan máy tínhLy hai
 
Giao trinh ctmt
Giao trinh ctmtGiao trinh ctmt
Giao trinh ctmtcanh071179
 
Khái niệm thông tin và dữ liệu
Khái niệm thông tin và dữ liệuKhái niệm thông tin và dữ liệu
Khái niệm thông tin và dữ liệuminhhai07b08
 
Chuong 7 bao mat mang
Chuong 7 bao mat mangChuong 7 bao mat mang
Chuong 7 bao mat mangsilverclaw
 
2021. Chương 2 3. Cơ sở toán học của blockchain
2021. Chương 2 3. Cơ sở toán học của blockchain2021. Chương 2 3. Cơ sở toán học của blockchain
2021. Chương 2 3. Cơ sở toán học của blockchainNhường Lê Đắc
 

Similaire à Hambam (20)

Chuong 6 xac thuc va toan ven thong tin
Chuong 6  xac thuc va toan ven thong tinChuong 6  xac thuc va toan ven thong tin
Chuong 6 xac thuc va toan ven thong tin
 
MATMA - 1.chuong4
MATMA - 1.chuong4MATMA - 1.chuong4
MATMA - 1.chuong4
 
Integrity
IntegrityIntegrity
Integrity
 
HẠ TẦNG KHÓA CÔNG KHAI(PKI)
HẠ TẦNG KHÓA CÔNG KHAI(PKI)HẠ TẦNG KHÓA CÔNG KHAI(PKI)
HẠ TẦNG KHÓA CÔNG KHAI(PKI)
 
Hệ mật mã Mcelice
Hệ mật mã MceliceHệ mật mã Mcelice
Hệ mật mã Mcelice
 
Bao cao antoanbaomat-hung
Bao cao antoanbaomat-hungBao cao antoanbaomat-hung
Bao cao antoanbaomat-hung
 
ANMVT.pptx
ANMVT.pptxANMVT.pptx
ANMVT.pptx
 
B4-Ma hoa khoa cong khai.ppt
B4-Ma hoa khoa cong khai.pptB4-Ma hoa khoa cong khai.ppt
B4-Ma hoa khoa cong khai.ppt
 
Tiểu+luận+antoan
Tiểu+luận+antoanTiểu+luận+antoan
Tiểu+luận+antoan
 
Báo cáo tốt nghiệp Android RSA mã hóa
Báo cáo tốt nghiệp Android RSA mã hóaBáo cáo tốt nghiệp Android RSA mã hóa
Báo cáo tốt nghiệp Android RSA mã hóa
 
Thong tin va du lieu
Thong tin va du lieuThong tin va du lieu
Thong tin va du lieu
 
Thong tin va du lieu
Thong tin va du lieuThong tin va du lieu
Thong tin va du lieu
 
1 Tong quan máy tính
1 Tong quan máy tính1 Tong quan máy tính
1 Tong quan máy tính
 
Giao trinh ctmt
Giao trinh ctmtGiao trinh ctmt
Giao trinh ctmt
 
Khái niệm thông tin và dữ liệu
Khái niệm thông tin và dữ liệuKhái niệm thông tin và dữ liệu
Khái niệm thông tin và dữ liệu
 
Hệ mật mã Mcliece
Hệ mật mã MclieceHệ mật mã Mcliece
Hệ mật mã Mcliece
 
btl đsttinh.pptx
btl đsttinh.pptxbtl đsttinh.pptx
btl đsttinh.pptx
 
Chuong 7 bao mat mang
Chuong 7 bao mat mangChuong 7 bao mat mang
Chuong 7 bao mat mang
 
Chương iii
Chương iiiChương iii
Chương iii
 
2021. Chương 2 3. Cơ sở toán học của blockchain
2021. Chương 2 3. Cơ sở toán học của blockchain2021. Chương 2 3. Cơ sở toán học của blockchain
2021. Chương 2 3. Cơ sở toán học của blockchain
 

Hambam

  • 1. 1.3.4.3. Hàm băm và chữ ký số. 1. Giới thiệu hàm băm Việc sử dụng các hệ mật mã và các sơ đồ chữ ký số, thường là mã hóa và ký số trên từng bit của thông tin, sẽ tỷ lệ với thời gian để mã hóa và dung lượng của thông tin. Thêm vào đó có thể xảy ra trường hợp: Với nhiều bức thông điệp đầu vào khác nhau, sử dụng hệ mật mã, sơ đồ ký số giống nhau (có thể khác nhau) thì cho ra kết quả bản mã, bản ký số giống nhau (ánh xạ N-1: nhiều – một), như Hình 1-6. Điều này sẽ dẫn đến một số rắc rối về sau cho việc xác thực thông tin. Với các sơ đồ ký số, chỉ cho phép ký các bức thông điệp (thông tin) có kích thước nhỏ và sau khi ký, bản ký số có kích thước gấp đôi bản thông điệp gốc – ví dụ với sơ đồ chữ ký chuẩn DSS chỉ ký trên các bức thông điệp có kích thước 160 bit, bản ký số sẽ có kích thước 320 bit. Trong khi đó trên thực tế, ta cần phải ký các thông điệp có kích thước lớn hơn nhiều, chẳng hạn vài chục MegaByte. Hơn nữa, dữ liệu truyền qua mạng không chỉ là bản thông điệp gốc, mà còn bao gồm cả bản ký số (có dung lượng gấp đôi dung lượng bản thông điệp gốc), để đáp ứng việc xác thực sau khi thông tin đến người nhận. Thông điệp x Thông điệp y Hệ mật mã hay Sơ đồ ký số Bản mã hay Bản ký số Thông điệp z Nguồn Đích
  • 2. Hình 1.6: Nhiều thông điệp nguồn cho cùng một kết quả sau mã hóa/ ký số Một cách đơn giản để giải bài toán (với thông điệp có kích thước vài chục MB) này là chia thông điệp thành nhiều đoạn 160 bit, sau đó ký lên các đoạn đó độc lập nhau. Nhưng biện pháp này có một số vấn đề trong việc tạo ra các chữ ký số: • Thứ nhất: với một thông điệp có kích thước a, thì sau khi ký kích thước của chữ ký sẽ là 2a (trong trường hợp sử dụng DSS). • Thứ hai: với các chữ ký “an toàn” thì tốc độ chậm vì chúng dùng nhiều phép tính số học phức tạp như số mũ modulo. • Thứ ba: vấn đề nghiêm trọng hơn đó là kết quả sau khi ký, nội dung của thông điệp có thể bị xáo trộn các đoạn với nhau, hoặc một số đoạn trong chúng có thể bị mất mát, trong khi người nhận cần phải xác minh lại thông điệp. Ta cần phải bảo vệ tính toàn vẹn của thông điệp. Giải pháp cho các vấn đề vướng mắc đến chữ ký số là dùng hàm băm để trợ giúp cho việc ký số. Các thuật toán băm với đầu vào là các bức thông điệp có dung lượng, kích thước tùy ý (vài KB đến vài chục MB thậm chí hơn nữa) – các bức thông điệp có thể là dạng văn bản, hình ảnh, âm thanh, file ứng dụng v.v… - và với các thuật toán băm: MD2, MD4, MD5, SHA cho các bản băm đầu ra có kích thước cố định: 128 bit với dòng MD, 160 bit với SHA. Như vậy, bức thông điệp kích thước tùy ý sau khi băm sẽ được thu gọn thành những bản băm – được gọi là các văn bản đại diện – có kích thước cố định (128 bit hoặc 160 bit). Với mỗi thông điệp đầu vào chỉ có thể tính ra được một văn bản đại diện – giá trị băm tương ứng – duy nhất. Giá trị băm được coi là đặc thù của thông điệp, giống như dấu vân tay của mỗi người. Hai thông điệp khác nhau chắc chắn có hai văn bản đại diện khác nhau. Khi đã có văn bản đại diện duy nhất cho bức thông điệp, áp dụng các sơ đồ chữ ký số ký trên văn bản đại diện đó.
  • 3. Cơ chế gửi thông tin sử dụng hàm băm trợ giúp cho chữ ký số được mô tả theo thứ tự các Hình 1.7(1.7a, 1.7b, 1.7c). Độ dài tuỳ ý Thông điệp(bản rõ) x (văn bản, âm thanh, hình ảnh,…) Băm thông điệp (sử dụng thuật toán MD5 hoặc SHA) h(x) Độ dài cố định 128 với MD5 và 160 với SHA Bản băm (văn bản đại diện) z=h(x) Hình 1.7a: Băm thông điệp. Ký số Bản băm (văn bản đại diện) z (sử dụng các sơ đồ ký số RSA, DSS) SigK(z) Bản ký số y=SigK(z) Khoá bí mật (của người dùng) Hình 1.7b: Ký trên bản băm. Người gửi (A) Thông điệp, Bản ký số (x, y) Người nhận (B) Hình 1.7c: Truyền dữ liệu thông tin cần gửi. Giả sử A muốn gửi cho B thông điệp x. A thực hiện các bước sau: 1. A băm thông điệp x (Hình 1-7a), thu được bản đại diện z = h(x) – có kích thước cố định 128 bit hoặc 160 bit. 2. A ký số trên bản đại diện z (Hình 1-7b), bằng khóa bí mật của mình, thu được bản ký số y = sig K1 (z). 3. A gửi (x, y) cho B (Hình 1.7c). Khi B nhận được (x, y). B thực hiện các bước sau: 4. B kiểm tra chữ ký số để xác minh xem thông điệp mà mình nhận được có phải được gửi từ A hay không bằng cách giải mã chữ ký số y, bằng khóa công khai của A, được z. (Hình 1.8a) 5. B dùng một thuật toán băm – tương ứng với thuật toán băm mà A dùng – để băm thông điệp x đi kèm, nhận được h(x). (Hình 1.8b)
  • 4. 6. B so sánh 2 giá trị băm z và h(x), nếu giống nhau thì chắc chắn rằng thông điệp x – mà A muốn gửi cho B – còn nguyên vẹn, bên cạnh đó cũng xác thực được người gửi thông tin là ai. (Hình 1.8c) Bản ký số y Xác minh chữ ký VerK(y,z) True y = SigK(z) False y ≠ SigK(z) Khoá công khai của người A Hình 1.8a: Xác minh chữ ký Băm thông điệp Thông điệp(bản rõ) x (sử dụng thuật toán MD5 hoặc SHA) h(x) Bản băm (văn bản đại diện) h(x) Hình 1.8b: Tiến hành băm thông điệp x đi kèm Hình 1.8c: Kiểm tra tính toàn vẹn của thông điệp Hàm băm đã trợ giúp cho các sơ đồ ký số nhằm giảm dung lượng của dữ liệu cần thiết để truyền qua mạng (lúc này chỉ còn bao gồm dung lượng của bức thông điệp gốc và 256 bit (sử dụng MD) hay 320 bit (sử dụng SHA) của bức ký số được ký trên bản đại diện của thông điệp gốc), tương đương với việc giảm thời gian truyền tin qua mạng. Hàm băm thường kết hợp với chữ ký số để tạo ra một loại chữ ký điện tử vừa an toàn hơn (không thể cắt/dán) vừa có thể dùng để kiểm tra tính toàn vẹn của thông điệp. Hàm băm được ứng dụng rất mạnh trong vấn đề an toàn thông tin trên đường truyền. Các ứng dụng có sử dụng hàm băm không chỉ đảm bảo về mặt an toàn thông tin, mà còn tạo được lòng tin của người dùng vì họ có thể dễ dàng phát hiện
  • 5. được thông tin của mình có còn toàn vẹn hay không, họ biết rằng thông tin của mình chắc chắn được bí mật với phía các nhà cung cấp. 2. Định nghĩa 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 – 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. 3. Đặc trưng Hàm băm h là hàm băm một chiều (one-way hash) với các đặc tính sau: • Với thông điệp đầu vào x thu được bản băm z = h(x) là duy nhất. • Nếu dữ liệu trong thông điệp x thay đổi hay bị xóa để thành thông điệp x’ thì h(x’) ≠ h(x). Cho dù chỉ là một sự thay đổi nhỏ hay chỉ là xóa đi 1 bit dữ liệu của thông điệp thì giá trị băm cũng vẫn thay đổi. Điều này có nghĩa là: hai thông điệp hoàn toàn khác nhau thì giá trị hàm băm cũng khác nhau. Nội dung của thông điệp gốc không thể bị suy ra từ giá trị hàm băm. Nghĩa là: với thông điệp x thì dễ dàng tính được z = h(x), nhưng lại không thể (thực chất là khó) suy ngược lại được x nếu chỉ biết giá trị hàm băm h 4. Tính chất Việc đưa hàm băm h vào dùng trong sơ đồ chữ ký số không làm giảm sự an toàn của sơ đồ chữ ký số vì nó là bản tóm lược thông báo – bản đại diện cho thông điệp – được ký chứ không phải là thông điệp gốc. Điều cần thiết đối với h là cần thỏa mãn một số tính chất sau để tránh bị giả mạo: Tính chất 1: Hàm băm h là không va chạm yếu Xét một kiểu tấn công như sau: Đáng lẽ: thông tin phải được truyền đúng từ A đến B (Hình 1.9a) Hình 1.9a: Cách đi đúng của thông tin
  • 6. Nhưng: trên đường truyền, thông tin bị lấy trộm và bị thay đổi (Hình 1.9b) Hình 1.9b: Thông tin bị lấy trộm và bị thay đổi trên đường truyền Người A gửi cho B (x, y) với y = sigK(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 đó, hắn đư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. Do đó, để tránh kiểu tấn công như Hình 1.9b, hàm h phải thỏa mãn tính 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). Tính chất 2: Hàm băm h là không va chạm mạnh: Xét một kiểu tấn công như sau: Đầ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, hắn đư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: 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’). Tính chất 3: Hàm băm h là hàm một chiều: Xét một kiểu tấn công như sau: Việc giả mạo các chữ ký trên bản tóm lược z thường xảy ta với các sơ đồ chữ ký số. Giả sử tên giả mạo tính chữ ký trên bản tóm lược z, sau đó hắn tìm một bản thông điệp x’ được tính ngược từ bản đại diện
  • 7. z, z = h(x’). Tên trộm thay thế bản thông điệp x hợp lệ bằng bản thông điệp x’ giả mạo, nhưng lại có z = h(x’). Và hắn ký số trên bản đại diện cho x’ bằng đúng chữ ký hợp lệ. Nếu làm được như vậy thì (x’, y) là bức điện giả mạo nhưng hợp lệ. Để tránh được kiểu tấn công này, h cần thỏa mãn tính chất 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 thì không thể thực hiện về mặt tính toán để tìm ra thông điệp ban đầu x sao cho h(x) = z . 5. Các thuật toán băm Các hàm băm dòng MD: MD2, MD4, MD5 được Rivest đưa ra thu được kết quả đầu ra với độ dài là 128 bit. Hàm băm MD4 đưa ra vào năm 1990. Một năm sau phiên bản mạnh MD5 cũng được đưa ra. Chuẩn hàm băm an toàn: SHA, phức tạp hơn nhiều cũng dựa trên các phương pháp tương tự, được công bố trong Hồ sơ Liên bang năm 1992 và được chấp nhận làm tiêu chuẩn vào năm 1993 do Viện Tiêu Chuẩn và Công Nghệ Quốc Gia (NIST), kết quả đầu ra có độ dài 160 bit. Như đã nêu trong phần đầu, thông điệp đầu vào cho các hàm băm có thể là: dạng văn bản, dạng hình ảnh, dạng .exe …. a. Khái niệm “thông điệp đệm” “Thông điệp đệm” – messege padding - là một xâu bit có độ dài chia hết cho 512. “Thông điệp đệm” được lưu trong mảng M = M[0] M[1] … M[N-1]. Trong đó M[i] là xâu bit có độ dài 32 bit, gọi là word; N mod 16 = 0. M được xây dựng từ thông điệp a bằng thuật toán: Bảng 1.7 : Xây dựng thông điệp đệm M từ a 1. d = 447 – (|a| mod 512); (+ 512, trường hợp |a| mod 512 > 447). 2. Giả sử l là kí hiệu biểu diễn nhị phân của |a| mod 264, tl: |l| = 64. 3. M = a || 1 || 0d || l - Độ dài của xâu a || 1 || 0d là |a| + 1 + d = 448 mod 512 . - Độ dài của “Thông điệp đệm” M là 448 mod 512 + 64 = 512 mod 512. Ví dụ : Có xâu đầu vào a = “ABC”, ta có kết quả xây dựng M như sau:
  • 8. a = “ABC” = "01000001 01000010 01000011" - Độ dài tính theo bit của xâu a: |a| = 24 bit => d = 447 – (|a| mod 512) = 423. |a| + 1 + d = 24 + 1 + 423 = 448 mod 512. - Biểu diễn nhị phân của độ dài xâu a là l:   00   l = |a| mod 264 = 24 mod 264 = 24 = 16 + 8 = ( 00..... 11000 )2 59 so   00   => Độ dài của l là |l| = | 00..... 11000| = 59 + 5 = 64. 59 so M = a || 1 || 0d || l .....00   00      => M = 01000001 01000010 01000011 || 1 || 00423 so || 00..... 11000 59 so M = M[0] M[1] … M[N-1], N ≡ 0 mod 16 M[0] = 01000001 01000010 01000011 10000000   00   M[1] = M[2] = ….. = M[13] = M[14] = 00..... 32 so M[15] = 00000000 00000000 00000000 00011000 Trong việc xây dựng M, ta gắn số 1 đơn lẻ vào sau a, sau đó thêm tiếp các số 0 vào đủ để độ dài của M đồng dư với 448 modulo 512. Cuối cùng nối thêm 64 bit (chính là |l|) chứa biểu diễn nhị phân về độ dài ban đầu của x (được rút gọn theo modulo 264 nếu cần). Xâu kết quả M có độ dài chia hết cho 512. Vì thế khi chặt M thành các word 32 bit, số word nhận được là N sẽ chia hết cho 16. Mục đích việc tạo ra mảng M – “thông điệp đệm” – là để các hàm băm xử lý trên từng khối (block) 512 bit, tức là 16 word, cùng một lúc. b. Hàm băm MD5 Mặc dù MD4 vẫn chưa bị phá, song các phiên bản yếu cho phép bỏ qua hoặc vòng thứ nhất hay thứ ba đều có thể bị phá không khó khăn gì. Nghĩa là dễ dàng tìm thấy các va chạm đối với các phiên bản chỉ có hai vòng. Phiên bản mạnh của dòng MD là MD5 được công bố năm 1991. MD5 dùng bốn vòng thay cho ba và chậm hơn 30% so với MD4 (khoảng 0,9 MB/giây trên cùng một máy).
  • 9. Input : Thông điệp có độ dài tùy ý. Ouput : Bản băm, đại diện cho thông điệp gốc, độ dài cố định 128 bit. Mô tả thuật toán: Giả sử đầu vào là một xâu a có độ dài b bit (b có thể bằng 0) Bước 1: Khởi tạo các thanh ghi Có 4 thanh ghi được sử dụng để tính toán nhằm đưa ra các đoạn mã: A, B, C, D. Bản tóm lược của thông điệp được xây dựng như sự kết nối của các thanh ghi. Mỗi thanh ghi có độ dài 32 bit. Các thanh ghi này được khởi tạo giá trị hecxa. word word word word A := 67 45 23 01 B := EF CD AB 89 C := 98 BA DC FE D := 10 32 54 76 Bước 2: Xử lý thông điệp a trong 16 khối word, có nghĩa là xử lý cùng một lúc 16 word = 512 bit (chia mảng M thành các khối 512 bit, đưa từng khối 512 bit đó vào mảng T[j]). Mỗi lần xử lý một khối 512 bit. Lặp lại N/16 lần. Gán giá trị cho bốn biến AA, BB, CC, DD lần lượt bằng giá trị của 4 thanh ghi A, B, C, D. Bước 3:Thực hiện bốn vòng băm với các khối cần xử lý Một số phép toán logic được sử dụng trong bốn vòng này.  X ∧ Y là phép toán AND theo bit giữa X và Y  X ∨ Y là phép toán OR theo bit giữa X và Y  X ⊕ Y là phép toán XOR theo bit giữa X và Y  ¬ X chỉ phép bù của X  X + Y là phép cộng theo modulo 232  X <<< s là phép dịch vòng trái X đi s vị trí (0 ≤ s ≤ 31)
  • 10. Bội số của 512 bít 1…512 bit K bít Message 512 bit Y1 512 ABCD 128 HMD5 512 bit … 512 128 K mod 264 100 … 000 512 bit Y0 Chiều dài của message HMD5 Yp 512 bit … 512 128 HMD5 YL-1 512 128 HMD5 Digest 128 bit Hình 1.10 : Quá trình tạo bản băm của MD5 Các vòng 1, 2, 3 và 4 dùng tương ứng ba hàm F, G, H và I. Mỗi hàm này là một hàm boolean tính theo bit. Chúng được xác định như sau: F(X, Y, Z) = (X ∧ Y) ∨ (( ¬ X) ∧ Z) G(X, Y, Z) = (X ∧ Z) ∨ (Y ∧ ( ¬ Z)) H(X, Y, Z) = X ⊕ Y ⊕ Z I(X, Y, Z) = Y ⊕ (X ∨ ( ¬ Z)) Bảng 1.8: Thuật toán MD5 1. A := 67 45 23 01 B := ef cd ab 89 C := 98 ba dc fe D := 10 32 54 76 for i := 0 to n/16 - 1 do { for j := 0 to 15 do T[j] = M[16i + j]; AA := A; Mỗi lần xử lý 16 từ, mỗi từ 32 bit, tl: 512 bit. BB := B; CC := C; DD := D; round_1(); round_2(); round_3(); round_4(); A = A + AA B = B + BB C = C + CC D = D + DD 2. 3. 4. 5. 6. 7. 8. 9. }
  • 11. Bốn vòng trong MD5 là hoàn toàn khác nhau. Mỗi vòng (5, 6, 7, 8) gồm một trong 16 word trong T. T = getFromM(i*16, 16) AA = A BB = B CC = C DD = D round_1() round_2() round_3() round_4() A = A + AA B = B + BB C = C + CC D = D + DD i=i+1 a M = getBufferMsg(a) A = 67 45 23 B = ef cd ab C = 98 ba dc D = 10 32 54 n = length(M) 01 89 fe 76 i=0 DCBA F i > n div 16 -1 T Hình 1.11: Lược đồ thuật toán MD5 MD5 sử dụng thêm một mảng S[1 … 64] được xây dựng từ hàm sin. Với S[i], giá trị của phần tử thứ i trong mảng S, tương đương với phần nguyên của 4294967296 × abs(sin(i)), với i tính theo radian.  Vòng 1 sử dụng giá trị trong mảng S[1 … 16]  Vòng 2 sử dụng giá trị trong mảng S[17 … 32]  Vòng 3 sử dụng giá trị trong mảng S[33 … 48]  Vòng 4 sử dụng giá trị trong mảng S[49 … 64] Ta có mảng S[1 … 64] như sau (tất cả đều để ở hệ cơ số 16): 1. D76AA478 17. F61E2562 33. FFFA3942 49. F4292244 2. E8C7B756 18. D040B340 34. 8771F681 50. 432AFF97 3. 242070DB 19. 265E5A51 35. 6D9D6122 51. AB9423A7 4. C1BDCEEE 20. E9B6C7AA 36. FDE5390C 52. FC93A039 5. F57C0FAF 21. D62F105D 37. A4BEEA44 53. 655B59C3 6. 4787C62A 22. 02441453 38. 4BDECFA9 54. 8F0CCC92
  • 12. 7. A8304613 23. D8A1E681 39. F6BB4B60 55. FFEFF47D 8. FD469501 24. E7D3FBC 40. BEBFBC70 56. 85845DD1 9. 698098D8 25. 21E1CDE6 41. 289B7EC6 57. 6FA87E4F 10. 8B44F7AF 26. C33707D6 42. EAA127FA 58. FE2CE6E0 11. FFFF5BB1 27. F4D50D87 43. D4EF3085 59. A3014314 12. 895CD7BE 28. 455A14ED 44. 04881D05 60. 4E0811A1 13. 6B901122 29. A9E3E905 45. D9D4D039 61. F7537E82 14. FD987193 30. FCEFA3F8 46. E6DB99E5 62. BD3AF235 15. A679438E 31. 676F02D9 47. 1FA27CF8 63. 2AD7D2BB 16. 49B40821 32. 8D2A4C8A 48. D4AC5665 64. EB86D391 Các phép toán được thực hiện trong bốn vòng tạo ra các giá trị mới trong bốn thanh ghi. Cuối cùng, bốn thanh ghi được cập nhật ở 3.5 bằng cách cộng ngược các giá trị lưu trước đó ở 2.3. Phép cộng này được xác định là cộng các số nguyên dương, được rút gọn theo modulo 232.
  • 13. Vòng 1 (round_1()) Vòng 2 (round_2()) 1. A = (A + F(B, C, D) + T0] + S[1] <<< 7 1. A = (A + G(B, C, D) + T[1] + S[17] <<< 5 2. D = (D + F(A, B, C) + T[1] + S[2]) <<< 12 3. C = (C + F(D, A, B) + T[2] + S[3]) <<< 17 4. B = (B + F(C, D, A) + T[3] + S[4]) <<< 22 5. A = (A + F(B, C, D) + T[4] + S[5]) <<< 7 6. D = (D + F(A, B, C) + T[5] + S[6]) <<< 12 7. C = (C + F(D, A, B) + T[6] + S[7]) <<< 17 8. B = (B + F(C, D, A) + T[7] + S[8]) <<< 22 9. A = (A + F(B, C, D) + T[8] + S[9]) <<< 7 10. D = (D + F(A, B, C) + T[9] + S[10]) <<< 12 11. C = (C + F(D, A, B) + T[10] + S[11]) <<< 17 12. B = (B + F(C, D, A) + T[11] + S[12]) <<< 22 13. A = (A + F(B, C, D) + T[12] + S[13]) <<< 7 14. D = (D + F(A, B, C) + T[13] + S[14]) <<< 12 15. C = (C + F(D, A, B) + T[14] + S[15]) <<< 17 16. B = (B + F(C, D, A) + T[15] + S[16]) <<< 22 2. D = (D + G(A, B, C) + T[6] + S[18]) <<< 9 3. C = (C + G(D, A, B) + T[21] + S[19]) <<< 14 4. B = (B + G(C, D, A) + T[0] + S[20]) <<< 20 5. A = (A + G(B, C, D) + T[5] + S[21]) <<< 5 6. D = (D + G(A, B, C) + T[10] + S[22]) <<< 9 7. C = (C + G(D, A, B) + T[15] + S[23]) <<< 14 8. B = (B + G(C, D, A) + T[4] + S[24]) <<< 20 9. A = (A + G(B, C, D) + T[9] + S[25]) <<< 5 10.D = (D + G(A, B, C) + T[14] + S[26]) <<< 9 11.C = (C + G(D, A, B) + T[3] + S[27]) <<< 14 12.B = (B + G(C, D, A) + T[8] + S[28]) <<< 20 13.A = (A + G(B, C, D) + T[13] + S[29]) <<< 5 14.D = (D + G(A, B, C) + T[2] + S[30]) <<< 9 15.C = (C + G(D, A, B) + T[7] + S[31]) <<< 14 16.B = (B + G(C, D, A) + T[12] + S[32]) <<< 20 Vòng 3 (round_1()) Vòng 4 (round_4()) 1. A = (A + H(B, C, D) + T[5] + S[33]) <<< 4 1. A = (A + I(B, C, D) + T[0] + S[49]) <<< 6 2. D = (D + H(A, B, C) + T[8] + S[34]) <<< 11 3. C = (C + H(D, A, B) + T[11] + S[35]) <<< 16 4. B = (B + H(C, D, A) + T[14] + S[36]) <<< 23 5. A = (A + H(B, C, D) + T[1] + S[37]) <<< 4 6. D = (D + H(A, B, C) + T[4] + S[38]) <<< 11 7. C = (C + H(D, A, B) + T[7] + S[39]) <<< 16 8. B = (B + H(C, D, A) + T[10] + S[40]) <<< 23 9. A = (A + H(B, C, D) + T[13] + S[41]) <<< 4 10. D = (D + H(A, B, C) + T[0] + S[42]) <<< 11 11. C = (C + H(D, A, B) + T[3] + S[43]) <<<16 12. B = (B + H(C, D, A) + T[6] + S[44]) <<< 23 13. A = (A + H(B, C, D) + T[9] + S[45]) <<< 4 14. D = (D + H(A, B, C) + T[12] + S[46]) <<< 11 15. C = (C + H(D, A, B) + T[15] + S[47]) <<< 16 16. B = (B + H(C, D, A) + T[2] + S[48]) <<< 23 2. D = (D + I(A, B, C) + T[7] + S[50]) <<< 10 3. C = (C + I(D, A, B) + T[14] + S[51]) <<< 15 4. B = (B + I(C, D, A) + T[5] + S[52]) <<< 21 5. A = (A + I(B, C, D) + T[12] + S[53]) <<< 6 6. D = (D + I(A, B, C) + T[3] + S[54]) <<< 10 7. C = (C + I(D, A, B) + T[10] + S[55]) <<< 15 8. B = (B + I(C, D, A) + T[1] + S[56]) <<< 21 9. A = (A + I(B, C, D) + T[8] + S[57]) <<< 6 10. D = (D + I(A, B, C) + T[15] + S[58]) <<< 10 11. C = (C + I(D, A, B) + T[6] + S[59]) <<< 15 12. B = (B + I(C, D, A) + T[13] + S[60]) <<< 21 13. A = (A + I(B, C, D) + T[4] + S[61]) <<< 6 14. D = (D + I(A, B, C) + T[11] + S[62]) <<< 10 15. C = (C + I(D, A, B) + T[2] + S[63]) <<< 15 16. B = (B + I(C, D, A) + T[9] + S[64]) <<< 21 Bước 5: Output Kết quả ra là đoạn mã có độ dài 128 bit, được thu gọn từ thông điệp a có độ dài b bit. Đoạn mã này thu được từ 4 thanh ghi A, B, C, D: bắt đầu từ byte thấp của thanh ghi A cho đến byte cao của thanh ghi D. 1.3.5. Xác thực
  • 14. Xác thực là thuật ngữ chung dùng để chỉ hai khái niệm xác thực: Xác thực tính toàn vẹn và xác thực nguồn gốc dữ liệu. Về cơ bản thì các xác thực này được giải quyết bằng các phương pháp khác nhau. 1.3.5.1. Xác thực nguồn gốc dữ liệu Nguy cơ mật khẩu truyền qua kênh không an toàn. Nguy cơ không an toàn khi mật khẩu được lưu trữ trong máy chủ. Dữ liệu có thực sự đúng là từ một nơi gửi xác định hay không. 1.3.5.2. Xác thực tính toàn vẹn dữ liệu Phát hiện các lỗi bit do các phương tiện truyền dẫn hoặc do các thiết bị lưu trữ. Phát hiện những bản tin đã bị sửa đổi một cách bất hợp pháp trong quá trình truyền dẫn.