INTRODUCTION
Hash function overview
Thuật toán Cryptography là lĩnh vực khoa học chuyên sâu về mã hóa và giải mã dữ liệu nhằm bảo vệ thông tin Nó tập trung vào phương pháp chuyển đổi dữ liệu từ dạng rõ (clear text) sang dạng mờ (cipher text) và ngược lại để đảm bảo tính bảo mật của thông tin.
Thuật toán Hashing là một hàm băm mật mã, hoạt động bằng cách ánh xạ dữ liệu có kích thước tùy ý thành hàm băm có độ dài cố định Được thiết kế để mã hóa một chiều, thuật toán này đảm bảo rằng không thể thực hiện mã hóa ngược lại để truy xuất dữ liệu ban đầu Hashing đóng vai trò quan trọng trong bảo mật thông tin và các hệ thống công nghệ thông tin ngày nay.
Hàm băm lý tưởng cần đảm bảo tính nhanh chóng, khả năng trả về một phạm vi giá trị băm rộng, và tạo ra giá trị đầu ra duy nhất cho mỗi giá trị đầu vào Nó phải sinh ra các giá trị băm khác nhau kể cả khi đầu vào gần giống nhau và các giá trị băm không có mẫu rõ ràng Các yêu cầu của hàm hash bao gồm đối số là chuỗi dữ liệu với độ dài không đổi, giá trị băm mang chiều dài cố định, và quá trình tính toán hiệu quả, đảm bảo thời gian ký và kiểm tra nhanh hơn quá trình xử lý dữ liệu gốc Hàm hash còn phải khó vỡ mẻ, tức là khó tìm ra x thỏa mãn H(x) = y, để đảm bảo tính bảo mật, và không va chạm, nghĩa là không thể dễ dàng tìm hai dữ liệu khác nhau có cùng giá trị băm.
General structure of Hash function
Trong các thuật toán xử lý dữ liệu, khi truyền hoặc mã hóa một thông điệp M có độ dài bất kỳ, thường cần thêm các bit bổ sung để đảm bảo thông điệp có độ dài là bội số của một chiều dài cố định Việc chia nhỏ thông điệp M thành các khối có kích thước bằng nhau (M = (M1, M2, , Ms)) giúp tối ưu hóa quá trình tính toán và mã hóa dữ liệu Điều này đảm bảo tính đồng nhất trong quá trình xử lý dữ liệu và cải thiện hiệu quả của các thuật toán bảo mật và truyền thông.
Gọi Hi là trạng thái có kích thước n bit, trong đó n là chiều dài của giá trị hàm băm Hàm nén F thực hiện thao tác trộn khối dữ liệu với trạng thái hiện hành để tạo ra trạng thái mới Quá trình khởi tạo bắt đầu từ H0, bằng vectơ khởi tạo phù hợp Trong các vòng lặp i từ 1 đến s, trạng thái Hi được cập nhật bằng cách áp dụng hàm nén F vào trạng thái trước đó Hi-1 và khối dữ liệu Mi, theo công thức Hi = F(Hi-1, Mi).
Applications of data encryption
Để xác minh xem một tệp đã bị thay đổi hay chưa, bạn có thể tạo ra một checksum khi tải xuống và so sánh nó với checksum của tệp gốc, đảm bảo rằng hai checksum này trùng khớp Nếu hai checksum giống nhau, tức là tệp chưa bị thay đổi hoặc nhiễm mã độc; ngược lại, nếu chúng không khớp, khả năng cao là tệp đã bị chỉnh sửa hoặc bị thay thế bởi phần mềm độc hại Để làm điều này, bạn có thể dùng các công cụ tạo checksum như hàm băm mật mã SHA-1 và so sánh kết quả với checksum được cung cấp trên trang web của nhà phát triển Việc sử dụng checksum giúp đảm bảo tính toàn vẹn của tệp và bảo vệ hệ thống của bạn khỏi các mối đe dọa tiềm tàng do tệp độc hại gây ra.
Mã xác thực thông báo HMAC
3 o Dùng để tạo ra HMAC (Hashed Message Authentication Code) có dạng như sau: HMAC = hashFunction(message + key) o Giả s b n muử ạ ốn cho phép người dùng ch n "quên mọ ật khẩu" và g i mử ột liên kế ặt đt lại mật khẩu được gửi đến địa chỉ e-mail của họ o Bạn đã tạo một khóa bí mật mà chỉ b n mạ ới bi t Hãy gế ọi đây là K o Xây d ng m t chu i bao gự ộ ỗ ồm địa ch e-mail cỉ ủa người dùng, th i gian ờ hiện t i c a máy chạ ủ ủ, mã băm của mật khẩu người dùng hi n t i Hãy gệ ạ ọi tin nh n này là M Tính HMAC c a M, s d ng K làm khóa bí m t T o ắ ủ ử ụ ậ ạ một URL chứa đường dẫn đến trang đặt lại m t kh u c a bậ ẩ ủ ạn và dưới d ng ạ các tham số, địa ch e-mail cỉ ủa người dùng, th i gian hi n t i và HMAC ờ ệ ạ được tạo ở bước trước, ví dụ: https://www.example.com/forgotPassword?user=user%40example.com
&time 151205T131159Z&hmac902ed847ff28930b5f141abfa8b47
Khi người dùng nhận được email, họ sẽ theo dõi URL và truy cập vào trang quên mật khẩu Để đặt lại mật khẩu, người dùng cần trải qua quá trình xác minh để đảm bảo tính xác thực và an toàn Sau khi hoàn thành các bước xác minh đúng quy trình, liên kết đổi mật khẩu là hợp lệ và an toàn, giúp người dùng thay đổi mật khẩu một cách dễ dàng mà không lo bị xáo trộn hoặc lừa đảo.
Encryption method
SHA là viết tắt của Thuật toán Hash an toàn (Secure Hash Algorithm), với phiên bản đầu tiên là SHA-1 ra đời năm 1995 và sau đó là SHA-2 SHA-1 tạo ra hàm băm 160 bit (20 byte), thể hiện dưới dạng số nguyên dài 40 chữ số trong hệ thập lục phân Thuật toán này được thiết kế cho các ứng dụng mật mã, nhưng sớm bị phát hiện có lỗ hổng bảo mật Chính vì vậy, các phiên bản SHA khác đã được xây dựng và phát triển liên tục, hiện nay đã có nhiều loại giải thuật SHA đa dạng được sử dụng rộng rãi.
SHA-1 là một hàm băm mật mã do Cơ quan An ninh Quốc gia Hoa Kỳ thiết kế và được NIST công nhận vào năm 1995 như một phiên bản cải tiến của thuật toán SHA-0.
Trong các giao thức và ứng dụng bảo mật như TLS, SSL, SSH và IPsec, thuật toán được sử dụng để đảm bảo an toàn dữ liệu Khi truyền đạt, các message nhỏ hơn 2^64 bit đều được xử lý qua các thao tác mã hóa và tạo ra mã băm có độ dài 160-bit Mã băm cuối cùng được hình thành sau khi thao tác này cộng thêm phần mã băm trước đó, giúp tăng cường tính toàn vẹn và xác thực của dữ liệu truyền tải.
Thuật toán SHA bao gồm các phiên bản khác nhau như SHA-0, SHA-1 và SHA-2, mỗi loại có cấu trúc riêng biệt để đảm bảo an toàn tối đa SHA-1 có nhiều điểm tương đồng với SHA-0 nhưng đã được chỉnh sửa để khắc phục một lỗi trong đặc tả kỹ thuật của hàm băm ban đầu Các phiên bản này ngày càng được cải tiến nhằm tăng cường độ bảo mật và độ tin cậy trong việc xử lý dữ liệu.
1.5 Step-by-step of SHA-1 algorithm Đầu vào: Chuỗi có độ dài tối đa 2 64 bits Đầu ra: Chuỗi đã được mã hóa, có độ dài 160 bits
Tin nhắn hoặc tệp dữ liệu ban đầu được xem như một chuỗi bit, có thể biểu diễn dưới dạng số HEXA, nhằm chuẩn bị cho quá trình xử lý tiếp theo Mục đích chính của việc đệm tin nhắn là biến chuỗi thành một bội số của 512 bits để dễ dàng chia thành các khối dữ liệu nhỏ hơn trong các bước xử lý sau Quá trình này bao gồm việc thêm 1 bit “1” cùng nhiều số “0” vào sau chuỗi gốc để đảm bảo độ dài phù hợp, từ đó thúc đẩy quá trình mã hóa và tính toán dữ liệu được chính xác hơn Chi tiết các bước thực hiện sẽ được trình bày rõ trong phần tiếp theo của bài viết.
“0” bao nhiêu th phải tính Và cuối cùng là sẽ thêm 2 word(64 bits) vào cuối dãy, 2 word này biểu diễn cho độ dài của tin nhắn gốc [4]
Công việc cần làm là tìm chuỗi nhị phân tự nhiên sao cho độ dài của chuỗi đó nhỏ hơn hoặc bằng n*512 - 64 bits Để đảm bảo điều kiện này, số bit đệm cần thêm vào là 512*n - chiều dài chuỗi gốc - 64 Chúng ta sẽ đệm thêm một bit “1” sau chuỗi gốc, tiếp đó các bit còn lại là “0” để hoàn thiện quá trình đệm bit an toàn Ví dụ minh họa rõ ràng giúp hiểu rõ cách tính toán và thực hiện đệm bit trong quá trình xử lý dữ liệu.
▪ Chuỗi ban đầu có 1000 bits
▪ Áp dụng công thức trên: 1000 n = 3.
Step- -step of SHA-1 algorithm 4 by 1 Step 1: Message Padding
▪ Vậy s bit cố ần đệm là: 512 * 3 - 1000 - 64 = 472 bits
Chúng ta sẽ chuyển đổi độ dài của chuỗi dữ liệu gốc (ký hiệu là L) thành dạng số thập lục phân 64 bit để đảm bảo tính chính xác và tối ưu cho quy trình xử lý dữ liệu Sau đó, giá trị này sẽ được thêm vào phía sau chuỗi đã thu được từ bước đầu tiên, giúp mở rộng và chuẩn hóa dữ liệu để phục vụ các mục đích mã hóa hoặc phân tích Quá trình chuyển đổi này là bước quan trọng trong việc đảm bảo dữ liệu được xử lý một cách chính xác và tối ưu theo chuẩn quốc tế và các quy tắc SEO hiện hành.
Ví dụ: o Độ dài chuỗi gốc là 1000 bits o Đổi: 1000dec = 0x0000000000003E8 hex o Thêm vào chuỗi có được sau bước 1 o Chuỗi cuối cùng thu được sẽ là input cho vi c hash ệ
Hnh 1-2 Quá trình append length [5]
1.5.3 Step 3: Divide input into 512 bits block
Tại bước này chúng ta sẽ chia chuỗi input có được tại bước 2 thành từng khối nhỏ hơn Mỗi khối sẽ có độ lớn là 512 bits [4]
Chúng ta có 5 chuỗi ban đầu được khởi tạo như sau: o H0: 0x67452301
Trong bước 3, mỗi block dữ liệu 512 bits được chia thành 16 khối nhỏ, mỗi khối có độ dài 32 bits, ký hiệu lần lượt là w(0), w(1), , w(15) Các khối này tương ứng với 16 phần của dữ liệu đã chia từ 512 bits ban đầu Đồng thời, các giá trị w(16) đến w(79) sẽ được tạo ra qua quá trình mở rộng dữ liệu này nhằm phục vụ cho các bước xử lý tiếp theo trong thuật toán Việc chia nhỏ và mở rộng dữ liệu này đóng vai trò quan trọng trong quá trình mã hóa, đảm bảo dữ liệu được xử lý chính xác và an toàn.
Hnh 1-4 Xử lý bên trong một block [5] o Với w(16) - w(79): Ta thực hiện vi c tính toán v i công thệ ớ ức dưới đây: w(t) = (w(t-3) XOR w(t-8) XOR w(t-14) XOR w(t-16))