ham bam va mo hinh random oracle_bai tap het mon

37
HỌC VIỆN KỸ THUẬT QUÂN SỰ KHOA CÔNG NGHỆ THÔNG TIN --------O0O-------- BÀI TẬP MÔN LÝ THUYẾT MẬT MÃ VÀ BẢO MẬT THÔNG TIN Tên đề tài: Hàm băm mật mã và mô hình random oracle Giáo viên hướng dẫn: PGS. TS Nguyễn Hiếu Minh Nhóm thực hiện: 1. Nguyễn Hữu Nhạn 2. Vũ Thị Thanh Huyền 3. Trần Danh Minh Hoàng LỚP CAO HỌC CNTT KHÓA 25B

Upload: hoinongdan2005

Post on 06-Feb-2016

10 views

Category:

Documents


0 download

DESCRIPTION

Hash function and Random Oracle Model

TRANSCRIPT

Page 1: Ham Bam Va Mo Hinh Random Oracle_Bai Tap Het Mon

HỌC VIỆN KỸ THUẬT QUÂN SỰ

KHOA CÔNG NGHỆ THÔNG TIN--------O0O--------

BÀI TẬP MÔN LÝ THUYẾT MẬT MÃ

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

Tên đề tài: Hàm băm mật mã và mô hình random oracle

Giáo viên hướng dẫn: PGS. TS Nguyễn Hiếu Minh

Nhóm thực hiện:

1. Nguyễn Hữu Nhạn

2. Vũ Thị Thanh Huyền

3. Trần Danh Minh Hoàng

LỚP CAO HỌC CNTT KHÓA 25B

Page 2: Ham Bam Va Mo Hinh Random Oracle_Bai Tap Het Mon

HÀ NỘI 2014

MỤC LỤC

Page 3: Ham Bam Va Mo Hinh Random Oracle_Bai Tap Het Mon

Lời giới thiệu

I. Mô hình random oracleCác mô hình Random Oracle, đã được giới thiệu vào năm 1993 bởi Bellare, Sulya và Rogaway, là một

mô hình toán học lý tưởng cho một hàm băm.

1. Tổng quan về mô hình

2. Nguyên lý lồng chim

Nếu có n lồng chim bồ câu chứa n+1 con chim bồ câu, thì ít nhất một lồng

chim có chứa 2 con chim. Theo nguyên tắc lồng chim bồ câu nếu có n lồng chim

thì chứa kn+1 con chim, vậy nếu có n lồng chim bồ câu thì ít nhất một lồng chứa

k+ 1 con chim.

Giả sử rằng các thông điệp trong một hàm băm là chiều dài 6 bit và bản rút

gọn (digest) chỉ còn 4 bit. Sau đó, số lượng có thể của digest (pigeonholes) là 24

= 16, và số lượng có thể của thông điệp (bồ câu) là 26 = 64. Điều này có nghĩa

là n = 16 và kn + 1 = 64, do đó k là lớn hơn 3. Kết luận là có ít nhất một digest

tương ứng với bốn (k + 1) thông điệp.

3. Bài toán ngày sinh

Page 4: Ham Bam Va Mo Hinh Random Oracle_Bai Tap Het Mon

Nếu kích thước của hàm Hash nhỏ, thì có thể tìm được 2 văn bản có cùng giá trị

hàm băm, tức là có va chạm mà không phụ thuộc vào số lượng biến đổi của hàm, cách

tấn công này có tên ngày sinh nhật. Ý tưởng của phương pháp tấn dựa trên bài toán

ngày sinh nhật sau. Cần phải chọn một nhóm bao nhiêu người để xác suất hai người có

cùng ngày sinh nhật là 0.5? Vấn đề ở chổ là xác suất trùng ngày sinh nhật đối với một

cặp ngẫu nhiên là p’=1/365, còn trong nhóm gồm n người có cặp khác

nhau. Từ đây dể dàng nhận được đánh giá gần đúng. Xác suất để tồn tại ít nhất một

cặp có cùng ngày sinh là , từ đây p=1/2 thì chúng ta thu được .

Chúng ta xem sử dụng bài toán ngày sinh nhật để tìm va chạm trong hàm Hash như

thế nào. Giả sử cho H là hàm Hash với kích thước đầu ra là m bít. Chúng ta có N bản

tin khác nhau , tính toán giá trị băm của các bản tin này, giá trị tương ứng

là . Nếu như hàm Hash là hàm biến đổi giả ngẫu nhiên thì dễ dàng tính được xác

suất sao cho giữa N giá trị không tìm được hai như nhau.

Đầu tiên chúng ta xem đánh giá dựa trên tính toán gần đúng, sao cho số lượng va

chạm là đủ nhỏ. Chúng ta chọn một số giá trị . Xác suất để nó không trùn với các

phần còn lại là

.

Tiếp tục chọn một số giá trị mới . Xác suất để nó không trùng với phần còn lại

.

Chúng ta chọn tương tự như vậy đối với giá trị mới của hàm Hash, trong bước thứ I

chúng ta thu được xác suất không trùng là

Tất cả chúng ta cần thực hiện N-1 bước kiểm tra không trùng. Xác suất để không

một giá trị trong chúng không trùng là:

Với .

Xác suất tìm thấy va chạm là

.

Page 5: Ham Bam Va Mo Hinh Random Oracle_Bai Tap Het Mon

Với xác suất va chạm là ½ thì ta có biểu thức:

,

Từ đây chúng ta xác định gía trị N1/2:

.

Chúng ta xem tính cách tính chính xác hơn xác suất tìm va chạm trong tập hợp

, có thể nhận được bằng cách rất đơn giản sau. Chúng ta chọn . Xác

