Hàm băm mật mã học (Cryptographic hash function) là một khái niệm quan trọng trong lĩnh vực bảo mật thông tin. Tất cả chuyên gia và thậm chí là sinh viên trong lĩnh vực an toàn thông tin và công nghệ thông tin cần có một sự hiểu biết nhất định về nó. Việc tìm hiểu về hàm băm mật mã học có thể giúp chúng ta hiểu rõ hơn về cách các dữ liệu được bảo vệ và đảm bảo tính toàn vẹn của chúng. Hàm băm mật mã học còn là xương sống của nhiều công nghệ hiện nay như chữ ký số, công nghệ chuỗi khóa (Blockchain), …
Khi đọc xong bài viết này, chúng ta có thể hiểu được bản chất của hàm băm mật mã học, từ khái niệm cơ bản, vai trò của nó, tính chất và ứng dụng của nó. Bài viết cũng trình bày một vài kỹ thuật xây dựng cũng như tấn công hàm băm. Bắt đầu từ việc tìm hiểu về hàm băm mật mã học, chúng ta sẽ có cái nhìn tổng quan về một trong những khía cạnh quan trọng nhất của bảo mật thông tin.
Trước khi tìm hiểu hàm băm mật mã học là gì mà có quyền năng kinh khủng như vậy, chúng ta sẽ tìm hiểu một số kiến thức cơ bản nhé. Nó sẽ giúp cho các bạn hiểu được bài viết này một cách chuyên sâu và hiểu được bản chất của hàm băm mật mã học.

Một số kiến thức cần biết

Độ phức tạp thuật toán

Thời gian đa thức

“Khó”

Hàm một chiều (One-way function)

Hàm băm mật mã học là gì ?

Băm (hash) là quá trình chuyển đổi đầu vào gồm nội dung kỹ thuật số có kích thước bất kỳ để tạo đầu ra có kích thước cố định. Quá trình này được thực hiện bằng cách sử dụng các công thức toán học như các hàm băm (được thực hiện dưới dạng các thuật toán băm).
Các hàm băm khác nhau sẽ cho ra những kích thước cố định khác nhau, ví dụ: MD5 sẽ cho ra kích thước cố định là 128 bit, trong khi SHA-256 sẽ cho đầu ra có kích thước cố định là 256 bit.
Ta hiểu đơn giản rằng tính một chiều của nó giống như cách hoạt động của máy xay sinh tố, chúng ta có thể bỏ hoa quả vào và đầu ra là nước sinh tố, tuy nhiên, nếu bạn đã có nước sinh tố, bạn không có cách nào để đảo ngược nó thành hoa quả.
Hãy tưởng tượng rằng hàm băm mật mã học là một máy xay sinh tố huyền bí nào đó, chúng ta sẽ biết về nó sớm thôi.
Trước khi tìm hiểu về một số hàm băm mật mã học (hay họ hàm băm mật mã học) phổ biến, chúng ta sẽ tìm hiểu liệu hàm băm mật mã học có những tính chất gì mà nó có thể là nền tảng cho nhiều công nghệ mà chúng ta sử dụng hằng ngày hiện nay nhé.

Tính chất của hàm băm mật mã học

Để hiểu rõ tại sao hàm băm mật mã học lại an toàn, chúng ta cần biết những tính chất quan trọng của nó. Phần này là phần khó hiểu nhất của bài viết, nhưng không sao tác giả sẽ cố gắng giải thích dễ hiểu nhất giúp độc giả có thể nắm rõ được tại sao hàm băm mật mã học lại mạnh mẽ như vậy.
Ta ký hiệu hàm băm là một hàm bất kỳ
Trong đó là tập hợp tất các phần tử “đầu vào” (thông thường sẽ là tập hợp cả số bit có độ dài bất kỳ) và là tập hợp tất các phần tử “đầu ra” của hàm băm . Sẽ thỏa mãn các tính chất sau
  1. Với mọi phần tử , hàm có thể được tính toán dễ dàng.
  1. Với mọi phần tử , nếu biết giá trị của , khó có thể tìm được giá trị . (Chống nghịch ảnh - preimage resistance)
  1. Với mọi phần tử khó có thể tìm được sao cho (Chống nghịch ảnh thứ hai - Second preimage resistance)
  1. Khó tìm được cặp thỏa mãn (Chống xung đột hoặc chống đụng độ - Collision resistance)
“Khó” có nghĩa là chưa có thuật toán thời gian đa thức để có thể giải quyết được bài toán trên
Vậy chúng ta đã nắm được các tính chất của hàm băm mật mã học rồi, bây giờ thì chúng ta tìm hiểu về ứng dụng của hàm băm nhé.

