Tính toàn vẹn của thông tin là bảo vệ sự chính xác, hoàn chỉnh của thông
tin và thông tin chỉ được thay đổi bởi những người được cấp quyền. Xác thực tính toàn vẹn liên quan đến những khía cạnh sau:
- Bảo vệ tính toàn vẹn của mẩu tin tức là bảo vệ mẩu tin không bị thay đổi hoặc có cả biện pháp phát hiện nếu mẩu tin bị thay đổi trên đường truyền.
- Kiểm chứng danh tính và nguồn gốc: là mẩu tin này được gửi bởi đúng người gửi mà không bị giả mạo bởi một người khác
- Không từ chối bản gốc: người gửi không thể từ chối hành động gửi, thời gian gửi và nội dung của mẩu tin.
Để giải quyết vấn đề trên, có 3 hàm lựa chọn sau đây được sử dụng: + Mã hóa mẩu tin bằng mã đối xứng hoặc mã công khai
+ Mã xác thực mẩu tin (MAC): dùng khóa và một hàm nén mẩu tin cần gửi để nhận được một đặc trưng đính kèm với mẩu tin và người gửi đó.
+ Hàm hash (hàm băm): nén mẩu tin tạo thành “dấu vân tay” cho mẩu tin.
2.2.2.1. Hàm Hash
Nén mẩu tin bất kỳ về kích thước cố định. Giả thiết hàm hash là công khai và không dùng khóa. Hash chỉ phụ thuộc mẩu tin.
Hash được sử dụng để phát hiện thay đổi của mẩu tin. Hash có thể sử dụng nhiều cách khác nhau với mẩu tin, Hash thường được kết hợp dùng để tạo chữ ký trên mẩu tin.
Hàm Hash tạo nên dấu vân tay (tức là thông tin đặc trưng) của một tệp, mẩu tin hay dữ liệu h = H(M).
Nén mẩu tin có kích thước tùy ý về dấu vân tay có kích thước cố định. Hàm Hash được giả thiết là công khai, mọi người đều biết cách sử dụng.
Hàm băm H(x) là một hàm tính checksum mạnh thỏa mãn các yêu cầu sau: 1) H có thể áp dụng cho các thông điệp x với các độ dài khác nhau 2) Kích thước của output h = H(x) là cố định và nhỏ
3) Tính một chiều: với một h cho trước, không thể tìm lại được x sao cho h = H(x) (về mặt thời gian tính toán)
4) Tính chống trùng yếu: cho trước một x, không thể tìm y≠ x sao cho H(x) = H(y)
5) Tính chống trùng mạnh: không thể tìm ra cặp x, y bất kỳ (x≠y) sao cho H(x) = H(y), hay nói cách khác nếu H(x) = H(y) thì có thể chắc chắn rằng x = y.
2.2.2.2. Thuật toán SHA-1
Trong mật mã học, SHA-1 là một hàm băm mật mã được thiết kế bởi Cơ Quan An Ninh Quốc Gia và được công bố bởi NIST hay còn gọi là Cục Xử Lý Thông Tin Tiêu Chuẩn Liên Bang của Mỹ.
SHA là viết tắt của Secure Hash Algorithm. Ba thuật toán SHA có cấu trúc khác nhau và được phân biệt là: SHA-0, SHA-1 và SHA-2. SHA-1 gần tương tự như SHA0, nhưng sửa chữa một lỗi trong các đặc tả kỹ thuật gốc của hàm băm SHA dẫn đến những điểm yếu quan trọng. Các thuật toán SHA-0 đã không được sử dụng trong nhiều ứng dụng. SHA-2 mặt khác có những điểm khác biệt quan trọng so với hàm băm SHA-1.
Bảng 2.1 Phân loại thuật toán SHA
Bảng 2.2 Kích thước của các thuật toán SHA
Thuật toán
Kích thước (đơn vị: bit)
Độ an toàn (đơn vị: bit) Thông điệp Khối Từ Thông điệp
rút gọn SHA-1 < 264 512 32 160 80 SHA-224 < 264 512 32 224 112 SHA-256 < 264 512 32 256 128 SHA-384 < 2128 1024 64 384 192 SHA-512 < 2128 1024 64 512 256 Giải thuật:
Đầu vào: chuỗi có độ dài tối đa 264 bits. Đầu ra: giá trị băm có độ dài 160 bits.
Bước 1: nhồi thêm dữ liệu
Thông điệp được nhồi thêm các bit sao cho độ dài là l ≡ 448 mod 512 hay l = n * 512 + 448 (n, l nguyên).
Số bit nhồi thêm nằm trong khoảng 1 đến 512.
Phần dữ liệu nhồi thêm bao gồm một bit 1 và theo sau là các bit 0.
Bước 2: thêm vào độ dài
Độ dài của khối dữ liệu ban đầu được biểu diễn dưới dạng nhị phân 64 bit và được thêm vào cuối chuỗi nhị phân kết quả của bước 1.
Độ dài được biểu diễn dưới dạng nhị phân 64 bit không dấu.
Kết quả có được từ 2 bước đầu là một khối dữ liệu có độ dài là bội số của 512. Khối dữ liệu được biểu diễn:
Bằng một dãy L khối 512 bit Y0, Y1, …, YL-1
Bằng một dãy N từ (word) 32 bit M0, M1, MN-1. Vậy N = L x 16 (32x16 =512)
Bước 3: Khởi tạo bộ đệm MD (MD buffer)
Một bộ đệm 160 bit được dùng lưu trữ các giá trị băm trung gian và kết quả. Bộ đệm được biểu diễn bằng 5 thanh ghi 32 bit với các giá trị khởi tạo ở dạng bigiendian (byte có trọng số lớn nhất trong từ nằm ở địa chỉ thấp nhất) như sau:
A = 01 23 45 67 D = 76 54 32 10
B = 89 AB CD EF E = C3 D2 E1 F0
C = FE DC BA 98
Các giá trị này tương đương với các từ 32 bit sau:
A = 01 23 45 67 D = 76 54 32 10
B = 89 AB CD EF E = C3 D2 E1 F0
C = FE DC BA 98
Bước 4: Xử lý các khối dữ liệu 512 bit
Trọng tâm của giải thuật bào gồm 4 vòng lặp thực hiện tất cả 80 bước. 4 vòng lặp có cấu trúc như nhau, chỉ khác nhau ở các hàm logic f1, f2, f3, f4.
Mỗi vòng có đầu vào gồm khối 512 bit hiện thời và một bộ đệm 160 bit ABCDE. Các thao tác sẽ cập nhật giá trị bộ đệm.
Mỗi bước sử dụng một hằng số Kt (0≤ t ≤79)
Kt = 5A827999 (0≤ t ≤19) Kt = 8F1BBCDC (40≤ t ≤59) Kt = 6ED9EBA1 (20≤ t ≤39) Kt = CA62C1D6 (60≤ t ≤79) Đầu ra của 4 vòng (bước 80) được cộng với đầu ra của bước CVq để tạo ra CVq+1
Hình 2.5 SHA-1 xử lý các khối dữ liệu 512 bit Bước 5: Xuất kết quả
Sau khi thao tác trên toàn bộ L blocks. Kết quả của khối thứ L là bảng băm 160 bit.