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 1- Kiều Văn Tiến
- Nguyễn Quốc Trung
- Lưu Đình Nam Lớp :AT8A
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áo trong 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 Error! Bookmark not defined LỜI NÓI ĐẦU 5
CHƯƠNG1 : Tìm Hiểu hàm băm SHA-1 Error! Bookmark not defined 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 12
2.1 Định nghĩa mã xác thực thông báo (MAC) 14
2.2 HMAC Design Objectives (Mục đích thiết kế HMAC) 15
2.2.1 Thiết kế HMAC 18
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 Error! Bookmark not defined 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 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 HMAC-SHA1 để hiểu rõ hơn trong việc xác thực thô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ích thướ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.1 Tì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,
Trang 9Hình1 : xử lý khối dữ liệu Bướ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én Giả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 MAC hoặ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ành mộ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ác thự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 cho ngườ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 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 sinh hai 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 hash mộ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ể trong hà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 ở phần tấn công thứ hai
Trong lần tán công thứ hai , kẻ tấn công cần tìm hai thông điệp M và M’ có cùng H(M)=H(M’) Được gọi là tấn công Brithday chúng ta đã biết sự phức tạp của nó
là 2n/2 cho giá trị băm chiều dài n (requires a level of effort of 2n/2 for a hash length
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 :
SHA1 và sử dụng như một HMAC, hoặc mã xác thực thông điệp băm dựa trê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ết quả 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 đó áp dụ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 qua mộ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ại giá trị hash trên tin nhắn đã nhận và kiểm tra rằng các HMAC tính toán phù hợp vớ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ác giá 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, tin nhắ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ật toá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 ý