Ngày nay internet cùng với dịch vụ phong phú của nó có khả năng cung cấp cho con người cá phương tiện hết sức thuận lợi để trao đổi , tổ chức , tìm kiếm và cung cấp thông tin . Tuy nhiên , cũng như trong các phương thức truyền thông , việc trao đổi thông tin trong nhiều lĩnh vực đòi hỏi tính bí mật , tính toàn vẹn , tính xác thực cũng như trách nhiệm về các thông tin trao đổi Bên cạnh đó , tốc độ xử lí của máy tính ngày càng được nâng cao ,do đó cùng với sự giúp đỡ của các máy tính tốc độ cao , khả năng tấn công hệ thống thông tin có độ bảo mật kém rất dễ xảy ra.Chính vì vậy người ta không ngừng nghiên cứu các vấn đề an toàn và bảo mật thông tin.Cho đến nay với sự phát triển của công nghệ mã hóa phi đối xứng , người ta nghiên cứu và đưa ra nhiều kỹ thuật ,nhiều mô hình cho phép chúng ta áp dụng xây dựng các ứng dụng đòi hỏi tính an toàn thông tin cao. Việc đòi hỏi an toàn thông tin trong giao dịch cũng như trao đổi thông điệp được đặt lên hàng đầu vì vậy việc xác thực thông điệp là một vấn đề quan trọng trong giao dịch hiện nay.Để tìm hiểu một cách rõ hơn trong đề tài nghiên cứu này chúng em xin giới thiệu về thuật toán HMACSHA1 để hiểu rõ hơn trong việc xác thực thông điệp của thông tin .
Trang 1MẬT MÃ NÂNG CAO
Giảng viên hướng dẫn:
Phạm Quốc Hoàng Nguyễn Văn Nghị
Nhóm sinh viên:
Kiều Văn Tiến Nguyễn Quốc Trung Lưu Đình Nam Lớp :AT8A
HỌC VIỆN KỸ THUẬT MẬT MÃ
KHOA AN TOÀN THÔNG TIN
ĐỀ TÀI :
AT8A-H C VI N KỸ THU T M T MÃ ỌC VIỆN KỸ THUẬT MẬT MÃ ỆN KỸ THUẬT MẬT MÃ ẬT MẬT MÃ ẬT MẬT MÃ
Tìm Hiểu Về Thuật Toán
HMAC-SHA1
Trang 2LỜI CẢM ƠN
- Trước hết nhóm nghiên cứu xin gửi lời cám ơn đặc biệt nhất đến giảng viên Thạc
sĩ Phạm Quốc Hoàng, Khoa Mật Mã - Trường Học Viện Kỹ Thuật Mật Mã, người
đã định hướng đề tài, cung cấp tài liệu và tận tình chỉ bảo chúng em trong suốt quátrình thực hiện nghiên cứu
Chúng em cũng xin được gửi lời cám ơn sâu sắc tới Khoa Công nghệ thông tin,Khoa An toàn thông tin và Trưởng ban nghiên cứu khoa học, cùng các thầy cô giáotrong trường đã tận tình giảng dạy và luôn động viên chúng em trong học tập vànghiên cứu
Hà nội ngày 17,tháng 3,năm 2015
Nhóm thực hiện
Trang 3MỤC LỤC
LỜI CẢM ƠN 1
Danh Mục Hình Ảnh 3
LỜI NÓI ĐẦU 4
CHƯƠNG1 : Tìm Hiểu hàm băm SHA-1 5
1 .Khái quát về hàm băm 6
1.1 Tìm hiểu hàm băm SHA-1 6
1.1.1 Giải thuật SHA1 6
1.1.2Nguyên lý giải thuật SHA1 6
1.1.3 Hàm nén SHA1 10
CHƯƠNG 2 :Tìm hiểu thuật toán HMAC-SHA1 11
2.1 Định nghĩa mã xác thực thông báo (MAC) 11
2.2 HMAC Design Objectives (Mục đích thiết kế HMAC) 12
2.2.1 Thiết kế HMAC 14
2.2.2 : Thuật toán HMAC 15
2.2.3 Sự an toàn của HMAC 18
2.3 Tìm hiểu về thuật toán HMAC-SHA1 19
2.3.1 Khái niệm 19
2.3.2 Mô tả hoạt động của thuật toán 20
CHƯƠNG 3: DEMO đánh giá – kết luận 22
3.1 Demo 22
3.2 Kết luận 22
TÀI LIỆU THAM KHẢO 23
Trang 4Hình 1 :xử lý khối dữ liệu
Hình 2 :hàm nén
Hình 3 :Các hàm f
Hình 4: Sơ đồkhối HMAC
Hình 5 :Thuật toán HMAC
Hình 6 :Thuật toán HMAC-SHA1
Trang 5LỜI NÓI ĐẦU
-Ngày nay internet cùng với dịch vụ phong phú của nó có khả năng cung cấp chocon người cá phương tiện hết sức thuận lợi để trao đổi , tổ chức , tìm kiếm và cungcấp thông tin
Tuy nhiên , cũng như trong các phương thức truyền thông , việc trao đổi thông tintrong nhiều lĩnh vực đòi hỏi tính bí mật , tính toàn vẹn , tính xác thực cũng nhưtrách nhiệm về các thông tin trao đổi
Bên cạnh đó , tốc độ xử lí của máy tính ngày càng được nâng cao ,do đó cùng với
sự giúp đỡ của các máy tính tốc độ cao , khả năng tấn công hệ thống thông tin có
độ bảo mật kém rất dễ xảy ra.Chính vì vậy người ta không ngừng nghiên cứu cácvấn đề an toàn và bảo mật thông tin.Cho đến nay với sự phát triển của công nghệ
mã hóa phi đối xứng , người ta nghiên cứu và đưa ra nhiều kỹ thuật ,nhiều mô hìnhcho phép chúng ta áp dụng xây dựng các ứng dụng đòi hỏi tính an toàn thông tincao
Việc đòi hỏi an toàn thông tin trong giao dịch cũng như trao đổi thông điệp đượcđặt lên hàng đầu vì vậy việc xác thực thông điệp là một vấn đề quan trọng tronggiao dịch hiện nay.Để tìm hiểu một cách rõ hơn trong đề tài nghiên cứu này chúng
em xin giới thiệu về thuật toán HMAC-SHA1 để hiểu rõ hơn trong việc xác thựcthông điệp của thông tin
Trang 6CHƯƠNG 1 :TÌM HIỂU VỀ HÀM BĂM SHA-1
1 Khái quát về hàm băm:
Hàm băm là các thuật toán không sử dụng khóa để mã hóa, nó có nhiệm vụ “lọc”(băm) thông điệp, file được đưa vào theo một thuật toán H một chiều nào đó, rồiđưa ra một văn bản băm hay còn gọi là văn bàn đại diện, văn bản này có kíchthước cố định Người nhận không biết được nội dung hay độ dài ban đầu của thôngđiệp đã được băm bằng hàm băm.Giá trị của hàm băm là duy nhất và không thểsuy ngược lại nội dung của thông điệp từ giá trị băm này
1.1Tìm hiểu về hàm băm sha-1
1.1.1 Giải thuật SHA-1
Secure Hash Algorithm (SHA) phát triển bởi National Institute of Standard and Technology (NIST)
Đầu vào: thông điệp với độ dài tối đa 264 bits
Đầu ra: giá trị băm (message digest) có độ dài 160 bits
Giải thuật gồm 5 bước thao tác trên các khối 512 bits
1.1.2 Nguyên lý Giải thuật SHA-1
Bước 1: nhồi thêm dữ liệu
Trang 7 Thông điệp được nhồi thêm các bits sao cho độ dài l ≡ 448 mod 512 hay l =
n * 512 + 448 (n,l nguyên)
Thông điệp luôn luôn được nhồi thêm dữ liệu
Số bits nhồi thêm nằm trong khoảng 1 đến 512
Phần dữ liệu nhồi thêm bao gồm một bit 1 và theo sau là các bit 0
Bước 2: thêm vào độ dài
Độ dài của khối dữ liệu ban đầu được biểu diễn dưới dạng nhị phân 64bit vàđược thêm vào cuối chuỗi nhị phân kết quả của bước 1
Độ dài được biểu diễn dưới dạng nhị phân 64bit không dấu
Kết quả có được từ 2 bước đầu là một khối dữ liệu có độ dài là bội số của
512 Khối dữ liệu được biểu diễn:
Bằng một dãy L khối 512bit Y0 , Y1 ,…, Yl-1
Bằng một dãy N từ (word) 32bit M0 , M1 , M n-1 Vậy N = L x 16
Bước 3: khởi tạo bộ đệm MD (MD buffer)
Một bộ đệm 160bit được dùng lưu trữ các giá trị băm trung gian và kết quả
Bộ đệm được biểu diễn bằng 5 thanh ghi 32 bit với các giá trị khởi tạo ở dạng bigendian (byte có trọng số lớn nhất trong từ nằm ở địa chỉ thấp nhất) như sau:
Trang 8 Trọng tâm của giải thuật bao gồm 4 vòng lặp thực hiện tất cả 80 bước
4 vòng lặp có cấu trúc như nhau, chỉ khác nhau ở các hàm logic f1 , f2 , f 3, f4
Mỗi vòng có đầu vào gồm khối 512bit hiện thời và một bộ đệm 160bit ABCDE Các thao tác sẽ cập nhật giá trị bộ đệm
Trang 9Hình1 : xử lý khối dữ liệuBước 5: xuất kết quả
Sau khi thao tác trên toàn bộ L blocks Kết quả của khối thứ L là bảng băm 160bit
Giải thuật được tóm tắt như sau:
o CV0 = IV
o CVq+1 = SUM 32 (CVq , ABCDEq )
o MD = CVl
Với
Trang 10o IV = giá trị khởi tạo của bộ đệm ABCDE
o ABCDEq = đầu ra của hàm nén trên khối thứ q
o L = số khối 512bit của thông điệp
o SUM32 = phép cộng modulo 232 trên từng từ (32 bits) của đầu vào
o MD = giá trị băm
1.1.3 Hàm nén SHA-1
Hình 2 :hàm nénGiải thuật thực hiện tất cả 80 bước, mỗi bước được mô tả như sau:
Trang 11Từ 16 từ 32-bit từ khối dữ liệu đầu vào, mở rộng thành 80 từ Wt
– Với 0 ≤ t ≤ 15, giá trị Wt lấy trực tiếp từ khối dữ liệu
– Với t >15 : Wt = S1 (Wt-16 xor Wt-14 xor Wt-8 xor Wt-32)
CHƯƠNG 2 : TÌM HIỂU VỀ THUẬT TOÁN HMAC-SHA1
2.1 Định nghĩa mã xác thực thông báo: MAC
Thuật toán mã xác thực thông báo (MAC- Message Authentication Code) là
một họ các hàm Hk được tham số hóa bởi một khóa bí mật k, với các tính chất sau:
Trang 12- Tính chất dễ tính toán : với một hàm Hk đã biết, cho trước một giá trị k vàmột đầu vào x, Hk(x) là dễ tính toán Kết quả này gọi là gia strij MAChoặc HMAC.
- Tính chất nén : Hk ánh xạ một đầu vào x có độ dài bit tùy ý hữu hạnthànhmột đầu ra Hk(x) có độ dài bit cố định n
- Tính chất kháng tính toán: cho trước không hoặc nhiều cặp text-MAC (xi,Hk(xi)), không thể tính toán để tìm một cặp text-MAC bất kỳ (x, Hk(x))cho một đầu vào mới x # xi (bao gồm cả khả năng Hk(x) = Hk(xi) với i nàođó)
Kỹ thuật xác thực bằng thuật toán MAC được mô tả chung như sau: Giả sử
có hai thực thể tham gia liên lạc được gọi là A và B Hai thực thể A và B phải chia
sẻ một khóa bí mật chung k Khi A cần gửi một thông báo cho B thì A tính mã xácthực thông báo như một hàm của thông báo và khóa:
MAC = MAC(k,x)
Trong đó: x là thông báo đầu vào, k là khóa bí mật đã chia sẻ, MAC là mã
xác thực thông báo Thông báo được nối với giá trị MAC và được truyền chongười nhận Người nhận xác thực thông báo này bằng cách tính lại MAC từ thông
báo x nhận được bằng khóa bí mật k đã chia sẻ, sau đó so sánh với MAC nhận
được kèm theo thông báo Nếu hai giá trị này giống nhau thì thông báo được xác
thực Do chỉ có người gửi và người nhận biết khóa bí mật k, do đó không aikhác có
thể tạo được MAC hợp lệ Hơn nữa, bất kỳ việc sửa đổi thông báo ban đầu cũng sẽtạo ra một MAC khác và nó sẽ không được xác thực
Ngoài ra, còn có thể sử dụng hàm MAC kết hợp với các hàm mã hóa E để
bảo đảm cả tính xác thực và tính bí mật của thông báo
2.2HMAC Design Objectives (Mục đích thiết kế HMAC)
-HMAC sử dụng hàm hash một chiều có khóa mật và đưa nó thành thuật toán mã xác thực thông báo (Mã xác thực thông báo sử dụng hàm một chiều)
-HMAC thường được thiết kế dựa trên NMAC (Nested MAC), sử dụng hàm giả ngẫu nhiên – PRF (pseudo random function ) để tạo hàm MAC với giới hạn an toàn chứng minh được
Trang 13tag = hash(key1 || hash(key2 || message))
PRF ở đây có dạng Hash(key2||message) NMAC yêu cầu 2 khóa, một cho hash trong (inner) một cho hash ngoài (outer) Hai khóa độc lập với nhau HMAC dựa trên NMAC với sự khác biệt là hai khóa phụ thuộc tuyến tính, chỉ yêu cầu hàm PRF là an toàn [,không yêu cầu nó kháng va chạm đối với một số hàm hash
(Chứng minh mới về NMAC và HMAC: An toàn không cần kháng va
chạm) ,nhưng nó cần chống được tấn công phương sai
-HMAC có thể được sử dụng kết hợp với bất kỳ băm mật mã lặp chức năng HMAC cũng sử dụng một khóa bí mật để tính và xác minh của các giá trị xác thực thông điệp Các mục tiêu chính xây dựng là
Sử dụng (không cần cải tiến ) những hàm băm có sẵn Cụ thể , có những hàm băm hoạt động tốt trong trong phần mềm ,và những mã có khả năng mở rộng
Sử dụng và điều khiển các khóa theo một cách dẽ dàng
Để có một bản phân tích mã hóa của sức mạnh cơ chế xác thực dựa trên sự giả định hợp lý về hàm băm thêm vào
-Hai tiêu chí đầu quan trọng cho một hàm HMAC có thể chấp nhận
được ,HMAC xem hàm băm như là một hộp đen Điều này thì có hai lợi
ích thứ nhất , việc sử dụng một hàm băm đã có thể được sử dụng như là một modul trong việc thực thi một HMAC Bằng cách này ,kích thước mã HMAC được gói lại và sẵn sàng để sử dụng mà không cần hiểu chỉnh Thứ hai , nếu có bất kỳ sự mong muốn thay đổi một hàm băm trong việc thực thi một HMAC nào , chỉ cần thay thế hàm băm củ bằng một modul mới khi có một hàm băm nhanh hơn đươc mong muốn Quan trọng hơn , nếu tính an toàn của hàm băm được nhúng
Trang 14Vào bị suy giảm ,thì tính an toàn của HMAC có thể được giữ lại bằng cách thay hàm băm củ bằng một hàm băm mới an toàn hơn ( ví dụ thay thế SHA bằng Whirlpool )
2.2.1 Thiết kế HMAC
-Ban đầu HMAC được thiết kế để sử dụng với SHA-1, trên thực tế có thể sử dụng
nó an toàn với các hàm hash an toàn khác như SHA-256 và SHA-512 HMAC sinhhai khóa từ một khóa mật duy nhất bằng cách XOR hai hằng số với nó
- Chú ý là khóa có kích thước bằng kích thước của khối sử dụng trong hàm hash (SHA-1 và SHA-256 khối nén 64-byte, SHA-512 khối nén 128-byte) Nếu khóa lớn hơn kích thước khối nén, thì khóa trước hết phải được hash, đầu ra của nó coi như là khóa mật Khóa mật được gán thêm các byte zero đảm bảo là độ dài của nó bằng độ dài khối nén Khóa được sao thành hai bản, bản thứ nhất được XOR với 0x36 tạo khóa ngoài (outer), bản thứ hai XOR với 0x5C tạo khóa trong (inner)
- Xâu gồm các byte 0x36 gọi là opad, xâu gồm các byte 0x5C là ipad Khóa phải được bổ sung thêm (padded) để có độ dài bằng độ dài của khối nén để có thể thực hiện hash có khóa (keyed hash) thay cho hash thông qua việc tạo trạng thái hash khởi tạo phụ thuộc khóa HMAC tương đương với việc lấy trạng thái khởi tạo hashmột cách ngẫu nhiên trên khóa bí mật
Trang 15Hình 4: Sơ đồ khối HMAC
2.2.2 HMAC Algorithm (Thuật toán HMAC)
-Mô tả hoạt đọng của HMAC
- Các ký hiệu:
H : là hàm băm nhúng (như MD5, SHA-1, )
IV : là vector khởi tạo đầu vào của hàm băm
M : là thông báo đầu vào của HMAC (bao gồm padding cụ thể tronghàm băm nhúng)
Yi : là khối thứ i của M, 0 <=i <=(L - 1)
L : là số khối trong M
b : là số bits trong một khối
n : là độ dài của mã băm được tạo ra bởi hàm băm nhúng
K : là khóa bí mật, độ dài >=n Nếu độ dài khó lớn b, khóa là đầu
Trang 16vào của hàm băm để tạo một khóa n-bit
K + : là khóa K đã được bổ sung các số 0 vào bên trái để có độ dài là bit
b-ipad : = 00110110 (36 trong hệ hexa) được lặp lại b / 8 lần
opad : = 01011100 (5C trong hệ hexa) được lặp lại b / 8 lần
-HMAC được thể hiện như sau :
Hình 5 : Thuật toán HMAC
Trang 17-Thuật toán HMAC được mô tả như sau:
1 Bổ sung các số 0 vào phần cuối bên trái của khóa K để tạo một dãy b- bit K+
2 Thực hiện phép XOR K+ với ipad để tạo khối b-bit Si
3 Nối thông báo M vào Si
4 Áp dụng hàm băm H vào dòng bit đã tạo ở bước 3
5 Thực hiện phép XOR K+ với opad để tạo khối b-bit So
6 Nối kết quả băm ở bước 4 vào So
7 Áp dụng hàm băm H vào dòng bit đã tạo ở bước 6 và có kết quả đầu
ra
-Chú ý rằng phép XOR với ipad cho kết quả chỉ một nửa bit chiều dài của
K Tương tự ,phép XOR với opad cũng cho kết quả chiều dài nửa bit khóa K nhưng là một bộ bit khác In effect, bằng cách cho Si và S0 đi qua hàm nén của thuật toán băm , chúng ta ẽ có hai khóa giả định ngẫu nhiên từ K
HMAC có hệ thực những thông điệp dài với cùng một khoảng thười gian với cùng một hàm băm HMAC them vào ba việc thực hiện hàm nén (compression
function ) (cho SI ,S0, và khối trong hàm băm )
Một thực thi hiệu quả hơn được đưa ra trong ví dụ sau : Hai đại lượng được tính trước
Trong đó ,f(cv,block ) là hàm nén cho hàm băm , nhận một tham số là biến dây chuyền cho n bit và một tham số là một khoois b bit và cho ra một biến dây chuyền
Trang 18n bit Những đại lượng này chỉ cần được tính lần đầu và mỗi lần khóa thay đổi Đểtăng thêm tính hiệu quả ,những đại lượng được tính trước sẽ thay thế cho giá trị ban đầu (IV) để trong hàm băm Với sự thực thi này , chỉ một thời điểm them vào của hàm nén được thêm vào quá trình một cách bình thường được tạo boeir hàm băm Việc thực thi hiệu quả hơn này đặc biệt có giá trị nếu hầu hết các thông điệp ngắn được dùng cho MAC tính toán
2.2.3 Security of HMAC (Sự an toàn của HMAC )
-Tính an toàn của bất cứ hàm MAC đều dựa trên hàm băm thêm vào ,phụ thuộc vào sức mạnh mã hóa của hàm băm cơ sở The appeal của HMAC là người thiết kếcần chứng minh được mối quan hệ chính xác giữa sức mạnh của hàm băm thêm vào và sức mạnh cửa HMAC
-Tính an toàn của một MAC nhìn chung được diễn đạt dựa vào khả năng giả mạo thành công với thời gian sử dụng của người giả mạo và số lượng cặp thông điệp MAC được tạo ra với cùng một khóa Về bản chất , nó được chứng minh trong [BELLA96a] rằng với mức độ sự nỗ lưc cho trước ( về thời gian , các cặp thông điệp MAC ) trong thông điệp được tạo ra bởi người dùng chính đáng và cả người tấn công , thì khả năng có thể tấn công thành công tương đương với một trong hai cách tấn công vào hàm băm sau :
Người tấn công có khả năng tính toán được một kết quả của hàm nén ngay
cả với một giá trị đầu vào IV không biết , hoặc ngẫu nhiên hoặc bí mật
Người tấn công tìm được những sự đụng độ trong hàm băm ngay cả khi không giá trị đầu vào là bí mật và ngẫu nhiên
-Trong lần tấn công đầu tiên , chúng ta có thể xem hàm nén tương đương với hàm băm được sử dụng cho thông điệp một khối đơn n bit Trong lần tấn công này , giátrị đầu vào của hàm băm được thay thế bằng một giá trị n bit ngẫu nhiên bí
mật Một lần tấn công vào hàm băm này yêu cầu tấn công Birthay, được giới thiệu
Trang 19of n ) Vì vậy ,độ an toàn của MD5 bị nghi ngờ ,bởi vì độ phức tạp 264 có thể giải
mã với công nghệ ngày nay Điều này có nghĩa rằng một hàm băm 128 bit như MD5 không phù hợp với HMAC ?.Câu trả lời là phù hợp vì để tấn công MD5 , người tấn công có thể chọn một bộ thông điệp bất kỳ và cố gắng tìm ra sự đụng
độ Bởi vì khi biết thuật toán băm và giá trị đầu vào thì người tấn công có thể sinh
ra hàm băm cho mỗi thông điệp mà người tấn công tạo ra
Tuy nhiên khi tấn công HMAC ,người tấn công không nên tạo ra cặp thông báo điệp /mã off line vì không biết khóa K.Vì vậy, người tấn công phải quan sát một dãy thông điệp được sinh ra bởi HMAC sử dụng cùng một khóa và thực hiện việc tấn công trên thông điệp đã biết Với một mã băm 128 bit ,điều này cần phải quan sát 264 khối (272 bit ) được sinh ra với cùng một khóa Với một đường truyền 1Gbps,một người càn phải quan sát một luồng thông điệp liên tục với cùng một khóa trong 150.000 năm để thành công Vì vậy ,có thể dụng MD5 thay cho SHA-1 như
là hàm băm được dùng cho HMAC
2.3 TÌM HIỂU VỀ THUẬT TOÁN HMAC-SHA1
2.3.1 Khái Niệm :
-HMAC-SHA1 là một loại thuật toán băm có khóa mà được xây dựng từ hàm bămSHA1 và sử dụng như một HMAC, hoặc mã xác thực thông điệp băm dựatrên Quá trình HMAC trộn một khóa bí mật với các thông điệp dữ liệu, băm kếtquả với hàm băm, trộn bằng giá trị hash với khóa bí mật một lần nữa, và sau đó ápdụng các hàm băm một lần thứ hai Băm đầu ra là 160 bit chiều dài
Một HMAC có thể được sử dụng để xác định xem một thông điệp được gửi quamột kênh không an toàn đã bị giả mạo, cung cấp mà người gửi và người nhận đều
có một khóa bí mật Người gửi tính giá trị băm cho các dữ liệu ban đầu và gửi cảcác dữ liệu ban đầu và giá trị băm là một tin nhắn đơn Người nhận sẽ tính toán lạigiá trị hash trên tin nhắn đã nhận và kiểm tra rằng các HMAC tính toán phù hợpvới HMAC truyền
-Bất kỳ thay đổi các dữ liệu hoặc kết quả giá trị băm trong một không phù hợp, bởi
vì kiến thức của khóa bí mật là cần thiết để thay đổi các thông điệp và tái tạo cácgiá trị hash chính xác Vì vậy, nếu các giá trị băm ban đầu và tính toán phù hợp, tinnhắn được xác thực
SHA-1 (Secure Hash Algorithm, cũng gọi là SHS, Hash mật Standard) là một thuậttoán hash mật mã công bố bởi Chính phủ Hoa Kỳ Nó tạo ra một giá trị băm 160-bit từ một chuỗi dài tùy ý