You are on page 1of 35

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:An toàn bảo mật


Hệ thống 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:NTT Trang


Sinh viên thực hiện: Nhóm 7
SHA
LỜI MỞ ĐẦU..........................................................................................................3
Chương 1:Khái quát về hàm băm mật mã............................................................3
1.1. Khái quát....................................................................................................3
1.2. Phân loại.....................................................................................................4
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................................................8
2.1. Giới thiệu SHA..............................................................................................8
2.2. Các giải thuật SHA......................................................................................10
2.2.1. SHA-0.....................................................................................................10
2.2.1.1. Giới thiệu SHA-0.............................................................................10
2.2.1.2. Giải thuật SHA-0.............................................................................10
2.2.2. SHA-1.....................................................................................................11
2.2.2.1. Giới thiệu SHA-1.............................................................................11
2.2.2.2. Giải thuật SHA-1.............................................................................12
2.2.2 SHA-2......................................................................................................13
2.2.2.1 Giới thiệu SHA-2..............................................................................13
2.2.2.2 Các phiên bản...................................................................................16
2.2.2.2.1 SHA-256......................................................................................16
2.2.2.2.2 SHA-512......................................................................................20
2.2.3 SHA-3.........................................................................................................20
2.2.3.1Giới thiệu về SHA-3.............................................................................20
2.2.3.2Thiết kế SHA-3.....................................................................................21
Chương 3: Các điểm yếu và các dạng tấn công..................................................28
3.1. Các điểm yếu................................................................................................28
3.2. Các dạng tấn công thường gặp...................................................................28
3.2.1. Dạng tấn công Brute-Force..................................................................28
3.2.2. Tấn công va chạm (Collision Attack)...................................................29
3.2.3. Tấn công Length Extention..................................................................30
3.2.4. Tấn công từ điển:...................................................................................31
3.2.5. Birthday Paradox..................................................................................31
KẾT LUẬN............................................................................................................34
TÀI LIÊU THAM KHẢO.....................................................................................34

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.
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 toàn vẹn của thông
điệp.
 Các hàm băm là các hàm công khai được dùng để tạo các giá trị băm hay
thông điệp rút gọn (message digest).
 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.

Hình 1.1: Mô hình nén thông tin của hàm băm

Hàm băm là một hàm toán học h có tối thiểu 2 thuộc tính:
 Nén (compression): h là một ánh xạ từ chuỗi đầu vào x có chiều dài bất kỳ
sang một chuỗi đầu ra h(x) có chiều dài cố định n bit.
 Dễ tính toán (ease of computation): cho trước hàm h và đầu vào x, việc tính
toán h(x) là dễ dàng.
Một số tính chất khác:
 Tính xác định: Đầu ra sẽ giống nhau đối với một kết quả nhất định.
 Không thể đảo ngược: Không thể đảo ngược hàm băm trở lại văn bản đầu
vào
 Không trùng lặp : Văn bản đầu vào không thể tạo ra cùng một đầu ra.
 Không thể dự đoán: Một hàm băm ngẫu nhiên tạo ra một giá trị băm duy
nhất không thể dự đoán được.
1.2. Phân loại

Hình 1.2: Phân loại các hàm băm mật mã và ứng dụng
Phân loại hàm băm theo khóa sử dụng:
 Hàm băm không khóa(unkeyed): đầu vào chỉ là thông điệp có 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 có 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,…

Phân loại hàm băm theo tính năng:


 Mã phát hiện sửa đổi (MDC - Modification detection codes):
Được sử 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 biện pháp khác để đảm bảo tính toàn vẹn của thông điệp, thuộc loại hàm
băm không khóa
Hai loại MDC:
o Hàm băm một chiều (OWHF - One-way hash functions): dễ dàng
tính giá trị băm, nhưng khôi phục thông điệp từ giá trị băm rất khó
khăn.
o Hàm băm chống đụng độ (CRHF - Collision resistant hash
functions): Rất khó tìm được 2 thông điệp trù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 codes)
Được dùng để đảm bảo tính toàn vẹn của thông điệp mà không cần một
biện pháp bổ sung khác, thuộc loại 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.3: Mô hình tổng quát quá trình 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).

Hình 1.4: Mô hình xử lý dữ liệu của hàm băm