Tại sao chúng ta cần hàm băm mật mã học ?

Hàm băm mật mã học thường được sử dụng với những mục đích sau đây:
  1. Xác minh tính toàn vẹn của dữ liệu
    1. Hình ảnh: Checksum của Microsoft cho phiên bản Windows10 theo các ngôn ngữ khác nhau
      Khi chúng ta tải tệp tin từ internet về máy tính (Ví dụ: File cài windows, các file cài ứng dụng), có thể có khả năng mất mát thông tin trong quá trình tải, hoặc tin tặc có thể can thiệp, chỉnh sửa và thậm chí là chèn mã độc vào đó. Vậy nên chủ nhân của tệp tin sẽ tạo ra giá trị được gọi là giá trị tổng kiểm (checksum, thường thường người ta sẽ sử dụng hàm băm mật mã học MD5 hoặc SHA-256) để chúng ta kiểm tra chúng ta đã tải đủ tệp tin hay chưa hoặc tệp tin đã bị tin tặc can thiệp hay chưa.
  1. Lưu trữ mật khẩu
    1. Với đặc tính nổi trội đó chính là tính một chiều và chống đụng độ hàm băm mật mã học thường được sử dụng để băm mật khẩu và lưu vào cơ sở dữ liệu (CSDL). Khi người dùng tạo tài khoản, hệ thống sẽ sử dụng các thuật toán băm (thường là có sử dung muối - salt, muối giúp tạo giá trị băm khác nhau kể cả người dùng tạo tài khoản có mật khẩu giống nhau. Xem hình minh họa).
      Khi người dùng đăng nhập, hệ thống sẽ băm mật khẩu mà người dùng đã nhập từ bàn phím kèm muối đã lưu ở CSDL, nếu mật khẩu người dùng sau khi băm kèm muối trùng với giá trị băm đã được lưu trong CSDL hệ thống sẽ chấp thuận cho người dùng truy cập.
      Vậy tại sao phải băm giá trị mật khẩu nhỉ ?
      Bởi vì trong trường hợp cơ sở dữ liệu bị tin tắc chiếm quyền truy cập, tin tặc chỉ biết được giá trị băm và muối. Hoàn toàn không thể biết được mật khẩu của người dùng do không thể đảo ngược được hàm băm mật mã học (tuy nhiên, tin tặc có thể sử dụng tấn công bạo lực (brute-force) để dò các mật khẩu dễ đoán của người dùng).
  1. Sử dụng trong chữ ký số
    1. Chữ ký số là thông tin được đi kèm cùng tài liệu kỹ thuật số, nhằm mục đích xác thực chủ nhân của tài liệu đó. Trước khi bắt đầu quá trình ký, tài liệu sẽ được băm nhằm mục đích rút gọn dữ liệu. Bởi vì thuật toán ký sử dụng hàm mã hóa của sơ đồ mã hóa khóa công khai nên quá trình mã hóa rất chậm, nếu ký những tài liệu có khối lượng lớn sẽ rất tốn thời gian và gây ra nhiều phiền toái. Việc sử dụng hàm băm giúp người dùng có thể nhanh chóng thực hiện tác vụ ký mà vẫn có để đảm bảo được tính xác thực, tính toàn vẹn và tính chống chối bỏ.
      Tác giả đã có bài viết chi tiết về chữ ký số, độc giả mong muốn tìm hiểu sâu hơn về chữ ký số vui lòng xem ở đây.
  1. Sử dụng trong công nghệ chuỗi khối (Blockchain)
    1. Hàm băm chính là xương sống của công nghệ chuỗi khối, một công nghệ đang bùng nổ hiện nay trên thế giới cũng như ở Việt Nam. Trong công nghệ blockchain, hàm băm được sử dụng để đảm bảo rằng thông tin trong mỗi khối (block) là không thể bị sửa đổi (nếu thông tin bị sửa, giá trị băm sẽ bị thay đổi và cách điểm (node) khác trong khối sẽ phát hiện ra ngay lập tức).
      Nếu muốn thay đổi giá trị trong một khối, tin tặc sẽ phải thay đổi dữ liệu ở tất cả các khối khác trong hệ thống trong cùng một thời điểm. Để thực hiện việc này ở thời điểm hiện tại là không thể.
      Thuật ngữ đào bitcoin về bản chất cũng là tính toán giá trị băm phù hợp và nhận được phần thưởng từ hệ thống.
  1. Sử dụng để sinh mã xác thực thông điệp (Message Authentication Code - MAC)
    1. Mã xác thực thông điệp là một đoạn mã được tạo ra nhằm mục đích xác thực toàn vẹn và nguồn gốc của thông điệp. Đây là một cơ chế quan trọng để duy trì tính toàn vẹn và không thể chối bỏ dữ liệu. Với các giao thức trực tuyến, mã xác thực thông điệp được sử dụng phổ biến và với việc kết hợp các cơ chế khác (như chữ ký số) để đảm bảo tính xác thực giữa các bên tham gia giao dịch.
      Mục đích của MAC là đảm bảo phiên liên lạc được thông suốt và phát hiện được thay đổi của thông điệp trong quá trình trao đổi dữ liệu, tránh được các cuộc tấn công (như tấn công xen giữa - Man in the Middle - MITM [7]) hay một bên trong phiên liên lạc cố tình thay đổi thông điệp.
      Hiện tại MAC được Viện tiêu chuẩn và công nghệ quốc gia của Mỹ (NIST) đưa ra 2 tiêu chuẩn để giúp các nhà phát triển ứng dụng tích hợp MAC vào sản phẩm khác nhau:
    2. HMAC - Sử dụng hàm băm mật mã học để sinh mã xác thực thông điệp
    3. CMAC - Sử dụng mã hóa khối để sinh mã xác thực thông điệp
    4. Độc giả có thể xem thêm tại [8]
  1. Sử dụng trong Bit commitment protocol
    1. Bit commitment protocol — Là giao thức được triển khai giữa 2 người tham gia không tin cậy, thực hiện một cam kết (commit) nào đó, sử dụng hàm băm và 2 bên có thể kiểm tra được cam kết này có đúng hay không. Tác giả đã có bài viết chi tiết về chữ ký số, độc giả mong muốn tìm hiểu vui lòng click ở đây.
      Sau quá trình cam kết thì sẽ sinh ra một xác nhận (Confirmation). Alice gửi cho Bob xác nhận. Sau đó muốn kiểm tra Alice có cam kết đúng hay không thì Alice và Bob sẽ cùng kiểm tra dựa trên cam kết và xác nhận.
  1. Sử dụng trong bộ sinh giả ngẫu nhiên
    1. Hiện nay tính ngẫu nhiên được sử dụng rất nhiều trong cuộc sống của chúng ta, nổi bật nhất có thể kể đến một số ứng dụng như:
      • Sinh khóa mã hóa: Việc sinh khóa mã hóa phải đảm bảo được yếu tố ngẫu nhiên, nếu kẻ địch (hay tin tặc) biết được quy luật sinh khóa mã hóa, kẻ địch có thể tấn công vào hệ thống mật mã của doanh nghiệp hay cơ quan nhà nước mà không gặp nhiều khó khăn.
      • Sinh mã giảm giá: Việc sinh mã giảm giá cũng gần có bộ sinh ngẫu nhiên tốt để đảm bảo rằng tin tặc, những người mua hàng có thể đoán được quy luật và sử dụng hết tất cả mã giảm giá đã được phát hành.
      • Ngoài ra tính ngẫu nhiên còn được ứng dụng trong khoa học, lý thuyết trò chơi, … Độc giả có thể xem thêm tại [9]
      Với các tính chất tuyệt vời của hàm băm mật mã học, nó còn được sử dụng để tạo các bộ sinh giả ngẫu nhiên.
  1. Sử dụng trong cấu trúc dữ liệu bảng băm
