Hàm băm (hash function) là gì? – w3seo các loại hàm băm trong thực tế

Rate this post

Ở những phần trước ta đã xem xét việc xác nhận thông điệp có sử dụng hàm băm. Vậy hàm băm là gì ? Chúng có những đặc tính hay nhu yếu gì trong sử dụng ? Trên thực tiễn chúng được sử dụng thế nào ? Sau đây, tất cả chúng ta sẽ xem xét chi tiết cụ thể hơn về những hàm băm .

Các bài viết liên quan:

Như đã nói ở trên, hàm băm là một hàm biến đổi thông điệp cho trước từ độ dài tuỳ ý thành độ dài cố định và dùng để xác thực thông điệp.

Hàm băm H cần nó có được các tính chất sau:

  1. Đầu vào hàm băm có thể có độ dài tùy ý còn đầu ra có độ dài cố định
  2. Hàm băm H cần được tính trong toàn thể khối thông điệp
  3. Tính H(x) tương đối dễ
  4. Hàm băm H là hàm 1 chiều (one-way): tính H-1(x) rất khó
  5. Hàm băm H là không xung đột (collision-free), gọi là:
    • không xung đột yếu nếu với thông điệp x cho trước rất khó tìm được thông điệp y ≠ x sao cho: H(y) = H(x)
    • không xung đột mạnh nếu rất khó tìm được cặp hai thông điệp nào đó x ≠ y sao cho: H(x) = H(y)

Các nhu yếu 1-4 là những nhu yếu tối thiểu cho một hàm băm, nhu yếu 5 là để nhìn nhận một hàm băm là mạnh hay yếu. Trên trong thực tiễn, khoảng trống của những giá trị băm là hữu hạn ( ví dụ hàm băm cho độ dài 128 bit thì khoảng trống những giá trị băm khác nhau có độ lớn là : 2128 ), còn số lượng những thông điệp khác nhau là vô hạn, do đó luôn tìm được hai thông điệp khác nhau có cùng giá trị băm .
Vấn đề ở đây là việc tìm ra những thông điệp có cùng giá trị băm có thuận tiện hay không. Khi độ dài của giá trị băm tăng lên thì thời cơ tìm được thông điệp có cùng giá trị băm với thông điệp cho trước càng nhỏ .
Tuy nhiên, việc tăng độ dài giá trị băm cũng làm tăng thời hạn giám sát và hơn nữa nếu chỉ tăng độ dài giá trị băm một cách cơ học thì cũng không tăng được độ bảo đảm an toàn lên bao nhiêu ( do việc này hoàn toàn có thể không tác động ảnh hưởng nhiều tới quy trình tiến độ để tìm ra những giá trị xung đột ). Sau đây là ví dụ một hàm băm đơn thuần :
Hàm băm (hash function) là gì?
Thông điệp nguồn vào được chia thành những khối n-bit để tạo ra giá trị băm n-bit : M = block1 | | block 2 | | … | | block m. Các bit trong từng khối sẽ được XOR với nhau để có n bit của giá trị băm :
Ci = bi1 ⊕ bi2 ⊕ … ⊕ bim
Trong đó :
Ci : bit thứ i của giá trị băm, 1 ≤ i ≤ n m : số những khối n-bit của đầu vào
bij : bit thứ i của khối thứ j

Rõ ràng là hàm băm này thoả các yêu cầu tối thiểu 1-4 cho một hàm băm: 

  1. Hàm băm này biến đổi thông điệp có độ dài tuỳ ý thành chuỗi bit có độ dài cố định là n;
  2. Khi thay đổi một bit bất kỳ của hàm băm thì sẽ ảnh hưởng ngay đến giá trị băm; 
  3. Quy trình tính H là dễ và rõ ràng; 
  4. Từ giá trị băm khó có thể khôi phục được chính xác thông điệp ban đầu.

Tuy nhiên, hàm băm đơn thuần này không thoả đặc thù 5 : không xung đột. Ta rất thuận tiện tìm được hai thông điệp khác nhau có cùng giá trị băm. Ví dụ, trong thông điệp khởi đầu ta chỉ cần hoán vị đi hai block khác nhau của nó là nhận được một thông điệp mới mà giá trị băm của nó vẫn không đổi khác .

Cấu trúc phổ biến của một hàm băm có dạng:

Hàm băm (hash function) là gì?
Ở đây :

IV – Initial Value là giá trị khởi tạo, f – function là hàm biến đổi, CVi – Chaining Variable là các biến trung gian, L là số khối đầu vào, Yi là các khối đầu vào, b là độ dài khối đầu vào, và n là độ dài của giá trị băm.

Trong quy trình băm cần phải giải quyết và xử lý thông điệp : khối ở đầu cuối sẽ được bổ trợ giá trị độ dài thông điệp và được bổ trợ những bit 0 cho thành bội của b. Để tránh xung đột, cần chọn giá trị b > n. Quá trình đổi khác như sau :
Thông điệp M = Y0 | | Y1 | | … | | YL-1 CV0 = IV = giá trị khởi tạo n-bit CVi = f ( CVi-1, Yi-1 ) với 1 ≤ i ≤ L H ( M ) = CVL

Hàm băm trong thực tế

