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

Bài tập lớn Tìm hiểu các giải thuật băm SHA0,1,2,3 Các điểm yếu, các dạng tấn công vào SHA Cài đặt thử nghiệm SHA1

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (833.64 KB, 33 trang )

HỌC VIỆN CƠNG NGHỆ BƯU CHÍNH VIỄN THƠNG
KHOA CƠNG NGHỆ THƠNG TIN

Học phần: Cơ sở An tồn thơng tin

Bài báo cáo:

Tìm hiểu các giải thuật băm SHA-0,1,2,3
Các điểm yếu, các dạng tấn công vào SHA
Cài đặt thử nghiệm SHA1
Giảng viên hướng dẫn:
Sinh viên thực hiện:
Nhóm 6

Hà Nội 2021


MỤC LỤC
DANH SÁCH CÁC THUẬT NGỮ TIẾNG ANH VÀ VIẾT TẮT....................................................................2
DANH MỤC CÁC HÌNH VẼ...............................................................................................................................3
DANH MỤC CÁC BẢNG BIỂU.........................................................................................................................3
LỜI MỞ ĐẦU........................................................................................................................................................4
CHƯƠNG 1: KHÁI QUÁT VỀ HÀM BĂM MẬT MÃ......................................................................................5
1.1. Khái qt.....................................................................................................................................................5
1.2. Phân loại.....................................................................................................................................................5
1.3. Mơ hình xử lí dữ liệu..................................................................................................................................6
1.4. Ứng dụng....................................................................................................................................................7
CHƯƠNG 2: CÁC GIẢI THUẬT HÀM BĂM SHA..........................................................................................9
2.1. Giới thiệu SHA...........................................................................................................................................9
2.2. Các giải thuật SHA...................................................................................................................................10
2.2.1. SHA-0................................................................................................................................................10


2.2.2. SHA-1................................................................................................................................................11
2.3. SHA-2.......................................................................................................................................................13
2.3.1. Giới thiệu SHA-2..............................................................................................................................13
2.3.2. Các phiên bản....................................................................................................................................14
2.4. SHA-3.......................................................................................................................................................17
2.4.1. Giới thiệu...........................................................................................................................................17
2.4.2. Thiết kế SHA-3.................................................................................................................................18
CHƯƠNG 3: CÁC ĐIỂM YẾU VÀ CÁC DẠNG TẤN CÔNG VÀO HÀM BĂM........................................22
3.1. Các điểm yếu............................................................................................................................................22
3.2. Các dạng tấn công vào SHA....................................................................................................................22
3.2.1. Tấn công va chạm (Collision Attack)...............................................................................................22
3.2 2. Tấn công hàm Hash theo kiểu ngày sinh nhật (Birthday Attack)....................................................24
3.2.3. Tấn công hàm hash theo kiểu gặp nhau ở giữa (Meet – In – The – Middle Attack).......................26
3.2.4. Tấn công tiền ảnh (Preimage Attack)...............................................................................................27
CHƯƠNG 4: CÀI ĐẶT THỬ NGHIỆM SHA-1...............................................................................................28
KẾT LUẬN..........................................................................................................................................................29
CÁC TÀI LIỆU THAM KHẢO..........................................................................................................................30

1


DANH SÁCH CÁC THUẬT NGỮ TIẾNG ANH
VÀ VIẾT TẮT
Từ viết
tắt

Thuật ngữ tiếng Anh/Giải thích

Thuật ngữ tiếng Việt/Giải thích


MDC

Modification Detection Code

Mã phát hiện sử đổi (sử dụng hàm
băm khơng khóa)

MD
SHA
CRC

Message Digest

Chuỗi đại diện thơng điệp

Secure Hash Algorithm

Giải thuật băm an tồn

Cyclic Redundancy Check

Kiểm dư chu trình

MAC

Message Authentication Code

OWHF
CRHF
SSL/TL

S
IPSec

One Way Hash Functions

Mã xác thực thơng điệp (sử dụng
hàm băm có khóa)
Hàm băm một chiều

Collision Resistant Hash Functions

Hàm băm kháng xung đột

Secure Socket Layer / Transport
Layer Security

Tầng socket bảo mật/Bảo mật tầng
giao vận (một bộ giao thức bảo mật)

Internet Protocol Security

Giao thức bảo mật mạng

Giao thức mã hóa dữ liệu qua
mạng
SSH
Secure Socket Shell
Giao thức kết nối mạng bảo mật
S/MIME Secure/Multipurpose Internet Mail An tồn/Mở rộng thư mạng
AES

Advanced Encryption Standardhay Tiêu chuẩn mã hóa tiên tiến
NSA
National Security Agency
Cơ quan An ninh Quốc gia
National Institute of Standards and Viện Tiêu chuẩn và Kỹ thuật Quốc
NIST
Technology
gia
Federal Information Processing
Tiêu chuẩn xử lý thông tin liên
FIPS
Standards
bang
Phương thức tấn công gặp nhau ở
MIMT
Meet in the middle
giữa
PGP

Pretty Good Privacy

2


DANH MỤC CÁC HÌNH
Hình 1.1: Mơ hình nén thơng tin của hàm băm.............................................................5
Hình 1.2: Mơ hình tổng qt xử lí dữ liệu của hàm băm..............................................6
Hình 1.3: Mơ hình xử lí dữ liệu của hàm băm..............................................................7
Y


Hình 2.1: Lưu đồ một vịng xử lý của SHA-1.............................................................13
Hình 2.2: Lưu đồ một vịng lặp của SHA-2................................................................14
Hình 2.3: Cấu trúc hàm Keccak..................................................................................18
Hình 2.4: Cấu trúc bọt biển.........................................................................................19
Hình 3.1: Tấn cơng va chạm........................................................................................22
Hình 3.2: Mơ hình tấn cơng MITM.............................................................................26
Hình 3.3: Mơ hình tấn cơng tiền ảnh...........................................................................27
Hình 4.1: Demo SHA-1 sử dụng hàm MessageDigest................................................28

