70
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG ………………..*………………… BÁO CÁO TIỂU LUẬN Môn: An ninh mạng Đề tài 4: Bài toán xác thực thông điệp Giáo viên hướng dẫn: Nguyễn Linh Giang Nhóm sinh viên thực hiện: Phạm Thị Hợi 20091202 Lê Thị Thanh Quế 20092153 1

Báo cáo an ninh mạng

Embed Size (px)

Citation preview

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI

VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG

………………..*…………………

BÁO CÁO TIỂU LUẬN

Môn: An ninh mạng

Đề tài 4: Bài toán xác thực thông điệp

Giáo viên hướng dẫn: Nguyễn Linh Giang

Nhóm sinh viên thực hiện: Phạm Thị Hợi 20091202

Lê Thị Thanh Quế 20092153

Nguyễn Thị Thắm 20092496

Hà Nội, Tháng 11 - 2012

1

Mục LụcLỜI NÓI ĐẦU...........................................................................................................4

Phần I: Các cơ chế xác thực.....................................................................................5

I.1. Các tiêu chí xác thực thông điệp.......................................................................5

I.2.Các cơ chế xác thực.............................................................................................5

I.2.1. Mã hóa thông điệp........................................................................................5

I.2.1.1.Mã hóa đối xứng......................................................................................6

I.2.1.2. Mật mã khóa công khai..........................................................................7

I.2.2. Dùng mã xác thực MAC ( Message Authentication Code).........................8

I.2.3. Xác thực thông điệp dùng hàm băm (secure hash function)......................9

Phần II. Hàm băm và hàm mã hóa xác thực........................................................10

II.1. Hàm băm..........................................................................................................10

II.1.1. Định nghĩa.................................................................................................11

II.1.2. Phân loại....................................................................................................11

II.1.3. Các tính chất..............................................................................................12

II.1.4. Cấu trúc cơ bản của một hàm băm..........................................................12

II.1.5. Một số hàm băm cơ bản và thông dụng...................................................14

II.1.5.1. Hàm băm MD4.....................................................................................14

II.1.5.2. Hàm băm MD5.....................................................................................15

II.1.5.2.1. Thuật giải......................................................................................16

II.1.5.2.2. Hàm nén........................................................................................19

II.1.5.2.3. Ứng dụng của MD5.......................................................................20

II.1.5.3. Hàm băm SHA-1..................................................................................21

II.1.5.3.1. Nguyên lý......................................................................................23

II.1.5.3.2. Hàm nén........................................................................................25

II.1.5.3.3. Nhận xét........................................................................................26

II.2. Hàm mã hóa xác thực.....................................................................................27

2

II.2.1. Hàm mã hóa DES.....................................................................................27

II.2.1.1. Thuật toán............................................................................................27

II.2.1.2. Quá trình tạo khóa con........................................................................29

II.2.1.3. Hàm Feistel (F)....................................................................................30

II.2.1.4. Cấu trúc vòng lặp DES........................................................................31

II.2.1.5. Một vài đặc điểm về cách giải mã.......................................................31

II.2.2. Hàm mã hóa 3DES...................................................................................32

II.2.3. Hàm mã hóa AES......................................................................................32

Phần III. Các giao thức xác thực...........................................................................35

III.1. Xác thực dựa trên một khóa bí mật được chia sẻ.......................................37

III.2. Thiết lập kháo chia sẻ: Khóa trao đổi Diffie – Hellman............................41

III.3. Xác thực sử dụng khóa phân phối trung tâm.............................................43

III.4. Xác thực sử dụng mật mã khóa công khai..................................................47

Phần IV. Thử nghiệm.............................................................................................49

KẾT LUẬN..............................................................................................................51

TÀI LIỆU THAM KHẢO......................................................................................52

3

LỜI NÓI ĐẦU

Nếu như trước kia khi chưa xuất hiện máy tính việc bảo vệ thông tin chỉ là các biện

pháp đơn giản: trong các kho chứa hồ sơ lưu trữ văn bản… thì ngày nay với sự bùng nổ

của Internet, khi mà thông tin được chia sẻ trên mạng thì nhu cầu bảo mật thông tin và đặc

biệt là nhu cầu bảo vệ các dữ liệu trong quá trình truyền (network security) là rất cần được

chú ý.

Từ nhu cầu đó thì các dịch vụ an toàn an ninh mạng ra đời: bảo mật riêng tư

(confidentiality), xác thực (authentication) , toàn vẹn thông tin (integrity),.… với mục đích

làm tăng cường mức độ an toàn của hệ thống xử lý thông tin và những thông tin đã được

truyền đi. Trong đó bài toán xác thực đặc biệt là xác thực thông điệp là một vấn đề rất

quan trọng hiện nay bởi sự bùng nổ của Internet dẫn đến sự ra đời của giao dịch trực

tuyến.Vấn đề đặt ra ở đây là khi nhận được một thông điệp như thư, hợp đồng,… làm sao

để xác định được đúng đối tác giao dịch và nguồn gốc thông điệp.

Vì vậy bài báo cáo này nhóm em sẽ tìm hiểu về bài toán xác thực thông điệp để đem

lại một cái nhìn rõ hơn về cơ chế cũng như giao thức của phương pháp này. Mặc dù đã cố

gắng hết sức nhưng vẫn không tránh khỏi những sai sót và hạn chế, chúng em mong nhận

được sự chỉ bảo tận tình của thầy để hoàn thiện thêm bài báo cáo này!

Chúng em xin chân thành cám ơn!

4

Phần I: Các cơ chế xác thực

I.1. Các tiêu chí xác thực thông điệp

Chắc hẳn ai trong chúng ta cũng đều nghĩ bảo mật là mục tiêu mạnh mẽ nhất của mật

mã nhưng thực tế thì xác thực thông điệp mới cần được quan tâm hơn. Vậy xác thực là gì?

Xác thực thông điệp ra sao? Và phải đáp ứng các tiêu chí gì thì xác thực thông điệp mới có

thể chống lại được những tấn công vào hệ thống máy tính và mạng ? Những phần trình

bày dưới đây sẽ giúp ta hiểu biết khái quát về xác thực thông điệp cũng như các tiêu chí

mà xác thực thông điệp cần đạt được.

Xác thực (authentication) là đảm bảo về nguồn gốc của thông điệp hoặc văn bản điện

tử. Nó xác minh rằng người truy cập phải là những người có quyền hay được ủy quyền

truy cập trước khi được cho phép truy cập vào hệ thống mạng cũng như các dịch vụ mạng.

Xác thực thông điệp (message authentication) cho phép một bên ( bên gửi) gửi một tin

nhắn (thông điệp) cho một hay nhiều bên khác (bên nhận) theo một cách mà nếu thông

điệp bị sửa đổi trong quá trình truyền thì bên nhận hầu như chắc chắn sẽ phát hiện được

điều này. Xác thực thông điệp còn được gọi là xác thực nguồn gốc dữ liệu. Xác thực thông

điệp rất chú ý đến việc bảo vệ tính toàn vẹn (integrity) của dữ liệu, tức là mỗi thông điệp

mà nó nhận được phải là toàn vẹn không bị mất hay bị sửa đổi so với thông điệp gốc.

Do vậy xác thực thông điệp cần đảm bảo các tiêu chí sau:

Thông điệp có nguồn gốc rõ ràng, chính xác

Nội dung thông điệp là toàn vẹn không bị sửa đổi

Thông điệp được gửi đi đúng trình tự và đúng thời điểm

I.2.Các cơ chế xác thực

I.2.1. Mã hóa thông điệp

Nguyên tắc của việc xác thực bằng cách mã hóa thông điệp là chỉ có những đối tượng

hợp lệ mới khôi phục được thông tin gốc từ thông tin mật. Và phương pháp xác thực dùng

mật mã này hoàn toàn dựa vào độ tin cậy của khóa bí mật. Phần dưới đây sẽ trình bày rõ

hơn về cơ chế của hai phương pháp xác thực dùng mật mã.

5

I.2.1.1.Mã hóa đối xứng

Kỹ thuật mật mã đối xứng được đặc trưng bởi việc sử dụng một khóa duy nhất cho cả

quá trình mã hóa và giải mã thông tin. Bằng một cách an toàn nào đó, khóa chung này phải

được trao đổi thống nhất giữa bên gửi và bên nhận (tức bên mã hóa và bên giải mã), đồng

thời được giữ bí mật trong suốt thời gian sử dụng.

Kỹ thuật mật mã đối xứng còn được gọi là mật mã quy ước (conventional encryption)

hoặc mật mã dùng khóa bí mật (secret key encryption).

Cấu trúc chung của một hệ thống mật mã hóa quy ước là kênh thông tin dùng để trao

đổi khóa bí mật phải là một kênh an tòan. Có thể thực hiện việc trao đổi khóa bí mật giữa

hai thực thể A và B theo những cách sau đây:

1. A chọn ra một khóa bí mật và chuyển trực tiếp cho B (chuyển bằng phương tiện

vật lý như ghi lên đĩa, nói trực tiếp, ghi ra giấy, …)

2. Một thực thể thứ 3 chọn ra khóa bí mật và thông báo khóa này cho cả A và B

(bằng phương tiện vật lý như trên)

3. Nếu A và B trước đó đã dùng một khóa nào đó để thông tin với nhau, thì một

trong hai thực thể sẽ tiếp tục dùng khóa cũ để gởi thông báo về khóa mới cho

thực thể kia.

4. Nếu A và B có các kết nối an toàn đến một thực thể thứ 3 là C, thì C có thể gửi

thông báo về khóa cho cả hai thực thể A và B thông qua kết nối an toàn này.

Hình 1: Trao đổi khóa trong mật mã đối xứng

Mã hóa đối xứng dựa chủ yếu trên hai thao tác: thay thế và chuyển vị.

Thao tác thay thế sẽ thay từng từ mã bởi một từ mã khác theo một quy ước nào đó, và

quy ước này chính là khóa của hệ thống mã. Ví dụ: thay thế từng ký tự trong một thông

điệp bằng một ký tự đứng cách nó 3 vị trí trong bảng chữ cái la tinh, thông điệp “HELLO

WORLD” sẽ được mã hóa thành “KHOOR ZRUOG”.

Thao tác chuyển vị thực hiện việc thay thế vị trí của các từ mã trong thông tin gốc theo

một quy ước nào đó và quy ước này cũng trở thành khóa của hệ thống. Ví dụ: dịch từng ký

tự trong một thông điệp qua phải một ví trí có xoay vòng, thông điệp “HELLO WORLD”

sẽ được mã hóa thành “DHELLO WORL”

6

I.2.1.2. Mật mã khóa công khai

Đặc trưng của kỹ thuật mã hóa công khai là dùng hai khóa riêng biệt cho hai quá trình

mã hóa và giải mã, trong đó có một khóa được phổ biến công khai (public key hay PU) và

khóa còn lại được giữ bí mật (private key hay PR)( do đó nó còn có tên gọi khác là mật mã

bất đối xứng). Cả hai khoá đều có thể được dùng để mã hoá hoặc giải mã. Việc chọn khoá

công khai hay khoá bí mật cho quá trình mã hoá sẽ tạo ra hai ứng dụng khác nhau của kỹ

thuật mã hóa công khai:

o Nếu dùng khoá công khai để mã hoá và khoá bí mật để giải mã, ta có ứng dụng

bảo mật trên thông tin (confidentiality).

o  Nếu dùng khoá bí mật để mã hoá và khoá công khai để giải mã, ta có ứng dụng

xác thực nội dung và nguồn gốc thông tin (authentication).

Thuật toán mật mã khóa công khai dựa chủ yếu trên các hàm toán học hơn là dựa vào

các thao tác trên chuỗi bit. Nói chung, mật mã hóa khóa công khai không phải là một kỹ

thuật mật mã an toàn hơn so với mật mã đối xứng, mà độ an toàn của một thuật toán mã

nói chung phụ thuộc vào 2 yếu tố: Độ dài của khóa và mức độ phức tạp khi thực hiện thuật

toán (trên máy tính). Hơn nữa, mặc dù được ra đời sau nhưng không có nghĩa rằng mật mã

khóa công khai hoàn toàn ưu điểm hơn và sẽ được sử dụng thay thế cho mật mã đối xứng.

Mỗi kỹ thuật mã có một thế mạnh riêng và mật mã đối xứng vẫn rất thích hợp cho các hệ

