Mã xác thực thông điệp HMAC dựa trên hàm băm

Một phần của tài liệu Nghiên cứu, nâng cao độ an toàn cho ứng dụng smart otp trong hệ thống ứng dụng phần mềm cung cấp dịch vụ trung gian thanh toán và mobile money (Trang 33 - 39)

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT CỦA MẬT KHẨU MỘT LẦN OTP

2.2. Cơ sở mật mã học của mật khẩu sử dụng một lần OTP

2.2.1. Mã xác thực thông điệp HMAC dựa trên hàm băm

Mã xác thực thông điệp HMAC dựa trên hàm băm được sử dụng với mục đích tạo ra mã OTP một cách nhanh chóng, an toàn, ít xảy ra trùng lặp.

2.2.1.1. Hàm băm

Hàm băm (tên tiếng Anh là Hash Function) là một thuật toán không dùng khóa để mã hóa, nhiệm vụ của hàm băm là tạo ra các giá trị có độ dài nhất định từ mỗi khối dữ liệu ban đầu. Hàm băm biến đổi một khối dữ liệu lớn thành một giá trị có kích thước nhỏ hơn và cố định. Hàm băm là hàm một chiều, giá trị đầu ra của hàm băm là duy nhất và từ giá trị đầu ra này khó có thể suy ngược lại nội dung hay độ dài ban đầu của văn bản gốc [11]. Để thuật toán băm này có thể hoạt động thì kích thước của khối dữ liệu đầu vào là 1024 bit, kích thước của giá trị đầu ra được tạo bởi hàm băm là 512 bit [12].

Một hàm băm được coi là tốt khi thỏa mãn các điều kiện sau:

- Tính toán nhanh.

- Ít xảy ra trùng lặp, khả năng tạo ra các giá trị băm giống nhau cho các dữ liệu đầu vào khác nhau là rất thấp.

- Không thể đảo ngược lại giá trị băm, đảm bảo rằng không cách nào để tìm ra dữ liệu đầu vào dựa trên giá trị băm.

Các hàm băm mật mã phải đảm bảo chịu được các loại tấn công mã hóa đã biết.

Hàm băm có các tính chất sau:

- “Hàm băm h là 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 thông điệp x, khó thể tính toán để tìm ra thông điệp x’ khác x sao cho h(x ) = h(x).

- Hàm băm h là không va chạm mạnh: hàm băm h được gọi là không va chạm mạnh nếu khó thể tính toán để tìm ra hai thông điệp khác nhau x và x’ sao cho h(x ) = h(x).

- Hàm băm h là hà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 điệp z thì khó thể tìm ra thông điệp ban đầu x sao cho h(x) = z.” [11]

Các tính chất trên đảm bảo rằng dữ liệu đầu vào dù có bị thay đổi cũng không thể thay đổi giá trị băm.

2.2.1.2. Hàm băm SHA-512

“Hàm băm an toàn SHA được công bố trong Hồ sơ Liên bang năm 1992 và được chấp nhận làm tiêu chuẩn vào năm 1993 do Viện Tiêu chuẩn và Công nghệ Quốc Gia (NIST)” [11]. Hiện nay, đa số các phần mềm và phần cứng đều sử dụng chuẩn hàm băm SHA-256, giá trị băm tạo ra có độ dài 256 bit. Với tính chất mã hóa một chiều, rất khó để có thể truy ngược lại thông điệp gốc nên chuẩn SHA-256 được đánh giá là một trong những chuẩn hàm băm có độ an toàn cao. Chuẩn hàm băm SHA-256 được tạo ra thì người ta cũng có thể tạo ra một thuật toán để giải mã nó.

Thời điểm hiện tại, SHA-256 có thể là an toàn nhất nhưng trong tương lai vài năm nữa thì có thể nó không còn đáp ứng được mức độ an toàn nữa. Công nghệ, kỹ thuật hiện đại có tốc độ phát triển nhanh chóng, trình độ các chuyên gia an toàn cũng được nâng cao nhưng cũng đồng nghĩa với khả năng của tin tặc cũng sẽ cao hơn. Vậy nên, cần phải có phương án dự trù, nâng cao độ an toàn cho thuật toán cơ sở của mã OTP bằng cách sử dụng chuẩn an toàn cao hơn là SHA-512.