Những năm trước đây, hàm băm MD5 – Message-Digest Algorithm ( Ronald Rivest, 1992 ), được sử dụng khá thoáng đãng. Hàm băm này cho độ dài 128 bit. Đến năm 1996, người ta đã phát hiện ra những lỗi nhỏ của thuật toán. Từ sau năm 2004, những lỗi về xung đột ngày càng lộ ra nhiều và sau đó, năm 2008, US-CERT đã khuyến nghị không nên sử dụng MD5 nữa .
Tại thời gian lúc bấy giờ, những hàm băm sử dụng phổ cập là SHA ( Secure Hash Algorithm ). SHA được NIST tăng trưởng và được coi là chuẩn từ năm 1993 ( FIPS 180 ). Sau đó năm 1995, SHA được cải tiến thành SHA-1 ( FIPS 180 – 1 ). SHA-1 cho giá trị băm có độ dài 160 bit. Vào năm 2002, NIST tăng trưởng thành SHA-2 ( FIPS 180 – 2 ) hoàn toàn có thể cho những độ dài giá trị băm là 256, 384 hay 512 bit, có ký hiệu tương ứng là SHA-256, SHA-384 và SHA-512. Sau đó NIST cũng đã bổ trợ thêm SHA-224 ( FIPS 180 – 3 ) .
Các hàm băm SHA-1 và SHA-2 hoàn toàn có thể coi như chưa bị bẻ khoá ( vì chưa có ai chỉ được quy trình tạo xung đột trong thời hạn ít hơn thời hạn vét cạn ) nhưng những hàm băm này có cấu trúc và những phép tính toán học giống như MD5 – là hàm băm đã bị bẻ khoá. Do đó, hoàn toàn có thể Dự kiến việc những hàm băm SHA-1 và SHA-2 bị bẻ khoá sẽ xảy ra trong thời hạn không xa .
NIST quyết định hành động mở màn quy trình tăng trưởng chuẩn cho những hàm băm mới. Năm 2007, NIST công bố cuộc thi tạo thế hệ hàm băm mới SHA-3 và dự kiến sẽ kết thúc vào cuối năm 2012. Các nhu yếu cho hàm băm mới như sau :

  • SHA-3 có thể thay thế SHA-2 một cách dễ dàng trong mọi ứng dụng hiện nay. Có nghĩa là SHA-3 phải hỗ trợ các tất cả các giá trị băm có độ dài 224, 256, 384 và 512 bit.
  • SHA-3 phải giữ nguyên được bản chất trực tuyến của SHA-2. Có nghĩa là SHA-3 phải được tính toán mỗi lần trên các khối nhỏ (512, 1024 bit), tránh việc phải nhập nguyên cả thông điệp dài vào bộ nhớ khi xử lý.

Ngoài những nhu yếu chính như trên, NIST còn đưa ra những tiêu chuẩn nhìn nhận cho hàm băm mới SHA-3 tương quan đến những nhu yếu cho những ứng dụng mà lúc bấy giờ SHA-2 đang tương hỗ như : những quá trình chữ ký số, mã xác nhận thông điệp, tạo khoá, tạo những số ngẫu nhiên, …

Cảnh báo khi sử dụng hàm băm

Một trong những hàm băm hoặc hàm nén truyền kiếp nhất là MD4 hàm băm. Nó thuộc về họ thông tin thông tin ( MD ). Khác những thành viên của mái ấm gia đình MD là MD5 và MD6, và có nhiều những biến thể của MD4 ví dụ điển hình như RIPEMD. Họ MD của thuật toán tạo ra thông tin thông tin 128 bit bằng cách sử dụng những khối 512 bit .
Họ đã thoáng đãng được sử dụng làm tổng kiểm tra để xác định tính toàn vẹn của tài liệu. Nhiều sever tệp hoặc ứng dụng kho tàng trữ được sử dụng để cung ứng tổng kiểm tra MD5 được thống kê giám sát trước, người dùng hoàn toàn có thể kiểm tra tệp họ đã tải xuống. Tuy nhiên, đã có một rất nhiều lỗ hổng được tìm thấy trong dòng MD và nó đã không còn được dùng nữa .
Một họ hàm băm khác như vậy là Thuật toán băm bảo đảm an toàn ( SHA ) mái ấm gia đình. Về cơ bản có bốn thuật toán trong họ này, ví dụ điển hình như SHA-0, SHA-1, SHA-2 và SHA – 3. Thuật toán tiên phong được đề xuất kiến nghị trong họ được đặt tên là SHA, nhưng những phiên bản mới hơn sẽ đi kèm với tính năng bảo mật thông tin những bản sửa lỗi và update, thế cho nên một từ viết tắt đã được vận dụng cho nó và nó được đặt thành SHA-0 .
Nó được phát hiện có một lỗ hổng bảo mật thông tin nghiêm trọng nhưng chưa được bật mý và đã ngừng sản xuất. Sau đó, SHA-1 được yêu cầu sửa chữa thay thế cho SHA-0. SHA-1 có một bước thống kê giám sát bổ trợ giúp xử lý yếu tố trong SHA-0. Cả SHA-0 và SHA-1 đều là hàm băm 160 bit tiêu thụ Kích thước khối 512 – bit. SHA-1 được phong cách thiết kế bởi Cơ quan An ninh Quốc gia ( NSA ) để sử dụng nó trong thuật toán chữ ký số ( DSA ) .
Nó đã được sử dụng khá rất nhiều trong nhiều công cụ bảo mật thông tin và giao thức Internet như SSL, SSH, TSL, vv Nó cũng được sử dụng trong những mạng lưới hệ thống tinh chỉnh và điều khiển phiên bản như Mercurial, Git, v.v. để kiểm tra tính đồng điệu và không thực sự để bảo mật thông tin. Sau đó, khoảng chừng năm 2005, Các điểm yếu về mật mã đã được tìm thấy trong đó và nó không được đồng ý sau khi năm 2010. Chúng ta sẽ khám phá cụ thể về SHA-2 và SHA-3 trong phần sau những phần

Share this:

Like this:

Like

Loading …