DANH MỤC CÁC BẢNG BIỂU
Bảng 2.1: Các hàm Boolean và hằng số trong SHA-0................................................11
Bảng 2.2: Các hàm Boolean và hằng số trong SHA-1................................................12
Bảng 2.3: 64 số nguyên tố đầu tiên dưới dạng 32-bit..................................................15
Bảng 2.4: Các thông số của các hàm băm SHA3........................................................18
Bảng 2.5: Mảng offset r...............................................................................................20
Bảng 2.6: Các hằng số vòng RC[i]..............................................................................21

3


LỜI MỞ ĐẦU
Với sự phát triển ngày càng nhanh chóng của Internet và các ứng dụng giao
dịch điện tử trên mạng, nhu cầu bảo vệ thông tin trong các hệ thống và ứng dụng điện
tử ngày càng được quan tâm và có ý nghĩa hết sức quan trọng. Vì thế việc nghiên cứu
về chuẩn mật mã nâng cao và ứng dụng nó trong các lĩnh vực bảo mật thơng tin là rất
cần thiết.
Ứng dụng của chuẩn mật mã nâng cao đang được sử dụng ngày càng phổ biến
trong nhiều ứng dụng khác nhau. Chuẩn mật mã nâng cao không chỉ đơn thuần là mã
hóa và giải mã thơng tin mà còn bao gồm nhiều vấn đề khác nhau cần được nghiên
cứu và giải quyết như ứng dụng xây dựng hàm băm phục vụ việc chứng thực nguồn

gốc nội dung thông tin ( kỹ thuật chữ ky điện tử), xác thực tính nguyên vẹn dữ liệu,…
Một trong những hàm băm đang được sử dụng rộng rãi nhất hiện nay là hàm
băm SHA được phát triển bởi cục an ninh quốc gia Mỹ (National Security Agency
hay NSA). Với nhiều ưu điểm và cũng có nhiều phiên bản khác nhau được phát hành.
Với bài tiểu luận với đề tài “ Tìm hiểu giải thuật băm SHA0,1,2,3. Các điểm yếu, các
dạng tấn công vào SHA. Cài đặt thử nghiệm SHA1” chúng ta sẽ cùng tìm hiểu về
các hàm băm SHA và ứng dụng của nó để hiểu rõ hơn và tiến hành thử nghiệm kiểm
chứng.

4


CHƯƠNG 1: KHÁI QUÁT VỀ HÀM BĂM MẬT MÃ
1.1. Khái quát
Các hàm băm (Hash functions) là các thuật toán để tạo các bản tóm tắt của
thơng điệp, được sử dụng để nhận dạng và đảm bảo tính tồn vẹn của thồng điệp
Hàm băm có tối thiểu 2 thuộc tính:
+ Nén (Compression): h là 1 ánh xạ từ chuỗi đầu vào x có chiều dài bất kì sanh
một chuỗi đầu ra h(x) có chiều dài cố định n bit (tức: chiều dài của thơng điệp
là bất kì, nhưng đầu ra có chiều dài cố định)
+ Dễ tính tốn (Esae of computation): cho trước hàm h và đầu vào x, việc tính
tốn h(x) là dễ dàng.

Hình 1.1: Mơ hình nén thơng tin của hàm băm
Thông điệp Message đầu vào với chiều dài tùy ý đi qua nhiều vong xử lí của
hàm băm để tạo chuỗi rút gọn Digset có kích thước cố định ở đầu ra.
1.2. Phân loại
- Theo khóa sử dụng :
+ Hàm băm khơng khóa (unkeyed) : đầu vào chỉ là thông điệp (dạng h(x) với
hàm băm h và thông điệp x). VD: MDC, họ hàm băm MD (MD2, MD4, MD5,

MD6), họ hàm băm SHA(0,1,2,3), CRC, Checksums,…
+ Hàm băm có khóa (keyed): đầu vào gồm thơng điệp và khóa bí mật (dạng
h(x, K) với hàm băm h, thông điệp x và khóa bí mật K). VD:MAC,…
5


- Theo chức năng:
+ Mã phát hiện sửa đổi MDC (Modification Detection Code) dùng để tạo chuỗi
đại diện cho thông điệp và dùng kết hợp với các kĩ thuật khác (như chữ kí số)
để đảm bảo tính tồn vẹn của thơng điệp, là hàm băm khơng khóa. Gồm 2 loại
nhỏ
 Hàm băm một chiều (OWHF – One-way hash function): dễ tính giá
trị băm nhưng rất khó khơi phục thơng điệp từ giá trị băm
 Hàm băm chống đụng độ (CRHF – Collision resistant hash
functions): rất khó để tìm được 2 thơng điệp khác nhau nhưng có
cùng giá trị băm
 MDC thường được dùng trong quá trình tạo và kiểm tra chữ kí số
+ Mã xác thực thơng điệp MAC (Message Authentication Code) dùng để đảm
bảo tính tồn vẹn của thơng điệp mà KHÔNG CẦN một kĩ thuật bổ sung nào
khác, là hàm băm có khóa
 MAC được dùng trong các giao thức bảo mật SSL/TLS, IPSec,...
1.3. Mơ hình xử lí dữ liệu

Hình 1.2: Mơ hình tổng qt xử lí dữ liệu của hàm băm
Sau khi tạo ra chuỗi rút gọn Digset có kích thước cố đinh (fixed length out
put), chuỗi này đi qua 1 khâu chuyển đổi định dạng tùy chọn để tạo ra chuỗi băm kết
quả (out put)

6



Hình 1.3: Mơ hình xử lí dữ liệu của hàm băm
Trong bước 1 (preprocessing – tiền xử lí): x được nối đi thêm một số bit và
kích thước khối rồi chia thành các khối có kích thước như nhau và xác định. Trong
bước 2, từng khối dữ liệu xi được xử lí thơng qua hàm nén f để tạo đầu ra Hi->Ht.
Bước 3 là bước chuyển đổi định dạng Ht thành giá trị băm kết quả h(x) thông qua
hàm g.
1.4. Ứng dụng
So với các hàm hash thông thường, hàm băm mật mã thường có xu hướng sử
dụng nhiều tài nguyên tính tốn hơn. Vì lí do này, các hàm băm mật mã thường chỉ
được dùng trong các bối cảnh cần bảo vệ, chống thông tin giả mạo trước các đối
tượng độc hại.
Sau đây là một số ứng dụng của hàm băm mật mã:
- Kiểm tra tính tồn vẹn của message và file: bằng cách so sánh giá trị băm của
message trước và sau khi truyền để xác định xem liệu có thay đổi nào đã xảy ra
trong q trình truyền hay không.