suất để không trùng là . Tiếp tục chọn . Xác suất để

không trùng với và , với điều kiện và không trùng nhau là

. Một cách tương tự, chúng ta xác định xác suất để

không trùng với một trong các giá trị , ,…, , với điều kiện là các giá trị

, ,…, khác nhau từng đôi một. Chúng ta nhận được

. Như vậy giá trị chính xác của xác suất không

có sự va chạm là:

.

Từ đây chúng ta xác định xác suất có sự va chạm là p=1-p’. Áp dụng công thức gần

đúng . Chúng ta thu được:

.

Xac suất tồn tại ít nhất một va chạm là:

.

Từ đây ta dể dạng nhận được điều sau:

,

Hay

,

.

Với p=1/2 chúng ta có . Chúng ta thấy kết quả ở phương án tính này

chính xác hơn phương án đầu tiên. Và từ công thức này chúng ta thấy, trong số 23

người chọn ngẫu nhiên thì có ít nhất một cặp trùng ngày sinh với xác suất là ½. Như

vậy để thực hiện tấn công thì cần bộ nhớ là bít và cần thực hiện

Page 6: Ham Bam Va Mo Hinh Random Oracle_Bai Tap Het Mon

tính toán hàm Hash và thực hiện sắp xếp số. Và từ đây chúng thấy rằng nếu

như m không đủ lớn thì sẽ dễ dàng tìm ra được số lượng bản tin mà có sự va chạm.

Với công nghệ hiện nay thì đòi hỏi bít.

4. Tấn công trên mô hình random oracle

Hàm băm được xem là hàm một chiều khi cho trước giá trị băm, không thể tái

tạo lại thông điệp ban đầu, hay còn gọi là “tiền ảnh” (“pre-image”). Như vậy, trong

trường hợp lý tưởng, cần phải thực hiện hàm băm cho khoảng 2n thông điệp để tìm ra

được “tiền ảnh” tương ứng với một giá trị băm.

Nếu tìm ra được một phương pháp tấn công cho phép xác định được “tiền ảnh”

tương ứng với một giá trị băm cho trước thì thuật toán băm sẽ không còn an toàn nữa.

Cách tấn công nhằm tạo ra một thông điệp khác với thông điệp ban đầu nhưng

có cùng giá trị băm gọi là tấn công “tiền ảnh thứ hai” (second pre-image attack).

Hình Tiêu chuẩn của hàm băm mật mã

Cách tấn công Tiền ảnh 1:

Giả sử y = h(M) , tìm M’ sao cho y = h(M’)

Trong đó: M: là Thông điệpH : là hàn băm

H(M): là bản thông điệp rút gọn

5. Tấn công trên cấu trúc

II. Hàm băm mật mã

Hình Mô hình tấn công tiền ảnh 1

Thuật toán: Tiềm ảnh 1

Preimage_Attack(D)

Tiêu chuẩn của Hàm băm mật mã

Tiền ảnh 1 Tiền ảnh 2 Đụng độ

Page 7: Ham Bam Va Mo Hinh Random Oracle_Bai Tap Het Mon

{

For (i = 1 to k)

{

Create (M[i])

T ← h(M[i])

If (T = D) return M[i]

}

Return failure

}

Những khó khăn của một cuộc tấn công tiền ảnh 2 có tỉ lệ với 2n

Một hàm băm mật mã sử dụng một digest của 64 bit. Có bao nhiêu digest không Eve cần tạo để tìm ra thông báo ban đầu với xác suất hơn 0,5?

Số lượng digest được tạo ra là k ≈ 0,69 × 2n ≈ 0,69 × 264. Đây là một số lượng lớn. Ngay cả khi Eve có thể tạo ra 230 (gần một tỷ đồng) tin nhắn mỗi thứ hai, nó mất 0,69 × 234 giây hoặc hơn 500 năm. Điều này có nghĩa rằng một thông điệp tiêu hóa của kích thước 64 bit là an toàn đối với preimage tấn công với, nhưng, như chúng ta sẽ thấy ngay, không được bảo đảm để tấn công va chạm.Hoàn tác chỉnh sửa

Cách tấn công Tiền ảnh 2:

Giả sử cho M và H(M) , tìm M’ ≠ M sao cho h(M) = H(M’)

Hình Mô hình tấn công tiền ảnh 2

Thuật toán: tiền ảnh 2

Second_Preimage_Attack(D,M)

{

Page 8: Ham Bam Va Mo Hinh Random Oracle_Bai Tap Het Mon

For (i = 1 to k-1)

{

Create (M[i])

T ← h(M[i])

If (T = D) return M[i]

}

Return failure

}

Những khó khăn của một cuộc tấn công tiền ảnh 2 có tỉ lệ với 2n

Cách tấn công Đụng độ: Tìm M’ ≠ M sao cho h(M) = h(M’)

Thuật toán: Đụng độ

Collision_Attack(D,M)

{

For (i = 1 to k)

{

Create (M[i])

D[i] ← h(M[i])

for (j = 1 to i-1)

{

if (D[i] = D[j] return M[i] and M[j])

}

}

Return failure

}

Những khó khăn của một cuộc tấn công đụng độ có tỉ lệ với 2n/2.Một hàm băm mật mã sử dụng một digest của 64 bit. Có bao nhiêu digest không

cần phải tạo ra Eve để tìm hai thông điệp với cùng digest với xác suất hơn 0,5?

Giải pháp

Page 9: Ham Bam Va Mo Hinh Random Oracle_Bai Tap Het Mon