SHA-512, hay còn gọi là Thuật toán hàm băm an toàn 512, là chuẩn hàm băm có độ an toàn cao nhất hiện nay, thuộc họ SHA-2. SHA-512 là một thuật toán để so sánh giá trị băm phía người nhận có giống với giá trị băm phía người gửi không.

Thuật toán này thường được sử dụng để biến đổi văn bản có độ dài bất kỳ thành một chuỗi giá trị có kích thước cố định. Đầu ra của SHA-512 có độ dài 512 bit (64 byte).

Thuật toán này thường được sử dụng để băm địa chỉ email, băm mật khẩu, xác minh bản ghi kỹ thuật số.

SHA-512 có khả năng nhận đầu vào với số lượng 2128 bit, nó phải trải qua 80 vòng lặp, nhiều hơn 25% so với thuật toán SHA-256 (64 vòng lặp) nên có độ trễ so với SHA-256.

Ý tưởng của thuật toán hàm băm SHA-512: xử lý theo khối dữ liệu có kích thước 1024 bit, mỗi khối dữ liệu được xử lý qua 80 vòng lặp, mỗi vòng sẽ sử dụng:

hằng số K, bộ đệm để lưu trữ các kết quả trung gian và đầu ra có kích thước 64 bit, mở rộng từ w có kích thước 64 bit được tạo ra từ tin nhắn thô đầu vào [14].

Thuật toán SHA-512 có các phép toán cơ bản và được ký hiệu như sau:

Ký hiệu Phép toán

F Hàm băm

+ Phép cộng modulo 264

ROTRn Phép dịch phải xoay vòng n bit

SHRn Phép dịch trái không xoay vòng n bit và thêm các bit 0 vào phía bên phải

 Phép XOR

Phép AND

Bảng 2.1. Các phép toán cơ bản của thuật toán SHA-512 Bước 1: Tiền xử lý dữ liệu:

- Chuyển thông điệp đầu vào về dạng nhị phân, ta được một chuỗi các bit có kích thước L.

- Thêm chuỗi bit 1000…0 vào sau chuỗi nhận được ở trên, tiếp tục nối tiếp 128 bit của thông điệp đầu vào sao cho ta nhận được một thông điệp mở rộng mới có độ dài là bội số của 1024.

- Chia thông điệp mở rộng thành n khối: M1, M2, …, Mn, kích thước mỗi khối là 1024 bit. Mỗi khối này sẽ được sử dụng làm đầu vào cho hàm băm tại mỗi lần xử lý khối dữ liệu.

Hình 2.2. Sơ đồ thuật toán SHA-512

Ba bước tiếp theo sẽ tính toán các giá trị được sử dụng trong mỗi vòng lặp: mở rộng từ wt, bộ đệm và hằng số kt

Bước 2: Tính giá trị wt:

Với mỗi tin nhắn đầu vào Mi của hàm băm, ta chia nhỏ thành các wt, kích thước mỗi wt là 64 bit,do đó ta được 16 mở rộng từ khởi tạo: w0, w1,…, w15.

Thuật toán có 80 vòng lặp, mỗi vòng lặp sẽ sử dụng một wt. Ta đã tính được 16 giá trị w cho 16 vòng lặp đầu tiên. Từ w16 đến w79 sẽ được tính theo công thức sau:

w = σ (w ) + w + σ (w ) + w Trong đó: σ (x) = ROTR (x)  ROTR (x)  SHR (x) σ (x) = ROTR (x)  ROTR (x)  SHR (x)

Bước 3: Tính bộ đệm:

Một bộ đệm có kích thước 64 bit, giá trị đầu ra có kích thước 512 bit nên ta có số bộ đệm cần dùng cho một vòng lặp là = 8

Ta có 8 bộ đệm: A, B, C, D, E, F, G, H có các giá trị ban đầu được biểu diễn bằng hệ thập lục phân là