7


- Xác thực mật khẩu: ta có thể lưu trữ mật khẩu bằng giá trị hàm băm của nó để
tăng tính bảo mật. Để kiểm tra, mật khẩu được người dùng đưa vào sẽ được
băm và so sánh với giá trị băm đã được lưu.
- Bằng chứng công việc (Proof of Work): được sử dụng trong blockchain để
chống lại DoS, spam bằng cách yêu cầu một số công việc từ bên muốn truy
cập. Đặc điểm chính của cơng việc này là cơng việc phải có độ khó cao, tốn
nhiều thời gian (nhưng khả thi) ở phía người yêu cầu nhưng lại dễ kiểm tra cho
nhà cung cấp.

8



CHƯƠNG 2: CÁC GIẢI THUẬT HÀM BĂM SHA
2.1. Giới thiệu SHA
SHA là các thuật giải được chấp nhận bởi FIPS dùng để chuyển một đoạn dữ
liệu nhất định thành một đoạn dữ liệu có chiều dài khơng đổi với xác suất khác biệt
cao. Những thuật giải này được gọi là "an tồn" bởi vì, theo ngun văn của chuẩn
FIPS 1802 phát hành ngày 1 tháng 8 năm 2002:
"for a given algorithm, it is computationally infeasible
1. To find a message that corresponds to a given message digest, or
2 .To find two different messages that produce the same message digest. Any
change to a message will, with a very high probability,result in a different message
digest".
Tạm dịch đại ý là:
1.Cho một giá trị băm nhất định được tạo nên bởi một trong những thuật giải
SHA, việc tìm lại được đoạn dữ liệu gốc là khơng khả thi.
2. Việc tìm được hai đoạn dữ liệu khác nhau có cùng kết quả băm tạo ra bởi
một trong những thuật giải SHA là không khả thi.
Bất cứ thay đổi nào trên đoạn dữ liệu gốc, dù nhỏ, cũng sẽ tạo nên một giá trị
băm hoàn toàn khác với xác suất rất cao."
Các thuật giải SHA là SHA-1 (trả lại kết quả dài 160 bit), SHA-224 (trả lại kết
quả dài 224 bit), SHA-256 (trả lại kết quả dài 256 bit), SHA-384 (trả lại kết quả dài
384 bit), và SHA-512(trả lại kết quả dài 512 bit). Thuật giải SHA là thuật giải băm
mật được phát triển bởi cục an ninh quốc gia Mĩ (National Security Agency hay
NSA) và được xuất bản thành chuẩn của chính phủ Mĩ bởi viện công nghệ và chuẩn
quốc gia Mĩ (National Institute of Standards and Technology hay NIST). Bốn thuật
giải sau thường được gọi chung là SHA-2. SHA-3 là phiên bản mới nhất của NIST nó
bao gồm 6 phiên bản SHA3-224, SHA3-256, SHA3-384 , SHA3-512, SHAKE128,
SHAKE256 các phiên bản là khá giống nhau và được phát hành vào tháng 8 năm
2015.

SHA-1 được sử dụng rộng rãi trong nhiều ứng dụng và giao thức an ninh khác
nhau, bao gồm TLS và SSL, PGP, SSH, S/MIME, và IPSec. SHA-1 được coi là thuật
giải thay thế MD5, một thuật giải băm 128 bit phổ biến khác.Hiện nay, SHA-1 khơng
cịn được coi là an tồn bởi đầu năm 2005, ba nhà mật mã họcngười Trung Quốc đã
phát triển thành cơng một thuật giải dùng để tìm được hai đoạn dữ liệu nhất định có
cùng kết quả băm tạo ra bởi SHA-1.Mặc dù chưa có ai làm được điều tương tự với
SHA-2, nhưng vì về thuật giải, SHA-2 khơng khác biệt mấy so với SHA-1 nên nhiều
nhà khoa học đã bắt đầu phát triển một thuật giải khác tốt hơn SHA.NIST cũng đã
khởi đầu một cuộc thi phát triển thuật giải băm mới an tồn hơn SHA,giống như quy
trình phát triển chuẩn mã hóa tiên tiến (Advanced Encryption Standardhay AES).

9


2.2. Các giải thuật SHA
2.2.1. SHA-0
2.2.1.1. Giới thiệu SHA-0
SHA-0 là phiên bản đầu tiên gồm các đặc tả ban đầu của thuật tốn hàm băm
an tồn đã được xuất bản vào năm 1993 dưới tiêu đề Secure Hash Standard , FIPS
PUB 180, bởi cơ quan tiêu chuẩn Hoa Kỳ của cơ quan NIST (Viện Tiêu chuẩn và
Công nghệ Quốc gia). Nó đã bị NSA thu hồi ngay sau khi xuất bản và bị thay thế bởi
bản sửa đổi, được xuất bản vào năm 1995 trong FIPS PUB 180-1 và được gọi là
SHA-1..
SHA-0 là một hàm băm dành riêng 160-bit dựa trên ngun lý thiết kế của
MD4. Nó ápdụng mơ hình Merkle-Damgard cho một chức năng nén chuyên dụng.
Đầu vào tin nhắn được đệm và chia thành k khối tin 512-bit. Tại mỗi lần lặp lại của
hàm nén h, một biến chuỗi 160 bit Ht được cập nhật bằng một khối tin M t+1, tức là
Ht+1 = h (Ht, Mt+1). Giá trị ban đầu H0 (còn gọi là IV) được xác định trước và Hk là
đầu ra của hàm băm.
2.2.1.2. Giải thuật SHA-0