Số lượng digest được tạo ra là k ≈ 1,18 × 2n / 2 ≈ 1,18 × 232. Nếu Eve có thể kiểm tra 220 (gần một triệu) mỗi thông điệp thứ hai, nó mất 1,18 × 212 giây hoặc ít hơn hai giờ. Điều này có nghĩa rằng một thông điệp digest kích thước 64 bit không được bảo vệ chống lại các cuộc tấn công va chạm.

Xen kẽ tấn công đụng độ

Thuật toán: xen kẽ đụng độ

Alternate_Collision_Attack(M[k],M’[k])

{

For (i = 1 to k)

{

D[i] ← h(M[i])

D’[i] ← h(M’[i])

if (D[i] = D’[j] return M[i], M’[j])

}

Return failure

}

Những khó khăn của một cuộc tấn công đụng độ có tỉ lệ với 2n/2.Tóm tắt các cuộc tấn côngBảng sau cho thấy mức độ khó khăn đối với mỗi đòn tấn công nếu digest là n bit.

Attack Giá trị của khóa k với P = 1/2 Thứ tự

Preimage k ≈ 0.69 x 2n 2n

Second Preimage k ≈ 0.69 x 2n + 1 2n

Collision k ≈ 1.18 x 2n/2 2n/2

Alternate collision k ≈ 0.83 x 2n/2 2n/2

Các hàm băm mới, đó là khả năng để trở thành tiêu chuẩn NIST, là SHA-512, trong đó có một 512-bit digest. Chức năng này chắc chắn là khả năng chống các cuộc tấn công va chạm dựa trên Random Oracle Model. Nó cần 2512/2 = 2256 kiểm tra để tìm thấy một vụ đụng độ với xác suất 1/2.

5. Các cuộc tấn công vào cấu trúc

Tấn công hàm hash theo kiểu gặp nhau ở giữa (meet – in – the – middle attack)

Phương pháp tấn công gặp nhau ở giữa áp dụng cho các hàm Hash xây dựng trên

cơ sở mã khối, mà chúng ta tìm hiểu ở phần trước. Phương pháp này cho kết quả tốt

hơn phương pháp tấn công theo ngày sinh nhật. Trong tấn công theo kiểu ngày sinh

Page 10: Ham Bam Va Mo Hinh Random Oracle_Bai Tap Het Mon

nhật tìm được va chạm nhưng giá trị nhận được của hàm Hash đối với tìm kiếm va

chạm là ngẫu nhiên. Tấn công đầu tiên được đề xuất là tấn công trên hàm Hash xây

dựng trên cơ sở sơ đồ Rabin xem hình 11.1.

Sơ đồ này dựa trên thuật toán mã khối an toàn. Sơ đồ dựa trên ý tưởng về tính toán

phức tạp xác định khóa khi biết đầu vào và đẩu ra của khối dữ liệu. Khối dữ liệu Mi

được sử dụng như khóa tương ứng với một vòng tính toán của hàm Hash. Tìm kiếm va

chạm liên quan đến bài toán tính toán khóa. Ví dụ, tấn công có thể thay thế một số

khối Mk thành M’k. Điều này dẫn đến nhận được giá trị mới của vòng hàm hash H’k.

Có thể tồn tại một số khóa mã M’k+1, mà chúng ta nhận được đẳng thức sau:

.

Nếu như cách thám mã tìm được đã cho thì thay thế khối dữ liệu và

thành và , tức là ta đã tìm được bản tin mới, mà có giá trị hàm Hash bằng với

giá trị hàm Hash của bản tin ban đầu. Nếu như thuật toán mã khối là vững chắc đối với

phép tấn công trên cơ sở biết bản tin, thì phép tấn công đã cho trên hàm Hash có độ

tính phức tạp cao.

Chúng ta xem cụ thể phép tấn công này. Giả sử cho bản tin M, giá trị hàm Hash

của M là H. Mục đích của phép tấn công là tìm ra bản tin khác M’ mà gía trị hàm Hash

của M’ cũng bằng H. Chúng ta chia bản tin thành

hai phần và . Phần đẩu tiên của bản tin

được biến dạng nhiều lần và mỗi sự biến dạng đó giá trị hàm Hash được tính bằng .

Giả sử nhận được N1 gía trị từ N1 phương án của phần thứ nhất (xem hình …).

Phần thứ hai của bản tin cũng biến dạng nhiều lần, từ mỗi biến dạng đó hàm Hash

được tính theo thuật toán khác, ở đây chúng ta tính theo thứ tự ngược và sử dụng hàm

giải mã D, tương ứng vơi hàm mã hóa E (xem hình…). Giả sử thu được N2 giá trị

từ N2 phương án của phần hai.

Khi số lượng N1 và N2 đủ lớn thì có thể tìm được cặp giá trị bằng nhau trong số

và vớ xác suất lớn. Giả sử rằng nó tương ứng với hai bản tin là và . Rõ

ràng rằng bản tin mà H(M)=H(M’). Vậy đã tìm ra được sự va

chạm. Giờ chúng ta xác định xem cần bộ nhớ và độ khó của phương pháp tấn công

này.

Page 11: Ham Bam Va Mo Hinh Random Oracle_Bai Tap Het Mon

Chúng ta giả sử rằng N1 và N2 tồn tại giá trị nhỏ hơn , m là kích thước của giá trị

băm. Như thế, với giá trị xác suất gần đúng đủ chính xác có thể tiếp nhận, sao cho giá

trị đầu tiên từ tập không trùng với một giá trị nào của tập bằng

.

Xác suất để không một giá trị nào của tập trùng với một giá trị của tập

bằng

Như vậy xác suất để tìm ra ít nhất một cặp trùng nhau giữa tập và tập

.

