Xác thực và toàn vẹn (Authentication and Integrity)
Đối với chứng thực ngƣời gửi và kiểm tra tính toàn vẹn của thông báo USM hỗ trợ hai giao thức xác thực khác nhau, cả hai đều sử dụng rộng rãi dựa trên một HMAC. HMAC-MD5-96 là một giao thức, sử dụng MD5 (Message Digest algorithm) cho việc băm. Các HMAC-SHA-96, sử dụng SHA-1 (SHA-1 là một thuật toán băm đang đƣợc chính phủ Mỹ sử dụng) cho việc băm. Đầu vào cho cả hai chức năng băm là những thông báo đƣợc gửi đi và khóa xác thực bí mật của ngƣời dùng (authKey). Cả hai hàm băm cùng đƣa ra một đầu ra, trong cả hai trƣờng hợp đều cắt ngắn 12 octet của một mã xác thực thông báo Message Authentication Code (MAC). Tính toán và cắt ngắn MAC sau đó nối vào thông báo đƣợc gửi đi.
Thông báo nhận đƣợc và authKey bí mật đƣợc sử dụng nhƣ là đầu vào cho HMAC để tính MAC khi đã nhận đƣợc thông báo. Bây giờ, tính MAC khi đã nhận đƣợc thông báo, nếu mà MAC đã đƣợc tính đó không giống MAC của thông báo gửi thì thông báo đó đƣợc bỏ qua. Nếu MAC đã đƣợc tính giống MAC của thông báo gửi, có thể chắc chắn về hai điều:
- Tính toàn vẹn: Thông báo không thể thay đổi đƣợc trong quá trình truyền. Một kẻ tấn công sẽ phải biết authKey bí mật để thay đổi các thông báo thì mới không bị phát hiện.
- Tính xác thực: Nếu với khóa bí mật chỉ đƣợc biết đến bởi bên gửi và bên nhận, ngƣời ta có thể chắc chắn rằng thông báo đƣợc gửi đi bởi các bên đã đảm bảo tính xác thực.
Hình 2.18 – Định dạng gói tin sử dụng USM
Xác minh kịp thời của thông báo (Timeliness Verification of Messages)
Chức năng bảo mật và chứng thực đƣợc mô tả không ngăn chặn đƣợc tấn công làm trễ thông báo hoặc phát lại thông báo, các cuộc tấn công đó sẽ không bị phát hiện trừ khi thực sự không có gì khác thƣờng trong các thông báo phát lại. Để SNMPv3 thực hiện các an ninh đối với các loại hình thao tác tấn công vào lƣu lƣợng, USM có một cơ chế kịp thời. Trên thực tế, SNMPv3 yêu cầu các thông báo nhận đƣợc nằm trong một cửa sổ thời gian một cách hợp lý.
Cơ chế kịp thời dựa trên hai công cụ đối lập nhau: snmpEngineBoots và snmpEngineTime. Khi một SNMP Engine (phần mềm SNMPv3 trên node quản trị) đƣợc cài đặt, cả hai giá trị đƣợc thiết lập về 0. Sau khi công cụ SNMP đã đƣợc bắt đầu, snmpEngineTime đƣợc tăng lên một lần mỗi giây. Nếu snmpEngineTime đạt
giá trị tối đa (231
- 1) giây, snmpEngineBoots đƣợc tăng lên. Sau đó snmpEngineTime đƣợc thiết lập để về 0 và chu kỳ lại tiếp tục. Sử dụng một cơ chế đồng bộ hóa phức tạp, một công cụ SNMP quản trị node duy trì một tính toán các giá trị thời gian cho mỗi node quản trị mà nó giao tiếp. Những giá trị tính toán này đƣợc đặt trong mỗi thông báo gửi đi. Các SNMP engine quản trị node tiếp nhận sau đó quyết định việc có hoặc không chấp nhận thông báo đến trong cửa sổ thời gian của 150 giây. Nếu thông báo không phù hợp với cửa sổ thời gian, nó chỉ đơn giản là sẽ bỏ qua.
Bảo mật trong suốt quá trình mã hóa (Privacy Through Encryption)
Đối với bảo mật, USM sử dụng tiêu chuẩn mã hóa dữ liệu để mã hóa thông báo.Chính xác hơn các phƣơng thức CBC - DES đƣợc sử dụng.Các mã hóa của thông báo là tùy chọn.Cũng giống nhƣ khóa xác thực, khóa mã khóa đã đƣợc thiết lập tại chính các node quản trị.
Sử dụng khóa bí mật (đối xứng) để mã hóa hệ thống SNMPv3 thì sẽ tăng thêm khó khăn. Việc quản trị khóa tốt sẽ là một giải pháp ra an ninh. Nếu tất cả các node quản trị có khóa bí mật khác nhau đƣợc quản trị bí mật thì khi trạm quản trị có đƣợc số khóa bí mật đó thì có thể quản trị các node. Các thiết lập mới và việc quản trị các khóa nhanh chóng sẽ trở thành khó khăn. Nếu các trạm quản trị là bị hack và các khóa bí mật bị xâm nhập, tất cả các node phải đƣợc cấu hình lại bằng tay. Mặt khác nếu muốn sử dụng một và cùng một khóa bí mật ở tất cả các node đƣợc quản trị trong mạng thì vấn đề này ảnh hƣởng đến sự bí mật của khóa bí mật, điều này ảnh hƣởng tới an ninh của toàn bộ hệ thống quản trị, đó là tất cả các node có thể đƣợc quản trị vì dùng chung một khóa bí mật. Tuy nhiên trong USM vấn đề này đƣợc giải quyết bằng cách sử dụng một kỹ thuật gọi là định vị khóa vào mỗi node. Việc tạo khóa, cập nhật và quản trị đƣợc mô tả trong RFC-2274. Ý tƣởng là để tạo ra một khóa duy nhất (gọi là khóa chính) cho mỗi ngƣời dùng SNMP bằng cách sử dụng mật khẩu của ngƣời sử dụng và snmpEngineID, ID là của SNMP Engine.