Hàm nén SHA-0 được xây dựng dựa trên cấu trúc Davis-Meyer. Nó sử dụng
một hàm E như là một mật mã khối với H t cho đầu vào tin nhắn và M t+1 cho đầu vào
khóa, cần phải có một feed-forward để phá vỡ tính khơng thể đảo ngược của quá
trình:
Ht+1 = E(Ht , Mt+1 ) ⊕ Ht
Ở đây toán tử ⨁ biểu thị phép cộng modulo 2 32 từ 32-bit bởi các từ 32-bit.
Hàm này bao gồm 80 bước (4 vòng 20 bước), mỗi phần xử lý một từ tin 32 bit Wi để
cập nhật 5 thanh ghi nội bộ 32-bit (A, B, C, D, E). Các feed-forward bao gồm việc
cộng modulo 232 trạng thái ban đầu với trạng thái cuối cùng của mỗi thanh ghi. Vì đã
sử dụng nhiều bit tin hơn so với số liệu sẵn có, nên việc mở rộng tin nhắn được xác
định.
Mở rộng thông điệp: đầu tiên, khối thông điệp M t được chia thành 16 từ 32-bit
W0, …,W15. Sau đó 16 từ này được mở rộng theo tuyến tính như sau:
Wi = Wi-16 ⨁ Wi-14 ⨁ Wi-8 ⨁ Wi-3 với 16 ≤ i ≤ 79
Cập nhật trạng thái: Đầu tiên, biến chuỗi H t được chia thành 5 từ 32 bit để điền
vào 5 thanh ghi (A0, B0, C0, D0, E0). Sau đó chuyển đổi tiếp theo được thực hiện 80
lần:
Trong đó Ki là các hằng số được xác định trước và f i là hàm luận lý được định
nghĩa trong bảng 1.
Feed-forward: Các tổng modulo 232 : (A0+A80), (B0+B80), (C0+C80), (D0+D80),
(E0+E80) được nối thành các biến chuỗi Ht+1.
Lưu ý rằng tất cả các thanh ghi được cập nhật nhưng thanh ghi A i+1 chỉ là
những bản sao quay nên chúng ta chỉ cần xem xét thanh ghi A ở mỗi bước. Vì vậy,
chúng ta có:
10


,)+
Vòng lặp


Bước i

fi(B,C,D)

Ki

1

1≤i≤20

fIF = (B�C) ⨁ ( B �C)

0x5a827999

2

21≤i≤40

fIF = (B�C) ⨁ ( B �C)

0x6ed6eba1

3

41≤i≤60

fM A J = (B�C) ⨁ (B�D) ⨁ (C�D)

0x8fabbcdc


4

61≤i≤80

fXOR = B ⨁ C ⨁ D

0xca62c1d6

Bảng 2.1: Các hàm Boolean và hằng số trong SHA-0
2.2.2. SHA-1
2.2.2.1. Giới thiệu SHA-1
Hàm băm SHA-1 đã được NIST đưa ra vào năm 1995 như là một Tiêu chuẩn
xử lý Thông tin Liên bang. Từ khi xuất bản, SHA-1 đã được chấp nhận bởi nhiều
chính phủ và các tiêu chuẩn ngành an ninh, đặc biệt là các tiêu chuẩn về chữ ký số mà
cần có hàm băm chống xung đột. Ngồi việc sử dụng chữ ký số, SHA-1 cũng đã được
triển khai như một thành phần quan trọng trong các chương trình và giao thức mật mã
khác nhau, chẳng hạn như xác thực người dùng, hợp đồng khóa và tạo ra số giả ngẫu
nhiên. Do đó, SHA-1 đã được triển khai rộng rãi trong hầu hết các hệ thống và sản
phẩm bảo mật thương mại.
SHA-1 khác với SHA-0 chỉ bằng một vòng quay đơn lẻ trong lịch trình thơng
báo của hàm nén . Theo NSA, điều này đã được thực hiện để sửa một lỗ hổng trong
thuật toán ban đầu làm giảm độ an tồn mã hố của nó, nhưng họ khơng cung cấp
thêm lời giải thích nào.
2.2.2.2. Giải thuật SHA-1
Hàm băm SHA-1 nhận thơng báo có chiều dài nhỏ hơn 2 64 bit và tạo ra giá trị
băm 160 bit. Thông điệp đầu vào được đệm và sau đó được xử lý trong các khối 512bit trong cấu trúc lặp Damgard / Merkle. Mỗi lần lặp lại gọi hàm nén có giá trị ràng
buộc 160 bit và một khối tin 512 bit và xuất ra một giá trị chuỗi khác 160 bit. Ban
đầu giá trị chuỗi (gọi là IV) là một tập các hằng cố định, và giá trị chuỗi cuối cùng là
băm của thông báo.
Trong phần sau, chúng ta mô tả hàm nén của SHA-1.

Đối với mỗi khối 512 bit của tin nhắn có đệm, chia nó thành 16 từ 32-bit, (m 0,
m1,...,m15). Các từ của tin nhắn lần đầu tiên được mở rộng như sau: for i = 16, ..., 79,
mi = ( mi-3 ⨁ mi-8 ⨁ mi-14 ⨁ mi-16) ≪1. Các từ tin nhắn được mở rộng sau đó được xử
lý trong bốn vịng, mỗi vịng gồm 20 bước. Hàm bước được định nghĩa như sau.
For i = 1, 2, ..., 80,
11


=

Giá trị chuỗi ban đầu IV = (a0, b0, c0, d0, e0) được định nghĩa như sau:
(0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0) Mỗi vòng sử dụng
một hàm Boolean và hằng số ki khác nhau , được tóm tắt trong bảng 2.
Round

Step i

fi(x,y,z)

Ki

1

1≤i≤20

fIF =(x∧y) ⨁ ( ∧z)

0x5a827999

2


21≤i≤40

fXOR =x ⨁ y ⨁ z

0x6ed6eba1

3

41≤i≤60

fM A J =(x∧y) ∨ (x∧z) ∨
0x8fabbcdc
(y∧z)

4

61≤i≤80

fXOR =x ⨁ y ⨁ z

0xca62c1d6

Bảng 2.2: Các hàm Boolean và hằng số trong SHA-1
Hình 2.1 biểu diễn lưu đồ một vòng xử lý của SHA-1, trong đó A, B, C, D, E
làcác từ 32 bit của state, Wt: khối 32 bit thông điệp đầu vào, K t là 32 bit hằng khác
nhau cho 16 mỗi vịng, <
12



