- vừa được xem lúc

Nguyên lý hoạt động về ứng dụng hàm băm

0 0 493

Người đăng: Khanh Chau Minh

Theo Viblo Asia

Trong bài viết này, mình sẽ trình bày về nguyên lý hoạt động về ứng dụng hàm băm cho việc xác thực thông tin và cho chữ ký số, giải thích, cũng như so sánh ưu, khuyết điểm của mỗi loại.

1. Nguyên lý hoạt động về ứng dụng hàm băm cho việc xác thực thông tin

Chú thích:

  • M: message – nội dung thông điệp cần mã hóa
  • H(M): hash - hàm hash message M
  • E(M): encrypt - hàm mã hóa message M
  • D(M): decrypt – hàm giải mã message M
  • K: khóa sử dụng để mã hóa và giải mã (mã hóa đối xứng)

Giải thích nguyên lý hoạt động về ứng dụng hàm băm cho việc xác thực thông tin:

  • Source A: nối thông điệp MH(M) lại với nhau, sau đó mang kết quả đó đi mã hóa E(M) với khóa K, sử dụng mã hóa đối xứng và gửi cho Destination B.

  • Destination B: nhận nội dung gửi từ Source A, giải mã tin nhắn D(M) với khóa K nhận được 2 phần là thông điệp MH(M) nối với nhau. Tính hash của thông điệp M ta được H, so sánh H với H(M) để kiểm tra.

  • Source A: mã hóa E(H(M)) với khóa K, sau đó mang kết quả E(H(M)) kết hợp với thông điệp M làm một và gửi cho Destination B.

  • Destination B: nhận nội dung gửi từ Source A là thông điệp ME(H(M)) kết hợp với nhau. Mang E(H(M)) giải mã D(H(M)) với khóa K để được H, so sánh HH(M) để kiểm tra.

Bên Source A và Destination B cùng sử dụng một giá trị S chung (secret key)

  • Source A: kết hợp thông điệp MS thành một (M || S), sau đó tính hash của (M || S) được H(M || S). Kết hợp H(M || S)M thành một rồi gửi cho Destination B.

  • Destination B: nhận nội dung gửi từ Source A là thông điệp MH(M || S) kết hợp với nhau. Ghép M nhận được với S, tính hash của (M || S) được H'(M || S), sau đó so sánh H'(M || S) với H(M || S) để kiểm tra.

Bên Source A và Destination B cùng sử dụng một giá trị S chung (secret key)

  • Source A: kết hợp thông điệp M và S thành một (M || S), sau đó tính hash của (M || S) được H(M || S). Kết hợp H(M || S)M thành một, sau đó mang đi mã hóa E(H(M || S)) với khóa K rồi gửi cho Destination B.

  • Destination B: nhận nội dung gửi từ Source A là mã hóa E(H(M || S)). Giải mã D(H(M || S)) với khóa K nhận được thông điệp MH(M || S). Kết hợp M với S với nhau rồi mang đi hash tạo thành H'(M || S). Sau đó so sánh H'(M || S)H(M || S) để kiểm tra.

So sánh ưu, khuyết điểm của mỗi dạng:

  • Về tính bảo mật (confidentiality), cả (b) và (c) đều không đảm bảo do không mã hóa thông điệp M trước khi gửi đi.

  • Về tốc độ tính toán (computation), do (c) không thực hiện mã hóa, nên tốc độ nhanh nhất. Tiếp đến là tốc độ của (b) sẽ nhanh hơn (a) và (d) do (b) chỉ mã hóa H còn (a) và (d) mã hóa cả thông điệp M kết hợp với một nội dung khác. (a) lại nhanh hơn (d) do (a) chỉ thực hiện mã hóa 1 lần trong khi (d) là 2. Vì vậy, (c) > (b) > (a) > (d).

  • Về tính toàn vẹn (integrity), do (c) và (d) có sử dụng thêm khóa bí mật S chỉ được biết bởi 2 bên nên sẽ đảm bảo toàn vẹn dữ liệu hơn (a) và (b).

2. Nguyên lý hoạt động về ứng dụng hàm băm cho chữ ký số