Bộ đệm Giá trị ban đầu

A 6a09e667f3bcc908

B bb67ae8584caa73b

C 3c6ef372fe94f82b

D a54ff53a5f1d36f1

E 510e527fade682d1

F 9b05688c2b3e6c1f

G 1f83d9abfb41bd6b

H 5be0cd19137e2179

Bảng 2.2. Giá trị ban đầu của 8 bộ đệm SHA-512

8 giá trị ban đầu của 8 bộ đệm này sẽ được sử dụng làm đầu vào cho vòng lặp thứ nhất. Sau mỗi vòng lặp, các bộ đệm sẽ được tính toán lại theo các công thức sau:

 T = H + Ch(E, F, G) + ∑ E + w + k

 T = ∑ A + M (A, B, C)

 H = G ; G = F ; F = E

 E = D + T

 D = C ; C = B ; B = A

 A = T + T

Trong đó: M (A, B, C) = A ∧ B  B ∧ C  (C ∧ A ) Ch(E, F, G) = E ∧ F  (E ∧ G )

A = ROTR (A)  ROTR (A)  ROTR (A)

E = ROTR (E)  ROTR (E)  ROTR (E)

Bước 4: Hằng số kt:

Hằng số kt được biểu diễn dưới một ma trận 20*4 có các giá trị như trong hình sau:

Hình 2.3. Hằng số k của hàm băm SHA-512 Bước 5: Xử lý một khối dữ liệu:

Mỗi khối dữ liệu được xử lý bằng hàm băm, qua 80 vòng lặp, sử dụng khối dữ liệu Mi có kích thước 1024 bit làm giá trị đầu vào, giá trị băm đầu ra là Hi có kích thước 512 bit.

Hình 2.4. Sơ đồ xử lý một khối dữ liệu trong SHA-512

Giá trị băm đầu ra Hi sẽ được sử dụng làm giá trị đầu vào cho quá trình xử lý khối dữ liệu tiếp theo nếu có nhiều hơn một khối dữ liệu cần xử lý. Nếu chỉ có một khối dữ liệu thì Hi chính là giá trị băm đầu ra của thông điệp ban đầu.

2.2.1.3. Mã xác thực thông điệp HMAC dựa trên hàm băm

Trong thế giới của điện toán và truyền thông mở, một cách thức kiểm tra tính toàn vẹn của dữ liệu được truyền qua là một điều cần thiết. Cơ chế cung cấp cách thức kiểm tra tính toàn vẹn dữ liệu dựa trên khóa bí mật như vậy được gọi mã xác thực thông điệp MAC (Message Authentication Code). Mã xác thực thông điệp HMAC (viết tắt của cụm từ Keyed-Hashing for Message Authentication) là một cơ chế xác thực thông điệp sử dụng hàm băm mật mã. HMAC có thể được sử dụng với bất kỳ hàm băm mật mã nào. [13]

Công thức tính toán giá trị băm HMAC trên một đoạn văn bản:

HMAC(K, m) = H( K xor opad, H(K xor ipad, m))

Trong đó:

H: ký hiệu của hàm băm mật mã, K: khóa bí mật,

m: đoạn văn bản cần tính giá trị băm, xor: phép tính loại trừ từng bit,

ipad: phần đệm bên trong, bao gồm các byte có giá trị 0x36 lặp lại 128 lần, opad: phần đệm bên ngoài, bao gồm các byte có giá trị 0x5c lặp lại 64 lần.

Một số hàm băm xác thực thông điệp được sử dụng phổ biến hiện nay là: MD5, SHA-1, SHA-2, RIPEMD-160,…Hàm băm SHA-512 là một trong những hàm băm kế tiếp của SHA-1, nằm trong SHA-2 và là một trong những hàm băm mạnh nhất hiện nay.

Một phần của tài liệu Nghiên cứu, nâng cao độ an toàn cho ứng dụng smart otp trong hệ thống ứng dụng phần mềm cung cấp dịch vụ trung gian thanh toán và mobile money (Trang 33 - 39)

Tải bản đầy đủ (PDF)

(77 trang)