Gồm 3 giai đoạn:
1) Tiền xử lí: x được nối đuôi thêm một số bit đêm 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.
2) Xử lý lặp: Từng khối dữ liệu xi được xử lí thông qua hàm nén ɰ để tạo
đầu ra Hi->Ht.
3) 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 toá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 toà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 quá trình truyền hay không.
- 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.
- Lưu trữ mật khẩu: Hashing bảo vệ cách mật khẩu được lưu trữ và lưu trữ.
Thay vì giữ mật khẩu, ở dạng bản rõ. Nó được lưu trữ dưới dạng giá trị băm
hoặc thông báo. Các giá trị băm được lưu trữ trong bảng băm.
Kẻ xâm nhập chỉ có thể xem các giá trị băm và không thể đăng nhập vào hệ
thống sử dụng giá trị băm.
- 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.

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 toàn" bởi vì, theo nguyên văn của chuẩn
FIPS 1802 phát hành ngày 1 tháng 8 năm 2002:
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 toàn bởi đầu năm 2005, ba nhà mật mã học ngườ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
toà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).
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 toán hàm băm
an toà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 nguyên 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 Mt+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à Mt+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 232 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:
{
≪5
A i+1= Ai +f i ( Bi ,C i , Di ) + E i+ K i+ W i ,
Bi+ 1=A i ,
STEPi +1 2.2 .3 .≔ C i+1=Bi ,
≪2

D i+1=C i ,
Ei+1 =Di .

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ó:
≪5 ≪2 ≪2
Ai +1= Ai + f i ¿ , Ai−3)+ Ai−4 + K i+ W i

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. Ngoà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 toàn mã hoá của nó, nhưng họ
không cung cấp thêm lời giải thích nào.

SHA1 (Secure Hash Function) được NSA (Mỹ) thiết kế năm 1995 để thay
thế cho SHA0;
SHA1 được sử dụng rộng rãi để đảm bảo tính xác thực và toàn vẹn thông
điệp.
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 264 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
512-bit 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,
(m0, 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.
Lưu đồ xử lý một vòng của SHA1:
▪ A, B, C, D, E: các từ 32 bit
▪ Wt: khối 32 bit thông điệp đầu vào;
▪ Kt: 32 bit hằng. Mỗi sử dụng một hằng khác nhau;
▪ <<n: thao tác dịch trái n bit
▪ F: hàm phi tuyến tính (phụ thuộc vào số vòng lặp t).
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, W t: 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, <<hàm phi tuyến tính.

Hình 2.1: Lưu đồ một vòng xử lý của SHA-1

2.2.2 SHA-2
2.2.2.1 Giới thiệu SHA-2
SHA-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).Nó có cấu trúc cấu trúc Merkle–Damgård, là một
phương pháp xây dựng các hàm băm mật mã chống va chạm từ các hàm nén một
chiều chống va chạm.
SHA-2 kế thừa của SHA-1, được phê duyệt và khuyến nghị bởi NIST, SHA-2, bao
gồm một gia đình gồm sáu thuật toán với các kích thước băm khác nhau.
SHA-256 được sử dụng rộng rãi, đặc biệt là bởi các cơ quan chính phủ Hoa Kỳ
để bảo mật dữ liệu nhạy cảm của họ. Mạnh hơn nhiều so với SHA-1, nó bao gồm
thuật toán băm an toàn hơn nhiều. Công nghệ Blockchain — SHA-256 tham gia
vào chức năng chứng minh công việc trong Bitcoin và nhiều loại tiền mã hóa khác.
Nó cũng có thể tham gia vào các dự án blockchain dựa trên chứng minh cổ phần.
Dữ liệu Chính phủ Hoa Kỳ — Từ năm 2015, Viện Tiêu chuẩn và Công nghệ
Quốc gia Hoa Kỳ (NIST) đã khuyến nghị rằng tất cả các cơ quan liên bang nên sử
dụng ent lệnh từ gia đình SHA-2 hoặc SHA-3 cho hầu hết các ứng dụng.

Kích thước Kích thước Đầu vào Biến khởi Số vòng


mã khối(bit) tạo lặp
băm(bit)
SHA-224 224 512 32 bit 32 bit 64
SHA-256 256 512 32 32 64
SHA-384 384 1024 64 64 80
SHA-512 512 1024 64 64 80
- SHA-512/224 –tương tự như SHA-512, ngoại trừ việc chỉ có 224 bit bên trái
được lấy làm băm, trong khi phần còn lại bị loại bỏ.
- SHA-512/256 –tương tự như SHA-512/224, lấy 256 thay vì 224 như SHA-
512/224

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:

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à toán tử cộng modulo 232 cho SHA-256
và 264 cho SHA-512.
2.2.2.2 Các phiên bản
2.2.2.2.1 SHA-256
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 toá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.
Các bước thực hiện của SHA-256:

- Các lưu ý:
+ 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], .
+ 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]: =
0x428a 0x7137 0xb5c0f 0xe9b5 0x3956 0x59f11 0x923f8 0xab1c5
2f98 4491 bcf dba5 c25b 1f1 2a4 ed5
0xd807 0x1283 0x2431 0x550c 0x72be 0x80de 0x9bdc 0xc19bf
aa98 5b01 85be 7dc3 5d74 b1fe 06a7 174
0xe49b 0xefbe4 0x0fc19 0x240ca 0x2de9 0x4a74 0x5cb0 0x76f98
69c1 786 dc6 1cc 2c6f 84aa a9dc 8da
0x983e 0xa831c 0xb003 0xbf597 0xc6e00 0xd5a7 0x06ca 0x1429
5152 66d 27c8 fc7 bf3 9147 6351 2967
0x27b7 0x2e1b 0x4d2c 0x5338 0x650a 0x766a 0x81c2 0x9272
0a85 2138 6dfc 0d13 7354 0abb c92e 2c85
0xa2bfe 0xa81a6 0xc24b 0xc76c5 0xd192 0xd699 0xf40e3 0x106aa
8a1 64b 8b70 1a3 e819 0624 585 070
0x19a4c 0x1e37 0x2748 0x34b0 0x391c 0x4ed8a 0x5b9c 0x682e
116 6c08 774c bcb5 0cb3 a4a ca4f 6ff3
0x748f8 0x78a5 0x84c8 0x8cc70 0x90bef 0xa450 0xbef9a 0xc671
2ee 636f 7814 208 ffa 6ceb 3f7 78f2
Bảng 2.2: 64 số nguyên tố đầu tiên dưới dạng 32-bit

- 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)
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.2.2.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 toá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 big-
endian 128 bit và số tiền thay đổi và luân chuyển được sử dụng là khác
nhau.
2.2.3 SHA-3
2.2.3.1Giới thiệu về SHA-3
Thuật toán SHA-3 (Secure Hash Algorithm 3) là một trong những thuật toán băm
mã hoá đang được sử dụng phổ biến. Nó được phát triển bởi Keccak Team dưới sự
chỉ đạo của NIST (National Institute of Standards and Technology) và được công
bố vào năm 2015 như là một chuẩn Federal Information Processing Standards
(FIPS) trong FIPS PUB 202. SHA-3 được thiết kế để cung cấp một giải pháp thay
thế cho các phiên bản trước của thuật toán SHA, chẳng hạn như SHA-1 và SHA-2,
đồng thời cải thiện tính hiệu quả và độ mạnh mẽ.
Thuật toán SHA-3 có độ dài mã băm linh hoạt và các giá trị độ dài mã băm phổ
biến là 224, 256, 384 và 512 bit. Nó nhằm mục đích giảm thiểu các cuộc tấn công
có độ phức tạp thuật toán bằng cách sử dụng các cấu trúc chuyển đổi phức tạp để
tránh các cuộc tấn công. Thuật toán cũng có khả năng chống lại các cuộc tấn công
cơ chế quy hoạch động(collition attacks), một dạng tấn công phổ biến đối với các
thuật toán băm trước đó.
Vì thuật toán SHA-3 cũng cho phép tạo ra nhiều bit đầu ra tùy ý. Điều này hoàn
toàn khác với các hàm băm SHA-1 và SHA-2 xuất ra một khối có độ dài cố định.
Do hành vi này, SHA-3 có thể được sử dụng theo hai nguyên tắc chế độ:
+ SHA-2 Replacement Mode: Chế độ thay thế SHA-2 Trong chế độ này, SHA-3
tạo ra đầu ra có độ dài cố định là 224, 256, 384 hoặc 512 bit, như được mô tả ở
trên.
+ Variable-length Output Mode: Chế độ này cho phép sử dụng SHA-3 để tạo ra
nhiều bit đầu ra tùy ý. Có nhiều ứng dụng trong mật mã, ví dụ: khi sử dụng SHA-3
làm mật mã luồng (stream cipher) hoặc để tạo các bit giả ngẫu nhiên (pseudo-
random bits).
2.2.3.2Thiết kế SHA-3
Không giống SHA1 và SHA2, Keccak không dùng cấu trúc Merkle–Damgard,
thay vào đó hàm băm dựa trên cấu trúc bọt biển (sponge construction). Sau giai
đoạn tiền xử lý (chia dữ liệu đầu vào thành các khối và đệm dữ liệu (padding)), cấu
trúc bọt biển gồm có hai giai đoạn:
+ Giai đoạn "hấp thụ" (absorbing): Các khối dữ liệu xi được truyền vào và xử lý.
+ Giai đoạn "nén" (squeezing): Một đầu ra có độ dài có thể cấu hình được tính
toán.