Hình 2.1: Lưu đồ một vịng xử lý của SHA-1
2.3. SHA-2
2.3.1. Giới thiệu SHA-2
SHA-2 (Secure Hash Algorithm 2) là một tập hợp các hàm băm mật mã được
thiết kế bởi Cơ quan An ninh Quốc gia Hoa Kỳ (NSA). Chúng được xây dựng bằng
cách sử dụng cấu trúc Merkle–Damgård, từ một chức năng nén một chiều được xây
dựng bằng cấu trúc Davies – Meyer từ một mật mã khối chuyên dụng.
SHA-2 bao gồm những thay đổi đáng kể so với tiền nhiệm của nó, SHA-1. Họ
SHA-2 bao gồm sáu hàm băm với digests (giá trị băm) đó là 224, 256, 384 hoặc 512
bit: SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224, SHA-512/256 .
SHA-256 và SHA-512 là những hàm băm mới được tính bằng 8 từ 32-bit và 64bit. Chúng sử dụng số lượng thay đổi và hằng số cộng khác nhau, nhưng cấu trúc của
chúng là hầu như giống hệt nhau, chỉ khác nhau về số vòng. SHA-224 và SHA-384
lần lượt là các phiên bản rút gọn của SHA-256 và SHA-512, được tính với các giá trị
ban đầu khác nhau. SHA-512/224 và SHA-512/256 cũng là phiên bản rút ngắn của
SHA-512, nhưng các giá trị ban đầu được tạo ra bằng cách sử dụng phương pháp
được mô tả trong Tiêu chuẩn xử lý thông tin liên bang (FIPS) PUB 180-4. SHA-2 đã
được Viện Tiêu chuẩn và Công nghệ Quốc gia (NIST) công bố năm 2001 như một
tiêu chuẩn liên bang của Hoa Kỳ (FIPS). Họ thuật toán SHA-2 được cấp bằng sáng
chế số 6829355 tại Hoa Kỳ. Hoa Kỳ cũng đã phát hành bằng sáng chế này theo giấy
phép miễn phí bản quyền.
Tính đến năm 2011, các cuộc tấn công công khai tốt nhất đã phá vỡ khả năng
kháng nghịch ảnh đối với 52 trong số 64 vòng lặp của SHA-256 hoặc 57 trong số 80
vòng lặp của SHA-512 và khả năng chống va chạm đối với 46 trong số 64 vòng lặp
của SHA-256.
13


Hình 2.2: Lưu đồ một vịng lặp của SHA-2
Hình biểu diễn lưu đồ 1 lần lặp trong hàm nén của họ SHA-2. Các thành phần

màu xanh thực hiện các hoạt động sau:
Ch( E , F , G )  ( E �F ) �(�E �G )
Ma( A, B, C )  ( A �B ) �( A �C ) �( B �C )

�( A)  ( A  2) �( A  13) �( A  22)
�( E )  ( E  6) �( E  11) �( E  25)
0

1

Vòng quay theo chiều bit sử dụng các hằng số khác nhau cho SHA-512. Các số
đã cho là dành cho SHA-256. Hình ⊞ là tốn tử cộng modulo 232 cho SHA-256 và 264
cho SHA-512.
2.3.2. Các phiên bản
2.3.2.1. SHA-256
2.3.2.1.1. Giới thiệu
SHA-256 (một nhánh của hàm băm bảo mật SHA-2) là thuật toán bảo mật 256
bit và dùng để tạo ra các hàm băm không thể đảo ngược và duy nhất. Số lượng hàm
băm có thể càng lớn, thì xác suất để 2 giá trị có thể tạo ra cùng 1 giá trị hàm băm
càng nhỏ.
Thuật toán SHA-256 tạo ra một mã băm cố định 256 bit (32 byte) gần như duy
nhất. Một chuỗi băm được tạo ra không thể được tính tốn trở lại. Điều này làm cho
nó phù hợp để xác nhận mật khẩu, chống giả mạo, chữ ký số,… Ứng dụng nổi tiếng
nhất của SHA-256 là hệ thống tiền tệ Bitcoin.
2.3.2.1.2. Các bước thực hiện của SHA-256
- Các lưu ý:
14


+ Tất cả các biến là số nguyên không dấu 32 bit và phép cơng được tính theo

modulo 232
+ Đối với mỗi vịng, có một hằng số vịng k[i] và một mục nhập trong mảng
Lịch trình thơng báo w[i], 0 �i �63 .
+ Hàm nén sử dụng 8 biến làm việc, từ a đến h.
+ Quy ước big-endian được sử dụng khi biểu thị các hằng số trong mã giả này,
và khi phân tích cú pháp tin nhắn sẽ chặn dữ liệu từ byte thành từ.
- Bước 1: Khởi tạo giá trị băm(32 bit đầu tiên của phần phân đoạn căn bậc hai của 8
số nguyên tố đầu tiên 2..19):
h0: = 0x6a09e667
h1: = 0xbb67ae85
h2: = 0x3c6ef372
h3: = 0xa54ff53a
h4: = 0x510e527f
h5: = 0x9b05688c
h6: = 0x1f83d9ab
h7: = 0x5be0cd19
- Bước 2: Khởi tạo mảng các hằng số vòng (32 bit đầu tiên của phần phân đoạn của
các rễ hình khối của 64 số nguyên tố đầu tiên 2..311):
k [0..63]: =
0x428a2 0x71374 0xb5c0f 0xe9b5d 0x3956c 0x59f11 0x923f8 0xab1c5
f98
491
bcf
ba5
25b
1f1
2a4
ed5
0xd807a 0x12835 0x2431 0x550c7 0x72be5 0x80deb 0x9bdc0 0xc19bf
a98

b01
85be
dc3
d74
1fe
6a7
174
0xe49b6 0xefbe4 0x0fc19 0x240ca 0x2de92 0x4a748 0x5cb0a 0x76f98
9c1
786
dc6
1cc
c6f
4aa
9dc
8da
0x983e5 0xa831c 0xb003 0xbf597 0xc6e00 0xd5a79 0x06ca6 0x14292
152
66d
27c8
fc7
bf3
147
351
967
0x27b7 0x2e1b2 0x4d2c6 0x53380 0x650a7 0x766a0 0x81c2c 0x92722
0a85
138
dfc
d13