Bây giờ với điều kiện đốiv với trường hợp dễ dàng xác

định giá trị N1/2, với xác suất va chạm là ½:

.

Để nhận được đánh giá chính xác hơn khi có thể nhận gía trị p=0.63.

Như vậy cần bộ nhớ cần thiết cho phép tấn công là bít, độ khó tấn công là

.

III. Tổng quan về lý thuyết mật mã và bảo mật thông tin

Mật mã học là ngành khoa học ứng dụng toán học vào việc biến đổi thông

tin thành một dạng khác với một mục đích là che dấu nội dung, ý nghĩa thông tin

cần mã hóa.

Các ứng dụng của mật mã học và bảo mật thông tin rất đa dạng và phong

phú tùy vào đặc trưng mỗi hệ thống sẽ có những đặc trưng riêng như: Tính bảo

mật thông tin, tính toàn vẹn thông tin, Xác thực trong liên lạc và nội dung trong

liên lạc, chống lại sự thoái thác trách nhiệm.

Các phương pháp mã hóa

- Mã hóa đối xứng: Là quá trình mã hóa và giải mã một thông điệp sử

dụng cùng một mã khóa gọi là khóa bí mật hay còn gọi là khóa đối xứng. Một số

phương pháp mã hóa đối xứng như là mã hóa cổ điển, mã hóa khối ...

- Mã hóa bất đối xứng: còn được gọi là phương pháp mã hóa khóa công cộng

giúp cho việc trao đổi mã khóa trở nên dễ dàng hơn. Nội dung của khóa công

Page 12: Ham Bam Va Mo Hinh Random Oracle_Bai Tap Het Mon

cộng (public key) không cần phải giữ bí mật như đối với khóa bí mật trong các

phương pháp mã hóa quy ước.

1. Đảm bảo tính toàn vẹn dữ liệu

Hàm băm mật mã học là hàm băm và có tính chất là hàm 1 chiều. Từ khối dữ

liệu hay giá trị băm đầu vào chỉ có thể đưa ra 1 giá trị băm duy nhất. Như chúng ta đã

biết đối với tính chất của hàm 1 chiều. Một người nào đó dù bắt được giá trị băm họ

cũng không thể suy ngược lại giá trị, đoạn tin nhắn băm khởi điểm.

Hàm băm thường được dùng trong bảng băm nhằm giảm chi phí tính toán khi

tìm một khối dữ liệu trong một tập hợp. 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.

Giá trị đầu vào(tin nhắn, dữ liệu...) bị thay đổi tương ứng giá trị băm cũng bị

thay đổi. Do vậy nếu 1 kẻ tấn công phá hoại, chỉnh sửa dữ liệu thì server có thể biết

ngay lập tức.

2. Tính an toàn của hàm băm đối với hiện tượng đụng độ

Hàm băm được xem là an toàn đối với hiện tượng đụng độ khi rất khó tìm được

hai thông điệp có cùng giá trị băm.

Nhận xét: Trong một tập hợp mà các phần tử mang một trong N giá trị cho

trước với xác suất bằng nhau, chúng ta cần khoảng N phép thử ngẫu nhiên để tìm ra

một cặp phần tử có cùng giá trị.

Như vậy, phương pháp hàm băm được xem là an toàn đối với hiện tượng đụng

độ nếu chưa có phương pháp tấn công nào có thể tìm ra cặp thông điệp có cùng giá trị

hàm băm với số lượng tính toán ít hơn đáng kể so với ngưỡng 2n/2, với n là kích thước

(tính bằng bit) của giá trị băm.

Phương pháp tấn công dựa vào đụng độ:

- Tìm ra 2 thông điệp có nội dung khác nhau nhưng cùng giá trị băm.

- Ký trên một thông điệp, sau đó, người ký sẽ không thừa nhận đây là chữ ký

của mình mà nói rằng mình đã ký trên một thông điệp khác.

- Như vậy, cần phải chọn 2 thông điệp “đụng độ” với nhau trước khi ký.

3. Tính một chiều

Hàm băm được xem là hàm một chiều khi cho trước giá trị băm, không thể tái

tạo lại thông điệp ban đầu, hay còn gọi là “tiền ảnh” (“pre-image”). Như vậy, trong

trường hợp lý tưởng, cần phải thực hiện hàm băm cho khoảng 2n thông điệp để tìm ra

được “tiền ảnh” tương ứng với một giá trị băm.

Nếu tìm ra được một phương pháp tấn công cho phép xác định được “tiền ảnh”

tương ứng với một giá trị băm cho trước thì thuật toán băm sẽ không còn an toàn nữa.

Cách tấn công nhằm tạo ra một thông điệp khác với thông điệp ban đầu nhưng có cùng

giá trị băm gọi là tấn công “tiền ảnh thứ hai” (second pre-image attack).

Page 13: Ham Bam Va Mo Hinh Random Oracle_Bai Tap Het Mon

4. Cấu trúc của Hàm băm mật mã

Có thể chứng minh cấu trúc bảo mật của hàm băm mật mã bao gồm hai

thành phần có thể được nghiên cứu độc lập với nhau. Thành phần đầu tiên là

hàm nén mà ánh xạ một đầu vào với chiều dài cố định tới một đầu ra có chiều

dài cố định. Thành phần thứ hai của cấu trúc là miền mở rộng, đưa ra một hàm

nén, kết quả của hàm với đầu vào có độ dài tùy ý.

Compression function. Từ quan điểm của nhà lý luận, một hàm một

chiều là một thành phần cơ bản thô sơ nhất, từ đó nhiều công cụ mã hóa khác có

thể được bắt nguồn. Kết quả của một cuộc hội thảo do Simon cung cấp các