Cả hai giai đoạn đều dùng chung cùng một hàm, hàm đó có tên là hàm hoán vị f .
Cấu trúc bọt biển cho phép đầu ra có độ dài tùy ý y 0 … y n. Có một số tham số có thể
cấu hình kích thước đầu vào và đầu ra cũng như mức độ bảo mật của Keccak. Các
thông số tương ứng là:
+ b : độ dài của trạng thái, b=r +c . b phụ thuộc vào hàm mũl được xác định bởi công
thức b=25∗2l với l=0 , 1 , ..., 6. Như vậy b ∈ {25 , 50 ,100 , 200 , 400 , 800 , 1600 }
+r : bit rate, r bằng độ dài của một khối dữ liệu x i.
+ c : capacity
Ứng với một độ dài mã băm, các tham số có giá trị khác nhau:
Trong giai đoạn tiền xử lý, input M được đưa vào hàm pab để chia thành n block x i
có độ dài r , hàm pab sẽ chèn thêm một lượng bit vào input M sao cho độ dài của M
có thể chia hết cho r . Lúc này dãy các block x i (i=0 , … , n−1) sẽ được đưa vào cấu
trúc bọt biển.
Giai đoạn “hấp thụ”
Quá trình “hấp thụ” có thể được mô tả qua các bước như sau:
+ Bước 1: Trạng thái S được khởi tạo với chuỗi bit 0 có độ dài b .
+ Bước 2: Duyệt qua block x i.
+ Bước 3: XOR x ivới chuỗi bit r rồi thêm chuỗi bit c vào cuối tạo thành chuỗi
bit có độ dài b .
+ Bước 4: Đưa kết quả qua hàm f , hàm f sẽ trả về trạng thái mới và tiếp tục
duyệt đến block x i+1.
+
Giai đoạn “vắt”
Quá trình “vắt” có thể được mô tả thông qua các bước như sau:
+ Bước 1: Hoán vị, trạng thái hiện tại của hàm băm được chuyển qua hàm f để
trộn và đảo lộn trạng thái, tăng cường tính ngẫu nhiên và đảm bảo tính an
toàn của hàm băm.
+ Bước 2: Lấy khối đầu ra, phần Rate của trạng thái hiện tại được lấy ra để tạo
thành một khối đầu ra. Độ dài của khối đầu ra này thường là cố định và quy
định bởi yêu cầu của ứng dụng hoặc tiêu chuẩn.
+ Bước 3: Lặp lại, quá trình hoán vị và lấy khối đầu ra được lặp lại cho đến
khi đủ số lượng khối đầu ra đã được tạo ra hoặc đến khi đạt được một điều
kiện dừng cụ thể, như số lượng khối hoặc lượng dữ liệu cần xuất ra.
+ Bước 4: Kết hợp các khối đầu ra của quá trình nén
Hàm Padding
Trước khi xử lý dữ liệu đầu vào M bằng hàm băm, đầu vào phải được đệm
(padding). Lý do cho điều này là đảm bào độ dài của dữ liệu đầu vào là bội số của
r bit. Quá trình hoạt động của hàm padding trong Sponge Construction có thể được
chia thành 4 giai đoạn con sau:
● Chuẩn bị dữ liệu đầu vào: Trước khi áp dụng hàm padding, dữ liệu đầu vào
cần được chuẩn bị. Độ dài của dữ liệu đầu vào có thể không phải luôn luôn
là bội số của kích thước khối đầu vào mong muốn (kích thước Rate). Do đó,
hàm padding được sử dụng để điều chỉnh độ dài của dữ liệu đầu vào cho phù
hợp.
● Thêm dữ liệu padding: Hàm padding thêm vào dữ liệu cần thiết để đảm bảo
rằng độ dài của dữ liệu đầu vào đủ để chia thành các khối có kích thước cố
định. Cách thức thêm dữ liệu padding có thể thay đổi tùy thuộc vào thuật
toán cụ thể hoặc yêu cầu của ứng dụng. Quy tắc đệm dữ liệu đầu vào m như
sau:
¿
pad ( m )=m∨¿ P10 1=… , x 1 , x 0

Dữ liệu đầu vào được thêm một chuỗi bit P theo sau là bit 1, sau đó là chuỗi
bit 0 và kết thúc bằng bit 1 sao cho tổng chiều dài của chuỗi mới là bội số
của r. Lưu ý rằng chuỗi 0¿ =0 · ·· 0 có thể là chuỗi trống, tức là nó có thể không
bao gồm bất kì số 0 nào. Giá trị của P phụ thuộc vào chế độ mà SHA-3 đang
được sử dụng và được thể hiện trong bảng dưới đây.