thống nhỏ và đơn giản. Ngoài ra, vấn đề phân phối khóa trong mật mã khóa công khai

cũng được đánh giá là một trong những vấn đề phức tạp khi triển khai kỹ thuật mật mã này

trong thực tế.

Hình 2: Cấu trúc một hệ thống mật mã khóa công khai

7

Các bước cơ bản của một hệ thống mật mã dùng khóa công khai bao gồm:

Mỗi thực thể thông tin (user) tạo ra một cặp khóa (public/private) để dùng cho việc

mã hóa và giải mã.

Mỗi user thông báo một trong hai khoá của mình cho các user khác biết, khóa này

được gọi là khóa công khai (public key). Khóa còn lại được giữ bí mật, và gọi là

khóa riêng (private key).

Nếu một user A muốn gửi thông tin cho user B, user A sẽ thực hiện mã hóa thông

tin cần gửi bằng khóa công khai của user B.

Khi nhận được thông tin đã mã hóa từ user A, user B thực hiện giải mã thông tin đó

bằng khóa riêng của mình. Do khóa riêng không phổ biến công khai nên chỉ có một

mình user B có khả năng giải mã được.

Mật mã hóa bất đối xứng được sử dụng trong các ứng dụng: che giấu thông tin,

tạo chữ ký số (digital signature) và trao đổi khóa trong các thuật toán mật mã đối xứng

(key exchange)

Đánh giá kỹ thuật mật mã khóa công khai:

Kỹ thuật mật mã khóa công khai có thể đáp ứng được những yêu cầu về bảo mật hệ

thống như trong kỹ thuật mật mã đối xứng, mặc dù tốc độ thực thi của mật mã khóa công

khai thường thấp hơn do bản chất thuật toán dựa trên các thao tác số học chứ không dựa

trên các thao tác xử lý bit. Hơn nữa, mật mã khóa công khai chỉ phù hợp với việc thực thi

bằng phần mềm. Mật mã khóa công khai đảm bảo được 2 yêu cầu cơ bản của thông tin là

tính bí mật và tính toàn vẹn.

Kỹ thuật mật mã khóa công khai có 2 ưu điểm so với mã đối xứng:

1. Hai thực thể thông tin không cần thực hiện thủ tục trao đổi khóa trước khi bắt đầu

làm việc.

2. Bên cạnh công dụng đảm bảo tính toàn vẹn của dữ liệu, mật mã khóa công khai

(khi được sử dụng cho mục đích xác thực) còn đảm bảo được tính không thể phủ

nhận (non-repudiation) của thông tin

I.2.2. Dùng mã xác thực MAC ( Message Authentication Code)

Mã xác thực MAC được sinh ra từ tổ hợp gồm một khối thông tin gốc có độ dài bất kỳ

và một khóa bí mật. Kích thước của MAC là cố định, không phụ thuộc vào kích thước của

khối dữ liệu gốc và thường nhỏ hơn dữ liệu gốc. Đối tượng gởi sẽ gởi kèm giá trị MAC đi

cùng với thông tin gốc. Phía nhận sau khi nhận được thông tin gốc cùng với giá trị MAC

gửi kèm sẽ thực hiện thao tác tạo ra giá trị MAC mới từ thông tin gốc cùng với khóa bí

mật đã thống nhất giữa hai bên. Nếu giá trị MAC vừa tạo ra giống với giá trị MAC nhận

8

được từ phía gửi, phía nhận có thể chắc chắn rằng thông tin gốc không bị thay đổi trong

quá trình truyền

Hình 3: Xác thực thông tin dùng MAC

Việc dùng MAC để xác thực thông tin dựa vào hai cơ sở:

Ứng với một khối thông tin gốc M và một khóa bí mật K , hàm C chỉ tạo ra duy

nhất một mã xác thực MAC.

Chỉ có phía gửi và phía nhận hợp lệ mới được biết khóa K.

Có hai k ỹ thuật tạo ra mã xác thực MAC: k ỹ thuật thứ nhất dùng cơ chế mật mã khối

(Cipher Block Chaining) và được gọi là CMAC hay CBC-MAC. K ỹ thuật thứ hai dựa trên

các hàm băm bảo mật và được gọi là HMAC.

Mã xác thực MAC được ứng dụng trong các trường hợp thông tin chỉ yêu cầu đảm bảo

tính xác thực mà không cần đảm bảo tính bí mật.

I.2.3. Xác thực thông điệp dùng hàm băm (secure hash function).

Giống như mã xác thực MAC, hàm băm cũng tạo ra một khối thông tin ngắn

có độ dài xác định gọi là mã băm (hash code) từ một khối thông tin gốc có độ dài bất kỳ.

Tuy nhiên, khác với MAC, hàm băm chỉ dựa vào thông tin gốc để tạo ra mã băm mà

không dùng thêm bất kỳ khóa bí mật nào. Do vậy, để có thể sử dụng như một cơ chế xác

thực thông tin, hàm băm phải được dùng kèm với một thuật toán mật mã nào đó (đối xứng

hoặc bất đối xứng).

Hình dưới đây trình bày một ứng dụng điển hình của hàm băm trong xác thực thông

tin. Theo cơ chế này, mã băm sau khi được tạo ra sẽ được mã hóa bằng một thuật tóan mật

mã đối xứng với khóa bí mật K chỉ có bên gửi và bên nhận biết. Đọan mã băm đã được

mật mã hóa được gởi đi kèm với thông tin gốc và quá trình kiểm tra ở phía nhận cũng

được tiến hành theo trình tự ngược lại, tức là giải mã đoạn mã băm bằng khóa bí mật, sau

đó tạo ra mã băm mới từ thông tin gốc và so sánh hai đọan mã băm.

9

Có nhiều cách áp dụng các thuậ toán mật mã vào hàm băm để xác thực thông tin: dùng

mã đối xứng hoặc bất đối xứng, chỉ mã hóa mã băm hoặc mã hóa cả thông tin gốc và mã

băm, thậm chí có thể tổ hợp nhiều cách trên lại với nhau.

Hình 4: Xác thực thông tin dùng hàm băm

Phần II. Hàm băm và hàm mã hóa xác thực

II.1. Hàm băm

Trong ngành mật mã học, một hàm băm mật mã học (cryptographic hash function) là

một hàm băm với một số tính chất bảo mật nhất định để phù hợp việc sử dụng trong nhiều

ứng dụng bảo mật thông tin đa dạng, chẳng hạn như chứng thực (authentication) và kiểm

tra tính nguyên vẹn của thông điệp (message integrity). Một hàm băm nhận đầu vào là một

xâu ký tự (hay thông điệp) có độ dài tùy ý và tạo ra kết quả là một xâu ký tự có độ dài cố

định, đôi khi được gọi là tóm tắt thông điệp (message digest) hoặc chữ ký số (digital

fingerprint).

Các hàm băm nhận một chuỗi bit có chiều dài tùy ý ( hữu hạn) làm dữ liệu đầu vào và

tạo ra một chuỗi bit có chiều dài cố định bằng n bit, gọi là mã băm. Sự thay đổi nhỏ của

chuỗi đầu vào cũng làm thay đổi giá trị băm. Ký hiệu D là miền xác định, R là miền giá trị

của hàm băm h(x).

h(x) : D R

Ta có số lượng phần tử của tập D lớn hơn giá trị của tập R hàm băm h(x) không phải

là đơn ánh Luôn tồn tại cặp đầu vào khác nhau có cùng giá trị băm.

10

Giả sử hạn chế hàm h(x) trên miền xác định chỉ bao gồm các chuỗi bit có chiều dài t

( t>n). Nếu h(x) là ngẫu nhiên với tất cả các giá trị đầu ra của nó có xác suất bằng nhau thì

có khoảng 2(t-n) đầu ánh xạ vào mỗi giá trị đầu ra. Xác suất để hai giá trị( có chiều dài bằng

nhau) đầu vào ánh xạ vào cùng một giá trị là 2-n(không phụ thuộc vào t) Nếu n lơn thì 2-

n sẽ rất nhỏ. Như vậy mặc dù biết trước giá trị băm nhưng để tìm một đầu vào có cùng giá

trị băm với giá trị băm đã biết là rất khó nếu chọn được h(x) thích hợp và n đủ lớn.

Trong lĩnh vực mã hóa thông tin, mã băm được xem như đặc trưng thu gọn của một

chuỗi bit tùy ý và dùng để nhận ra chuỗi bit đó. Hàm băm chính là công cụ để tạo ra chữ

ký số và đảm bảo an toàn dữ liệu

Ý tưởng chính của phương pháp xác thực thông điệp bằng hàm băm là

A gửi cho B cặp tin (X, Y), trong đó X là bản tin,  Y là đại diện bản tin X,

  tức là  Y= h (X),  h là hàm băm.

Khi nhận được (X, Y),  B  tính lại   h(X) = Z. Nếu  Z  = Y, thì  B chắc chắn rằng X

được bảo toàn, không bị sửa đổi trên đường truyền.

II.1.1. Định nghĩa

Hàm băm là một giải thụât nhằm sinh ra các giá trị băm tương ứng với mỗi khối dữ

liệu. Giá trị băm đóng vai trò gần như một khóa để phân biệt các khối dữ liệu

II.1.2. Phân loại

Nhìn chung hàm băm có thể chia làm hai lớp, lớp các hàm băm có khóa (keyed hash

funtion) và lớp các hàm băm không có khóa (unkeyed hash funtion). Các hàm băm không

khóa là hàm băm dữ liệu đầu vào chỉ là một thông điệp. Các hàm băm có khóa ngoài đầu

11

vào là thông điệp còn có một khóa bí mật, nếu không có khóa bí mật này thì không thể

băm thông điệp đầu vào theo đúng quy định.

Nếu phân chia theo chức năng thì hàm băm được chia thành hai lớp chức năng là

MDC (modification detection code – mã phát hiện thay đổi) là lớp con của các hàm băm

không khóa và MAC (message authentication code – mã xác nhận thông điệp) là lớp con

của các hàm có khóa.

Hình 5: Phân loại hàm băm

II.1.3. Các tính chất

- Có thể áp dụng với thông điệp đầu vào có độ dài bất kì

- Tạo ra giá trị băm y = h(x) có độ dài cố định.

- H(x) tính được dễ dàng với mọi x

- Tính một chiều: với một y cho trước không thể tìm được x’ sao cho h(x’) bằng y

cho trước

- Tính chống xung đột yếu : Với mọi dữ liệu đầu vào x1 cho trước không thể tìm

được bất kỳ giá trị x2 nào (x2 khác x1) mà h(x2) = h(x1).

- Tính chống xung đột mạnh : Không thể tính toán để tìm được hai dữ liệu đầu vào

x1 và x2 phân biệt sao cho chúng có cùng giá trị băm (h(x1) = h(x2))

II.1.4. Cấu trúc cơ bản của một hàm băm

Thành phần chính của hàm băm là một hàm nén và các hàm biến đổi khác. Hàm nén

được thực thi nhiều lần để băm thông điệp ban đầu thành một chuỗi có chiều dài cố định.

Các hàm biến đổi khác (có thể có hoặc không) nhận vào một chuỗi bit sau lần cuối cùng

thực thi hàm nén và cho

12

Hình 6: Cấu trúc tổng quát của hàm băm

Có rất nhiều thuật toán hàm băm cho đến nay đều sử dụng chung một cấu trúc cơ bản.

Cụ thể một hàm băm thường gồm các bước sau:

Thông điệp đầu vào x có chiều dài hữu hạn tùy ý sẽ được phân thành các khối

thông điệp con liên tiếp có chiều dài cố định r (giả sử là x1, x2, …, xk).

Do x có chiều dài bất kì nên cần thêm vào các bit phụ sao cho chiều dài của chuỗi

mới x’ là bội số của r (trong các bit thêm vào thường có kèm 64 bit để lưu lại

chiều dài ban đầu của chuỗi trước khi thêm).

Mỗi khối thông điệp con x1, x2, …, xk lần lượt sẽ đi qua hàm nén f của hàm băm

h(x)

Kết quả của khối thứ xi-1 sau khi đi qua hàm nén f sẽ là nguồn dữ liệu đầu vào cho

bước thứ i tiếp theo.

Kết quả ký hiệu IV là giá trị ban đầu (cho H0 ), thì quá trình lặp xử lý dãy các khối con

x1,x2,..,xm được mô tả :

H0 = IV

Hi = f(Hi-1,xi) (i = 1,2,..,m)

