Tôi nghĩ rằng nó không phải là đơn giản ... Nếu bạn không kiểm soát trạm người dùng hoàn toàn, bạn không thể bảo vệ java với SM. Ví dụ: Primordial classloader tải các lớp không phải chịu kiểm tra SM và nhiều xác minh khác ... Vì vậy, người dùng có thể thêm một lib trong bootclasspath sẽ có tất cả các đặc quyền .... (Ví dụ: thư mục lớp hoặc thư mục lib trong cài đặt java , ông thậm chí có thể ghi đè java * gói nếu ông sở hữu JVM)
những gì bạn có thể làm là:.
- xáo trộn mã của bạn
- Sử dụng ẩn api để ứng dụng java của bạn (không phải là 'java -jar myapp.jar "/ path/to/file/to/encrypt" ')
Và bạn vẫn không an toàn 100% ... tất cả các mã có thể được thiết kế ngược và thuật toán và các phím được trích xuất, tất cả những gì bạn có thể làm là làm cho nó khó đủ để nó không hấp dẫn nữa.
EDIT
Tôi nghĩ rằng bạn có thể có một vấn đề thiết kế lớn. Cụ thể, nếu mã hóa tệp là hướng người dùng thì người dùng biết khóa mã hóa và tất cả bảo mật vẫn nằm trong khóa đó chứ không phải mã của bạn. Bất kỳ ai cũng có thể thử giải mã nó nhưng chỉ người nào đó có khóa hợp lệ mới có thể. Và nếu đó là trường hợp hơn mã của bạn không cần bất kỳ điều trị đặc biệt nào.
Có một khả năng khác mà bạn đã nhúng khóa bí mật trong ứng dụng java của mình ... và khóa này là tĩnh trong tất cả các bản cài đặt của bạn, sau đó khóa này không phải là bí mật nữa, và nó không mã hóa nhưng obfuscation.
Bạn có thể cụ thể hơn về những quyền nâng cao mà bạn đã gán cho JVM không? Bạn đang nói về việc thực hiện các setuid thực thi java, hoặc một cái gì đó như thế? – Kenster
Chúng tôi đang sử dụng một chương trình bên ngoài để mã hóa các phần nhạy cảm của hệ thống tệp. Chương trình Java của tôi cần quyền từ chương trình bên ngoài này để đọc các tệp được mã hóa. Vấn đề nằm ở thực tế là việc cấp quyền truy cập JVM vào các tệp này có nghĩa là bất kỳ chương trình java nào cũng có thể đọc các tệp được mã hóa. Vì vậy, tôi muốn nói với JVM, chỉ chạy các JARS này. Hoặc, chỉ chạy các JAR được ký với chứng chỉ này hoặc một cái gì đó tương tự. – Sloppy