Khi sử dụng hàm băm với SHA-2 Replacement Mode, số bit tối thiểu được
thêm vào bởi quy tắc đệm là bốn (tức là bit 0111), và số bit đệm tối đa được
thêm vào là r +3. Trường hợp thứ hai xảy ra nếu khối dữ liệu cuối cùng bao
gồm r −3 bit. Trong chế độ Variable-length Output Mode, ít nhất 6 bit được
thêm vào và nhiều nhất là r +5 bit. Vào cuối quá trình đệm, chúng ta thu
được một loạt các khối x i, trong đó mỗi khối x i có độ dài r bit.
● Xử lý dữ liệu sau padding: Sau khi thêm dữ liệu padding, dữ liệu đầu vào đã
có đủ độ dài để chia thành các khối có kích thước cố định. Các khối này sẽ
được chia nhỏ và xử lý bởi hàm băm theo cách thông thường.
● Quá trình tiếp theo: Sau khi hoàn thành quá trình padding và chia khối, dữ
liệu đã được chuẩn bị sẵn sàng cho quá trình hấp thụ (absorb) và nén
(squeeze) trong Sponge Construction.
Hàm hoán vị
Hàm hoán vị f là trung tâm của thuật toán băm và được sử dụng trong cả hai giai
đoạn xây dựng miếng bọt biển.
Hàm này bao gồm n vòng. Mỗi vòng có một đầu vào bao gồm b=r +c bit. Số vòng
phụ thuộc vào tham số l : n=12+2l , với thuật toán SHA3 số vòng là 24 bởi vì l=6 .
Mỗi vòng bao gồm một chuỗi năm bước được biểu thị bằng chữ cái Hy Lạp: θ
(theta), ρ (rho), π (pi), χ (chi) and ι (iota). Mỗi bước thao tác, trạng thái có thể được
xem như một mảng 3 chiều A kích thước b=5 ×5 × w bit với
A [i][ j][k ]=bit thứ (5 i+ j)x w+ k của state, trong đó w=2l , ứng với SHA3 có l=6 do đó
w=64 bit.
Bước θ (theta):
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]

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 ρ (rô) và π (pi):
Ta tính mảng B từ mảng A:

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


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

Bước ι (iota):

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
Chương 3: Các điểm yếu và các dạng tấn công
3.1. Các điểm yếu
+ Có thể có đụng độ, điều này gây ra lỗ hổng và có thể ảnh hưởng rất lớn đến dữ
liệu và người sử dụng. Tuy nhiên thì ở các phiên bản sau thì khả năng đụng độ
thấp, khả năng đụng độ gần như là không thể, do đó rất an toàn và khuyến khích
người dùng sử dụng các phiên bản như SHA256, SHA2, SHA3, …
+ Do đầu ra là cố định với một chuỗi đầu vào nên khả năng bị tấn công từ điển cao
nếu có được bộ từ điển đa dạng, đặc biệt nếu đầu vào ngắn có thể bị tấn công bằng
các phương pháp sinh tổ hợp thông thường.
3.2. Các dạng tấn công thường gặp
3.2.1. Dạng tấn công Brute-Force
+ Mô tả: dạng tấn công Brute-Force là dạng tấn công phổ biến hiện nay, chủ yếu
là liên quan đến việc đoán tên người dùng và mật khẩu để có thể truy cập trái phép
vào hệ thống. Chủ yếu dạng tấn công này dùng để đánh cắp mật khẩu người dùng.
Đây là phương pháp tấn công có đơn giản và có tỷ lệ thành công với độ dài đoạn
thông tin cần đánh cắp thấp.
+ Tấn công Brute-Force trong SHA là kiểu tấn công mà Hacker sử dụng các đoạn
input có sẵn để đoán được thông tin trong đoạn đã được mã hóa. Cụ thể là họ đưa
đoạn thông tin input vào và kết quả trả ra là một đoạn đã được mã hóa, họ sẽ đem
so với đoạn mã thông tin ban đầu, nếu như trùng khớp thì đó là đoạn thông tin cần
tìm. Kiểu tấn công này có thể sử dụng nhiều thuật toán để sinh ra các tổ hợp và thử
nhiểu trường hợp khác nhau cho tới khi tìm được kết quả. Hiệu quả của phương
pháp tấn công này rất cao với nhưng đoạn thông tin có độ dài ngắn và dễ đoán.
+ Do các thông tin như văn bản có độ dài rất lớn nên rất khó có thể bị đánh cắp
bằng phương pháp này nên chủ yếu dạng tấn công này dùng để tấn công vào mật
khẩu của người dùng.
+ Các biện pháp để phòng tránh dạng tấn công này: sử dụng các mật khẩu có độ
dài lớn và độ bảo mật cao.
3.2.2. Tấn công va chạm (Collision Attack)
+ Mô tả: tấn công va chạm là kiểu tấn công mà khi Hacker phát hiện ra được hai
đoạn input khác nhau mà cho ra 1 mã băm giống nhau. Khi phát hiện ra được điều
này thì Hacker có thể sử dụng những thông tin sai lệch để gửi cho bên nhận mà
không bị phát hiện bởi các thuật toán kiểm tra. Tuy nhiên với các phiên bản sau
của SHA thì khả năng va chạm là khá thấp do cải thiện thuật toán và các điểm yếu
của các phiên bản trước đó. Do vậy nên các cuộc tấn công va chạm dường như là
không thể với các mã băm các phiên bản sau này.
+ Trong thực tế, các nhà nghiên cứu đã chỉ ra được 1 trường hợp bị va chạm trong
mã SHA1, trong phát hiện đó thì hai hình ảnh pdf đã cho ra cùng một mã SHA1
giống nhau. Điều này cho thấy sự hạn chế của mã SHA1, nhưng với các phiên bản
sau như SHA256 thì cho ra kết quả hoàn toàn khác nhau. Điều đó cho thấy sự an
toàn của mã SHA1 là không thực sự tuyệt đối và cần phải có các phiên bản sau bù
đắp lại sự thiếu sót của phiên bản trước đó.