h(x) = g(Hm)

- Các biến Hi (kết quả trung gian sau bước thư i) là các biến dây chuyền

- Hàm g(x) lấy biến dây chuyền cuối cùng để tạo ra mã băm cuối cùng cần tìm.

Trong hầu hết các thuật toán g(x) thường được chọn là ánh xạ đồng nhất tức là

g(Hm) = Hm

- Khâu then chốt trong xây dựng hàm băm là thiết kế hàm nén f

13

- Giá trị của hàm băm mật mã của một thông điệp được gọi là Message Digest (MD).

Một số hàm băm mật mã thông dụng : MD4,MD5 và SHA-1

II.1.5. Một số hàm băm cơ bản và thông dụng

II.1.5.1. Hàm băm MD4

Đầu vào: là thông điệp a có độ dài x bit

Đầu ra: Bản băm có độ dài cố định 128 bit đại diện cho thông điệp gốc a

Thuật toán bao gồm 4 bước:

Bước 1: Khởi tạo các thanh ghi

Có 4 thanh ghi để 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.

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

Xử lý thông điệp a trong 16 khối word, 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.

Bước 3: Vòng lặp

Các khối dữ liệu 512 bit đi qua ba vòng lặp mỗi vòng 16 bước. Vòng một sử dụng hàm

F: F(X, Y, Z) = (X ¿ Y) ¿ ((¬X) ¿ Z ), vòng 2 sử dụng hàm G: G(X, Y, Z) = (X¿ Y)

¿ (X ¿ Z) ¿ (Y ¿ Z), vòng 3 thực hiện hàm H: H(X, Y, Z) = X ⊕ Y ⊕ Z.

Ba vòng trong MD4 là hoàn toàn khác nhau. Mỗi vòng gồm một trong 16 word trong

T được xử lý. Các phép toán được thực hiện trong ba 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 ở bước 4 bằng cách cộng ngược các

giá trị lưu trước đó ở bước 2, bước3. 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 modul 232.

14

Trong đó:

- 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 đi s vị trí (0≤ s ≤31)

Bước 4: Xuất kết quả

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 x bit.

Đoạn mã này thu được từ 4 thanh ghi A, B, C, D: bắt đầu từ byte thấp nhất của thanh ghi

A cho đến byte cao nhất của thanh ghi D.

II.1.5.2. Hàm băm 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à MD4). Nó tạo ra một chữ ký số 128-bit, và

hiện nay được sử dụng khá rộng rãi. Như trong chứng thực CHAP của PPP, hoặc trong

việc chứng thực của các giao thức định tuyến như EIGRP, OSPF, IS-IS, BGP.

15

II.1.5.2.1. 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.

- 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.

Giải thuật gồm 5 bước thao tác trên khối 512 bits.

Bước 1 : Nhồi thêm dữ liệu

Nhồi thêm các bits sao cho dữ liệu có độ dài I = 448 mod 512 hay I = n *512

+ 448 (n, I nguyên)

Luôn thực hiện việc nhồi dữ liệu ngay cả khi dữ liệu ban đầu có độ dài mong

muốn . Ví dụ dữ liệu 448 bits được nhồi thêm 512 bits để được độ dài 960

bits

Số lượng bit nhồi thêm nằm trong khoảng 1 đến 512

Các bit được nhồi gồm 1 bit “1” và theo sau là các bit “0”

Bước 2: thêm vào độ dài

Độ dài của khối dữ liệu ban đầu được biểu diễn dưới dạng nhị phân 64 bit và

được thêm vào cuối chuỗi nhị phân kết quả bước 1

Nếu độ dài của khối dữ liệu ban đầu > 264, chỉ 64 bit thấp được sử dụng,

nghĩa là giá trị được thêm vào bằng K mod 264

Kết quả thu được là một khối dữ liệu có độ dài là bội số của 512. Khối dữ

liệu được biểu diễn:

Bằng 1 dãy L khối 512 – bit Yo, Y1, …, YL-1

Bằng một dãy N từ (word) 32 bit M0, M1, …, MN-1 Vậy N = L x 16

(32 x 16 = 512)

16

Bước 3: Khởi tạo bộ đệm MD

Một độ đệm 128 bit được dùng để lưu trữ các giá trị băm trung gian và kết

quả. Bộ đệm được diểu diễn bằng 4 thanh ghi 32 bit với các giá trị khởi tạo

ở dạng little – endian (đầu nhỏ - byte có trọng số nhỏ nhất nằm ở địa chỉ

thấp nhất) như sau:

A= 67 45 23 01

B = EF CD AB 89

C = 98 BA DC FE

D = 10 32 54 76

Các giá trị này tương ứng với các từ 32 bit như sau:

A = 01 23 45 67

B = 89 AB CD EF

C = FE DC BA 98

D = 76 54 32 10

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

Trọng tâm là hàm nén gồm 4 vòng xử lý. Các vòng có cấu trúc giống nhau

nhưng sử dụng các hàm luận lý khác nhau gồm F,G,H và I

F(X,Y,Z) = X ˄ Y ˅ � X ˄ Z

G(X,Y,Z) = X ˄ Z ˅ Y ˄ � Z

H(X,Y,Z) = X xor Y xor Z

I(X,Y,Z) = Y xor (X ˅ � Z)

Mảng 64 phần tử được tính theo công thức: T[i] = 232 x abs(sin(i)), i được

tính theo radian.

Kết quả của 4 vòng được cộng theo modulo 232 với đầu vào CVq để tạo

CVq+1

17

Các giá trị trong bảng T

T[1] = d76aa478

T[2] = e8c7b756

T[3] = 242070db

T[4] = c1bdceee

T[5] = f57c0faf

T[6] = 4787c62a

T[7] = a8304613

T[8] = fd469501

T[9] = 698098d8

T[10] = 8b44f7af

T[11] = ffff5bb1

T[12] = 895cd7be

T[13] = 6b901122

T[14] = fd987193

T[17] = f61e2562

T[18] = c040b340

T[19] = 265e5a51

T[20] = e9b6c7aa

T[21] = d62f105d

T[22] = 2441453

T[23] = d8a1e681

T[24] = e7d3fbc8

T[25] = 21e1cde6

T[26] = c33707d6

T[27] = f4d50d87

T[28] = 455a14ed

T[29] = a9e3e905

T[30] = fcefa3f8

T[33] = fffa3942

T[34] = 8771f681

T[35] = 6d9d6122

T[36] = fde5380c

T[37] = a4beea44

T[38] = 4bdecfa9

T[39] = f6bb4b60

T[40] = bebfbc70

T[41] = 289b7ec6

T[42] = eaa127fa

T[43] = d4ef3085

T[44] = 4881d05

T[45] = d9d4d039

T[46] = e6db99e5

T[49] = f4292244

T[50] = 432aff97

T[51] = ab9423a7

T[52] = fc93a039

T[53] = 655b59c3

T[54] = 8f0ccc92

T[55] = ffeff47d

T[56] = 85845dd1

T[57] = 6fa87e4f

T[58] = fe2ce6e0

T[59] = a3014314

T[60] = 4e0811a1

T[61] = f7537e82

T[62] = bd3af235

18

T[15] = a679438e

T[16] = 49b40821

T[31] = 676f02d9

T[32] = 8d2a4c8a

T[47] = 1fa27cf8

T[48] = c4ac5665

T[63] = 2ad7d2bb

T[64] = eb86d391

Bước 5: Xuất kết quả

Sau khi xử lý hết L khối 512-bit, đầu ra của lần xử lý thứ L là giá trị băm 128 bits.

Giải thuật MD5 được tóm tắt như sau:

- CV0 = IV

- CVq+1 = SUM32[CVq,RFI(Yq,RFH(Yq,RFG(Yq,RFF(Yq,CVq))))]

- MD = CVLi1

Với các tham số

- IV: bộ đệm gồm 4 thanh ghi ABCD

- Yq: khối dữ liệu thứ q gồm 512 bits

- L: số khối 512ibit sau khi nhồi dữ liệu

- CVq: đầu ra của khối thứ q sau khi áp dụng hàm nén

- RFx: hàm luận lý sử dụng trong các “vòng” (F,G,H,I)

- MD: message digest – giá trị băm

- SUM32: cộng modulo 232

II.1.5.2.2. Hàm nén

Mỗi vòng thực hiện 16 bước thực hiện các phép toán để cập nhật giá trị buffet ABCD, mỗi

bước được mô tả như sau:

A= B + ((A + L(B,C,D) + X[k] + T[i]) <<< s)

Trong đó:

- A,B,C,D: các từ của thanh ghi

- L: một trong các hàm F,G,H,I

- <<< s : dịch vòng trái s bits

- Mi ~ X[k]: từ 32-bit thứ k của khối dữ liệu 512 bits.k=1..15

- Ki ~ T[i]: giá trị thứ i trong bảng T.

- +: phép toán cộng modulo 232

19

Vòng 1 dùng hàm F, Với giá trị t từ 1 -> 16 và k từ 1 -> 15. Vòng 2 dùng hàm G, với t từ

17 -> 32 và k = 1 + 5k mod 16. Vòng 3 dùng hàm H, với t từ 33 -> 48 và k =5 + 3k mod

16. Vòng 4 dùng hàm I, với t từ 49 -> 64 và k =7k mod 16

Hình 7: Hàm nén MD5

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 tahy đổ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.

II.1.5.2.3. Ứng dụng của MD5.

Các đồng hóa MD5 được dùng rộng rãi trong các phần mềm trên toàn thế giới để đảm

bảo việc truyền tập tin được nguyên vẹn. Ví dụ, máy chủ tập tin thường cung cấp một

checksum MD5 được tính toán trước cho tập tin, để người dùng có thể so sánh với

checksum của tập tin đã tải về. Những hệ điều hành dựa trên nền tảng Unix luôn kèm theo

tính năng MD5 sum trong các gói phân phối của họ, trong khi người dùng Windows sử

dụng ứng dụng của hãng thứ ba.

20

Tuy nhiên, hiện nay dễ dàng tạo ra xung đột MD5, một người có thể tạo ra một tập tin

để tạo ra tập tin thứ hai với cùng một checksum, do đó kỹ thuật này không thể chống lại

một vài dạng giả mạo nguy hiểm. Ngoài ra, trong một số trường hợp checksum không thể

tin tưởng được (ví dụ, nếu nó được lấy từ một lệnh như tập tin đã tải về), trong trường hợp

đó MD5 chỉ có thể có chức năng kiểm tra lỗi: nó sẽ nhận ra một lỗi hoặc tải về chưa xong,

rất dễ xảy ra khi tải tập tin lớn.

MD5 được dùng rộng rãi để lưu trữ mật khẩu. Để giảm bớt sự dễ thương tổn đề cập ở

trên, ta có thể thêm salt vào mật khẩu trước khi băm chúng. Một vài hiện thực có thể áp

dụng vào hàm băm hơn một lần-xem làm mạnh thêm khóa.

So với MD4 thì MD5 phát triển hơn, thay vì có 3 chu kì biến đổi như trong MD4 thì

MD5 bổ sung thêm chu kì thứ 4 để tăng mức độ an toàn.

Trong mỗi chu kì MD5 sử dụng hằng số Ki để phân biệt, trong khi MD4 chỉ sử dụng

chung hằng số cho mọi thao tác trong cùng chu kì biến đổi. Hàm G ở chu kì 2 của MD4:

G ( X ,Y , Z )=( ( X∧Z )∨ ( X∧Y )∨ (Y∧Z )) được thay thế bằng hàm

G ( X ,Y , Z )=( X∧Y )∨ ( Y∧ (¬ Z ) ) để giảm tính đối xứng. Mỗi bước biến đổi trong từng chu

kì chịu ảnh hưởng kết quả của phép biến đổi trước, vì vậy làm tăng nhanh tốc độ của hieuj

ứng lan truyền. Các hệ số dịch chuyển xoay vòng trong mỗi chu kỳ được tối ưu hóa nhằm

tăng tốc độ hiệu ứng lan truyền. Ngoài ra, mỗi chu kỳ sử dụng bốn hệ số dịch chuyển khác

nhau.

II.1.5.3. Hàm băm SHA-1

SHA-1 (Sercue Hash Algorithm) là thuật toán do viện Tiêu chuẩn và Công nghệ Hoa

Kỳ đề xuất và đang được sử dụng rộng rãi. SHA dựa trên kỹ thuật MD5, nhưng nó an toàn