354
abb
92e
c85
0xa2bfe 0xa81a6 0xc24b8 0xc76c5 0xd192e 0xd6990 0xf40e3 0x106aa
8a1
64b
b70
1a3
819
624
585
070
0x19a4c 0x1e376 0x2748 0x34b0b 0x391c0 0x4ed8a 0x5b9cc 0x682e6
116
c08
774c
cb5
cb3
a4a
a4f
ff3
0x748f8 0x78a56 0x84c87 0x8cc70 0x90bef 0xa4506 0xbef9a 0xc6717
2ee
36f
814
208
ffa
ceb
3f7

8f2
Bảng 2.3: 64 số nguyên tố đầu tiên dưới dạng 32-bit
15


- Bước 3: Tiền xử lý (Padding):
+ Bắt đầu với thơng điệp ban đầu có độ dài L bit.
+ Thêm một bit '1' duy nhất.
+ Thêm K bit '0', trong đó K là số nhỏ nhất > = 0 sao cho L + 1 + K + 64 là bội
số của 512.
+ Thêm L dưới dạng số nguyên big-endian 64 bit, làm cho tổng độ dài sau xử
lý là bội số của 512 bit sao cho các bit trong thông báo là L 1 00 .. <K 0's> .. 00
<L là số nguyên 64 bit> = k * tổng số 512 bit.
- Bước 4: Xử lý tin nhắn theo từng phần 512 bit liên tiếp:
+ Chia nhỏ tin nhắn thành các đoạn 512 bit
+ Với mỗi đoạn tạo một mảng lịch trình tin nhắn 64 mục với w [0..63] từ 32 bit
(Các giá trị ban đầu trong w [0..63] không quan trọng, rất nhiều triển khai bằng
không ở đây), sao chép đoạn vào 16 từ đầu tiên w [0..15] của mảng lịch trình thơng
báo, kéo dài 16 từ đầu tiên thành 48 từ còn lại w [16..63] của mảng lịch trình thơng
báo:
for i from 16 to 63
s0 := (w[i-15] rightrotate 7) xor (w[i-15] rightrotate 18) xor (w[i-15] rightshift
3)
s1 := (w[i-2] rightrotate 17) xor (w[i-2] rightrotate 19) xor (w[i-2] rightshift
10)
w[i] := w[i-16] + s0 + w[i-7] + s1
+ Khởi tạo các biến làm việc thành giá trị băm hiện tại:
a: = h0
b: = h1
c: = h2

d: = h3
e: = h4
f: = h5
g: = h6
h: = h7
+ Nén vịng lặp chính:
For i from 0 to 63:
S1: = (e rightrotate 6) xor (e rightrotate 11) xor (e rightrotate 25)
ch: = (e and f) xor ((not e) and g)
temp1: = h + S1 + ch + k [i] + w [i]
S0: = (a rightrotate 2) xor (a rightrotate 13) xor (a rightrotate 22)
maj: = (a and b) xor (a and c) xor (b and c)
16


temp2: = S0 + maj
h: = g
g: = f
f: = e
e: = d + temp1
d: = c
c: = b
b: = a
a: = temp1 + temp2
+ Thêm đoạn đã nén vào giá trị băm hiện tại:
h0: = h0 + a
h1: = h1 + b
h2: = h2 + c
h3: = h3 + d
h4: = h4 + e

h5: = h5 + f
h6: = h6 + g
h7: = h7 + h
+ Tạo giá trị băm cuối cùng (big-endian):
Digest: = hash: = h0 append h1 append h2 append h3 append h4 append
h5 append h6 append h7
2.3.2.2. SHA-512
- SHA-512 có cấu trúc giống với SHA-256, nhưng:
+ Tin nhắn được chia thành các phần 1024 bit.
+ Giá trị băm ban đầu và hằng số vòng được mở rộng thành 64 bit.
+ Có 80 vịng lặp thay vì 64.
+ Mảng lịch trình thơng báo w có 80 từ 64 bit thay vì 64 từ 32 bit.
+ Để mở rộng mảng lịch trình thơng báo w, vịng lặp từ 16 đến 79 thay vì từ 16
đến 63.
+ Các số làm tròn dựa trên 80 số nguyên tố đầu tiên 2..409.
+ Kích thước từ được sử dụng để tính tốn dài 64 bit.
+ Độ dài thêm vào của tin nhắn (trước khi xử lý trước) là một số nguyên bigendian 128 bit và số tiền thay đổi và luân chuyển được sử dụng là khác nhau.
2.4. SHA-3
2.4.1. Giới thiệu
17


SHA-3 (Secure Hash Algorithm 3) là thành viên mới nhất của họ các thuật toán
băm mật mã (cryptographic hash function), được công bố bởi NIST (Viện Tiêu chuẩn
và Kỹ thuật quốc gia Hoa Kỳ).
Vào giai đoạn 2005–2006, MD5 và SHA-1 được cho là khơng cịn an tồn,
trong khi đó SHA-2 cũng dựa vào các nguyên lí dùng cho MD5 và SHA-1, do vậy
NIST đã tổ một cuộc thi để tìm ra tìm ra một thuật tốn băm mới SHA-3. SHA-3 ra
đời, SHA-3 là một phần của họ các thuật toán băm lớn được gọi là KECCAK. SHA-3
đem lại sự khác biệt khi sử dụng cấu trúc bọt biển (Sponge construct), trong đó dùng