+ Thực tế thì SHA-1 là một trong những thuật toán băm được sử dụng rộng rãi
nhất Internet đã bị giải mã dễ dàng với tấn công đụng độ. Thời gian và tiền bạc cần
thiết đã phá vỡ thuật toán SHA1 nhanh hơn mong đợi. Theo một nhóm các nhà
nghiên cứu, SHA1 rất yếu, dễ dàng bị xâm nhập bởi tin tặc trong 3 tháng tới.
+ Giống dấu vân tay, kết quả băm chỉ có ích và tồn tại khi nó là duy nhất. Nếu hai
thông điệp input tạo ra có chung giá trị băm (đụng độ), đây sẽ là cánh cửa dành cho
tin tặc phá vỡ bảo mật giao dịch ngân hàng, phiên tải phần mềm hoặc kết nối của
bất kì website nào khác.
+ Tấn công va chạm cổ điển: Đây là nơi kẻ tấn công cố gắng tìm hai thông điệp
khác nhau, chẳng hạn như m1 và m2, sao cho hàm băm của m1 bằng hàm băm của
m2. Thuật toán chọn nội dung của cả hai tin nhắn trong kiểu tấn công này; kẻ tấn
công không có quyền kiểm soát chúng.
+Tấn công va chạm tiền tố được chọn: Với hai tiền tố khác nhau, p1 và p2, kẻ tấn
công cố gắng tìm hai phần phụ, m1 và m2, sao cho hàm băm của p1 được nối với
m1 bằng với hàm băm của p2 được nối với m2. Cuộc tấn công này mạnh hơn cuộc
tấn công va chạm cổ điển.
+ Vào năm 2012, phần mềm độc hại Flame đã sử dụng một cuộc tấn công va chạm
băm nhằm vào Dịch vụ cấp phép máy chủ đầu cuối của Microsoft. Những kẻ tấn
công đã khai thác điểm yếu trong thuật toán mã hóa MD5 để tạo ra chứng chỉ kỹ
thuật số giả mạo của Microsoft. Điều này cho phép phần mềm độc hại giả dạng
một bản cập nhật hợp pháp của Microsoft, từ đó đánh lừa các hệ thống chấp nhận
phần mềm độc hại. Sự cố này nhấn mạnh tác động trong thế giới thực của các xung
đột băm và khả năng chúng làm suy yếu niềm tin kỹ thuật số.

3.2.3. Tấn công Length Extention