Bảng băm (Hash table) là một cấu trúc dữ liệu gồm khóa (key) và giá trị (value). Nếu so sánh với mảng một chiều, khóa có thể được coi là chỉ số của mảng và giá trị là giá trị tại chỉ số đó trong mảng. Hàm băm được sử dụng để băm các giá trị đầu vào và lưu ở buckets (xem hình minh họa)

Một số hàm băm mật mã học phổ biến

Bây giờ chúng ta sẽ đi tìm hiểu về một số hàm băm mật mã học phổ biến. Giúp chúng ta có cái nhìn tổng quát về hàm băm mật mã học. Thực tế hiện nay người ta đang sử dụng loại hàm băm mật mã học nào và một số tính chất cơ bản của nó.

Họ hàm băm mật mã học MD

Họ hàm băm mật mã học MD (Message-Digest) trước đây được sử dụng rất nhiều (hiện tại đã được thay thế bởi họ hàm băm SHA). Gọi là họ hàm băm mật mã học bởi vì nó có một vài thuật toán khác nhau chứ không chỉ một thuật toán. Thuật toán nổi tiếng nhất trong họ hàm băm mật mã học này là thuật toán MD5, được thiết kế bởi Ronald Rivest vào năm 1991 để thay thế cho hàm băm MD4 vốn đã lỗi thời và không còn an toàn[3] và MD5 được đưa thành tiêu chuẩn trong RFC 1321 [4] trong năm 1991. Tuy vậy ở thời điểm hiện tại, MD5 vẫn được đánh giá là không an toàn nên Ronald Rivest và các đồng nghiệp đã tiếp tục phát triển MD6 [5] vào năm 2008.
Tên thuật toán
Kích thước đầu ra
Khả năng xung đột
Ví dụ băm chuỗi “Math2it”
MD2
128 bit
Cao
a3a484a96e626f67bf74bf172efad0f7
MD4
128 bit
3f102fec20f4f051e098ff110e4a93a6
MD5
128 bit
a4835ef3347fb4f24076b9c072a83ff9
MD6
128,256,512 bit
Không
368d41ff7115240b59a1952979d452d9
Lưu ý: Với đối với hàm băm MD6, ví dụ là thuật toán MD6-128

