Vấn đề là làm cách nào để tôi lưu trữ tệp này một cách an toàn để khách hàng không thể giả mạo nó. Nếu khách hàng chỉ có thể mở tệp văn bản và thay đổi dấu thời gian, thì chương trình có thể bị lừa khi nghĩ rằng nó không bao giờ phải đồng bộ hóa.
Tôi đã xem xét những điều sau đây:
- Một số cách ký vào tệp để đảm bảo tính xác thực.
Đó sẽ là gần nhất; cách rõ ràng sẽ là nếu máy chủ có khóa chữ ký riêng và chương trình có khóa chung tương ứng. Sau đó, khi bạn được kết nối, máy chủ có thể ký dấu thời gian hiện tại và gửi dấu thời gian và chữ ký đó cho khách hàng.
Sau đó, khi máy khách không thể kết nối, thì anh ấy sẽ kiểm tra dấu thời gian/chữ ký gần đây hơn đã được tải xuống và xác minh chữ ký đó (sử dụng khóa chung được cài đặt với máy khách); nếu điều đó hợp lệ, thì bạn kiểm tra xem dấu thời gian có cách đây không quá năm ngày hay không.
Ngoài ra, bạn có thể bao gồm hàm băm của một số tệp có liên quan (những tệp mà máy khách không nên sửa đổi) cùng với những gì máy chủ ký; tại thời điểm xác minh, khách hàng sẽ băm các bản sao của tệp và đưa tệp đó vào quá trình xác minh.
Kẻ tấn công không thể sửa đổi dấu thời gian, bởi vì anh ta không thể sửa đổi chữ ký (và xác minh nó); anh ta có thể thay thế dấu thời gian/chữ ký bằng dấu thời gian trước đó, tuy nhiên điều đó sẽ không đạt được gì.
Các cách có thể để tấn công này:
Sửa đổi 'thời gian hiện tại'; hầu hết các hệ điều hành đều cho phép bạn đặt thời gian theo ý muốn của người dùng. Điều này giả định một dấu thời gian đã được xác thực (nếu không đặc biệt chính xác).
Sửa đổi chương trình (để sửa đổi khóa chung hoặc nhiều khả năng hơn là thay thế logic xác thực bằng thứ gì đó luôn nói 'nó hợp lệ). Đó luôn là một vấn đề khi bạn đang chạy trong một cơ sở tính toán không đáng tin cậy.