hàm hốn vị để xử lí và đưa ra output đồng thời các hàm này cũng được dùng cho
việc xử lí các input tiếp theo được đưa vào hàm hash.
2.4.2. Thiết kế SHA-3
SHA-3 sử dụng cấu trúc bọt biển, trong đó dữ liệu được "hấp thụ" (Absorbing)
vào miếng bọt biển, sau đó kết quả là "vắt" ra. Trong giai đoạn hấp thụ, các khối
thông báo XORed thành một tập hợp con của trạng thái, sau đó được biến đổi thành
một tập hợp toàn bộ bằng cách sử dụng một hàm hốn vị f . Trong giai đoạn "bóp"
(Squeesing), các khối đầu ra được đọc từ cùng một tập con của trạng thái, xen kẽ với
hàm chuyển đổi trạng thái f . Kích thước của phần trạng thái được viết và đọc được
gọi là "tỷ lệ" (ký hiệu là r ), và kích thước của phần khơng bị ảnh hưởng bởi đầu
vào / đầu ra được gọi là "dung lượng" (ký hiệu là c ). Năng lực quyết định tính bảo
mật của chương trình. Giá trị lớn nhất mức độ bảo mật là một nửa cơng suất.

Hình 2.3: Cấu trúc hàm Keccak
Các tham số liên quan và kí hiệu:
+ m là input đầu vào
+ Hàm Padding pad
+ Hàm hoán vị ngầu nhiên f gồm 24 round có đầu vào là một state và trả về một
state mới
18


+ State: khối bit có độ dài d. Trong SHA-3 b = 1600
+ Phần thay đổi trong state là rate có độ dài r
+ Phần cịn lại trong state là capacity có độ dài c = b – r
+ Độ dài output là d
Dựa vào yêu cầu về độ dài output d của NIST về thuật toán băm mới, các thông số
về r và c sẽ thay đổi theo bảng sau:
D


B

r

c

SHA3-224

224

1600

1152

448

SHA3-256

256

1600

1088

512

SHA3-384

384


1600

832

768

SHA3-512

512

1600

576

1025

Bảng 2.4: Các thông số của các hàm băm SHA3
Trong phần pre-process, input m được chia nhỏ thành n các block X có độ dài
r. Để có thể chia m thành n block cùng độ dài, ta dùng hàm pad để chèn thêm một
lượng các bit vào m sao cho độ dài của m lúc này chia hết cho r. Lúc này dãy các
block Xi (i = 0..n-1) sẽ được đưa vào cấu trúc bọt biển.
2.4.2.1. Cấu trúc bọt biển (Spronge Construction)

Hình 2.4: Cấu trúc bọt biển
SHA-3 sử dụng cấu trúc bọt biển, trong đó dữ liệu sẽ đực đi qua 2 giai đoạn:
 Absord: dữ liệu đầu vào (input) được “thấm hút” (absord) vào bọt biển.
 Squeeze: dữ liệu đầu ra (output) sẽ được “vắt ra” (squeeze) từ bọt biển.
2.4.2.1.1. Giai đoạn 1: Absord
- Bước 1: State được khỏi tạo với chuỗi bit 0 có độ dài b = 1600.
- Bước 2: Duyệt qua tất cả các Xi.

19


- Bước 3: Thêm vào c bit 0 vào Xi để Xi bây giờ có độ dài b bằng với State.
- Bước 4: XOR Xi vừa nhận được với State.
- Bước 5: Đưa kết quả nhận được qua hàm f, hàm f trả về một State mới. Tiếp tục
duyệt đến block Xi+1.
2.4.2.1.2. Giai đoạn 2: Squeeze
- Bước 1: Khởi tạo kết quả Y với chuỗi độ dài 0 bit.
- Bước 2: Khi độ dài của Y ít hơn độ dài output d: lấy r bit của State thêm vào Y.
- Bước 3: Nếu độ dài Y vẫn nhỏ hơn d, sử dùng hàm f tạo State mới rồi tiếp tục dùng
r bit của State mới này để thêm vào Y.
- Bước 4: Nếu độ dài của Y lớn hơn d: lấy d bit đầu và bỏ phần dư còn lại.
Lưu ý: Với SHA-3 ta chỉ cần thực hiện 1 lần bước 2, vì r > d.
2.4.2.2. Hàm Padding
Để đảm bảo dữ liệu đầu vào m có thể chia ra thành các block đúng r bit. SHA3 dùng pattern 10*1 trong hàm padding: bắt đầu bằng bit 1, theo sau đó là các bit 0
(tối đa là r-1), và kết thúc bằng bit 1.
Trường hợp có r-1 bit 0 xảy ra khi: Block cuối cùng của dữ liệu đầu vào có độ
dài là r-1. Khi đó, block này sẽ được thêm bit 1 vào cuối để đủ độ dài là r, một block
khác được thêm vào chứa r-1 bit 0 và kết thúc bằng bit 1.
Nếu độ dài block cuối cùng của dữ liệu đầu vào bằng r, nói cách khác độ dài
dữ liệu đầu vào chia hết cho r, thì lúc này vẫn cần thêm một block kết thúc. Block kết
thúc trong trường hợp này bắt đầu bằng 1, theo đó là r-2 bit 0, và kết thúc bằng bit 1.
2.4.2.3. Hàm hoán vị block (Block permutation)
Trong Keccak, độ dài state có thể được tính theo cơng thức b = 5 x 5 x w với w
= 2^l (l = 1..6, trong trường hợp của SHA-3 w = 64 với l = 6, dẫn đến b = 1600)
Xem state như một mảng 3 chiều 5 x 5 x w kí hiệu là A với:
A[i][j][k] = bit thứ (5i + j) x w + k của state
Hàm hoán vị block bao gồm 12 + 2l round (với SHA-3 là 24 round), mỗi round
gồm 5 bước:

+ Bước 1: θ (thê-ta)
Mỗi bit được thay bằng cách XOR tổng của 10 bit “gần kề” và chính nó. Xét
bit tại (x,y,z) 10 bit này bao gồm:
 5 bit cột “cạnh bên trái” A[x-1][0..4][z]
 5 bit cột “chéo bên phải” A[x+1][0..4][z-1]
A  x   y   z   A  x   y   z  �Parity  A  x  1  0..4  z   �Parity  A  x  1  0..4   z  1 

Lưu ý: tất cả các chỉ số được mod cho kích thước của chiều của chỉ số đó.
+ Bước 2 và 3: ρ (rơ) và π (pi)
Ta tính mảng B từ mảng A:
20


B  y   2 x  3 y   A x  y  �
z  r  x, y  �



Mảng offset r được tính theo bảng sau:
x=3

x=3

x=0

x=1

x=2