+ Hash length extension attack – tấn công mở rộng độ dài hash là một kỹ thuật tấn
công vào kỹ thuật MAC (Message Authenticate Code). Đây là kỹ thuật tấn công
khai thác lỗ hổng của các thuật toán mã hoá một chiều (hash). Sử dụng cách tấn
công này, những kẻ tấn công có thể xâm nhập vào hệ thống mà chỉ cần dựa vào
những thông tin public của hệ thống.
+ Cho một hash được tạo thành từ 1 string ghép với phần prefix không biết trước,
kẻ tấn công có thể viết thêm vào đoạn string đó và tạo ra một hash mới mà không
cần biết đoạn prefix đó.
+ Nguyên lý: Bây giờ tôi sẽ nói đến kỹ thuật tấn công. Giả sử tôi được đưa cho một
giá trị hash h được tính từ giá trị của m. Tôi không biết m nhưng tôi biết độ dài của
nó.
+ Bởi vì tôi biết độ dài của m, tôi có thể dễ dàng tính được các bit padding p được
sử dụng. Sau đó, tôi cần một giá trị m' là giá trị mới bắt đầu bằng m||p và tôi sẽ
chèn thêm dữ liệu giả mạo của mình, m' = m||p||z, với z là giá trị tôi cần thêm vào.
Bây giờ tôi cần tính giá trị hash SHA-1 h' với đầu vào mới là m' mặc dù tôi không
hề biết nội dung đầy đủ của nó. (Do tôi không hề biết biết m).
+ Khi SHA-1 tính giá trị hash cho m', đầu tiên nó cũng là một việc là chèn thêm
các bit padding vào, các bit này hoàn toàn phụ thuộc vào độ dài của m' (mà độ dài
này tôi đã biết rồi). Bây giờ, kết quả sau khi chèn sẽ là m||p||z||p'. Sau đó các block
512 bit sẽ được xử lý từng block một.
+ Vì không biết đầy đủ nội dung, tôi không thể làm được việc này. Tôi không thể
tự tính hash cho m'. Nhưng tôi biết nó được tính như thế nào.
+ Độ dài của m||p chắc chắn là bội của 512 (đương nhiên, độ dài này tôi hoàn toàn
biết được). Tôi không biết nó được xử lý như thế nào, nhưng tôi biết sau khi xử lý
hết các block của m||p kết quả thu được chính là hash của nó, h.
+ Sau đó, sử dụng giá trị này, tôi tiếp tục tính SHA-1 cho m'. Với running state
hiện tại chính là h, tôi chỉ cần tiếp tục quá trình xử lý từng block 512 bit một với
chuỗi z||p'.
+ Đây chính là mấu chốt của vấn đề, tôi có thể tính SHA-1 của m' từ SHA-1 của m
mà hoàn toàn không biết nội dung của nó. Tuy nhiên, có một yêu cầu tiên quyết đó
là tôi phải biết độ dài của nó.
+ Ở trên là tôi ví dụ với thuật toán SHA-1, các thuật toán khác hoàn toàn tương tự.
Tất cả các thuật toán sử dụng hàm hash Merkle-Damgård như MD5, SHA-256,
SHA-512 đều có thể bị tấn công bằng cách này.
+ Phòng chống: Vì kỹ thuật tấn công trên, với chúng ta là những người phát triển
Web, chúng ta cần một số biện pháp phòng chống
+ Không sử dụng MAC, đừng tin tưởng vào những gì người dùng gửi lên. Hãy tìm
cách khác để xử lý dữ liệu của người dùng.
+ Nếu bắt buộc phải sử dụng thì có một biện pháp phòng chống nổi tiếng nhất là sử
dụng HMAC thay cho MAC. HMAC được cho là có thể chống được tấn công mở
rộng độ dài hash
+ Một vài thuật toán mã hoá không xử dụng hàm hash Merkle-Damgård như MD-
2, SHA-224, SHA-338 không bị tấn công bởi cách này, bạn có thể dùng chúng.
3.2.4. Tấn công từ điển:
+ Là một dạng của tấn công số 1, sử dụng các từ điển có sẵn kèm theo với mã băm
đã có để dò trong danh sách đó. Rất nguy hiểm nếu từ điển đa dạng và chúng ta sử
dụng thông tin có độ phổ biến cao.
3.2.5. Birthday Paradox
+ Nghịch lý Ngày sinh nhật (Birthday Paradox) được phát biểu như sau: “Trong
một nhóm có 23 người bất kỳ, xác suất để có hai người có cùng một ngày sinh nhật
là không ít hơn ½”.
+ Một cách tổng quát, giả sử một hàm băm có m giá trị băm khác nhau (tức là kích
thước của không gian output của hàm băm là m). Nếu chúng ta có k giá trị băm từ
k thông tin được chọn ngẫu nhiên khác nhau, thì xác suất để có ít nhất một đụng độ
là:
P(m,k) > 1-e^\frac{-k(k-1)}{2m}
Với e là hằng số Ơ-le: e ≈ 2.7
+ Ước lượng xác suất này phục thuộc vào kích thước của không gian băm (m) và
số lượng văn bản thông tin được thử chứ không phụ thuộc vào hàm băm đều sử
dụng. Tức là kích thước của không gian băm xác lập một chặn dưới (lower bound)
cho xác suất trên.
+ Ta xét ví dụ sau: Trong nghịch lý ngày sinh nhật nói trên, thì ta có thể thấy k =
23, m = 365, do đó xác suất tồn tại hai người có cùng ngày sinh nhật là:
P(365,23)>1-e^\frac{-23.22}{2.365}\cong1-{2.7}^{0.7}>0,5
Công thức nói trên cho phép xác định số lượng thông tin (k) cần thiết để có thể tìm
được một đụng độ giá trị băm với xác suất đủ lớn, khi hàm băm xác định trước.
Ngược lại, nó cũng cho phép tính được kích thước tối thiểu của đầu ra hàm băm để
có thể chống lại được hiệu ứng Birthday attack một cách có hiệu quả.
Giả sử kẻ thù có khả năng tính toán trên tập giá trị băm đến 1020. Ta cần xác định
không gian băm để xác suất kẻ thù có thể tìm ra được một đụng độ là nhỏ hơn 10-
3.
Áp dụng ước lượng xác suất trên, ta thấy:
P(m,k) > 1-e^{\frac{-k(k-1)}{2m}\ \approx\ 0.001\ }--->e^\frac{-k(k-1)}{2m}\
cong\ 0,999
Từ đó, ta có thể ước lượng m hợp lý:
\frac{-k(k-1)}{2m}\log_2{e}\ = 0.999
\frac{k^2}{2m}1.4 = -3.3
m \cong\ \frac{k^2}{4,6} \geq\ 2x{10}^{39}
Như vậy, không gian băm cần đảm bảo lớn hơn 2 x 1039, tức là kích thước giá trị
băm sẽ không nhỏ hơn
\log_2{(2x{10}^{39})\ }= 231 bit.
Tìm đụng độ trên không gian văn bản có kích cỡ 232 là một điều có thể làm được
ngay cả với các máy tính PC bình thường. Việc nghiên cứu Birthday Paradox cho
ta thấy lượng văn bản cần đưa ra thử có thể là rất nhỏ sao với không gian băm (232
so với 264) mà xác suất tìm được đụng độ là khá cao (≥ 50%). Điều này cho thấy
một mối hiểm họa cho các hệ thống dùng hàm băm có không gian output nhỏ.
Phép tấn công này được gọi là “Tấn công ngày sinh nhật” (Birthday attack).

