Tôi có một phần dữ liệu. Hiện tại, nó là một tệp XML, nhưng kiến trúc có thể thay đổi. Vì vậy, hãy giả sử cho thời điểm đó là một lớp C#.Tạo chữ ký giả mạo của một số dữ liệu?
Khi lưu trữ dữ liệu trên đĩa hoặc trong cơ sở dữ liệu, tôi cần thêm một số chữ ký hoặc vân tay hoặc kiểm tra hoặc bất kỳ thứ gì để đảm bảo không ai có thể sửa đổi dữ liệu. Thông báo trước: ngay cả quản trị viên hoặc nhà phát triển có quyền truy cập vào tất cả các mã nguồn sẽ không thể sửa đổi nó. Tôi giả định rằng vì ai đó có quyền truy cập mã đầy đủ có thể tạo chữ ký mới dễ dàng (việc ký cần được thực hiện theo chương trình, vì vậy không có mục nhập mật khẩu thủ công), chữ ký bằng cách nào đó cần chứa một số dữ liệu bổ sung. Lý tưởng nhất là tôi có thể trích xuất dữ liệu này trở lại từ chữ ký, ví dụ như ngày ký và một số chuỗi.
Cách tiếp cận chung của tôi là sử dụng mã hóa đối xứng. Tôi tạo ra một Hash, tức là SHA-512 từ tất cả các lĩnh vực và sau đó mã hóa băm đó và dữ liệu bổ sung của tôi với để có được chữ ký của tôi, bằng cách sử dụng băm như mật khẩu. Để giải mã, hàm của tôi sẽ tạo băm từ dữ liệu thực tế trong tệp và cố gắng giải mã chữ ký. Điều đó sẽ không được giả mạo bằng chứng mặc dù nó rất dễ dàng để tạo ra một chữ ký, nơi ngày ký và thông tin bổ sung vẫn còn nguyên vẹn.
Vì tôi không phải là chuyên gia về lĩnh vực này, tôi tin rằng tôi đang cố gắng phát minh lại bánh xe và đó không phải là một bánh xe tốt. Tôi chỉ tự hỏi nếu có một số cách tiếp cận tiêu chuẩn? Tôi tin rằng một phần yêu cầu của tôi là không thể (sau khi tất cả, nếu ai đó kiểm soát toàn bộ môi trường, người đó cũng kiểm soát thời gian hệ thống), nhưng tôi vẫn tự hỏi làm thế nào điều này thường được giải quyết?
Chỉ muốn xác nhận rằng quản trị viên và nhà phát triển có toàn quyền truy cập vào mã nguồn, nhưng nếu bạn sử dụng khóa không đối xứng, họ cũng sẽ có quyền truy cập vào phần riêng tư của khóa không? – Ants