2008-11-19 26 views
5

Tôi muốn có thể tạo tệp, phân phối tệp cho người dùng cuối nhưng ngăn họ sửa đổi tệp.Tạo các tệp không thể sửa đổi

Bây giờ, rõ ràng, tôi thực sự không thể ngăn bất kỳ ai sửa đổi tệp - vì vậy cách tiếp cận của tôi là phát hiện và từ chối tệp nếu nó được sửa đổi.

Mục đích của tôi là tạo hàm băm muối của nội dung tệp và gắn nó vào tệp. Khi đọc, hàm băm được xác minh trước khi đọc phần còn lại của tệp. Nhược điểm của việc này là tôi phải phân phối "muối" cố định trong tệp thực thi đọc tệp. Rõ ràng tôi có thể làm xáo trộn nó ở một mức độ nào đó, nhưng điều đó vẫn cảm thấy như một liên kết yếu.

Có cách tiếp cận nào tốt hơn để giải quyết loại vấn đề này không?

Trả lời

13

Bạn muốn nối thêm digital signature vào tài liệu của mình. Đây là khu vực được nghiên cứu rộng rãi. Tóm lại, bạn có thể với một số tiền chắc chắn chắc chắn rằng tệp không bị giả mạo, nhưng bạn không thể ngăn không cho người dùng giả mạo nó.

(So sánh với ngành công nghiệp âm nhạc là không hoàn toàn liên quan, như họ muốn ngăn chặn những người sao chép tập tin là tốt, mà là một vấn đề khó khăn hơn nhiều.)

1

Không nếu bạn muốn có giải pháp 100%. Chỉ cần nhìn vào ngành công nghiệp phim ảnh và âm nhạc. Họ đã cố gắng và thất bại trong nhiều năm nay :)

Tôi nghĩ rằng giải pháp của bạn là đủ tốt. Để làm cho nó khó khăn hơn để sửa đổi các tập tin bạn có thể mã hóa nó, nhưng sau đó họ không thể đọc nó, vì vậy nó sẽ chỉ làm việc nếu đó là một hạn chế ok.

+0

Anh ấy không cố gắng ngăn mọi người sao chép tệp chỉ từ thay đổi tệp. –

+0

Tôi biết, nhưng cũng vô ích. –

0

Tùy thuộc vào loại tệp bạn muốn bảo vệ, bạn có thể sử dụng một số công cụ quản lý tài liệu. Adobe PDF có các công cụ cho điều đó. Hơn nữa, nếu bạn lưu trữ ứng dụng của mình trên máy chủ ứng dụng hoặc máy chủ web, người dùng không thể truy cập và sửa đổi mã. Bằng cách này, bạn có thể có một cơ sở dữ liệu băm ở phía máy chủ, các tệp bạn muốn bảo vệ.

Tất nhiên việc bảo vệ chỉ là tốt trong bao nhiêu thời gian và công sức mà người dùng của bạn muốn (hoặc có thể) đầu tư vào việc phá vỡ sự bảo vệ.

4

Nếu ứng dụng của bạn chạy trên máy của người dùng, họ luôn có thể vá các nhị phân nên thậm chí không làm việc xác minh, làm cho tất cả các công việc khó khăn của bạn vô dụng :-)

Ngay cả một giải pháp máy chủ bên có thể được bỏ qua bởi đánh hơi giao thông. Vì vậy, sau đó bạn cần một người dùng và sử dụng SSL. Và sau đó họ chỉ vá phần nhị phân như trên, và ở đó. Vì vậy, sau đó bạn sử dụng các biện pháp khác nhau để làm xáo trộn nhị phân của bạn, và người dùng của bạn roi ra một bộ tách rời như IDA PRO.

Câu hỏi tôi sẽ tự hỏi, tôi có ở vị trí của bạn không, liệu có phải là "Nếu tôi tham gia cuộc đua vũ trang với người dùng của tôi, tôi sẽ thắng?". Nếu câu trả lời là không, thì tôi sẽ không phí thời gian của tôi.

0