hơn nhiều. SHA có nhiều phiển bản, SHA-1 tạo ra chữ ký số 160-bit, còn trong SHA-256,

SHA-348, SHA-512 thì sẽ tạo chữ ký số tương ứng là 256-bit, 348-bit, 512-bit.

Giải thuật SHA-1 tính toán kết quả băm dài 160 bit đối với thông điệp có độ dài nhỏ

hơn 2^64 bit. Giải thuật có độ dài của từ là 32 bit, chính vì vậy chuỗi biến được chia

thành 5 thanh ghi ( A, B, C, D, E) 32 bit mỗi thanh. Hàm nén làm việc với khối thông điệp

512 bit, khối được chia thành 16 từ 32 bit biểu diễn bởi Wj với j = 1, .., 15.

Bên trong, hàm nén chia thành 80 bước liên tiếp. Một sự phân biệt nữa là việc chia

vòng: nó có 4 vòng, mỗi vòng gồm 20 bước. Phép tính bước của SHA-1 theo mẫu sau:

E ← E + fr(B, C, D) + A<<5 + Wj + Ur

B ← B<<30

21

Mỗi bước tính giá trị mới cho 2 trong 5 thanh ghi. Trong trường hợp này ta xét đến

bước cập nhật giá trị cho thanh ghi E và cũng quay giá trị của thanh ghi B một khoảng 30

bit về bên trái. Phép tính cập nhật giá trị cho thanh ghi E phụ thuộc vào 4 thanh ghi còn

lại và theo :

- Từ mang thông điệp Wj với j ={0,1,..,79}

- Hàm Boolean fr phụ thuộc vào vòng.

- Hằng số thêm vào Ur phụ thuộc vào vòng.

Hàm Boolean được sử dụng ở các vòng khác nhau trong hàm nén là hàm lựa chọn, đa

số và exor. Hàm exor được sử dụng trong vòng 2 và 4. 16 từ đầu tiên Wj ( j = 0,1,…,15)

bằng với khối thông điệp đầu vào của hàm nén. 64 từ còn lại Wj ( j = 16, …, 79) được tính

bằng thủ tục sau cho thông điệp mở rộng:

Wj = ( Wj-3 xor Wj-8 xor Wj-14 xor Wj-16)<<1

Hình sau biểu diễn việc tính bước trong SHA-1. 5 bước liên tiếp cập nhật giá trị cho

thanh ghi E, D, C, B, A tương ứng và cung quay giá trị của thanh ghi B, A, E, D, C đi 30

bit vị trí sang bên trái. Sau 5 bước chuỗi biến được cập nhật hoàn chỉnh. Một vòng của

hàm nén bao gồm bốn chuỗi của 5 bước. Mỗi thanh ghi được cập nhật 4 lân trong mỗi

vòng và 16 lần trong hàm nén.

Hình 8 : SHA-1

22

Tuy nhiên sau 80 bước , hàm nén sử dụng phép toán feed-forward để thêm các giá trị

khởi tạo vào giá trị cuối. Kết quả là chuỗi biến đầu ra của hàm nén. Vì vậy hàm nén không

bị nghịch đảo.

II.1.5.3.1. Nguyên lý

Giải thuật SHA – 1 được chia thành năm bước thao tác trên các khối 512 bits.

Bước 1: Nhồi thêm dữ liệu

Thông điệp được nhồi thêm các bits sao cho độ dài l ≡ 448 mod 512 hay l = n *

512 + 448 (n,l nguyên)

Thông điệp luôn luôn được nhồi thêm dữ liệu

Số bits nhồi thêm nằm trong khoảng 1 đến 512

Phần dữ liệu nhồi thêm bao gồm một bit 1 và theo sau là các bit 0

Bước 2: Thêm vào độ dài

Độ dài của khối dữ liệu ban đầu được biểu diễn dưới dạng nhị phân 64-bit và

được thêm vào cuối chuỗi nhị phân kết quả của 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ả có được từ 2 bước đầu là một khối dữ liệu có độ dài là bội số của 512.

Khối dữ liệu được biểu diễn:

o Bằng một dãy L khối 512-bit Y0, Y1,…, YL-1

o Bằng một dãy N từ (word) 32-bit M0, M1, MN-1. Vậy N = L x 16 (32 x 16

= 512)

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 big-

endian (byte có trọng số lớn nhất trong từ nằm ở địa chỉ thấp nhất) như sau:

o A = 01234567

o B = 89ABCDEF

o C = FEDCBA98

o D = 76543210

o E = C3D2E1F0

Các giá trị này tương đương với các từ 32-bit sau:

o A = 01234567

o B = 89ABCDEF

o C = FEDCBA98

o D = 76543210

o E = C3D2E1F0

23

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

Trọng tâm của giải thuật bao gồm 4 vòng lặp thực hiện tất cả 80 bước.4 vòng lặp

có cấu trúc như nhau, chỉ khác nhau ở các hàm logic f1, f2, f3, f4

Mỗi vòng có đầu vào gồm khối 512-bit hiện thời và một bộ đệm 160-bit

ABCDE. Các thao tác sẽ cập nhật giá trị bộ đệm

Chia khối dữ liệu đã nhồi thêm (cuối bước 2) thành 16 nhóm (mỗi nhóm gồm 32

bit) theo thứ tự là W0, W1,…, W15

Mỗi bước sử dụng một hằng số Kt (0 ≤ t ≤ 79)

o Kt = 5A827999 (0 ≤ t ≤ 19)

o Kt = 6ED9EBA1 (20 ≤ t ≤ 39)

o Kt = 8F1BBCDC (40 ≤ t ≤ 59)

o Kt = CA62C1D6 (60 ≤ t ≤ 79)

Đầu ra của 4 vòng (bước 80) được cộng với giá trị của bộ đệm (CVq) để tạo ra

một chuỗi kết quả dài 160 bit (CVq+1)

Hình 9: Vòng lặp

24

Bước 5: Xuất kết quả

Sau khi thao tác trên toàn bộ L blocks. Kết quả của khối thứ L là bảng băm 160-

bit

Giải thuật được tóm tắt như sau:

o CV0 = IV

o CVq+1 = SUM32(CVq, ABCDEq)

o MD = CVL

Với

o IV = giá trị khởi tạo của bộ đệm ABCDE

o ABCDEq = đầu ra của hàm nén trên khối thứ q

o L = số khối 512-bit của thông điệp

o SUM32 = phép cộng modulo 232 trên từng từ (32 bits) của đầu vào

o MD = giá trị băm

II.1.5.3.2. Hàm nén

Giải thuật thực hiện tất cả 80 bước, mỗi bước được mô tả như sau:

o A ß E + f(t, B, C, D) + S5(A) + Wt + Kt

o B ß A

o C ß S30(B)

o D ß C

o E ß D

Trong đó

o A,B,C,D,E = các từ trong bộ đệm

o t = số thứ tự của bước

o F(t,B,C,D) = làm logic tại bước t

o Sk = dịch vòng trái k bits

o Wt = từ thứ t của khối dữ liệu

o Kt = hằng số

o + = phép cộng modulo 232

25

Các hàm ft

Bước Hàm Giá trị

(0 ≤ t ≤ 19) ft = f(t,B,C,D) (B ˄ C) ˅ ( � B ˄ D)

(20 ≤ t ≤ 39) ft = f(t,B,C,D) B xor C xor D

(40 ≤ t ≤ 59) ft = f(t,B,C,D) (B ˄ C) ˅ (B ˄ D) ˅ (C ˄ D)

(60 ≤ t ≤ 79) ft = f(t,B,C,D) B xor C xor D

Từ 16 từ 32-bit từ khối dữ liệu đầu vào, mở rộng thành 80 từ Wt

o Với 0 ≤ t ≤ 15, giá trị Wt lấy trực tiếp từ khối dữ liệu

o Với t > 15 : Wt = S1(Wt-16 xor Wt-14 xor Wt-8 xor Wt-3)

II.1.5.3.3. Nhận xét

Chuẩn SSH đặc tả năm thuật toán băm an toàn SHA-1, SHA-2243, SHA-256, SHA-

384 và SHA-512. Sự khác biệt chính của các thuật toán là số lượng bit bảo mật của dữ liệu

được băm – điều này ảnh hưởng trực tiếp đến chiều dài của thông điệp rút gọn. Khi một

thuật toán băm được sử dụng kết hợp với các thuật toán khác phải cho kết quả có số lượng

bit tương ứng.

26

Các tính chất của các thuật toán băm an toàn:

Thuật

toán

Kích thước (đơn vị: bit) Độ an toàn

(Đơn vị:bit)Thông điệp Khối Từ Thông điệp rút gọn

SHA-1 < 264 512 32 160 80

SHA-224 < 264 512 32 224 112

SHA-256 < 264 512 32 256 128

SHA-384 < 2128 1024 64 384 192

SHA-512 < 2128 1024 64 512 256

Hàm băm có nhiều ứng dụng trong thực tế như:

- Tạo khóa bí mật từ mật khẩu (Key Stretching)

- Kiểm tra tính toàn vẹn dữ liệu (Integrity checking)

- Mã chứng thực thông điệp sử dụng hàm băm (HMAC i Hashed Message

Authentication Code)

- Chữ kí điện tử

II.2. Hàm mã hóa xác thực

II.2.1. Hàm mã hóa DES

DES (viết tắt của Data Encryption Standard, hay tiêu chuẩn mã hóa dữ liệu) là phương

pháp mật mã hóa được FIPS (tiêu chuẩn xử lý thông tin Liên bang Hoa Kỳ) chọn làm

chuẩn chính thức vào năm 1976. DES được xem là không đủ an toàn cho nhiều ứng dụng

chủ yếu là do độ dài khóa là 56 bit quá nhỏ để đảm bảo an toàn.

II.2.1.1. Thuật toán

DES là một thuật toán mã hóa khối: nó xử lý từng khối thông tin bản rõ có độ dài xác

định và biến đổi theo những quá trình phức tạp để trở thành khối thông tin của bản mã có

độ dài không thay đổi. Độ dài của mỗi khối trong DES là 64 bit, DES cũng sử dụng khóa

để cá biệt hóa quá trình chuyển đổi. Do đó, chỉ những bên nào biết khóa mới có thể giải

mã được văn bản mã. Khóa dùng trong DES có độ dài là 64 bit, tuy nhiên chỉ có 56 bit

thực sự được sử dụng, 8 bit còn lại chỉ dùng cho việc kiểm tra. Vì vậy, độ dài thực tế của

khóa chỉ là 56 bit.

Thuật toán có 16 chu trình giống nhau trong quá trình xử lý. Ngoài ra còn có hai lần

hoán vị đầu và cuối. Hai quá trình này có tính chất đối nhau. Trong quá trình mã hóa thì IP

thực hiện trước FP, còn trong khi giải mã thì ngược lại). IP và FP không có vai trò gì khi

27

xét về mặt mật mã học và việc sử dụng chúng chỉ có ý nghĩa đáp ứng cho quá trình đưa

thông tin vào và lấy thông tin ra từ các khối phần cứng của thập niên 1970. Trước khi đi

vào chu trình chính, khối thông tin 64 bit được tách làm hai phần 32 bit và mỗi phần này

sẽ được sử lý tuần tự (được gọi là mạng Feistel).

Cấu trúc của thuật toán (mạng Feistel) đảm bảo rằng quá trình mã hóa và giải mã diễn

ra tương tự. Điểm khác nhau chỉ ở chỗ các khóa con được sử dụng theo trình tự ngược

nhau. Do đó mà thuật toán trở nên đơn giản, đặc biệt là khi được thực hiện bằng phần

cứng.

Hàm F làm biến đổi một nửa của khối đang xử lý với một khóa con. Đầu ra sau hàm F

được kết hợp với nửa còn lại của khối và hai phần được tráo đổi để xử lý trong chu trình

kế tiếp.

Sơ đồ cơ bản của DES: đầu vào của DES là khối độ dài 64 bits, đầu ra 64 bits và khóa là

56 bits.

28

Hình 10 : Sơ đồ giải thuật sinh mã DES với cấu trúc 16 vòng lặp

II.2.1.2. Quá trình tạo khóa con

Đầu tiên, từ 64 bit ban đầu của khóa, 56 bit được chọn, 8 bit còn lại loại bỏ. 56 bit thu

được chia làm 8 phần bằng nhau, mỗi phần được xử lý độc lập. Sau mỗi chu trình, mỗi