Họ hàm băm mật mã học SHA

SHA (Secure Hash Algorithm hay Thuật Toán Băm An toàn) là tập hợp các thuật toán được chấp nhận bởi FIPS (Federal Information Processing Standards hay Tiêu chuẩn xử lý thông tin liên bang). Thuật toán đầu tiên trong họ này được người ta tạm đặt tên là thuật toán SHA-0 (Để phân biệt với SHA-1 đã được thay thế sau đó) được phát triển bởi NSA (Cơ quan An ninh quốc gia Hoa Kỳ). Tuy nhiên nó đã bị thay thế bởi SHA-1 vì lý do không đáp ứng đủ yêu cầu về an ninh, an toàn.
Tên thuật toán
Kích thước đầu ra (bit)
Khả năng xung đột
Ví dụ băm chuỗi “Math2it”
SHA-0
160
Không
a6bd080eef8ebf8ee42e7326e522f941b339d080
SHA-1
160
Có vấn đề
ec5ba1c4c4651e86363b1e35006a506158b6545d
SHA-224/256/384/512
224/256/384/512
Không
ac32fc79b91b2d90edf7f961573b0145128ea337d9e5df696ec99f3d
SHA3-224/256/384/512
224/256/384/512
Không
761509864c48f9c26db34dbb727310cefac3931ec7608beb20cf47d4
Lưu ý: Với đối với hàm băm SHA, ví dụ là thuật toán SHA-224. Đối với hàm băm SHA3, ví dụ là thuật toán SHA3-224

Hàm băm mật mã học GOST

Hàm băm mật mã học GOST là tiêu chuẩn hàm băm dành được phát triển tại Liên bang Nga được thiết kế bởi Cơ quan An ninh Liên bang Nga (FSB) và Công ty an ninh mạng InfoTeCS. Có thể kể đến một số hàm băm nổi tiếng như:
  1. Streebog (GOST R 34.11.2012) có kích thước đầu ra là 256 hoặc 512 bit. [6]
  1. GOST R 34.11.94 được phát triển vào năm 1994. Tuy nhiên với sự phát triển của khoa học công nghệ, hàm băm này được đánh giá sẽ không còn an toàn và được thay thế bởi hàm băm Streebog.

Tài liệu tham khảo

  1. Yanyi Liu, Rafael Pass, On One-way Functions from NPComplete Problems, https://eprint.iacr.org/2021/513
  1. Oded Goldreich (2001). Foundations of Cryptography: Volume 1, Basic Tools, (draft available from author's site). Cambridge University Press. ISBN 0-521-79172-3.
  1. Dobbertin, H. (1996) ‘Cryptanalysis of MD4’, Fast Software Encryption, pp. 53–69. doi:10.1007/3-540-60865-6_43.
  1. R. Rivest, (1992) “The MD5 Message-Digest Algorithm”, RFC 1321.
  1. R. Rivest, (2008) “The MD6 hash function”, xem trực tuyến tại đây.
  1. GOST R 34.11-2012 Information Technology – Cryptographic Information Security – Hash Function. Xem trực tuyến tại đây
  1. Man-in-the-Middle Attack (MITM)
  1. Giới thiệu về mã xác thực thông báo và ứng dụng trong một số sản phẩm mật mã dân sự
  1. Wikipedia, Applications of randomness, https://en.wikipedia.org/wiki/Applications_of_randomness