Đây là những gì băm md5 và CRC của cho, và đó là lý do tại sao bạn kiểm tra các tập tin tải về từ internet với tập tin md5 của họ, để chắc chắn rằng nó không phải là highjacked en-route.

Anyways Tôi nghĩ Roddy sử dụng C++ để tôi có thể khuyên Boost :: CRC overhead rất nhanh và nhỏ của nó, bạn cũng không cần phải mã hóa các tập tin cách

+0

Bạn nói đúng Tôi sử dụng C++. Nhưng bất cứ ai cũng có thể tạo ra một băm MD5 mới ... Vấn đề của tôi là ngăn không cho ai đó chỉnh sửa tập tin, tạo lại một băm và do đó làm cho tập tin xuất hiện xác thực. Cách tiếp cận chữ ký số dường như là cách để đi. – Roddy

1

rằng Đối với mối quan tâm của bạn về phân phối các hash .. .Thực hành tốt là tạo băm và mã hóa nó bằng cặp khóa công khai riêng. Và bạn chỉ phải phân phối khóa công khai. Bằng cách đó, họ có thể đọc nó nhưng không thể sửa đổi hoặc tạo mới.

Tôi đề nghị sử dụng Chữ ký số như đề xuất của JesperE. Quá trình này là tiêu chuẩn, bạn sẽ tìm thấy nhiều ví dụ minh họa nó.

3

Sử dụng chữ ký số. Chữ ký là mã băm được mã hóa bằng mã hóa khóa riêng-công khai. Ứng dụng của bạn chỉ chứa khóa công cộng. Khóa này được sử dụng để giải mã băm và sau đó băm được xác minh. Để "sửa" băm sau khi sửa đổi tệp, người dùng phải tính toán băm mới, mã hóa nó bằng khóa riêng và thay thế mã băm cũ ở cuối tệp. Vấn đề: Anh ta không có khóa riêng. Khóa cá nhân không có trong ứng dụng của bạn. Khóa riêng tư không được gửi đi bất cứ nơi nào với ứng dụng của bạn. Ứng dụng của bạn chỉ có ứng dụng công khai. Nếu anh ta mã hóa nó với công chúng, nó sẽ không giải mã với công chúng, nên điều này là vô dụng. Khóa riêng tư nằm trên máy tính của bạn và không ai có quyền truy cập vào nó.

1

Ngay cả khi người dùng vá các tệp nhị phân của riêng họ để đảm bảo rằng bản sao đã chỉnh sửa của tệp của họ hoạt động đúng cách, bản sao đã chỉnh sửa của nó vẫn sẽ không hoạt động trên các máy chưa được vá. Mục đích của việc ngăn chặn việc sửa đổi này là gì?

Ngoài ra, người dùng ít có khả năng chỉnh sửa tệp nhị phân hơn tệp văn bản thuần túy. Hơn nữa, người dùng ít cảm thấy khó chịu nếu bạn đưa cho họ tệp nhị phân hơn nếu bạn đưa cho họ tệp văn bản có kiểm tra, giả sử họ có lý do chính đáng để chỉnh sửa và có thể, bằng cách xem tệp, nói rằng nó sẽ dễ dàng để làm như vậy nếu bạn đã không thêm một tổng kiểm tra hoặc bất cứ điều gì.

0

Ai là người dùng của bạn và họ sẽ cố gắng thay đổi tệp như thế nào. Nếu người dùng của bạn có thể tìm thấy muối bạn đang thêm vào băm của bạn thì họ có thể tìm thấy khóa công khai trong mã của bạn, thay đổi nó thành khóa công khai mà họ tự tạo và tính chữ ký trên tệp được sửa đổi bằng khóa cá nhân của họ. Tôi sẽ đi làm xáo trộn muối.

Phương án thay thế là một số loại hệ thống trực tuyến có thêm mức độ phức tạp lớn và thường có thể bị bẻ khóa.

Hãy xem HMAC cho phương pháp được mã hóa bằng cách sử dụng 'muối' khi bạn đang nghĩ (thay vào đó muối được gọi là chìa khóa).

Các vấn đề liên quan