phần được dịch đi 1 hoặc 2 bit (tùy thuộc từng chu trình nếu đó là các chu trình 1,2, 9, 16

thì dịch 1 bit, còn lại sẽ dịch 2 bit). Các khóa con 48 bit được tạo thành bởi thuật toán lựa

chọn gồm 24 bit từ mỗi phần. Quá trình dịch bit khiến cho các khóa con sử dụng các bit

khác nhau của khóa chính; mỗi bit được sử dụng trung bình ở 14 trong tổng số 16 khóa

con.

Quá trình tạo khóa con khi thực hiện giải mã cũng diễn ra tương tự nhưng các khóa

con được tạo theo thứ tự ngược lại. Ngoài ra sau mỗi chu trình, khóa sẽ được dịch phải

thay vì dịch trái như khi mã hóa

29

Hình 11: Quá trình tạo khóa con trong DES

II.2.1.3. Hàm Feistel (F)

Hình 12: Hàm F dùng trong DES

Hàm F hoạt động trên khối 32 bit và bao gồm bốn giao đoạn:

Mở rộng: 32 bit đầu vào được mở rộng thành 48 bit sử dụng thuật toán hoán vị mở

rộng với việc nhân đôi một số bit. Giai đoạn này được kí hiệu là E trong sơ đồ

Trộn khóa: 48 bit thu được sau quá trình mở rộng được XOR với khóa con. 16 khóa

con 48 bit được tạo ra từ khóa chính 56 bit theo chu trình tạo khóa con miêu tả ở

phần sau.

Thay thế: 48 bit sau khi được trộn được chia thành 8 khối con 6 bit và được xử lý

qua hộp thay thế S – box. Đầu ra của mỗi khối 6 bit là là một khối 4 bit theo một

chuyển đổi phi tuyến được thực hiện bằng một bảng tra. Khối S – box đảm bảo

phần quan trọng cho độ an toàn của thuật toán DES

Hoán vị: Cuối cùng, 32 bit thu được sau S – box sẽ được sắp xếp lại theo một thứ tự

cho trước

30

II.2.1.4. Cấu trúc vòng lặp DES

Mỗi vòng lặp của DES thực hiện trên cơ sở công thức sau:

(Li,Ri) = (Ri-1, Li-1 f (Ri-1,Ki))

trong đó, (Li,Ri) là 2 nửa trái và phải thu được từ biến đổi của vòng lặp thứ i.

Ta cũng có thể viết lại

(Li,Ri) = T F (Ri-1,Ki))

Trong đó F là phép thay thế Li-1 bằng Li-1 ⨁ f (Ri-1,Ki), còn T là phép đổi chỗ hai

thành phần L và R. Tức là mỗi biến đổi vòng lặp của DES có thể coi là một tích hàm số

của F và T (trừ vòng cuối cùng không có T).

Ta có thể viết lại toàn bộ thuật toán sinh mã DES dưới dạng công thức tích hàm số như

sau:

II.2.1.5. Một vài đặc điểm về cách giải mã

DES có tính chất bù:

EK ( P )=C⟺EK ( P )=C

Trong đó xlà phần bù của x theo từng bít (1 thay bằng 0 và ngược lại). E klà bản mã

hóa của E với khóa K. Pvà Clà văn bản rõ (trước khi mã hóa) và văn bản mã (sau khi mã

hóa). Do tính bù, ta có thể giảm độ phức tạp của tấn công bạo lực xuống 2 lần (tương ứng

với 1 bít) với điều kiện là ta có thể lựa chọn bản rõ.

Ngoài ra DES còn có 4 khóa yếu (weak keys). Khi sử dụng khóa yếu thì mã hóa (E) và

giải mã (D) sẽ cho ra cùng kết quả:

E k (Ek ( P ) )=P hoặc equivalently, E k=Dk

Bên cạnh đó, còn có 6 cặp khóa nửa yếu (semi-weak keys). Mã hóa với một khóa

trong cặp, K1, tương đương với giải mã với khóa còn lại, K2:

EK1 (EK2( P ) )=P hoặc equivalently, EK2

=DK1

31

Tuy nhiên có thể dễ dàng tránh được những khóa này khi thực hiện thuật toán, có thể

bằng cách thử hoặc chọn khóa một cách ngẫu nhiên. Khi đó khả năng chọn phải khóa yếu

là rất nhỏ.

DES đã được chứng minh là không tạo thành nhóm. Nói một cách khác, tập hợp {E k }(cho tất cả các khóa có thể) theo phép hợp thành không tạo thành một nhóm hay gần với

một nhóm (Campbell and Wiener, 1992). Vấn đề này đã từng là một câu hỏi mở trong khá

lâu và nếu như tạo thành nhóm thì DES có thể bị phá vỡ dễ dàng hơn bởi vì việc áp dụng

DES nhiều lần (ví dụ như trong Triple DES) sẽ không làm tăng thêm độ an toàn của DES.

II.2.2. Hàm mã hóa 3DES

Thuật toán mã hóa 3DES là một biến thể của DES.

Thuật toán mã hóa 3DES gồm 3 chìa khóa 64 bit, tổng chiều dài khóa là 192 bit. Trong

khi mã hóa riêng tư, đơn giản là nhập toàn bộ 192 bit khóa đơn vào mỗi ba chìa khóa cá

nhân.

Thủ tục mã hóa của 3DES tương tự như DES nhưng nó lặp lại 3 lần tức là tăng lên 3

lần DES. Dữ liệu được mã hóa với chìa khóa đầu tiên, và được giải mã với chìa khóa thứ

2, sau đó lần nữa lại được mã hóa với chìa khóa thứ 3 để thu được dữ liệu mã hóa cuối

cùng.

Do thuật toán 3DES được mã hóa 3 lần DES với không gian khóa lớn nên an toàn hơn

nhiều so với DES. Tuy nhiên cũng vì điều đó mà tốc độ mã hóa sẽ chậm hơn so với DES.

Và so với khối dữ liệu ngày nay thì mã hóa bằng 3DES là không hiệu quả.

II.2.3. Hàm mã hóa AES

AES được phát triển dựa trên DES, trải qua quá trình nghiên cứu trong vòng 5 năm.

Thuật toán được thiết kế bởi hai nhà mật mã học người Bỉ: Joan Daemen và Vincent

Rijmen

32

Khác với với DES sử dụng mạng Feistel, Rijndael sử dụng mạng thay thế-hoán vị.

AES có thể dễ dàng thực hiện với tốc độ cao bằng phần mềm hoặc phần cứng và không

đòi hỏi nhiều bộ nhớ. Do AES là một tiêu chuẩn mã hóa mới, nó đang được triển khai sử

dụng rộng rãi trong nhiều ứng dụng.

AES làm việc với khối dữ liệu (đầu vào và đầu ra) là 128 bit và khóa có độ dài là 128 ,

192 hay 256 bit. Quá trình mã hóa của AES gồm 4 bước:

Bước AddRoundKey

Tại bước này, khóa con được kết hợp với các khối. Khóa con trong mỗi chu trình

được tạo ra từ khóa chính với quá trình tạo khóa con Rijndael; mỗi khóa con có độ dài

giống như các khối. Quá trình kết hợp được thực hiện bằng cách XOR từng bít của

khóa con với khối dữ liệu.

Bước SubBytes

Các byte được thế thông qua bảng tra S-box. Đây chính là quá trình phi tuyến của

thuật toán. Hộp S-box này được tạo ra từ một phép biến đổi khả nghịch trong trường

hữu hạn GF (28) có tính chất phi tuyến. Để chống lại các tấn công dựa trên các đặc tính

đại số, hộp S-box này được tạo nên bằng cách kết hợp phép nghịch đảo với một phép

biến đổi affine khả nghịch. Hộp S-box này cũng được chọn để tránh các điểm bất động

(fixed point).

33

Bước ShiftRows

Các hàng được dịch vòng một số bước nhất định. Đối với AES, hàng đầu được giữ

nguyên. Mỗi byte của hàng thứ 2 được dịch vòng trái một vị trí. Tương tự, các hàng thứ

3 và 4 được dịch vòng 2 và 3 vị trí. Do vậy, mỗi cột khối đầu ra của bước này sẽ bao

gồm các byte ở đủ 4 cột khối đầu vào. Đối với Rijndael với độ dài khối khác nhau thì số

vị trí dịch chuyển cũng khác nhau.

Bước MixColumns

Bốn byte trong từng cột được kết hợp lại theo một phép biến đổi tuyến tính khả

nghịch. Mỗi khối 4 byte đầu vào sẽ cho một khối 4 byte ở đầu ra với tính chất là mỗi

byte ở đầu vào đều ảnh hưởng tới cả 4 byte đầu ra. Cùng với bước ShiftRows,

MixColumns đã tạo ra tính chất khuyếch tán cho thuật toán. Mỗi cột được xem như một

đa thức trong trường hữu hạn và được nhân với đa thức c ( x )=3 x3+x2+x+2 modul x4+1.

Vì thế, bước này có thể được xem là phép nhân ma trận trong trường hữu hạn.

34

Đối với các hệ thống 32 bít hoặc lớn hơn, ta có thể tăng tốc độ thực hiện thuật toán

bằng cách sát nhập các bước SubBytes, ShiftRows, MixColumns và chuyển chúng

thành dạng bảng. Có cả thảy 4 bảng với 256 mục, mỗi mục là 1 từ 32 bít, 4 bảng này

chiếm 4096 byte trong bộ nhớ. Khi đó, mỗi chu trình sẽ được bao gồm 16 lần tra bảng

và 12 lần thực hiện phép XOR 32 bít cùng với 4 phép XOR trong bước AddRoundKey.

Trong trường hợp kích thước các bảng vẫn lớn so với thiết bị thực hiện thì chỉ dùng

một bảng và tra bảng kết hợp với hoán vị vòng quanh.

Phần III. Các giao thức xác thực

Xác thực là hành động nhằm thiết lập hoặc chứng thực một cái gì đó đáng tin cậy. Xác

thực một đối tượng còn có nghĩa là công nhận nguồn gốc của đối tượng. Việc xác thực còn

phụ thuộc vào một hay nhiều nhân tố xác thực để chứng minh cụ thể.

Trong an ninh máy tính, xác thực là một qui trình nhằm cố gắng xác minh nhận dạng

số của phần truyền gửi thông tin trong giao thông liên lạc, chẳng hạn như một yêu cầu

đăng nhập. Phần gửi cần phải xác thực có thể là một người sử dụng một máy tính, bản

thân một máy tính hoặc một chương trình ứng dụng máy tính.

Xác thực bao gồm:

- Xác thực nguyên bản dữ liệu: Thiết lập phiên liên lạc với một nguồn định

trước. Kiểm tra tính hợp lệ của dữ liệu, tức là làm rõ định danh của thực thể

truyền dữ liệu, kiểm tra xem dữ liệu có thực đến từ nguồn mà bên nhận mong đợi

hay không. Kiểm tra tính toàn vẹn dữ liệu. Kiểm tra tính tươi của dữ liệu ( tính

sống của nguồn).

- Xác thực thực thể: Là một giao thức cho phép một thực thể thiết lập một giao

tiếp sống với một thực thể thứ hai mà định danh của thực thể này đúng là định

danh mà thực thể thứ nhất yêu cầu. Có nhiều kịch bản xác thực thực thể:35

+ Kiểu Host- Host

+ Kiểu User - Host

+ Kiểu Progress – Host

+ Kiểu Member - Club

- Thiết lập khóa có xác thực: Thiết lập khóa có xác thực (Authenticated key

establishment ) = Xác thực (Authentication) + Trao đổi khóa hoặc thỏa thuận

(Key transport or Key Agreement).

Một số người nhầm lẫn giữa ủy quyền với xác thực. Các thỏa thuận xác thực với câu

hỏi về bạn có đang thực sự giao tiếp với một quá trình cụ thể hay không. Ủy quyền có liên

quan với những gì mà quá trình đó được phép làm. Ví dụ, một quá trình client giao tiếp

với một tệp tin server và nói: “I am Scott’s process and I want to delete the file

cooklook.old”. Từ phía tệp tin server có hai câu hỏi cần dược trả lời:

1. Đây có thực sự là tiến trình của Scott ? ( xác thực)

2. Có phải Scott được phép xóa tệp cooklook.old ? (ủy quyền)