y=2


25

39

3

10

43

y=1

55

20

36

44

6

y=0

28

27

0


1

62

y=4

56

14

18

2

61

y=3

21

8
41
45
Bảng 2.5: Mảng offset r

15

+ Bước 4: χ (chi)
Sử dụng mảng B đã được tính ở bước trước và đặt kết quả vào mảng A.

A  x, y, z   B  x, y , z  � �B  x  1, y, z  �B  x  2, y , z  

+ Bước 5: ι (yô-ta)
A  0, 0, z   A  0, 0, z  �RC  i, z 

Với RC khác nhau tùy vào round hiện tại của hàm f (với SHA-3 có 24 round).
RC được thể hiện theo bảng sau
RC[0]

0x0000000000000001

RC[12]

0x000000008000808B

RC[1]

0x0000000000008082

RC[13]

0x800000000000008B

RC[2]

0x800000000000808A

RC[14]

0x8000000000008089


RC[3]

0x8000000080008000

RC[15]

0x8000000000008003

RC[4]

0x000000000000808B

RC[16]

0x8000000000008002

RC[5]

0x0000000080000001

RC[17]

0x8000000000000080

RC[6]

0x8000000080008081

RC[18]


0x000000000000800A

RC[7]

0x8000000000008009

RC[19]

0x800000008000000A

RC[8]

0x000000000000008A

RC[20]

0x8000000080008081

RC[9]

0x0000000000000088

RC[21]

0x8000000000008080

RC[10]

0x0000000080008009


RC[22]

0x0000000080000001

RC[11]

0x000000008000000A

RC[23]

0x8000000080008008

Bảng 2.6: Các hằng số vòng RC[i]
21


22


CHƯƠNG 3: CÁC ĐIỂM YẾU VÀ CÁC DẠNG TẤN CÔNG
VÀO HÀM BĂM
3.1. Các điểm yếu
SHA0: Khi thông điệp muốn mã hóa có giá trị gần nhau, trường hợp họ phát
142 bit số 160 bit va chạm đầy đủ SHA-0 giảm xống còn 62 trong 80 vòng theo
nghiên cứu trước. Thuật tốn SHA0 khơng sử dụng nhiều thay SHA1
SHA1: Năm 2005, điểm yếu mật mã phát SHA-1, Hàm băm thiết kế để giảm
thiểu xác suất liệu đầu vào khác lại cho đầu giá trị băm giống nhau, điều có nghĩa có
dữ liệu đầu vào khác cho đầu giá trị băm giống nhau, theo Cryptographic hash
collision. Khi sử dụng SHA để mã hóa mật khẩu: phương pháp khơng khó khăn cho

kẻ tấn cơng chúng có thư viện mật
3.2. Các dạng tấn cơng vào SHA
3.2.1. Tấn công va chạm (Collision Attack)
Trong một cuộc tấn cơng va chạm, kẻ tấn cơng tìm thấy hai thơng điệp có cùng
đầu ra băm và gửi thơng điệp khơng chính xác đến người nhận.

Hình 3.1: Tấn cơng va chạm
Trong tấn công va chạm cổ điển, kẻ tấn công khơng kiểm sốt nội dung hai
thơng báo, chúng tùy ý chọn theo thuật tốn (giống mật mã khóa đối xứng dễ bị tấn
23


công vũ lực). Sự cạnh tranh hàm băm NIST phần lớn gây tấn công va chạm chống lại
hai hàm băm sử dụng phổ biến, MD5 và SHA-1:
- Một số định dạng tài liệu PostScript, macro Microsoft Word, có cấu trúc có
điều kiện (if-then-else) cho phép kiểm tra xem vị trí tệp tin có giá trị hay vị
trí khác để kiểm sốt hiển thị - TIFF chứa hình ảnh cắt, với phần khác hình
ảnh hiển thị mà khơng ảnh hưởng đến giá trị băm.
- Các tệp PDF dễ bị tấn công va chạm cách sử dụng giá trị màu (văn thư hiển
thị với màu trắng trộn vào văn thư khác hiển thị với màu tối) .
Cuộc tấn công trong thực tế:
Trong năm 2007, cơng bố va chạm tiền tố tìm thấy MD5, đòi hỏi khoảng 250
đánh giá chức MD5 Bài báo chứng tỏ hai chứng X.509 cho tên miền khác nhau, với
giá trị băm va chạm Điều có nghĩa quan chứng yêu cầu ký chứng cho tên miền sau
chứng sử dụng để giả mạo tên miền khác.
Vào ngày 27 tháng 2 năm 2017, Google đã công bố SHAttered, vụ va chạm
đầu tiên được tạo ra cho SHA-1. Google đã có thể tạo một tệp PDF có cùng hàm băm
SHA-1 như một tệp PDF khác, mặc dù có nội dung khác nhau.
SHAttered đã được thực hiện trên một tệp PDF. rất nhiều thay đổi nhỏ, ở cấp
độ bit có thể được thực hiện mà khơng ngăn người đọc mở nó hoặc gây ra bất kỳ sự

khác biệt rõ ràng nào. PDF cũng thường được sử dụng để cung cấp phần mềm độc
hại. Mặc dù SHAttered có thể hoạt động trên các loại tệp khác, như ISO, chứng chỉ
được chỉ định cứng nhắc, khiến cho một cuộc tấn cơng như vậy khó xảy ra.
Vì vậy, cuộc tấn cơng này dễ dàng để thực hiện như thế nào? SHAttered dựa
trên một phương pháp được Marc Stevens phát hiện vào năm 2012, yêu cầu hơn 2 60.3
(9.223 triệu) hoạt động SHA-1 - một con số đáng kinh ngạc. Tuy nhiên, phương pháp
này vẫn hoạt động ít hơn 100.000 lần so với yêu cầu để đạt được kết quả tương tự với
lực lượng vũ phu. Google phát hiện ra rằng với 110 card đồ họa cao cấp hoạt động
song song, sẽ mất khoảng một năm để tạo ra một vụ va chạm. Th thời gian tính
tốn này từ Amazon AWS sẽ có giá khoảng 110.000 đơ la. Hãy nhớ rằng khi giá giảm
24


×