Chú thích:

  • M: message – nội dung thông điệp cần mã hóa
  • H(M): hash - hàm hash message M
  • E-asym(M): encrypt - hàm mã hóa message M (mã hóa kiểu bất đối xứng)
  • E-aym(M): encrypt - hàm mã hóa message M (mã hóa kiểu đối xứng)
  • D-asym(M): decrypt – hàm giải mã message M kiểu bất đối xứng
  • D-sym(M): decrypt – hàm giải mã message M kiểu đối xứng
  • PR: private key – khóa riêng tư sử dụng để mã hóa bất đối xứng
  • PU: public key - khóa công khai sử dụng để mã hóa bất đối xứng
  • K: khóa sử dụng để mã hóa và giải mã (mã hóa đối xứng)

Giải thích nguyên lý hoạt động về ứng dụng hàm băm cho chữ ký số:

  • Source A: mang H(M) đi mã hóa E-asym(H(M)) với khóa riêng tư PR, sau đó mang kết quả kết hợp với thông điệp M với nhau rồi gửi cho Destination B.

  • Destination B: nhận nội dung gửi từ Source A là thông điệp ME-asym(H(M)) kết hợp với nhau. Mang E-asym(H(M)) đi giải mã D-asym(H(M)) bằng khóa công khai PU nhận được H(M). Tính hash của thông điệp M được H'(M). Sau đó so sánh H(M) với H'(M) để kiểm tra.

  • Source A: mang H(M) đi mã hóa E-asym(H(M)) với khóa riêng tư PR, sau đó mang kết quả kết hợp với thông điệp M với nhau (M || E-asym(H(M))) rồi mã hóa E-sym(M || E-asym(H(M))) sau đó gửi cho Destination B.

  • Destination B: nhận nội dung gửi từ Source A là mã hóa E-sym(M || E-asym(H(M))). Giải mã D-sym(M || E-asym(H(M))) với khóa K được thông điệp ME-asym(H(M)). Giải mã D-asym(H(M)) với khóa công khai PU nhận được H(M). Tính hash của thông điệp M được H'(M). So sánh H(M) với H'(M) để kiểm tra.

So sánh ưu, khuyết điểm của mỗi dạng:

  • Về tính bảo mật (confidentiality), (a) không đảm bảo do không mã hóa thông điệp M trước khi gửi đi

  • Về tốc độ tính toán (computation), (a) nhanh hơn (b) do (a) chỉ thực hiện mã hóa 1 lần trong khi (d) là 2.

Bình luận

Bài viết tương tự

- vừa được xem lúc

Cài đặt WSL / WSL2 trên Windows 10 để code như trên Ubuntu

Sau vài ba năm mình chuyển qua code trên Ubuntu thì thật không thể phủ nhận rằng mình đã yêu em nó. Cá nhân mình sử dụng Ubuntu để code web thì thật là tuyệt vời.

0 0 419

- vừa được xem lúc

Tìm hiểu về cách thiết kế Class Diagram

Trong 1 dự án, việc tổ chức code cũng như clean code là 1 điều rất quan trọng, nếu cách thiết kế các class hợp lý và rõ ràng sẽ giúp ích rất nhiều cho việc mở rộng và bảo trì sau này. Để làm được điều này chúng ta cần phải có 1 bản thiết kế Class Diagram thật sự hợp lý.

0 0 94

- vừa được xem lúc

Vòng đời và trạng thái của Thread

A. Giới thiệu.

0 0 139

- vừa được xem lúc

Sự khác nhau giữa những điều tưởng giống nhau - Phần 3

Hôm nay, để tiếp tục cho series so sánh, hãy cùng mình khám phá thêm 2 địa danh mới khá nổi tiếng của Việt Nam mình đó là Cù Lao Chàm và đảo Lý Sơn. .

0 0 112

- vừa được xem lúc

5 sai lầm phổ biến khi code JavaScript mà bạn ít khi để ý

Bài viết hôm nay mình giới thiệu đến các bạn 5 lỗi lập trình thường gặp trong JavaScript. Tất nhiên mình sẽ không nói về các syntax error, hoặc những lỗi quá bình thường.

0 0 57

- vừa được xem lúc

Cách sử dụng dagger 2 cơ bản trong Android

I. Giới thiệu.

0 0 251