Chỉ sau khi cả hai câu hỏi này được trả lời một cách rõ ràng trong khẳng định có thể đã

yêu cầu hành động diễn ra. Câu hỏi trước trong số hai câu hỏi được đề cập đến là một

trong những chìa khóa. Một khi tệp tin server biết ai đang nói chuyện, kiểm tra ủy quyền

chỉ là một vấn đề của việc tìm kiếm các mục trong các bảng cục bộ hoặc cơ sở dữ liệu. Vì

lí do này chũng ta sẽ tập trung và vấn đề xác thực.

Tuy nhiên, khi các giao thức được thiết lập, A chắc chắn rằng đang nói chuyện với B

và B chắc chắn rằng đang nói chuyện với A. Hơn nữa, hầu hết các giao thức, hai trong số

chúng cũng sẽ được thiết lập một khóa phiên bí mật cho cuộc nói chuyện sắp diễn ra.

Trong thực tế, tất cả cá dữ liệu đều được mã hóa sử dụng mật mã khóa đối xứng (điển hình

AES hoặc bộ ba DES), mặc dù mật mã khóa công khai được sử dụng rộng rãi cho các giao

thức xác thực của tự chúng và để thiết lập khóa phiên.

Lựa chọn ngẫu nhiên cho mỗi kết nối mới là để tối thiểu hóa số lượng lưu lượng được

gửi với các khóa bí mật của người dùng hoặc các khóa công khai, để giảm số lượng văn

bản viết thành mật mã mà một kẻ xâm nhập có thể đạt được và giảm thiểu thiệt hại nếu

một quá trình gặp nạn và bộ nhớ của nó rơi vào tay kẻ xấu. Hi vọng rằng, chỉ khóa hiện tại

sau đó sẽ là khóa phiên.

Sau đây là một số giao thức xác thực:

36

III.1. Xác thực dựa trên một khóa bí mật được chia sẻ

Giao thức xác thực đầu tiên của ta, ta sẽ giả sử rằng Alice và Bob sẵn sàng chia sẻ một

khóa bí mật K AB. Khóa chia sẻ này có thể được thỏa thuận trên điện thoại hoặc cá nhân,

nhưng trong mọi trường hợp không phải trên mạng (không an toàn).

Giao thức này được dựa trên một nguyên tắc được tìm thấy trong nhiều giao thức xác

thực: một bên gửi một số ngẫu nhiên đến bên nhận, bên nhận sau khi chuyển đổi nó một

cách đặc biệt và trả về kết quả . Giao thức này được gọi là giao thức thách thức-đáp ứng.

Các ký hiệu sau sẽ được sử dụng trong các giao thức xác thực:

- A, B là danh tính của Alice và Bob

- R j’s là những thách thức, với chỉ số j danh tính người yêu cầu.

- K i là các khóa, với i là chỉ số chủ sở hữu.

- KS là khóa phiên.

Trình tự thông điệp cho giao thức xác thực khóa chia sẻ đầu tiên được minh họa trong

Hình13

Hình13

Thông báo 1, Alice gửi danh tính của cô ấy (A) cho Bob theo cách mà Bob hiểu. Bob,

tất nhiên không có cách nào biết được thông báo này đến từ Alice hay từ Trudy, vì thế anh

ta chọn một thách thức, một số ngẫu nhiên lớn, RB, và gửi nó lại cho “Alice” như một

thông báo 2 trong bản rõ. Các số ngẫu nhiên chỉ được sử dụng một lần trong giao thức

challenge-response. Alice sau khi mã hóa thông báo với khóa mà cô chia sẻ với Bob và

gửi bản mã K AB ¿¿) trở lại,thông báo 3. Khi Bob nhìn thấy thông báo này, anh ấy ngay lập

tức biết rằng nó đến từ Alice bởi vì Trudy không biết khóa K AB và vì thế không thể tạo ra

nó. Hơn nữa, kể từ khi RB được chọn ngẫu nhiên từ một khoảng rộng, nó không chắc chắn

rằng Trudy đã thấy RB và phản ứng của nó từ một phiên trước đó. Nó giống như không

chắc chắn rằng Alice có thể đoán được phản hồi đúng từ bất kỳ yêu cầu nào.

37

Ở điểm này. Bob chắc chắn rằng mình đang nói chuyện với Alice, nhưng Alice lại

không chắc chắn mọi thứ. Tất cả những gì Alice biết, Trudy có thể chặn thông báo 1 và

gửi lại đáp ứng RB. Để tìm ra người mà cô đang nói chuyện cùng, Alice chọn một số ngẫu

nhiên RA và gửi nó đến Bob như bảng mã trong thông báo 4. Khi Bob đáp ứng K AB(RA),

Alice biết rằng cô ấy đang nói chuyện với Bob. Nếu bây giờ họ muốn thiết lập một khóa

phiên, Alice có thể chọn một khóa KS và gửi nó đến Bob mã hóa với khóa K AB.

Giao thức trong Hình.1 gồm 5 thông báo. Ta có thể loại bỏ một vài giao thức trong số

chúng. Được minh họa trong Hình.14:

Hình.14

Tại đây Alice bắt đầu giao thức thách thức-đáp ứng thay vì chờ đợi Bob làm điều đó.

Tương tự như vậy, trong khi Bob đang đáp ứng yêu cầu của Alice, anh ấy gửi sở hữu của

anh ấy. Toàn bộ giao thức có thể giảm còn ba thông báo thay vì năm thông báo.

Giao thức mới này có cải tiến hơn bản gốc không? Theo một nghĩa nào đó thì nó ngắn

hơn. Thật không may, nó cũng là sai. Trong những trường hợp nhất định, Trudy có thể làm

thất bại giao thức này bằng cách sử dụng những gì được biết như phản ánh cuộc tấn công.

Đặc biệt Trudy có thể phá vỡ nó nếu nó có thể mở nhiều phiên với Bob cùng một lúc.

Trường hợp này sẽ đúng, ví dụ, nếu Bob là một ngân hàng và được chuẩn bị để chấp nhận

một vài kết nối đồng thời máy rút tiền cùng một lúc.

Sự phản xạ tấn công của Trudy được thể hiện trong Hình.15:

Hình.15

38

Thông báo bắt đầu từ Trudy tuyên bố cô ta là Alice và gửi RT . Bob đáp ứng lại, như

thường lệ, với yêu cầu của chính mình (RB). Bây giờ Trudy ở trong thế bí. Cô ta có thể làm