bằng chứng mạnh mẽ rằng khả năng chịu xung đột của hàm băm không thể được

xây dựng dựa trên hàm một chiều. Thay vào đó, tác giả thiết kế hàm băm chống

xung đột dựa trên một khối mã hóa thô sơ-một khối mật mã.

Một khối mật mã là một hoán vị khóa E: {0, 1}n x {0, 1}k {0, 1}n

Về mặt kỹ thuật, Một khối mật mã dùng để nén đầu vào của nó - nó ánh

xạ k + n bit tới n bit. Tuy nhiên, Một khối mật mã thậm chí không phải là one-

way: để đảo ngược E trên w, cố định bất kỳ khoá k0 và giải mã w dưới khoá này.

Nếu w giải mã cho ra x, sau đó E(k0, x) = w. Tuy nhiên, có tới 12 cấu trúc đơn

giản xây dựng dựa trên kết quả của một khối mã hoá trong một hàm nén chống

xung đột. Hai đề án thường được sử dụng nhất trong các hàm băm như sau:

Davies-Meyer: H(x, y) = Ey(x) y

Miyaguchi-Preneel: H(x, y) = Ex(y) x y

Bằng chứng của bảo mật của những đề án này và khối mã hóa - dựa trên

giả định rằng các thuật toán mã hoá cơ bản là không thể phân biệt từ một khái

niệm trừu tượng cụ thể, gọi là mã hóa ý tưởng, vượt xa các yêu cầu bảo mật tiêu

chuẩn cho khối mã hóa.

Domain extender. Tên miền mở rộng là một cấu trúc chung mà biến đổi

một hàm nén với đầu vào có độ dài cố định vào một hàm băm với đầu vào tùy ý.

Page 14: Ham Bam Va Mo Hinh Random Oracle_Bai Tap Het Mon

Tên miền mở rộng đơn giản và được sử dụng phổ biến nhất là cấu trúc

Merkle -Damgard và nó hoạt động như sau:

Cho một hàm nén C: {0, 1}n x {0, 1}m {0, 1}n

n-bit liên tục IV.

Input: Thông điệp M

1. Break M into m-bit blocks M1,. . . ,Mk, padding if necessary;

2. Let Mk+1 be encoding of |M|;

3. Let h0 = IV;

4. For i = 1 to k + 1 let hi = C(hi-1,Mi);

5. Output hk+1 .

Cấu trúc lặp đi lặp lại hàm nén C: output của C, cùng với khối tiếp theo

của thông điệp, trở thành đầu vào cho các ứng dụng tiếp theo của C.

Băm của khối cuối cùng, trong đó có chứa một mã hóa chiều dài của

thông điệp, là băm của toàn bộ thông điệp. Lưu trữ tạm thời đầu ra của hàm nén,

hi, Được gọi là chuỗi biến hoặc trạng thái nội (hình 1).

Hình 1: Cấu trúc Merkle-Damgard.

Có một sự linh hoạt nhất định trong hai bước đầu tiên của cấu trúc

Merkle-Damgard. Mã hóa bất kỳ sẽ thực hiện miễn là nó đáp ứng ba điều kiện

sau đây:

- M được mã hoá như một số nguyên của các khối m-bit.

Page 15: Ham Bam Va Mo Hinh Random Oracle_Bai Tap Het Mon

- Mã hóa là xung đột tự do; - Độ dài của M được đóng gói trong khối cuối cùng.

Cấu trúc Merkle-Damgard tương thích với dòng API, nơi một thông điệp

được cung cấp một khối tại một thời điểm vào một công cụ tìm kiếm mật mã.

Chiều dài của nó không cần phải được biết đến cho đến khi khối cuối cùng trở

nên có hiệu lực. Mặt khác, cập nhật thậm chí một bit của thông điệp có thể kích

hoạt sự ước lượng lại của toàn bộ bảng băm.

Nếu hàm nén là có khả năng chống xung đột, như vậy nó là kết quả cấu

trúc

Tuy nhiên, cấu trúc Merkle-Damgard đưa ra một hàm với nhiều cấu trúc

thuộc tính, tạo ra một số lỗ hổng bảo mật bất ngờ như minh họa trong mục 4 .

Trong thực tế, cấu trúc Merkle-Damgard là lý do quan trọng nhất giải

thích tại sao nó là sai (nguy hiểm, liều lĩnh, thiếu hiểu biết) để suy nghĩ về hàm

băm như là hộp đen. Việc cấu trúc được lặp đi lặp lại được thiết kế để đáp ứng

một mục tiêu rất khiêm tốn, đó là mở rộng tên miền của hàm chống xung đột, và

không nên mong đợi sẽ được đảm bảo bảo mật xa hơn.

1. Giới thiệu hàm băm (hash)

Đây là hàm có tham số đầu vào là văn bản có chiều dài bất kỳ và chiều ra là một

bản tóm lượt có chiều dài cố định.

Như đã nói trong phần chữ ký số, hàm hash có vai trò rất quan trọng, ngoài tránh

được sự giả mạo chữ ký, nó còn giúp cho quá trình ký diễn ra nhanh hơn rất nhiều, bởi

hàm hash có tốc độ lớn, nhưng quan trọng nhất là nó làm chữ ký ngắn đi rất nhiều điều

này có vai trò rất quan trọng trong thực tế khi làm việc với số lượng lớn các chữ ký.

Để tạo ra hàm Hash thì hàm hash phải thỏa mãn các yêu cầu sau:

1. Đối số của hàm hash là bản tin có chiều dài bất kỳ;

2. Giá trị của hàm hash có chiều dài không đổi;

