HỌC VIỆN KỸ THUẬT MẬT MÃ
KHOA AN TOÀN THÔNG TIN
BÀI TẬP LỚN MÔN MẬT MÃ NÂNG CAO
CÀI ĐẶT THUẬT TOÁN SHA-2
Cán bộ hướng dẫn: Phạm Quốc Hoàng
Sinh viên thực hiện:
- Hoàng Quang Thụy
- Nguyễn Việt Tiến
- Phạm Quốc Đạt
- Mai Trọng Hoàng
Lớp: AT9A
HÀ NỘI 2016
HỌC VIỆN KỸ THUẬT MẬT MÃ
KHOA AN TOÀN THÔNG TIN
BÀI TẬP LỚN MÔN MẬT MÃ NÂNG CAO
CÀI ĐẶT THUẬT TOÁN SHA-2
Nhận xét của cán bộ hướng dẫn: ................................................................................
......................................................................................................................................
......................................................................................................................................
......................................................................................................................................
......................................................................................................................................
......................................................................................................................................
......................................................................................................................................
Điểm chuyên cần: ........................................................................................................
Điểm báo cáo: ............................................................................................................
MỤC LỤC
LỜI NÓI ĐẦU
Ngày nay, các ứng dụng Công nghệ thông tin đã và đang ngày càng phổ biến
rộng rãi đã ảnh hưởng rất lớn đến diện mạo của đời sống, kinh tế, xã hội. Mọi công
việc hàng ngày của chúng ta đều có thể thực hiện được từ xa với sự hỗ trợ của máy
vi tính và mạng internet (từ việc học tập, giao dịch,... đến việc gửi thư). Tất cả
thông tin liên quan đến những công việc này đều do máy vi tính quản lý và truyền
đi trên hệ thống mạng. Đối với những thông tin bình thường thì không có ai chú ý
đến, nhưng đối với những thông tin mang tính chất sống còn đối với một số cá nhân
(hay tổ chức) thì vấn đề bảo mật thật sự rất quan trọng. Vấn đề khó khăn đặt ra là
làm sao giữ được thông tin bí mật và giữ cho đến đúng được địa chỉ cần đến. Nhiều
tổ chức, cá nhân đã tìm kiếm và đưa ra nhiều giải pháp bảo mật, phương pháp mã
hóa khóa công khai được xem là phương pháp có tính an toàn khá cao. Như vậy
việc đảm bảo an toàn thông tin, tránh mọi nguy cơ bị thay đổi, sao chép hoặc mất
mát dữ liệu trong các ứng dụng trên mạng luôn là vấn đề bức xúc, được nhiều
người quan tâm.
Trong bài viết này, xin trình bày phương pháp mã hóa thông tin đó là sử
dụng hàm băm mật mã và tìm hiểu về thuật toán băm SHA-2. Bài viết được tổng
hợp từ nhiều nguồn bao gồm cả tài liệu tiếng Việt và tiếng Anh, do quá trình dịch
và tổng hợp còn nhiều sai xót, kính mong các bạn đóng góp ý kiến để bài viết được
hoàn thiện hơn..
Chân thành cảm ơn!
4
5
CHƯƠNG I: HÀM BĂM
1. Vấn đề “Đại diện tài liệu” và “Hàm băm”
1.1. Một số vấn đề với “chữ ký số”
Vấn đề 1: “Ký số” thực hiện trên từng bit tài liệu, nên độ dài của “chữ ký số” ít
nhất cũng bằng độ dài của tài liệu. Một số chữ ký trên bản tin có kích thước gấp
đôi bản tin gốc. Ví dụ khi dùng sơ đồ chữ ký DSS để ký vào bản tin có kích thước
160 bit, thì chữ ký số này sẽ có kích thước 320 bit.
Trong khi đó trên thực tế, ta cần phải ký vào các bản tin có kích thước rất
lớn, ví dụ vài chục MegaByte (tương ứng hàng nghìn trang trên giấy). Như vậy
phải tốn nhiều bộ nhớ để lưu trữ “chữ ký”, mặt khác tốn nhiều thời gian để
truyền “chữ ký” trên mạng.
Vấn đề 2: Với một số sơ đồ chữ ký “an toàn”, thì tốc độ ký lại chậm vì chúng dùng
nhiều phép tính số học phức tạp như số mũ modulo.
Vấn đề 3: Thực tế có thể xảy ra trường hợp: với nhiều bản tin đầu vào khác
nhau, sử dụng hệ mã hóa hay sơ đồ ký số giống nhau (có thể khác nhau), nhưng
lại cho ra bản mã hay chữ ký giống nhau (đó là ánh xạ nhiều – một). như hình
dưới.
Điều này sẽ dẫn đến phức tạp cho việc xác thực thông tin.
6
Thông
điệp x
Thông
điệp y
Hệ mật mã
hay
sơ đồ ký số
Bản mã
hay
bản ký số
Thông
điệp z
Đích
Nguồn
1.2. Giải quyết vấn đề
Cách 1:
Một cách đơn giản để giải quyết các vấn đề trên với thông điệp có kích
thước lớn là “chặt” bản tin thành nhiều đoạn nhỏ (VD 160 bit), sau đó ký lên các
đoạn đó độc lập nhau. Nhưng biện pháp này gặp các vấn đề trên.
Hơn thế nữa còn gặp vấn đề nghiêm trọng hơn. Đó là kết quả sau khi ký,
nội dung của thông điệp có thể bị xáo trộn với nhau, hoặc một số đoạn trong
chúng có thể bị mất mát. Ta cần phải bảo vệ tính toàn vẹn của bản tin gốc.
Cách 2:
Thay vì phải ký trên tài liệu dài, người ta thường dùng “hàm băm” để tạo
“đại diện” cho tài liệu, sau đó mới “ký số” lên “đại diện” này.
Các tài liệu (bản tin) có thể dưới dạng văn bản, hình ảnh, âm thanh, ... và
kích thước của chúng tùy ý (vài KB đến vài chục MB), qua các thuật toán băm:
MD4, MD5, SHA, các đại diện tương ứng của chúng có kích thước cố định, ví dụ
128 bit với dòng MD, 160 bit với dòng SHA.
“Đại diện” cho tài liệu chính là giá trị của “hàm băm” trên tài liệu, nó còn
được gọi là “tóm lược” hay “bản thu gọn” của tài liệu.
7
Với mỗi tài liệu (đầu vào), qua “hàm băm” chỉ có thể tính ra được một
“đại diện” - giá trị băm tương ứng – duy nhất. “Đại diện” của tài liệu được xem
là “đặc thù” của tài liệu (thông điệp), giống như dấu vân tay của mỗi người.
Trên thực tế, hai tài liệu khác nhau có hai “đại diện” khác nhau. Như vậy
khi đã có “đại diện” duy nhất cho một tài liệu, thì việc “ký số” vào tài liệu, được
thay bằng “ký số” vào “đại diện” của nó là hoàn toàn hợp lý. Đó là chưa kể việc
tiết kiệm bao nhiêu thời gian cho việc “ký số”, bộ lưu giữ “chữ ký”, thời gian
truyền “chữ ký” trên mạng...
Cơ chế gửi tài liệu cùng “chữ ký” trên nó sử dụng hàm băm được mô tả
theo các hình sau:
8
Độ dài cố định 128 bit với MD hoặc 160 bit với S
Độ dài tùy ý
Thông điệpBăm
(bảnthông
rõ) điệp (sử dụng thuật toán MD hoặc SHA)
Bản băm (văn bản đại diện)
x
z=h(x)
(văn bản, âm thanh, hình ảnh …)
Băm thông điệp
Ký số (sử dụng
các sơ đồ ký số
RSA, Elgamal,
DSS)
Bản ký số
y = sigK(z)
Bản băm (văn bản đại diện)
Khóa bí mật của người gửi
Ký trên bản băm thông điệp
Thông điệp, Bản ký số
(x,y)
Người gửi (A)
Người nhận (B)
9
Người gửi (A)
Thông điệp, Bản ký số
(x,y)
Người nhận (B)
Truyền thông điệp và chữ ký
2. Tổng quan về hàm băm
2.1. Đặt vẫn đề
Trên thực tế, các thông điệp sử dụng chữ ký điện tử có độ dài bất kỳ, thậm
chí lên đến vài Megabyte. Trong khi đó, thuật toán chữ ký điện tử được trình bày
trên đây lại áp dụng trên các thông điệp có độ dài cố định và thường tương đối
ngắn, chẳng hạn như phương pháp DSS sử dụng chữ ký 320 bit trên thông điệp
160 bit.
Để giải quyết vấn đề này, chúng ta có thể chia nhỏ thông điệp cần ký thành
các đoạn nhỏ có độ dài thích hợp và ký trên từng mảnh thông điệp này. Tuy
nhiên, giải pháp này lại có nhiều khuyết điểm và không thích hợp áp dụng trong
thực tế:
-
Nếu văn bản cần được ký quá dài thì số lượng chữ ký được tạo ra sẽ rất
nhiều và kết quả nhận được là một thông điệp có kích thước rất lớn. Chẳng
hạn như khi sử dụng phương pháp DSS thì thông điệp sau khi được ký sẽ có
-
độ dài gấp đôi văn bản nguyên thủy ban đầu.
Hầu hết cá phương pháp chữ ký điện tử có độ an toàn cao đều đòi hỏi chi phí
tính toán cao và do đó, tốc độ xử lý rất chậm. Việc áp dụng thuật toán tạo
-
chữ ký điện tử nhiều lần trên một văn bản sẽ thực hiện rất chậm.
Từng đoạn văn bản sau khi được ký có thể dễ dàng bị thay đổi thứ tự hay bỏ
bớt đi mà không làm mất đi tính hợp lệ của văn bản. Việc chia nhỏ văn bản sẽ
không thể bảo đảm được tính toàn vẹn của thông tin ban đầu cần được ký.
2.2. Hàm băm
2.2.1. Khái niệm Hàm băm
Hàm băm là thuật toán không dùng khóa để mã hóa (ở đây dùng thuật
ngữ “băm” thay cho “mã hóa”), nó có nhiệm vụ “lọc” (băm) 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” hay “đại diện bản tin”, “đại diện thông điệp”.
10
Hàm băm là hàm một chiều, theo nghĩa giá trị hàm băm là duy nhất, và
từ giá trị băm này, khó có thể suy ngược lại được nội dung hay độ dài ban đầu
của tài liệu gốc.
2.2.2. Đặc tính của Hàm băm
Hàm băm h là hàm một chiều (One – wat Hash) với các đặc tính sau:
(1)
(2)
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ị xóa để thành bản tin x’, thì giá trị
băm h(x’) ≠ h(x).
Cho dù chỉ là một sự thay đổi nhỏ, ví dụ chỉ thay đổi 1 bit dữ liệu của bản tin gốc
x, thì giá trị băm h(x) của nó cũng vẫn thay đổi. Điều này có nghĩa là: hai thông
(3)
điệp khác nhau, thì giá trị băm của chúng cũng khác nhau.
Nội dung của bản tin gốc “khó” thể suy ra từ giá trị 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 x nếu chỉ
biết giá trị băm h(x) (kể cả khi biết hàm băm h).
2.2.3. Ứng dụng của Hàm băm
(1)
Với bản tin dài x, thì chữ ký trên x cũng sẽ dài, như vậy tốn thời gian “ký”, tốn bộ
nhớ để lưu giữ “chữ ký”, tốn rất nhiều thời gian để truyền “chữ ký” trên mạng.
Người ta dùng hàm băm h để tạo đại diện cho bản tin z=h(x), nó có độ dài
ngắn (ví dụ 128 bit). 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.
(2) Hàm băm dùng để xác định tính toàn vẹn dữ liệu.
(3) Hàm băm dùng để bảo mật một số dữ liệu đặc biệt, ví dụ bảo vệ mật khẩu,
bảo vệ khóa mật mã, ...
2.3. Cấu trúc của Hàm băm
Hầu hết các hàm băm mật mã đều có cấu trúc giải thuật như sau:
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 bổ sung một số bit vào thông điệp này để nhận được
11
thông điệp có độ dài là bội số của một hằng số cho trước. Chia nhỏ thông điệp
thành từng khối có kích thước bằng nhau: M1, M2, …Ms
Gọi H là trạng thái có kích thước n bit, 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 gán H0 bằng một vector khởi tạo nào đó
Hi = f(Hi-1,M) với i = 1, 2, 3, …, s
Hs chính là thông điệp rút gọn của thông điệp M ban đầu.
2.4. Các tính chất của Hàm băm
Tính chất 1: Hàm băm h là không va chạm yếu.
Ví dụ: Xét kiểu tấn công như sau: kiểu tấn công theo tính chất 1.
*Hình a: Cách đi đúng của thông tin: thông tin được truyền đúng từ A đến B.
*Hình b: Thông tin bị lấy trộm và bị thay đổi trên đường truyền:
12
* Kiểu tấn công theo tính chất 1:
+ Người A gửi cho người B bản tin (x,y) với y = sigK (h(x)). B không nhận được
(x,y) vì: trên đường truyền, tin bị lấy trộm. Tên trộm bằng cách nào đó tìm được
một bản tin x’ ≠ x nhưng lại có h(x’) = h(x). Hắn thay thế x bằng x’, và chuyển
tiếp (x’,y) cho B.
+ Người B nhận được (x’,y) và vẫn xác thực được thông tin đúng đắn. Do đó, để
tránh kiểu tấn công như trên, hàm h phải thỏa mãn tính chất: không va cham
yếu.
*Khái niệm: Hàm băm không va chạm yếu.
Hàm băm h được gọi là không va chạm yếu , nếu cho trước bức điện x,
“khó có thể” tính toán để tìm ra bức điện x’ ≠ x mà h(x’) = h(x).
Tính chất 2 : Hàm băm h là không va chạm mạnh.
Ví dụ: Xét kiểu tấn công như sau: Kiểu tấn công theo tính chất 2.
+ Đầu tiên, tên giả mạo tìm được hai thông điệp khác nhau x’ và x (x’ ≠ x) mà có
h(x) = h(x’). (Coi bức thông điệp x là hợp lệ, x’ là giả mạo).
13
+ Tiếp theo, hắn thuyết phục ông A ký vào bản tóm lược h(x) để nhận được y.
Khi đó (x’,y) là bức điện giả mạo nhưng hợp lệ vì h(x) = h(x’).
Để tránh kiểu tấn công này, hàm h phải thỏa mãn tính chất không va chạm
mạnh.
*Khái niệm: Hàm băm không va chạm mạnh.
Hàm băm b được gọi là không va chạm mạnh nếu “khó” thể tính toán để
tìm ra hai bức thông điệp khác nhau x và x’ (x’≠ x) mà có h(x’) = h(x).
Tính chất 3: Hàm băm h là hàm một chiều.
Ví dụ: Xét kiểu tấn công như sau: Kiểu tấn công theo tính chất 3.
+ Người A gửi cho B thông tin (x,z,y) với z = h(x), y= sigK(z).
+ Giả sử tên giả mạo tìm được bản tin x’, được tính ngược từ bản tóm lược z=
h(x).
+ Tên trộm thay thế bản tin x hợp lệ bằng bản tin x’ giả mạo nhưn lại có z =
h(x’).
Hắn ta ký số trên bản tóm lược z của x’ bằng đúng chữ ký hợp lệ. Nếu làm như
vậy thì (x’,y,z) là bức điện giả mạo nhưng hợp lệ.
Để tránh kiểu tấn công này, hàm băm h cần thỏa mãn tính chất một chiều.
*Khái niệm: Hàm băm một chiều.
Hàm băm h được gọi là hàm một chiều nếu khi cho trước một bản tóm
lược thông báo z thì “khó thể” tính toán để tìm ra thông điệp ban đầu x sao cho
h(x) = z.
2.5. 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ị.
14
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 2 n/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ý.
2.6. Các loại hàm băm
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 bot 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.
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”.
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 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
đổ thông điệp rút gọn tương ứng. 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ố đóm hàm băm SHA-1 và MD5 được sử dụng khá là
phổ biến từ thập niên 1990 cho đến nay.
15
2.6.1. Hàm băm MD4 (Message Disgest 4) và MD5 (Message Disgest 5)
Hàm băm MD4 được Giáo sư Ron Rivest đề nghị vào năm 1990. Vào năm
1992, phiên bản MD5 của thuật toán này ra đời. Thông điệp rút gọn có độ dài
128 bit.
Năm 1995, Hans Dobnertin đã chỉ ra sự đụng độ ngay chính trong bản
than hàm nén của giải thuật (mặc dù chưa thật sự phá vỡ được giải thuật). Năm
2004, nhóm tác giả Xiaoyun Wang, Denguo Feng, Xuejia Lai và Hongbo Yu đã
công bố kết quả về việc phá vỡ thuật toán MD4 và MD5 bằng phương pháp tấn
công đụng độ
2.6.2. Hàm băm SHS (Secure Hash Standard)
Hàm băm SHS do NIST và NSA xây dựng được công bố trên Federal
Register vào ngày 31/1/1992, và sau đó chính thức trở thành phương pháp
chuẩn từ ngày 13/5/1993. Thông điệp rút gọn có độ dài 160bit.
Ngày 26/08/2002, Viện tiêu chuẩn và công nghệ quốc gia Hoa Kỳ đã đề
xuất hệ thống chuẩn hàm băm an toàn gồm 4 thuật toán hàm băm SHA-1, SHA256, HA-384, SHA-512. Đến 25/03/2004, NIST đã chấp nhận thêm thuật toán
hàm băm SHA-224 vào hệ thống chuẩn hàm băm. Các thuật toán hàm băm do
NIST đề xuất được đặc tả trong tài liệu FIPS180-2
16
CHƯƠNG II: THUẬT TOÁN BĂM SHA-2
1. Khái niệm
SHA-2 (Secure Hash Algorithm 2) là tập hợp các hàm băm mật mã được
thiết kế bởi NSA. Hàm băm mật mã là các phép toán chạy trên dữ liệu kỹ thuật số,
bằng cách so sánh các tính toán “băm” (đầu ra từ thực hiện các thuật toán) đến các
giá trị hash được biết đến và mong đợi, một người có thể xác định tính toàn vẹn của
dữ liệu. Ví dụ, tính toán các hash của một tệp tin tải về và so sánh kết quả vào một
kết quả băm được phát hành trước đó có thể xác định các tệp tin tải về có bị sửa đổi
hoặc giả mạo hay không. Một khía cạnh quan trọng của hàm băm mật mã là chúng
kháng xung đột: Giá trị đầu vào khác nhau thì giá trị đầu ra sẽ không giống nhau.
2. Phân loại
SHA-2 bao gồm những thay đổi đáng kể từ tiền nhiệm của nó – SHA-1.
SHA-2 bao gồm 6 hàm băm được phân loại (theo giá trị băm) là 224, 256, 384
hoặc 512 bit: SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224, SHA512/256.
- SHA-256 và SHA-512 là các hàm băm tính toán với các từ 32-bit và 64-bit,
tương ứng. Chúng sử dụng các hằng số phụ gia khác nhau, nhưng cấu trúc thì
gần như là giống hệt, chỉ khác nhau ở số vòng.
- SHA-224 là phiên bản rút gọn của SHA-256.
- SHA-384 là phiên bản rút gọn của SHA-512, tính toán với giá trị ban đầu khác
nhau.
- SHA-512/224 và SHA-512/256 cũng là phiên bản rút gọn của SHA-512, nhưng
các giá trị ban đầu được tao ra bằng phương pháp mô tả trong FIPS PUB 180-4.
SHA-2 được phát hành năm 2001 bởi NIST như một tiêu chuẩn liên bang Mỹ
(FIPS). SHA-2 được cấp bằng sáng chế tại Mỹ số 6829355 và miễn phí bản
quyền.
17
3. Mô tả thuật toán
Mỗi thuật toán có thể được mô tả trong hai giai đoạn: tiền xử lý và tính toán
băm. Tiền xử lý liên quan đến việc đệm một thông điệp, phân tích cú pháp thông
điệp đó thành các khối m-bit, và thiết lập các giá trị khởi tạo sẽ được sử dụng trong
tính toán băm. Việc tính toán băm sinh ra một thông điệp lịch trình (message
schedule) từ thông điệp đã đệm và sử dụng lịch trình, cùng với chức năng, hằng số,
và các hoạt động từ ngữ để lặp đi lặp lại tạo ra một loạt các giá trị băm. Các băm
thức giá trị được tạo ra bởi việc tính toán hash được sử dụng để xác định các thông
điệp tóm lược (message digest).
3.1. Chức năng và Hằng số
3.1.1. Chức năng
Phần này định nghĩa các chức năng (functions) được sử dụng bởi mỗi thuật
toán. Mặc dù thuật toán SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224
và SHA-512/256 đều sử dụng chức năng tương tự, nhưng mô tả của chúng được
tách ra thành các phần cho SHA-224 và SHA-256 và cho SHA-384, SHA-512,
SHA-512/224 và SHA-512/256 kể từ đầu vào và đầu ra cho các chức năng này là
những từ ngữ có kích cỡ khác nhau. Trong mỗi thuật toán bao gồm functions
Ch(x,y,z) và Maj(x,y,z); phép toán OR đặc quyền (⊕) trong các functions này có thể
được thay thế bằng một phép toán OR bitwise (∨)và tạo ra kết quả giống hệt nhau.
3.1.1.1. SHA-224 and SHA-256 Functions
SHA-224 và SHA-256 sử dụng 6 logical functions, nơi mà mỗi chức năng
hoạt động trên 32-bit từ, được biểu diễn như là x, y, z. Kết quả của mỗi chức năng
là một 32-bit từ mới.
Ch(x,y,z)
Maj(x,y,z)
= (x ∧ y) ⊕ (¬x ∧ z)
= (x ∧ y) ⊕ (x ∧ z) ⊕ (y ∧ z)
= ROTR2(x) ⊕ ROTR13(x) ⊕ ROTR22(x)
= ROTR6(x) ⊕ ROTR11(x) ⊕ ROTR25(x)
(x)
= ROTR7(x) ⊕ ROTR18(x) ⊕ SHR3(x)
(x)
= ROTR17(x) ⊕ ROTR19(x) ⊕ SHR10(x)
18
3.1.1.2. SHA-384, SHA-512, SHA-512/224 and SHA-512/256 Functions
Các thuật toán này cũng sử dụng 6 logical functions, nơi mà mỗi chức
năng hoạt động trên 64-bit từ, được biểu diễn như là x, y, z. Kết quả của mỗi chức
năng là một 64-bit từ mới.
Ch(x,y,z)
Maj(x,y,z)
= (x ∧ y) ⊕ (¬x ∧ z)
= (x ∧ y) ⊕ (x ∧ z) ⊕ (y ∧ z)
= ROTR28(x) ⊕ ROTR34(x) ⊕ ROTR39 (x)
= ROTR14(x) ⊕ ROTR18(x) ⊕ ROTR41(x)
(x)
= ROTR1(x) ⊕ ROTR8(x) ⊕ SHR7(x)
(x)
= ROTR19(x) ⊕ ROTR61(x) ⊕ SHR6(x)
3.1.2. Hằng số
3.1.2.1. Hằng số SHA-224 và SHA-256
SHA-224 và SHA-256 sử dụng cùng một thứ tự 64 hằng 32-bit chữ, ,,…, .
Những chữ này đại diện cho 32 bit đầu tiên của phần phân số của căn bậc 3 của 64
số nguyên tố đầu tiên. Trong hex, những chữ này liên tục (từ trái sang phải).
428a2f98 71374491 b5c0fbcf e9b5dba5 3956c25b 59f111f1 923f82a4
ab1c5ed5 d807aa98 12835b01 243185be 550c7dc3 72be5d74 80deb1fe
9bdc06a7 c19bf174 e49b69c1 efbe4786 0fc19dc6 240ca1cc 2de92c6f
4a7484aa 5cb0a9dc 76f988da 983e5152 a831c66d b00327c8 bf597fc7
c6e00bf3 d5a79147 06ca6351 14292967 27b70a85 2e1b2138 4d2c6dfc
53380d13 650a7354 766a0abb 81c2c92e 92722c85 a2bfe8a1 a81a664b
c24b8b70 c76c51a3 d192e819 d6990624 f40e3585 106aa070 19a4c116
1e376c08 2748774c 34b0bcb5 391c0cb3 4ed8aa4a 5b9cca4f 682e6ff3
748f82ee 78a5636f 84c87814 8cc70208 90befffa a4506ceb bef9a3f7
c67178f2
3.1.2.2. Hằng số SHA-384, SHA-512, SHA-512/224 và SHA-512/256
SHA-384, SHA-512, SHA-512/224 và SHA-512/256 sử dụng cùng một thứ
tự 80 hằng 64-bit chữ, ,,…, . Những chữ này đại diện cho 64 bit đầu tiên của phần
19
phân số của căn bậc 3 của 80 số nguyên tố đầu tiên. Trong hex, những chữ này liên
tục (từ trái sang phải).
428a2f98d728ae22
3956c25bf348b538
d807aa98a3030242
72be5d74f27b896f
e49b69c19ef14ad2
2de92c6f592b0275
983e5152ee66dfab
c6e00bf33da88fc2
27b70a8546d22ffc
650a73548baf63de
a2bfe8a14cf10364
d192e819d6ef5218
19a4c116b8d2d0c8
391c0cb3c5c95a63
748f82ee5defb2fc
90befffa23631e28
ca273eceea26619c
06f067aa72176fba
28db77f523047d84
4cc5d4becb3e42b6
7137449123ef65cd
b5c0fbcfec4d3b2f
e9b5dba58189dbbc
59f111f1b605d019
923f82a4af194f9b
ab1c5ed5da6d8118
12835b0145706fbe
243185be4ee4b28c
550c7dc3d5ffb4e2
80deb1fe3b1696b1
9bdc06a725c71235
c19bf174cf692694
efbe4786384f25e3
0fc19dc68b8cd5b5
240ca1cc77ac9c65
4a7484aa6ea6e483
5cb0a9dcbd41fbd4
76f988da831153b5
a831c66d2db43210
b00327c898fb213f
bf597fc7beef0ee4
d5a79147930aa725
06ca6351e003826f
142929670a0e6e70
2e1b21385c26c926
4d2c6dfc5ac42aed
53380d139d95b3df
766a0abb3c77b2a8
81c2c92e47edaee6
92722c851482353b
a81a664bbc423001
c24b8b70d0f89791
c76c51a30654be30
d69906245565a910
f40e35855771202a
106aa07032bbd1b8
1e376c085141ab53
2748774cdf8eeb99
34b0bcb5e19b48a8
4ed8aa4ae3418acb
5b9cca4f7763e373
682e6ff3d6b2b8a3
78a5636f43172f60
84c87814a1f0ab72
8cc702081a6439ec
a4506cebde82bde9
bef9a3f7b2c67915
c67178f2e372532b
d186b8c721c0c207
eada7dd6cde0eb1e
f57d4f7fee6ed178
0a637dc5a2c898a6
113f9804bef90dae
1b710b35131c471b
32caab7b40c72493
3c9ebe0a15c9bebc
431d67c49c100d4c
597f299cfc657e2a
5fcb6fab3ad6faec
6c44198c4a475817
3.2. Tiền xử lý
Tiền xử lý bao gồm ba bước sau: đệm tin nhắn M, phân tích cú pháp tin nhắn
thành các khối tin và thiết lập các giá trị băm ban đầu H(0).
20
3.2.1. Đệm các tin nhắn
Mục đích của việc đệm này là để đảm bảo rằng thông điệp đệm là một bội số
của 512 hoặc 1024 bit, tùy thuộc vào các thuật toán. Phần đệm có thể được chèn
vào trước khi tính toán băm bắt đầu, hoặc tại bất kỳ thời điểm nào trong quá trình
tính toán băm trước khi xử lý các khối đã đệm.
3.2.1.1. SHA-224 and SHA-256
Giả sử độ dài của tin nhắn M là l bít, nối các bit “1” vào cuối tin nhắn và
theo sau là k bit “0” với k nhỏ nhất, không âm và là nghiệm của phương trình l + 1
+ k 448 mod 512. Sau đó nối các khối 64-bit bằng với số l sử dụng các đại diện nhị
phân. Ví dụ, tin nhắn “abc” (8-bit ASCII) có độ dài 8x3=24, vì vậy tin nhắn được
đệm 1 bit “1” và 448-(24+1)=423 bit “0” để trở thành tin nhắn có độ dài 512 bit.
Chiều dài của tin nhắn đệm nên là bội số của 512 bits.
3.2.1.2. SHA-384, SHA-512, SHA-512/224 and SHA-512/256
Giả sử độ dài của tin nhắn M là l bít, nối các bit “1” vào cuối tin nhắn và
theo sau là k bit “0” với k nhỏ nhất, không âm và là nghiệm của phương trình l + 1
+ k 896 mod 1024. Sau đó nối các khối 128-bit bằng với số l sử dụng các đại diện
nhị phân. Ví dụ, tin nhắn “abc” (8-bit ASCII) có độ dài 8x3=24, vì vậy tin nhắn
được đệm 1 bit “1” và 896-(24+1)=871 bit “0” để trở thành tin nhắn có độ dài 1024
bit.
21
Chiều dài của tin nhắn đệm nên là bội số của 1024 bits.
3.2.2. Phân tích cú pháp tin nhắn
Thông điệp và phần đệm của nó phải được phân tích thành các khối bit N m-bit.
3.2.2.1. SHA-224 and SHA-256
Đối với SHA-224 và SHA-256, thông điệp và phần đệm của nó được phân
tích thành N khối 512-bit, M(1), M(2),..., M(N) . Kể từ 512 bits của khối đầu vào có thể
được thể hiện như 16 chữ 32-bit, 32 bit đầu tiên của khối tin i được ký hiệu là , 32
bit tiếp theo là , và như vậy lên đến .
3.2.2.2. SHA-384, SHA-512, SHA-512/224 và SHA-512/256
Đối với SHA-384, SHA-512, SHA-512/224 và SHA-512/256, thông điệp và
phần đệm của nó được phân tích thành N khối 1024-bit, M (1), M(2),..., M(N) . Kể từ
1024 bits của khối đầu vào có thể được thể hiện như 16 chữ 64-bit, 64 bit đầu tiên
của khối tin i được ký hiệu là , 64 bit tiếp theo là , và như vậy lên đến .
3.2.3. Thiết lập các giá trị băm ban đầu H(0).
Trước khi tính toán băm bắt đầu cho 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. Các kích thước và số lượng của các chữ trong H (0)
phụ thuộc vào các kích thước thông điệp tóm lược.
22
3.2.3.1. SHA-224
Đối với SHA-224, giá trị băm ban đầu H(0) gồm 8 chữ 32-bit, trong hex như sau:
= c1059ed8
= 367cd507
= 3070dd17
= f70e5939
= ffc00b31
= 68581511
= 64f98fa7
= befa4fa4
3.2.3.2. SHA-256
Đối với SHA-256, giá trị băm ban đầu H(0) gồm 8 chữ 32-bit, trong hex như sau:
= c1059ed8
= 6a09e667
= bb67ae85
= 3c6ef372
= a54ff53a
= 510e527f
= 9b05688c
= 1f83d9ab
= 5be0cd19
Có được những chữ này bằng cách lấy 32 bit đầu tiên của phần phân số của
căn bậc 2 tám số nguyên tố đầu tiên.
3.2.3.3. SHA-384
Đối với SHA-384 giá trị băm ban đầu H(0) gồm 8 chữ 64-bit, trong hex như sau:
= cbbb9d5dc1059ed8
23
= 629a292a367cd507
= 9159015a3070dd17
= 152fecd8f70e5939
= 67332667ffc00b31
= 8eb44a8768581511
= db0c2e0d64f98fa7
= 47b5481dbefa4fa4
Có được những chữ này bằng cách lấy 64 bit đầu tiên của phần phân số của
căn bậc 2 thứ chín của các số nguyên tố thứ 16.
3.2.3.4. SHA-512
Đối với SHA-512 giá trị băm ban đầu H(0) gồm 8 chữ 64-bit, trong hex như sau:
= 6a09e667f3bcc908
= bb67ae8584caa73b
= 3c6ef372fe94f82b
= a54ff53a5f1d36f1
= 510e527fade682d1
= 9b05688c2b3e6c1f
= 1f83d9abfb41bd6b
= 5be0cd19137e2179
Có được những chữ này bằng cách lấy 64 bit đầu tiên của phần phân số của
căn bậc 2 tám số nguyên tố đầu tiên.
3.2.3.5. SHA-512/224
Đối với SHA-512/224, giá trị băm ban đầu H(0) gồm 8 chữ 64-bit, trong hex:
= 8C3D37C819544DA2
= 73E1996689DCD4D6
= 1DFAB7AE32FF9C82
= 679DD514582F9FCF
= 0F6D2B697BD44DA8
= 77E36F7304C48942
= 3F9D85A86A1D36C8
24
= 1112E6AD91D692A1
3.2.3.6. SHA-512/256
Đối với SHA-512/256, giá trị băm ban đầu H(0) gồm 8 chữ 64-bit, trong hex:
= 22312194FC2BF72C
= 9F555FA3C84C64C2
= 2393B86B6F53B151
= 963877195940EABD
= 96283EE2A88EFFE3
= BE5E1E2553863992
= 2B0199FC2C85B8AA
= 0EB72DDC81C52CA2
3.3. Thuật toán băm an toàn
Trong các phần này, các thuật toán băm không được mô tả theo thứ tự tăng
dần của kích thước. SHA-256 được mô tả trước SHA-224 bởi vì các đặc điểm kỹ
thuật của SHA-224 và SHA-256 là giống hệt nhau, ngoại trừ giá trị băm ban đầu
khác nhau được sử dụng, và các giá trị băm cuối cùng được cắt ngắn thành 224 bit
cho SHA-224. Điều này cũng đúng đối với SHA-512, SHA-384, SHA-512/224 và
SHA-512/256, ngoại trừ các giá trị băm cuối cùng được cắt ngắn đến 224 bit cho
SHA-512/224, 256 bit cho SHA- 512/256 hoặc 384 bit cho SHA-384.
3.3.1. SHA-256
SHA-256 có thể được sử dụng để băm một thông điệp M có chiều dài l bit
với 0 ≤ l < 264. Thuật toán sử dụng một thông điệp lịch trình với 64 chữ 32-bit, 8
biến làm việc với 32 bit mối biến và giá trị băm với 8 chữ 32-bit. Kết quá cuối cùng
của SHA-256 là một thông điệp tóm lược 256-bit.
Các chữ trong thông điệp lịch trình được gắn nhãn W 0, W1,…, W63. Tám biến
làm việc được dán nhãn a, b, c, d, e, f, g và h. Các chữ của giá trị băm được dán
nhãn , để giữ lại giá trị băm ban đầu H (0) đã được thay thế bởi các giá trị băm trung
25