gì? Cô ta không biết khóa K AB(RB¿. Cô ta có thể mở một phiên thứ hai với thông báo 3,

cung cấp khóa RBnhận được từ thông báo 2 giống như yêu cầu của cô ta. Bob mã hóa nó

và gửi lại khóa K AB(RB¿ trong thông báo 4. Chúng ta đã tô bóng thông báo trong phiên thứ

hai để làm cho chúng nổi bật. Bây giờ, thông tin mà Trudy có còn thiếu, vì thế cô ta có thể

hoàn thành phiên đầu tiên và hủy bỏ phiên thứ 2. Bob hiện nay tin rằng Trudy là Alice, do

đó, khi cô ta yêu cầu số dư tài khoàn ngân hàng của mình, anh ấy đưa nó cho cô ta mà

không có câu hỏi nào. Sau đó khi cô ta yêu cầu anh ta chuyển nó đến một tài khoản ngân

hàng bí mật ở Thụy Sĩ, anh ta làm như vậy mà không do dự chút nào.

Bài học từ câu chuyện này là:

Thiết kế một giao thức xác thực chính xác có vẻ khó hơn.

Bốn qui tắc chung sau đây:

1. Có người khởi xướng chứng tỏ cô ta là ai trước khi trả lời có. Trong trường hợp

này, Bob cho đi thông tin có giá trị trước khi Trudy phải đưa ra bất kỳ bằng

chứng nào chỉ ra cô ta là ai.

2. Có người bắt đầu và người đáp ứng khi sử dụng các khóa khác nhau để chứng

minh, ngay cả khi nếu điều này có nghĩa là có 2 khóa được chia sẻ, K AB và K 'AB

.

3. Có người khởi xướng và người đáp ứng đưa ra những yêu cầu của họ từ các bộ

khác nhau. Ví dụ, người khởi xướng phải dùng những số chẵn và người đáp ứng

phải dùng những số lẻ.

4. Tạo ra giao thức có sức chịu đựng với các cuộc tấn công liên quan đến phiên thứ

hai song song, ở đó thông tin thu được trong một phiên được dùng trong một

phiên khác.

Nếu thậm chí một trong những qui định này bị vi phạm, giao thức có thể thường xuyên

bị phá vỡ. Ở đây tất cả bốn qui tắc bị vi phạm với hậu quả thảm khốc.

Bây giờ cùng quay lại và có cái nhìn gần hơn ở Hình.1. Chắc chắn giao thức đó không

phải là tấn công phản chiếu? Trudy đã có thể đánh bại giao thức của chúng ta bằng cách sử

dụng tấn công phản chiếu bởi vì cô có thể mở một phiên thứ hai với Bob và lừa anh ta trả

lời các câu hỏi của mình. Điều này sẽ xảy ra nếu phía Alice là một máy tính đa năng cũng

được chấp nhận nhiều phiên, chứ không phải là một máy tính cá nhân. Ta có thể xem xét

những gì Trudy có thể làm:

39

Hình.16

Xem các tấn công của Trudy trong Hình.16. Alice bắt đầu bằng việc công bố danh tính

của cô trong thông báo 1. Trudy ngắt thông báo này và bắt đầu phiên của riêng mình với

thông báo 2, tự xưng là Bob. Một lần nữa ta đã đánh bóng thông báo phiên thứ 2. Alice

trả lời đến thông báo 2 bằng cách nói rằng: Bạn tự cho là Bob? Chứng minh điều đó trong

thông báo 3. Lúc này Trudy gặp khó khăn vì cô ấy không thể chứng minh cô ấy là Bob.

Trudy làm gì bây giờ? Cô ấy quay lại phiên đầu tiên, ở đó đến lượt mình gửi một yêu

cầu và gửi RA mà cô ta đã nhận được trong thông báo 3. Alice vui lòng đáp ứng đến nó

trong thông điệp 5, do đó cung cấp cho Trudy thông tin mà cô ấy cần để gửi thông điệp 6

trong phiên thứ 2. Tại thời điểm này, Trudy về cơ bản là thành công đáp ứng yêu cầu của

Alice trong phiên thứ 2. Bây giờ cô ấy có thể hủy phiên thứ nhất, gửi qua bất kỳ một số cũ

nào cho phần còn lại của phiên thứ 2, và cô ta sẽ có một phiên xác thực với Alice trong

phiên 2.

Thay vì gửi bất kỳ số cũ qua để hoàn thành phiên thứ 2, Trudy đợi cho đến khi Alice

gửi thông báo 7, yêu cầu của Alice cho phiên 1. Tất nhiên Trudy không biết cách đáp ứng,

vì thế cô ta lại sử dụng tấn công phản chiếu, gửi lại RA 2 như một thông báo 8. Alice thuận

tiện mã hóa RA 2 trong thông báo 9, Trudy bây giờ chuyển trở lại phiên 1 và gửi cho Alice

số mà cô ta muốn trong thông báo 10, sao chép thuận tiện từ những gì Alice đã gửi trong

thông báo 9. Tại thời điểm này Trudy có đầy đủ 2 phiên xác thực với Alice.

Cuộc tấn công này có kết quả hơi khác so với cuộc tấn công trên giao thức ba thông

báo được hiển thị trong Hình.2. Lần này Trudy có 2 kết nối xác thực với Alice. Trong ví

dụ trước, cô ta có một kết nối xác thực với Bob. Lại ở đây, nếu ta áp dụng tất cả các qui

40

tắc giao thức xác thực chung thảo luận ở trên, cuộc tấn công này có thể bị dừng lại. Một

cuộc thảo luận chi tiết về các loại tấn công và làm cách nào để ngăn chặn chúng được đưa

ra. Chúng cũng cho thấy làm thế nào để có khả năng xây dựng hệ thống giao thức mà có

thể chứng minh là đúng. Giao thức đơn giản nhất vẫn có một chút phức tạp, do đó, ta sẽ

hiển thị một lớp giao thức khác mà cũng hoạt động.

III.2. Thiết lập kháo chia sẻ: Khóa trao đổi Diffie – Hellman

Ta giả sử rằng Alice và Bob chia sẻ một khóa bí mật. Làm cách nào để học có thể thiết

lập một khóa? Một cách cho Alice để gọi Bob và đưa cho anh ta khóa của mình trên điện

thoại, nhưng anh ta có lẽ sẽ bằng cách nói rằng: Làm sao tôi biết rằng bạn là Alice và

không phải Trudy? Họ có thể cố gắng sắp xếp một cuộc họp với mỗi người mang một hộ

chiếu, một giấy phép điều khiển, và ba thẻ tín dụng chính, nhưng là những người bận rộn,

họ có thể không có khả năng tìm kiếm một ngày chấp nhận lẫn nhau trong nhiều tháng.

May mắn thay, không thể tin được là có thể có âm thanh, đó là một cách cho người hoàn

toàn xa lạ thiết lập một chia sẻ khóa bí mật vào ban ngày, ngay cả với Trudy cẩn thận ghi

lại tất cả các thông báo.

Giao thức mà cho phép những người lạ thiết lập một khóa bí mật chia sẻ được gọi là

Diffie-Hellman key exchange và hoạt động như sau: Alice và Bob phải đồng ý trên hai số

lớn n và g, n là một số nguyên tố, (n-1)/2 cũng là một số nguyên tố và một số điều kiện áp

dụng đối với g. Những số này có thể được công khai, do đó, một trong hai người họ chỉ có

thể chọn n và g và nói với nhau một cách công khai. Bây giờ, Alice chọn một số lớn x

(521-bit), và giữ nó bí mật. Tương tự, Bob cũng chọn một số lớn y.

Alice bắt đầu giao thức khóa trao đổi bằng cách gửi cho Bob một thông báo bao gồm

(n, g, gxmod n), như trong Hình.17

Hình.17

41

Bob đáp ứng bằng cách gửi đến Alice một thông báo gồm gymod n. Bây giờ Alice

làm tăng số lượng Bob đã gửi cho cô ấy thành lũy thừa của x mod n để nhận (gy mod n)x

mod n. Bob thực hiện một hành động tương tự để nhận được

(gx mod n) y mod n. Alice và Bob bất ngờ chia sẻ một khóa bí mật gxymod n.

Trudy tất nhiên đã nhìn thấy cả 2 thông báo. Cô ta biết g và n từ thông báo 1. Nếu cô

ta có thể tính x và y, cô ta có thể tìm ra khóa bí mật. Rắc rối lđược đưa ra là chỉ có gx mod n

, cô ta không thể tìm x. Không có thuật toán thực tế để tính toán logarit modulo rời rạc một

số lượng rất lớn số nguyên tố được biết đến.

Để làm ví dụ trên cụ thể hơn, ta sẽ sử dụng các giá trị (hoàn toàn không thực tế) n=47

và g=3. Alice chọn x=8 và Bob chọn y=10. Cả hai được giữ bí mật. Thông báo của Alice

đến Bob là (47,3,28). Thông báo của Bob đến Alice là (17). Alice tính 178mod 47 bằng 4.

Bob tính 2810mod 47 bằng 4. Alice và Bob độc lập xác định rằng khóa bí mật bây giờ là 4.

Trudy phải giải quyết phương trình 3xmod 47 = 28, có thể thực hiện bằng cách tìm kiếm

toàn diện cho các số nhỏ như vậy, nhưng không phải khi tất cả các số là dài hàng trăm bit .

Tất cả các thuật toán hiện đang được biết đến chỉ đơn giản là mất nhiều thời gian, thậm trí

song song ồ ạt trên siêu máy tính.

Vấn đề của thuật toán Diffie-Hellman: khi Bob nhận được bộ ba (47, 3, 28), làm cách

nào anh ấy biết được nó đến từ Alice và không phải từ Trudy? Không có cách nào để anh

ấy biết được. Thật không may, Trudy có thể lợi dụng sự thật này để đánh lừa cả Alice và

Bob, điều này được minh họa trong Hình.7:

Hình.18

Ở đây, Alice và Bob đang chọn x và y tương ứng, Trudy chọn số ngẫu nhiên z của

riêng mình. Alice gửi thông báo 1 dành cho Bob. Trudy chặn nó và gửi cho Bob thông báo

2, bằng cách sử dụng đúng g và n (được công khai bất kỳ cách nào) nhưng với z của riêng

mình thay vì x. Cô ta cũng có thể gửi thông báo 3 lại cho Alice. Sau đó Bob gửi thông báo

4 đến Alice, cái mà một lần nữa Trudy ngắt và giữ lại.

Alice tính toán khóa bí mật gxzmod n, và như thế thực hiện với Trudy (cho thông báo

đến Alice). Bob tính toán gyzmod n và như vậy thực hiện với Trudy (cho thông báo đến

Bob). Alice nghĩ rằng cô ấy đang nói chuyện với Bob vì thế cô ấy thiết lập một khóa phiên

(với Trudy). Như vậy thực hiện với Bob. Mọi thông báo mà Alice gửi trên phiên được mã

42

hóa là được bắt bởi Trudy, được lưu trữ, được sửa nếu muốn, và sau đó (tùy chọn) thông

qua đến Bob. Tương tự trong hướng khác. Trudy thấy mọi thứ và có thể sửa tất cả các

thông báo theo ý thích, trong khi cà Bob và Alice dưới ảo tưởng rằng họ có một kênh an

toàn với nhau.

III.3. Xác thực sử dụng khóa phân phối trung tâm

Thiết lập một chia sẻ bí mật với một người lạ gần như được giải nhưng không hoàn

toàn đúng. Mặt khác, nó có lẽ không có giá trị thực hiện ở nơi đầu tiên. Để nói chuyện với

n người theo cách này, bạn nên cần n khóa. Đối với những người phổ biến, quản lý khóa

sẽ trở thành một gánh nặng thực sự, đặc biệt nếu mỗi khóa được lưu trên một thẻ chip

mềm dẻo.

Một cách tiếp cận khác là để giới thiệu một trung tâm phân phối khóa tin cậy (KDC-

Key Distribution Center). Trong mô hình này, mỗi người dùng có một khóa độc lập chia

sẻ với KDC. Xác thực và quản lý khóa phiên bây giờ đi qua KDC. Đơn giản nhất được

biết đến giao thức xác thực KDC liên quan đến hai bên và KDC tin cậy được mô tả trong

Hình.8:

Hình.19

Ý tưởng của giao thức này đơn giản: Alice chọn một khóa phiên KS, và nói với KDC

rằng cô ấy muốn nói chuyện với Bob sử dụng khóa KS. Thông điệp này được mã hóa với

khóa bí mật Alice chỉ chia sẻ với KDC khóa K A. Trung tâm phân phối khóa giải mã thông

báo này, rút ra nét nhận dạng của Bob và khóa phiên. Nó sau khi khởi tạo một thông báo

mới bao gồm nét nhận dạng của Alice và khóa phiên, gửi thông báo này đến cho Bob. Mã

hóa này được thực hiện với K B, khóa bí mật Bob chia sẻ với KDC. Khi Bob giải mã thông

báo, anh ấy biết rằng Alice muốn nói chuyện với mình khóa mà cô ấy muốn sử dụng.

Xác thực ở đây xảy ra tự nhiên. Trung tâm phân phối khóa biết rằng thông báo 1 phải

đến từ Alice, vì không ai khác có thể mã hóa nó với khóa bí mật của Alice. Tương tự, Bob

biết rằng thông báo 2 phải đến tử KDC, người mà anh tin tưởng, vì không ai khác biết

khóa bí mật của anh.

Thật không may giao thức này có một lỗ hổng nghiêm trọng. trudy cần một ít tiền, vì

thế cô ta tìm ra một vài dịch vụ hợp pháp cô ta có thể thực hiện cho Alice, tạo một yêu cầu

43

hấp dẫn và nhận một công việc. Sau khi làm việc, sau đó Trudy yêu cầu lịch sự với Alice

thanh toán bằng chuyển khoản ngân hàng. Alice sau khi thiết lập một khóa phiên với ngân

hàng của mình là Bob. Sau đó cô ấy gửi đến Bob một tin nhắn yêu cầu tiền được chuyển

vào tài khoản của Trudy.

Trong lúc ấy, Trudy quay lại với những cách cũ của mình, rình mò trên mạng. Cô ta

sao chéo cả thông báo 2 trong Hình.8 và yêu cầu chuyển tiền ngay sau đó. Sau đó, Trudy

làm lại cả hai trong số đó đến Bob. Bob nhận chúng và nghĩ rằng: Alice phải trả công

Trudy một lần nữa. Cô ấy rõ rang có thể làm tốt công việc. Bob sau đó chuyển một số tiền

từ tài khoản của Alice đến tài khoản của Trudy. Một thời gian sau cặp thin nhắn số 50, bob

chạy ra ngoài để tìm Trudy đưa ra đề nghị cô ấy một khoản vay lớn vì thế cô ta có thể mở

rộng kinh doanh của ấy rõ ràng là thành công. Vấn đề này được gọi là “phản công”.

Một số giải pháp để để “phản công” khả thi. Đầu tiên là bao gồm một nhãn thời gian

cho mỗi thông báo. Sau đó nếu bất kỳ ai nhận được một thông báo lỗi thời, nó có thể bị

loại bỏ. Rắc rối với cách tiếp cận này là các đồng hồ không bao giờ đồng bộ chính xác trên

một mạng, vì vậy đó phải là một khoảng thời gian trong khoảng đó một nhãn thời gian có

hiệu lực. Trudy có thể phát lại thông báo trong khoảng thời gian này và mất nó.

Giải pháp thứ hai là đặt một thời gian hiện tại trong mỗi thông báo. Mỗi bên phải nhớ

tất cả nhãn thời gian hiện tại trước đó và từ chối bất kỳ thông báo nào bao gồm một thời

gian hiện tại đã được sử dụng trước đó. Nhưng các thời gian hiện tại phải được nhớ mãi

mãi. Vì sợ rằng Trudy thử phát lại một thông báo 5 năm trước. Hơn nữa, nếu một vài máy

hỏng và nó mất danh sách thời gian hiện tại của nó, nó có thể bị tấn công trong khi tấn

công. Nhãn thời gian và các thời gian hiện tại có thể được kết hợp để hạn chế các thời gian

hiện tại được nhớ trong bao lâu, nhưng rõ ràng giao thức sẽ có nhiều phức tạp.

Cách tiếp cận phức tạp hơn để xác thực lẫn nhau là sử dụng một giao thức thách thức-

đáp ứng nhiều nhánh. Tiêu biểu là giao thức Needham-Schroeder (Hình.9)

Hình.20

Giao thức bắt đầu với việc Alice nói với KDC rằng cô ấy muốn nói chuyện với Bob.

Thông báo này bao gồm một số ngẫu nhiên lớn RA , như thời gian hiện tại. KDC gửi trả lại

thông báo 2 bao gồm số ngẫu nhiên của Alice, một khóa phiên và một thẻ mà cô ấy có thể

44

gửi đến Bob. Đặc điểm của số ngẫu nhiên RA là đảm bảo với Alice rằng thông báo 2 là

mới, và không phải phát lại. Danh tính của Bob cũng kèm theo trong trường hợp Trudy có

bất kỳ ý tưởng hài hước nào về việc thay thế B trong thông báo 1 với danh tính của cô ta

vì thế KDC sẽ mã hóa thẻ ở cuối của thông báo 2 với KT thay vì K B. Thẻ được mã hóa với K B bao gồm bên trong các thông báo được mã hóa để ngăn chặn Trudy thay thế nó với cái

khác trên đường quay lại đến Alice.

Alice bây giờ thẻ đến Bob, cùng với một số ngẫu nhiên mới RA 2, mã hóa với khóa

phiên KS. Trong thông báo 4, Bob gửi trả lại KS ¿-1) để chứng minh với Alice rằng cô ấy

đang nói chuyện đúng với Bob. Gửi lại KS (RA2) sẽ không làm việc, kể từ khi Trudy có thể

đánh cắp nó từ thông báo 3.

Sau khi nhận thông báo 4, Alice bây giờ được thuyết phục rằng cô ấy đang nói chuyện

với Bob và rằng không phát lại có thể được sử dụng cho đến nay. Sau đó tất cả, cô ấy chỉ

tạo ra RA 2 một vài mini giây trước. Mục đích của thông điệp 5 là để thuyết phục rằng nó

thực sự là Alice người mà anh ấy đang nói chuyện với và không phải là phát lại. Cả hai

bên tạo ra một thách thức và đáp ứng tới bên kia, khả năng của bất kỳ loại phản công nào

được loại bỏ.

Mặc dù giao thức này có vẻ khá vững chắc, nó có một điểm yếu nhẹ. Nếu từ trước đến

giờ Trudy quản lý để đạt được một khóa phiên cũ trong bản rõ, cô ta có thể bắt đầu một

phiên mới với Bob bằng cách phát lại thông báo 3 tương ứng với khóa thỏa hiệp và thuyết

phục anh ấy rằng cô ta là Alice. Lần này cô ta có thể tước đoạt tài khoản ngân hàng của

Alice mà không cần phải thực hiện các dịch vụ hợp pháp dù chỉ một lần.

III.4. Xác thực sử dụng Kerberos

Một giao thức đã sử dụng trong một vài hệ thống thực (Windows 2000) đó là

Kerberos, được đặt trên một biến thể của giao thức Needham-Schoeder. Nó được đặt tên

cho một con chó nhiều đầu trong thần thoại Hy Lạp. Kerberos được thiết kế ở M.I.T để

cho phép máy trạm những người sử dụng truy cập tài nguyên mạng một cách an toàn. Sự

khác biệt lớn nhất của nó từ Needham-Schroeder là giả định rằng tất cả các đồng hồ được

đồng bộ khá tốt. Giao thức trải qua một số lần lặp. V4 là phiên bản được sử dụng rộng rãi

nhất trong ngành công nghiệp, vì thế chúng ta sẽ mô tả nó.

Kerberos bao gồm 3 máy chủ bổ sung đến Alice:

- Authentication Server (AS): xác minh người dùng trong quá trình đăng nhập.

- Ticket-Granting Server (TGS): đưa ra “chứng minh của nhận dạng thẻ”

- Bob the Server : thực sự làm việc Alice muốn thực hiện.

AS giống như một KDC ở chỗ nó chia sẻ một mật khẩu bí mật với mỗi người sử dụng.

Công việc của TGS là để phát hành các thẻ mà có thể thuyết phục các máy chủ thực sự mà

người đưa tin của một thẻ TGS thực sự là người mà anh (cô) ấy tuyên bố.

45

Để bắt đầu một phiên, Alice ngồi tại một máy trạm công cộng tùy ý và đánh máy tên

của cô. Máy trạm gửi tên của cô ấy đến AS một bản rõ (Hình.10).

Hình.21

Quay trở lại một khóa phiên và một thẻ là KTGS(A,KS), dành cho TGS. Những mục này

được đóng gói với nhau và mã hóa sử dụng khóa bí mật của Alice, vì thế chỉ có Alice mới

có thể giải mã chúng. Thông báo 2 chỉ đến khi các máy trạm yêu cầu nhập mật khẩu của

Alice. Mật khẩu sau khi được sử dụng để tạo ra K A trong thứ tự để giải mã thông báo 2 và

có được khóa phiên và thẻ TGS bên trong nó. Lúc này, các máy trạm ghi đè mật khẩu của

Alice để đảm bảo rằng nó chỉ bên trong maý trạm khoảng một vài mini giây. Nếu Trudy

cố gắng đăng nhập như Alice, mật khẩu cô ta nhập sẽ sai và máy trạm sẽ phát hiện ra điều

này bởi vì phần tiêu chuẩn của thông báo 2 sẽ không chính xác.

Sau khi Alice đăng nhập, cô ấy có thể nói cho máy trạm rằng cô ấy muốn liên hệ với

Bob máy chủ tập tin. Máy trạm sau khi gửi thông báo 3 đến TGS yêu cầu một thẻ để sử

dụng với Bob. Yếu tố quan trọng trong yếu cầu này là KTGS ( A , K s) , cái mà được mã hóa

với khóa bí mật của TGS và được dùng như bằng chứng rằng người gửi chính là Alice.

TGS đáp ứng bằng cách tạo một khóa phiên K AB cho Alice sử dụng với Bob.

Hai phiên bản của nó được gửi trả lại. Đầu tiên là má hóa chỉ với KS, do đó Alice có

thể đọc nó. Thứ hai là được mã hóa với khóa của Bob, vì thế Bob có thể đọc nó.

Trudy có thể sao chép thông báo 3 và cố gắng sử dụng nó một lần nữa, nhưng cô ta sẽ

thất bại bởi các nhãn thời gian đã được mã hóa t, đã gửi cùng với nó. Trudy không thể thay

đổi nhãn thời gian với một cái gần đây, bởi vì cô không biết KS, khóa phiên Alice dùng để

nói chuyện với TGS. Thậm chí nếu Trudy phát lại thông báo 3 một cách nhanh chóng, tất

cả cô ta sẽ nhận được một bản sao chép khác của thông báo 4, cái mà cô ta không thể giải

mã lần đầu tiên và cũng sẽ không thể giải mã lần thứ hai.

46

Bây giờ Alice có thể gửi K ABtới Bob để thiết lập một phiên với anh ấy. Trao đổi này

cũng được gán nhãn thời gian. Đáp ứng là chứng minh với Alice rằng cô ấy thực sự đang

nói chuyện với Bob, chứ không phải Trudy.

Sau hàng loạt những trao đổi này, Alice có thể liên lạc với Bob dưới sự che chở của K AB. Nếu sau đó cô ấy quyết định cô ấy cần nói chuyện với một máy chủ khác là Carol

chẳng hạn. cô ấy chỉ lặp lại thông báo 3 đến TGS, bây giờ chỉ cần xác định C thay vì B.

TGS sẽ đáp ứng kịp thời với một thẻ được mã hóa với KC mà Alice có thể gửi cho Carol

và Carol sẽ chấp nhận như chứng minh rằng nó đến từ Alice.

Trọng điểm của tất cả các công việc này là bây giờ Alice có thể truy cập các máy chủ

trên toàn mạng một cách an toàn và mật khẩu của cô ấy không bao giờ phải qua mạng.

Trong thực tế, nó chỉ có được trong máy trạm của riêng mình khoảng một vài mini giây.

Tuy nhiên, chú ý rằng mỗi máy chủ thực thực hiện sở hữu ủy quyền của nó. Khi Alice

trình bày thẻ của cô ấy tới Bob, đây chỉ đơn thuần chứng minh với Bob người đã gửi nó.

Chính xác đó là những gì Alice được phép để làm cho Bob.

Kể từ khi các nhà thiết kế Kerberos đã không mong đợi toàn thế giới tin tưởng một

máy chủ xác thực duy nhất , họ đã thực hiện cung cấp cho nhiều lĩnh vực, mỗi lĩnh vực với

sở hữu Á và TGS của nó. Để nhận một thẻ cho một máy chủ trong một lĩnh vực xa, Alice

sẽ hỏi TGS riêng của mình cho một thẻ đã chấp nhận bởi TGS trong lĩnh vực xa đó. Nếu

TGS ở xa được đăng ký với TGS cục bộ, TGS cục bộ cung cấp cho Alice một thẻ hợp lệ

tại TGS ở xa. Sau đó cô ấy có thể làm công việc kinh doanh ở trên đó, chẳng hạn như nhận

thẻ cho các máy chủ trong lĩnh vực đó. Lưu ý, tuy nhiên điều đó cho các bên tham gia

trong hai lĩnh vực để kinh doanh, với mỗi người tin tưởng TSG của người khác.

Kerberos V5 là lôi cuốn hơn V4 và có thêm chi phí hoạt động. nó cũng sử dụng OSI

ASN.1cho mô tả các loại dữ liệu và có thay đổi nhỏ trong các giao thức. Hơn nữa, nó có

tuổi thọ thẻ dài hơn, cho phép các thẻ được phục hồi lại, và sẽ phát ra những thẻ ghi ngày

tháng muộn hơn.

III.4. Xác thực sử dụng mật mã khóa công khai

Xác thực lẫn nhau cũng có thể được sử dụng mật mã khóa công khai. Để bắt đầu,

Alice cần nhận khóa công khai của Bob. Nếu một PKI tồn tại với một thư mục máy chủ

nắm giữ việc chứng nhận khóa công khai, Alice có thể yêu cầu khóa công khai của Bob

được chỉ ra trong Hình.11 như thông báo 1. Trả lời trong thông báo 2, là một chứng nhận

X.509 bao gồm khóa công khai của Bob. Khi Alice kiểm tra rằng chữ kí là chính xác, cô

ấy gửi cho Bob một thông báo bao gồm danh tính của cô ấy và một thời gian hiện tại.

47

Hình.22

Khi Bob nhận được thông báo này, anh ấy không có ý gì cho dù nó đến từ Alice hay

Trudy, nhưng anh ấy hoạt động cùng và yêu cầu thư mục máy chủ cho khóa công khai của

Alice (thông báo 4) cái mà mà anh ấy sớm nhận được trong thông báo 5. Sau đó anh ấy

gửi cho Alice một thông báo bao gồm RA của Alice và thời gian hiện tại của mình RB và đề

xuất một khóa phiên KS dưới dạng thông báo 6.

Khi Alice nhận được thông báo 6, cô ấy giải mã nó sử dụng khóa riêng của mình. Cô

ấy nhìn thấy RA trong đó, cái mà mang lại cho cô cảm giác tin tưởng. thông báo phải đến

từ Bob, kể từ khi Trudy không có cách để xác định RA. Hơn nữa, nó phải là mới và không

phát lại kể từ khi cô chỉ cần gửi cho Bob RA. Alice đồng ý phiên bằng cách gửi lại thông

báo 7. Khi Bob nhìn thấy RB đã mã hóa với khóa phiên vừa mới tạo ra, anh ấy biết rằng

Alice đã nhận được thông báo 6 và đã xác nhận RA.

Trudy có thể làm gì để cố gắng phá giao thức này? Cô ta có thể chế tạo thông báo 3 và

lừa Bob và thăm dò Alice, nhưng Alice sẽ nhìn thấy một RA mà cô ấy đã không gửi và

không tiến hành thêm. Trudy không thể giả mạo thông báo 7 trở lại cho Bob bởi vì cô ta

không biết RB hoặc KS và không thể xác định chúng mà không có khóa riêng của Alice.

48

Phần IV. Thử nghiệm

Thực hiện trên phần mềm Hashcalc là phần mềm kiểm tra mã MD5. Phần mềm rất đơn

giản cho biết mã băm MD5 của một file, một text string hay một hex string đầu vào. Ngoài

ra phần mềm cũng cho biết mã băm của một số hàm băm khác như MD4, SHA

Ví dụ mã băm của text string: BÀI TOÁN XÁC THUC THÔNG DIEP

Ta tiến hành kiểm tra mã MD5 của chuỗi: Que huong anh nuoc man dong chua và Que

huong anh nuoc man dong cua. Hai chuỗi tuy chỉ mất đi một chữ cái “h” nhưng mã băm

rất khác nhau:

49

Mã băm của khoảng trắng

Ngoài ra để kiểm tra mã băm của một chuỗi nào đó bạn có thể vào website:

http://www.md5decrypt.org/

50

KẾT LUẬN

Việc đòi hỏi an toàn trong giao dịch cũng như trao đổi thông điệp được đặt lên hàng

đầu vì vậy việc xác thực thông điệp là một vấn đề rất quan trọng trong giao dịch hiện nay,

đặc biệt là trong giao dịch trực tuyến. Khi nhận được một thông điệp như thư, hợp đồng,

đề nghị,…vấn đề đặt ra là làm sao để xác định được đúng đối tác giao dịch và nguồn gốc

của thông điệp. Trên thực tế có nhiều phương pháp xác thực thông điệp khác nhau nhưng

nhìn chung có 3 phương pháp chủ yếu: xác thực bằng mã xác thực, xác thực dùng hàm mã

hóa và xác thực dùng hàm băm. Mỗi phương pháp tuy có khác nhau nhưng đều nhằm mục

đích xác định thực thể giao tiếp và thông điệp được truyền đi đảm bảo an toàn thông tin

khỏi những kẻ tấn công làm giả mạo hay thay đổi thông điệp.

51

TÀI LIỆU THAM KHẢO

1. http://www.vi.wikipedia.org , http://www.vi.scribd.com …

2. Slide bài giảng An ninh mạng – Nguyễn Linh Giang

3. Giáo trình An toàn và bảo mật thông tin (nhiều sách của nhiều tác giả, giáo viên

khác nhau)

4. W.Stallings “Cryptography and network security”

52