3. Hàm H(x) cần phải có tính toán hiệu quả, tức là thuật toán Hash khi thực

hiện trên phần cứng và phần mềm cần phải có công suất lớn. Phải đảm bảo

được rằng quá trình ký và kiểm tra lên giá trị của hàm hash nhanh hơn so

với quá trình ký và kiểm tra trên bản thân bản tin;

Page 16: Ham Bam Va Mo Hinh Random Oracle_Bai Tap Het Mon

4. Cho y là giá trị của hàm hash, thì khó về mặt tính toán để tìm được x thỏa

h(x)=y, tức là hàm hash phải là hàm một chiều;

5. Hàm hash là hàm không va chạm, tức là khi cho trước bản tin x, không thể

thực hiện được về mặt tính toán để tìm được bản x’ x sao cho h(x)=h(x’).

6. Hàm hash là hàm không va chạm mạnh, khi không thể thực hiện được về

mặt tính toán để tìm được hai bản tin x và x’, với x’ x mà h(x)=h(x’).

Cấu trúc chung của hàm băm Hash gồm các phần sau:

1. Cho trước một thông điệp M có độ dài bất kỳ. Tùy theo thuật toán được sử

dụng, chúng ta có thể cần thêm thông điệp các bit để nhận được thông điệp

có độ dài là bội số của chiều dài cố định cho trước để phục vụ cho việc tính

toán. Chia thông điệp thành từng khối có kích thước bằng nhau tức là

M=(M1, M2, …Ms).

2. Gọi Hi là trạng thái có kích thước n bit, n là chiều dài của giá trị hàm băm, F

là hàm nén thực hiện thao tác trộn khối dữ liệu với trạng thái hiện hành:

Khởi tạo H0, bằng véc tơ khởi tạo nào đó.

Thực hiện trộn: Hi=F(Hi-1,Mi), i [1,s].

3. Giá trị của Hs là giá trị của hàm băm.

Nếu hàm hash được cho là bền vững, khi có một sự thay đổi bất kỳ đối số của nó

( tức là bản tin đầu vào) thì giá trị của nó cũng thay đổi ngẫu nhiên, tức là mỗi bít

trong n bít có xác suất bị thay đổi là ½. Một phương pháp tấn công đơn giản trên hàm

một chiều hash là lựa chọn bản tin sao cho giá trị hàm hash của nó bằng với giá trị hàm

hash đã cho hay nói cách khác đây là phương pháp véc cạn, chúng ta gọi số lượng bản

tin cần chọn là N mà thỏa mãn được điều trên. Chúng ta thấy xác suất để giá trị hàm

hash của một bản tin bất kỳ không trùng với giá trị H đã cho bằng , n là chiều

dài của giá trị hàm hash. Như thế xác suất để không một bản tin nào từ N bản tin khác

nhau mà giá trị của bản tin đó không trùng với H bằng . Xác suất để tồn

tại một bản tin mà giá trị hàm hash của nó bằng H cho trước là:

.

Sử dụng công thức Niutơn, chúng ta nhận được giá trị gần đúng sau:

, nếu như x nhỏ,

Nên chúng ta có: và .

Page 17: Ham Bam Va Mo Hinh Random Oracle_Bai Tap Het Mon

Khi p=1/2, chúng ta có . Với kỹ thuật tính toán hiện nay thì n=64 thì

tấn công có thể thực hiện được nếu có tài nguyên đủ lớn cho tính toán. Nếu

như n > 96 thi được xem là an toàn đối với cách tấn công này, thế nhưng còn

nhiều cách tân công khác, nên khuyến cáo chọn giá trị .

Thuật toán hàm băm an toàn SHA

Thuật toán hàm băm an toàn SHA (Secure Hash Algorithm) được chấm nhận trong

số các chuẩn của Mỹ năm 1992 và nó được ứng dụng cùng với thuật toán chuẩn chữ

ký số DSS. Khi đầu vào là một bản tin M có chiều dài bất kỳ, đầu ra là là 160 bít rút

gọn.

Chúng ta xem làm việc của thuật toán chi tiết hơn.

Trong SHA-1 sử dụng hàm f(t, B, C, D), với 0t79; B, C và D –là các từ 32 bít.

f(t, B, C, D) = (B C) ((B) D) khi 0t19

f(t, B, C, D) = B C D khi 20t39

f(t, B, C, D) = (B C) (B D) (C D) khi 40t59

f(t, B, C, D) = B C D khi 60t79

và sử dụng các hằng số:

Kt = 5A827999 khi 0t19

Kt = 6ED9EBA1 khi 20t39

Kt = 8F1BBCDC khi 40t59

Kt = CA62C1D6 khi 40t79

Thuật toán Hash SHA-1 được miểu tả bởi các bước sau:

Đầu vào: bản tin có chiều dài <264 bít.

1) Mở rộng bản tin: thêm vào bít để chiều dài bản tin là bội của 512. Quá trình

thêm diễn ra như sau. Thêm bít 1 vào cuối bản tin, sau đó thêm vào một số bít 0

để nhận bản tin có chiều dài là đồng dư với 448 modulo 512, và cuối cùng thêm

vào 64 bít, 64bít này biểu diễn chiều dài của bản tin ban đầu. Bản tin được thêm

vào bao gồm các khối M1, M2, … , Mn, chiều dài mỗi khối là 512 bít.

2) Khởi tạo các biến

H0 := 67452301, H1 := EFCDAB89, H2 := 98BADCFE,

H3 := 10325476, H4 := C3D2E1F0

3) i := 1

4) Chia khối Mi thành 16 từ 32 bít w0, w1, …, w15.