Ngoài ra còn rất nhiều cách tấn công nữa như là:
+ Tấn công Kết hợp (Multicollision):
- Khi kẻ tấn công tìm kiếm nhiều đầu vào tạo ra cùng một giá trị băm, được
gọi là multicollision. Điều này có thể được sử dụng để tạo ra một loạt các
đầu vào với cùng một giá trị băm, làm giả mạo dữ liệu.
+ Tấn công Thời gian thực hiện (Timing Attack):
- Kẻ tấn công theo dõi thời gian mà hàm băm mất để xử lý một đầu vào và
sử dụng thông tin này để suy luận về giá trị băm hoặc đầu vào.
+ Tấn công Mô hình (Modeling Attack):
- Kẻ tấn công xây dựng một mô hình về cách hàm băm hoạt động và sử dụng
nó để tìm kiếm các đầu vào tạo ra cùng một giá trị băm.
KẾT LUẬN
Bài báo cáo đã trình bày được các khái niệm tổng quát về hàm băm mật mã,
hàm băm SHA cùng với các tính chất, phân loại và ứng dụng của chúng từ đó ứng
dụng vào phân tích các giải thuật băm SHA để thấy được hoạt động cũng như sự
thay đổi trong các phiên bản của họ hàm băm SHA. Với các tính chất của hàm băm
một chiều SHA đã được sử dụng vào hầu hết các ứng dụng thương mại điện tử, xác
thực mật khẩu, thông điệp và chữ ký số giúp làm giảm thời gian mã hóa/ ký số,
đưa ra được kết quả duy nhất cho mã hóa, đảm bảo tính toàn vẹn của thông tin và
giảm thiểu thời gian truyền tin qua mạng.
Bài báo cáo cũng đi sâu tìm hiểu vào một số điểm yếu, các dạng tấn công
vào SHA để tìm ra giải pháp nghiên cứu mới, các hướng đi mới. Mặc dù SHA-1
được tuyên bố không an toàn bởi các nhà nghiên cứu từ hơn một thập kỷ trước và
Microsoft trong tháng 10/2013 đã công bố sau năm 2016 sẽ không chấp nhận
chứng thư số SHA-1, tuy nhiên SHA1 vẫn được sử dụng rộng rãi trên Internet.
Để đảm bảo an toàn Internet, đã đến lúc loại bỏ SHA-1 và sử dụng các hàm
băm mật mã an toàn hơn như SHA-256 và SHA-3.

TÀI LIÊU THAM KHẢO


https://viblo.asia/p/tan-cong-brute-force-la-gi-oOVlYbz458W
https://whitehat.vn/threads/thuat-toan-sha-1-da-bi-pha-vo.8283/#:~:text=T
%E1%BA%A5n%20c%C3%B4ng%20%C4%91%E1%BB%A5ng
%20%C4%91%E1%BB%99%20(Collision%20Attack)%20x%E1%BA%A3y
%20ra%20khi%20c%C3%B3,c%C3%B3%20th%E1%BB%83%20b%E1%BB
%8B%20t%E1%BA%A5n%20c%C3%B4ng.
https://www.gate.io/vi/learn/articles/what-is-a-cryptographic-hash-collision/800
https://manhhomienbienthuy.github.io/2015/09/30/hash-length-extension-
attacks.html
https://www.crypto-textbook.com/download/Understanding-Cryptography-
Keccak.pdf
https://www.comparitech.com/blog/information-security/what-is-sha-2-algorithm/
#Message_schedule_Finding_the_other_W_values
https://www.comparitech.com/blog/information-security/what-is-sha-2-how-does-
it-work/

You might also like