Hàm băm SHA
I. Giới thiệu về hàm băm mật mã
1. Khái niệm hàm băm
2. Đặc tính của hàm băm
II. Ứng dụng của hàm băm mật mã
III. Các kiểu hàm băm SHA
1. Phân loại hàm băm SHA
2. Ý tưởng thuật toán hàm băm SHA
3. Khung thuật toán cho hàm hăm SHA
4. Ví dụ minh họa
IV. Độ an toàn của hàm băm SHA
I. Giới thiệu về hàm băm mật mã
1. Khái niệm hàm băm
- Hàm băm là một thuật toán không dùng để mã hoá, nó có nhiệm vụ “lọc” tài liệu/bản
tin và cho kết quả là một giá trị băm có kích thước cố định, còn gọi là “đại diện tài
liệu”, “đại diện bản tin”, “đại diện thông điệp”.
- Hàm băm nhận đầu vào là 1 xâu ký tự dài (thông điệp) có độ dài tuỳ ý và tạo ra kết
quả là 1 xâu ký tự có độ dài cố định (tóm tắt thông điệp hoặc chữ ký số).
- Một hàm băm mật mã là một loại chữ kí cho văn bản hoặc một tập tin dữ liệu.
- Hàm băm không phải là mã hoá vì nó không thể được giải mã về văn bản ban đầu,
mà nó có chức năng mật mã “một chiều”, và có một kích thước cố định cho bất kỳ
một văn bản gốc nào. Điều này phù hợp khi so sánh các phiên bản “băm” các văn
bản
2. Đặc tính của hàm băm
Với hàm băm là hàm 1 chiều có các đặc tính sau:
- Với tài liệu đầu vào (bản tin gốc) x, chỉ thu được giá trị băm duy nhất z = h(x);
- Nếu dữ liệu trong bản tin x bị thay đổi hay bị xoá để thành bản tin x’, thì giá trị băm
h(x’) khác h(x).
- Nội dung của bản tin gốc “khó” thể suy ra từ giá trị hàm băm của nó. Nghĩa là, với
thông điệp x thì “dễ” tính được z = h(x), nhưng lại “khó” tính ngược lại được nếu chỉ
biết giá trị băm h(x).
II. Ứng dụng của hàm băm mật mã
- Xác nhận mật khẩu: bạn có thể lưu băm của mật khẩu. Khi người dùng cung cấp mật
khẩu thì băm mật khẩu của người dùng. Nếu các phiên bản băm khớp thì mật khẩu
được xác thực, nhưng mật khẩu ban đầu không thu lấy được từ băm đã được lưu trữ.
- Xác thực thách thức băm: để tránh việc truyền mật khẩu “clear”, máy khách có thể
gửi băm của mật khẩu trên internet để xác nhận bởi một máy chủ mà không sợ mật
khẩu ban đầu bị đánh cắp.
- Chống giả mạo: liên kết băm của một tin nhắn với bản gốc và người nhận tin có thể
tái băm tin nhắn đó và so sánh nó với băm đã được cung cấp. Nếu 2 bản băm khớp
nhau thì tin nhắn đó không bị thay đổi. Ứng dụng này cũng có thể dụng để xác nhận
dữ liệu có bị mất hay khôgn trong quá trình truyền tải.
- Chữ ký số: dùng hàm băm h để tạo đại diện bản tin z = h(x), có độ dài ngắn. Sau đó
ký trên z, như vậy chữ ký trên z sẽ nhỏ hơn rất nhiều so với chữ ký trên bản tin gốc
x.
- Bảo mật một số dữ liệu đặc biệt như bảo vệ mật khẩu, bảo vệ khoá mật mã
III. Các kiểu hàm băm SHA
1. Phân loại hàm băm SHA
- SHA bao gồm 5 thuật giải được chấp nhận bởi Federal Information Processing
Standards (FIPS) dùng để chuyển 1 đoạn dữ liệu nhất định thành 1 đoạn dữ liệu có
chiều dài không đổi với xác suất khác biệt cao.
Thuật
toán
Kích
thước
đầu ra
Kích
thước
trạng
thái
Kích
thước
khối
Độ dài Kích
thước từ
Xung đột
SHA-0 160 160 512 64 32 Không
SHA-1 160 160 512 64 32 Có lỗi
SHA-224 224 256 512 64 32 Không
SHA-256 256 256 512 64 32 Không
SHA-384 384 512 1024 128 64 Không
SHA-512 512 512 1024 128 64 Không
- 5 thuật giải SHA được phát triển bởi cục an ninh quốc gia Mỹ (National Security
Agency hay NSA), được xuất bản thành chuẩn của chính phủ Mĩ bởiViện công
nghệ và chuẩn quốc gia Mĩ ( National Institute of Standard and Technology hay
NIST)
- Tên các thuật giải tương ứng được đặt dựa theo kết quả trả về của thuật
giải.
+ SHA – 1 (kết quả trả về dài 160 bit)
+ SHA – 224 (kết quả trả về dài 224 bit)
+ SHA – 256 (kết quả trả về dài 256 bit)
+ SHA – 384 (kết quả trả về dài 384 bit)
+ SHA – 512 (kết quả trả về dài 512 bit)
2. Ý tưởng của các thuật toán hàm băm
Các thuật toán hàm băm SHA gồm 2 bước: tiền xử lý và tính toán giá trị băm.
Các thuật toán hàm băm SHA gồm 2 bước: tiền xử lý và tính toán giá trị băm
• Bước tiền xử lý
- Mở rộng thông điệp
- Phân tích thông điệp đã mở rộng thành khối m bit.
- Khởi tạo giá trị băm ban đầu
• Bước tính toán giá trị băm gồm 2 bước
- Làm N lần các công việc sau:
+ Tạo bảng phân bố thông điệp từ khối i.
+ Dùng bảng phân bố thông điệp cùng các hàm, hằng số, từ các
thao tác trên để tạo ra giá trị băm
- Sử dụng giá trị băm cuối cùng để tạo thông điệp rút gọn.
}
=> Gọi chung là SHA – 2
3. Khung thuật toán chung cho các hàm băm SHA
3.1 Hằng số
Mỗi thuật toán có bảng hằng số phân bố thông điệp tương ứng. Kích thước bảng
hằng số thông điệp (scheduleRound) của SHA-224 là 64, kích thước bảng hằng số
thông điệp của SHA-384 và SHA-512 là 80.
3.1.1 SHA -1
3.1.2 SHA-256
3.1.3 SHA384, SHA512
3.2 Giá trị băm ban đầu
Trước khi thực hiện băm, với mỗi thuật toán băm an toàn, giá trị băm ban đầu H
(0)
phải được thiết lập. Kích thước và số lượng từ trong H
(0)
tuỳ thuộc vào thông điệp rút
gọn. Giá trị ban đầu của từng thuật toán băm:
3.2.1 SHA-1
H
0
(0)
= 67452301
H
1
(0)
= efcdab89
H
2
(0)
= 98badcfe
H
3
(0)
= 10325476
H
4
(0)
= c3d2e1f0
3.2.2 SHA-256
H
0
(0)
= 67452301
H
1
(0)
= efcdab89
H
2
(0)
= 98badcfe
H
3
(0)
= 10325476
H
4
(0)
= c3d2e1f0
3.2.3 SHA-384
H
0
(0)
= cbbb9d5dc1059ed8
H
1
(0)
= 629a292a367cd507
H
2
(0)
= 9159015a3070dd17
H
3
(0)
= 152fecd8f70e5939
H
4
(0)
= 67332667ffc00b31
H
5
(0)
= 8eb44a8768581511
H
6
(0)
= db0c2e0d64f98fa7
H
7
(0)
= 47b5481dbefa4fa4.
3.2.4 SHA-512
H
1
(0)
= 6a09e667f3bcc908
H
2
(0)
= bb67ae8584caa73b
H
3
(0)
= 3c6ef372fe94f82b
H
4
(0)
= a54ff53a5f1d36f1
H
5
(0)
= 510e527fade682d1
H
6
(0)
= 9b05688c2b3e6c1f
H
7
(0)
= 5be0cd19137e2179
3.3 Tiền xử lý thông điệp
Thông điệp M được mở rộng trước khi thực hiện băm mục đích nhằm đảm bảo thông
điệp mở rộng có độ dài là bội số của 512 hoặc 1024 bit tuỳ vào thuật toán.
VD:
Giả sử thông điệp : “abc” = 0110001 01100010 01100011 có độ dài l bits = 24bits.
Cần tách thông điệp để số bit của nó là bội số của 512 hoặc 1024 tuỳ vào thuật toán.
Bước 1: Thêm bit 1 vào sau thông điệp ban đầu được:
0110001 01100010 01100011 1
Bước 2:
3.3.1 SHA-1, SHA-256
Thêm k 0 bit sao cho l+1+k = 448 mod 512
K = 448 – (l+1) = 448 – (24+1) = 423
Vậy sẽ phải thêm 423 0bits vào sau thông điệp thu được ở bước 1
B3: Thêm 64 bit gồm 64 – l = 64 – 24 = 40 0 bits và l bits vào sau thông điệp thuđược
ở bước 2
3.3.2 SHA-384, SHA-512
Thêm k 0 bits sao cho l + 1 + k = 896 mod 1024
K = 896 – (l+1) = 896 – (24+1) = 871
Vậy sẽ phải thêm 423 0 bits vào sau thông điệp thu được ở bước 1:
B3: Thêm 128 bit gồm 128 – l = 128 – 24 = 104 0 bits và l bits vào sau thông điệp thu
được ở bước 2
3.4 Chia thông điệp thành N nhóm m-bit
3.4.1 SHA-1, SHA-256
Thông điệp mở rộng thành N khối 512-bit M
(1)
, M
(2)
, M
(N)
. Do đó 512 bit của khối
dữ liệu đầu vào có thể thực hiện được bằng 16 từ 32bit, M
0
(i)
chứa 32 bit đầu của khối
thông điệp i, M
1
(i)
chứa 32 bit kế tiếp M
16
(i)
chứa 32 bit cuối cùng.
3.4.2 SHA 384, SHA-512
Thông điệp mở rộng được phân tích thành N khối 1024bit M
(1)
, M
(2)
, M
(N)
. Do đó
1024 bit của khối dữ liệu đầu vào có thể được thể hiện bằng 16 từ 64bit, M
0
(i)
chứa 64
bit đầu của khối thông điệp i, M
1
(i)
chứa 64 bit kế tiếp M
16
(i)
chứa 64 bit cuối cùng.
3.5 Các hàm được dùng
3.5.1 SHA-1
3.5.2 SHA-256
3.5.3 SHA-384, SHA-512
• Nhận xét
- Chuẩn SHA đặc tả 5 thuật toán SHA-1, SHA224, SHA-256, SHA-384 và SHA-512.
- Sự khác biệt chính của các thuật toán là số lượng bit bảo mật của dữ liệu băm – điều
này có ảnh hưởng trực tiếp đến chiều dài của thông điệp rút gọn. Khi một thuật tóan băm
được sử dụng kết hợp với thuật toán khác đòi hỏi phải cho kết quả số lượng bit tương
ứng. VD, nếu một thông điệp được ký với thuật toán chữ kí điện tử cung cấp 128bit thì
thuật tóan chữ ký đó có thể đòi hỏi sử dụng 1 thuật toán băm an toàn cung cấp 128bit như
SHA-256.
4. Ví dụ minh hoạ
Dùng thuật toán SHA-1
Thông điệp “abc”
Bước 1: Tiền xử lý thông điệp:
01100001 01100010 01100011 10000000 00 00 00000018
Bước 2: Thông điệp được tách làm 512bit nên N = 1 (1 nhóm 512-bit)
Bước 3. Giá trị băm ban đầu:
H
0
(1)
= 67452301
H
1
1)
= efcdab89
H
2
(1)
= 98badcfe
H
3
(1)
= 10325476
H
4
(1)
= c3d2e1f0
Bước 4: Tính Wt
W
0
= 61626380 W
8
= 00000000
W
1
= 00000000 W
9
= 00000000
W
2
= 00000000 W
10
= 00000000
W
3
= 00000000 W
11
= 00000000
W
4
= 00000000 W
12
= 00000000
W
5
= 00000000 W
13
= 00000000
W
6
= 00000000 W
14
= 00000000
W
7
= 00000000 W
15
= 00000000
Lặp t = 0 đến t = 79, để tìm ra a,b,c,d,e tương ứng
Sau khi hoàn thành, tính giá trị H
H
0
(1)
= 67452301+ 42541b35= a9993e36
H
1
1)
= efcdab89+ 5738d5e1= 4706816a
H
2
(1)
= 98badcfe + 21834873 = ba3e2571
H
3
(1)
= 10325476 + 681e6df6 = 7850c26c
H
4
(1)
= c3d2e1f0 + d8fdf6ad = 9cd0d89d.
Thông điệp cuối cùng:
a9993e36 4706816a ba3e2571 7850c26c 9cd0d89d
5. Độ an toàn của thuật toán băm
- Những thuật giải này được gọi là “an toàn” vì theo nguyên văn chuẩn FIPS 180-2 phát
hành ngày 1/8/2002:
1). Cho một giá trị băm nhất định được tạo nên từ 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 nhất định 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.
Thuật
toán
Thông điệp Khối Từ Thông
điệp rút
gọn
Độ an toàn
SHA- 1 < 2
64
512 32 160 80
SHA-224 < 2
64
512 32 224 112
SHA-256 < 2
64
512 32 256 128
SHA-384 < 2
128
1024 64 384 192
SHA-512 < 2
128
1024 64 512 256