Page 18: Ham Bam Va Mo Hinh Random Oracle_Bai Tap Het Mon

5) Đối với các t: 16t79 wt := (wt-3 wt-8 wt-14 wt-16)<<<1, ở đây lệnh “<<<x” là

lệnh dịch trái x bít.

6) A := H0, B := H1, C := H2, D := H3, E := H4.

7) Đối với tất cả các t từ 0 đến 79

TEMP := (A <<< 5 + f(t, B, C, D) + E + wt + Kt) mod 232;

E := D; D := C; C := B <<< 30; B := A; A := TEMP.

8) H0 := H0 + A, H1 := H1+B, H2 := H2 + C, H3 := H3 + D, H4 := H4 + E,

Tất cả các lệnh cộng theo modulo 232

9) Nếu i<n, thì i := i+1 và chuyển sang bước 4.

Đầu ra: bản băm rút gọn có chiều dài 160 bít là liên kết của các từ 32 bít H0 | H1 |

H2 | H3 | H4.

Chú ý: Ngoài SHA-1 chúng ta vừa xem, còn có những thuật toán có chiều dài

khác nhau, nhưng về cơ bản thuật toán là giống SHA-1, nên ở đây không

được miêu tả cụ thể mà chỉ nêu ra bảng tóm tắt so sánh của các biến dạng

khác nhau của SHA.

Thuật toán

Kích thước tính theo bitSố chu kỳ

Các thao tác

Đụng độ

Độ an

toànKết quả

Trạng thái

KhốiThông điệp

tối đaTừ

SHA-1 160 160 512 264-1 32 80+, and, or, xor, rotl

có 80

SHA-0 160 160 512 264-1 32 80+, and, or, xor, rotl

263

thao tác

80

SHA-256/224

256/224 256 512 264-1 32 64+, and, or,

xor, shr, rotrchưa

112/128

SHA- 512/384

512/384 512 1024 2128-1 64 80+, and, or,

xor, shr, rotrchưa

192/256

Đặc điểm của các thuật toán băm SHA

2. SHA-512

Giải thuật SHA – 1 và SHA - 512

Secure Hash Algorithm (SHA) phát triển bởi National Institute of

Standard and Technology (NIST)

Đầu vào: thông điệp với độ dài tối đa 264 bits

Đầu ra: giá trị băm (message digest) có độ dài 160 bits

Page 19: Ham Bam Va Mo Hinh Random Oracle_Bai Tap Het Mon

Giải thuật gồm 5 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:

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

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

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

Page 20: Ham Bam Va Mo Hinh Random Oracle_Bai Tap Het Mon

tạo ở dạng bigiendian (byte có trọng số lớn nhất trong từ nằm ở địa chỉ

thấp nhất) như sau:

A = 01 23 45 67

B = 89 AB CD EF

C = FE DC BA 98

D = 76 54 32 10

E = C3 D2 E1 F0

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

A = 01 23 45 67

B = 89 AB CD EF

C = FE DC BA 98

D = 76 54 32 10

E = C3 D2 E1 F0

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

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

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

Kt = 5A827999 (0 ≤ t ≤ 19)

Kt = 6ED9EBA1 (20 ≤ t ≤ 39)

Kt = 8F1BBCDC (40 ≤ t ≤ 59)

Kt = CA62C1D6 (60 ≤ t ≤ 79)

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

ra CVq+1

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:

CV0 = IV

CVq+1 = SUM32(CVq, ABCDEq)

MD = CVL

Với

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

Page 21: Ham Bam Va Mo Hinh Random Oracle_Bai Tap Het Mon

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

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

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

MD = giá trị băm

Giải thuật SHA-1 – 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:

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

B ← A

C ← S30(B)

D ← C

E ← D

Trong đó

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

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

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

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

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

Kt = hằng số

+ = phép cộng modulo 232

Page 22: Ham Bam Va Mo Hinh Random Oracle_Bai Tap Het Mon

Các hàm f

Bước Hàm Giá trị

(0 ≤ t ≤ 19) f1 = f(t,B,C,D) (B C) ˅ ( ̚ B ˄ D)

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

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

D)

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

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

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

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

Xây dựng hàm băm trên cơ sỡ mật mã đối xứng

Một trong các phương pháp hiệu quả để xây dựng hàm hash là xây dựng trên cơ sở

hàm mật mã khối. Giả sử E là hàm mã khối an toàn (có thể sử dụng hàm mật mã là

hàm biến đổi một chiều) với kích thước khối là m bít, cho bản tin đầu vào được chia ra

n khối m bít: . Hàm tính giá trị băm có thể viết dưới dạng sau:

,i=1,2,…,n.

ở đây H0 là giá trị ban đầu đặc biệt. Giá trị băm của hàm H=Hn.

Sơ đồ cấu trúc đơn giản nhất xây dựng hàm Hash mang tên Rabin được miêu tả

như hình 11.1.

Hình 11.1. Sơ đồ tạo hàm Hash Rabin

Sơ đồ hàm Hash Rabin có thể viết dưới dạng công thức:

,

Phương pháp tấn công tổng hợp lên hàm Hash xây dựng trên sơ đồ Rabin là tấn

công theo kiểu gặp nhau ở giữa. Cách tấn công này không phụ thuộc vào hàm mã khối

cụ thể nào. Có thể tránh được phép tấn công này nếu chọn hàm mã khối với kích thước

khối bít, ví dụ như AES, RC6…vv.

Page 23: Ham Bam Va Mo Hinh Random Oracle_Bai Tap Het Mon

Chúng ta có thể liệt kê một số sơ đồ khác, phục vụ cho việc xây dựng hàm Hash

được miêu tả trong bảng sau:

Số thứ tự Công thức

1

2 11)(1

iiiiHi HMHMEHi

3

4

5

6

7

8

9

10

11

12

Dưới đây là biểu diến một số sơ đồ tương ứng với bảng trên …

Page 24: Ham Bam Va Mo Hinh Random Oracle_Bai Tap Het Mon

Hình 11.2.Sơ đồ biểu diễn hàm Hash tương ứng với phương án 1 (a), 5(b) và 10 (c)

ở bảng…

Trên cơ sở ba tham số Hi-1, Mi-1 và Mi có thể xây dựng rất nhiều phương án xây

dựng hàm Hash khác với việc sử dụng một thanh ghi có kích thước lớn.

Thế nhưng chúng ta quan tâm nhất là xây dựng trên cơ sở hàm một chiều F không

có đầu vào phụ. Các phương án được nêu ra trên hình 11.3, các hàm F phải có đầu vào

bít.

Page 25: Ham Bam Va Mo Hinh Random Oracle_Bai Tap Het Mon

Hình 11.3. Sơ đồ xây dựng hàm Hash trên cơ sở biến đổi khối một chiều

Hàm một chiều có thể xây dựng trên cơ sở hàm mật mã khối bền vững E, ví dụ có

thể xây dựng F theo công thức sau:

,

ở đây K là một số khóa cố định đã biết. Đối với một thuật toán EK vững chắc thì

hàm đã cho là hàm một chiều, bởi vì chúng ta không biết véc tơ được hình thành bởi

đầu ra của EK.

3. WHIRLPOOL

Whirlpool. Whirlpool được thiết kế bởi Paulo Barreto và Vincent Rijmen

và gửi các đáp ứng các cuộc gọi mã hoá thô sơ ban hành bởi Nessie (đề án mới

của châu âu cho chữ ký, toàn vẹn và mã hoá) vào năm 2000. Whirlpool đã được

lựa chọn cùng với SHA-256, 384, 512 như là một phần danh mục đầu tư của

Nessie.

Thiết kế của Whirlpool kết hợp với tên miền mở rộng Merkle-Damgard

với một khối mã hoá dựa trên hàm nén. Khối mã hoá là một biến thể của AES,

nó cơ bản là khác với SHACAL, và nó được chuyển thành một hàm nén bằng

cách sử dụng cấu trúc Miyaguchi-Preneel. Whirlpool không nhằm vào bất kỳ

Page 26: Ham Bam Va Mo Hinh Random Oracle_Bai Tap Het Mon

kiến trúc đặc thù nào, mặc dù 32 - hoặc 64-bit bộ vi xử lý cho phép một số tối

ưu hóa không thể triển khai thực hiện trong 8-bit.

Tài liệu tham khảo

- Bài giảng môn Lý thuyết mật mã và bảo mật thông tin của PSG, TS Nguyễn Hiếu

Minh.

- Cryptography & Network Security – The McGraw-Hill Companies.

- Handbook of Applied Cryptography, by A. Menezes, P. Van Oorschot, and S.

Vanstone, CRC Press, 1996

II. Hàm băm mật mã học 1. Hàm băm

Hàm băm (tiếng Anh: hash function) là hàm sinh ra các giá trị băm tương ứng với

độ dài cố định với một khối dữ liệu đầu vào không giới hạn kích thước. Hàm băm

thường được dùng trong bảng băm nhằm giảm chi phí tính toán khi tìm một khối dữ

liệu trong một tập hợp (nhờ việc so sánh các giá trị băm nhanh hơn việc so sánh những

khối dữ liệu có kích thước lớn).

2. Hàm băm mật mã học

Trong ngành mật mã học, một hàm băm mật mã học (tiếng Anh: 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). Hàm

băm mật mã là hàm toán học chuyển đổi một thông điệp có độ dài bất kỳ thành một

dãy bit có độ dài cố định (tùy thuộc vào thuật toán băm). Dãy bit này được gọi là

thông điệp rút gọn (message digest) hay giá trị băm (hash value), đại diện cho thông

điệp ban đầu hoặc chữ ký số (digital fingerprint).

Dễ dàng nhận thấy rằng hàm băm h không phải là một song ánh. Do đó, với

thông điệp x bất kỳ, tồn tại thông điệp x’ ≠ x sao cho h(x)= h(x’). Lúc này, ta nói rằng

“có sự đụng độ xảy ra”.

Một hàm băm h được gọi là an toàn (hay “ít bị đụng độ”) khi không thể xác định

được (bằng cách tính toán) cặp thông điệp x và x’ thỏa mãn x≠x’ và h(x) = h(x’).

Trên thực tế, các thuật toán băm là hàm một chiều, do đó, rất khó để xây dựng lại

thông điệp ban đầu từ thông điệp rút gọn. Hàm băm giúp xác định được tính toàn vẹn

dữ liệu của thông tin: mọi thay đổi, dù là rất nhỏ, trên thông điệp cho trước, ví dụ như

đổi giá trị 1 bit, đều làm thay đổi thông điệp rút gọn tương ứng.

Page 27: Ham Bam Va Mo Hinh Random Oracle_Bai Tap Het Mon

Tính chất này hữu ích trong việc phát sinh, kiểm tra chữ ký điện tử, các đoạn mã

chứng nhận thông điệp, phát sinh số ngẫu nhiên, tạo ra khóa cho quá trình mã hóa…

Hàm băm là nền tảng cho nhiều ứng dụng mã hóa. Có nhiều thuật toán để thực

hiện hàm băm, trong số đó, phương pháp SHA-1 và MD5 thường được sử dụng khá

phổ biến từ thập niên 1990 đến nay.