2011-12-02 42 views
16

Tôi có một đối tượng thuộc tính java với thông tin xác thực cho một dịch vụ web. Tôi cần mã hóa dữ liệu đó, nhưng tôi không biết tôi cần lưu trữ khóa mã hóa ở đâu để bảo mật.Làm thế nào để lưu trữ an toàn các khóa mã hóa trong java?

Các phương pháp hay nhất về mã hóa dữ liệu này và truy xuất dữ liệu theo cách an toàn là gì?

Có lợi thế nào khi sử dụng kho khóa không?

ws_user=username 
ws_password=password 
ws_url=https://www.whatever.com/myservice 
+0

Dường như ứng dụng của tôi cần có quyền truy cập vào khóa, không có cách nào để "bảo mật" nó. Nếu tôi lưu trữ nó trong một kho khóa thì sẽ mơ hồ hơn, nhưng nó có vẻ không an toàn hơn. Tôi hy vọng tôi sai :) – ScArcher2

+0

Nghe có vẻ giống như một vấn đề khởi động. Tại một số điểm trong chuỗi, bạn phải có một chìa khóa để giải mã cái gì đó. Ngay cả khi bạn sử dụng kho khóa, bạn cần mật khẩu cho kho khóa đó. Không có cách nào bạn có thể thay đổi chương trình xác thực của bạn? Ngoài ra, bạn có thể nhận được một số câu trả lời khá am hiểu về http://security.stackexchange.com/ nếu bạn hỏi ở đó. – mcfinnigan

+0

@mcfinnigan đó là những gì tôi nghĩ. Tôi chỉ muốn xem có cách nào giải quyết vấn đề không. – ScArcher2

Trả lời

5

Vấn đề của bạn là vấn đề phổ biến. Trong linux, mật khẩu người dùng được lưu trữ trong một tệp văn bản thuần túy. Mặc dù chỉ có các băm mật khẩu được lưu trữ, nếu kẻ tấn công truy cập vào tệp đó, anh ta sẽ không mất nhiều thời gian để khám phá một số mật khẩu bằng cách sử dụng tấn công từ điển ngoại tuyến. Trong trường hợp này, hệ điều hành dựa vào quyền truy cập tệp để từ chối quyền truy cập vào người dùng trái phép. Trong trường hợp của bạn, nó không khác nhiều. Bạn phải cấu hình quyền truy cập tệp mật khẩu đúng cách và đảm bảo tính bảo mật vật lý của máy chủ.

+0

Tôi gặp phải tình huống mà chính sách bảo mật của khách hàng yêu cầu mã hóa tên người dùng/mật khẩu trong các tệp cấu hình. Nó có vẻ ngớ ngẩn, nhưng tôi nghĩ rằng tôi sẽ kiểm tra ở đây để xem nếu tôi đã mất một cái gì đó. – ScArcher2

4

Đây là vấn đề về trứng gà.
Sau đó, bạn sẽ cần phải tìm nơi lưu trữ mật khẩu cho kho khóa và vân vân .....

Tùy thuộc vào yêu cầu bảo mật và nhu cầu của bạn, bạn có thể mã hóa dữ liệu bằng mã hóa đối xứng và truy xuất mật khẩu thông qua một máy chủ từ xa (máy chủ của bạn) bằng cách sử dụng xác thực chứng chỉ phía máy khách. Hoặc bạn có thể mã hóa dữ liệu bằng cách sử dụng mã hóa đối xứng và mã hóa mật khẩu trong jar, không an toàn nhưng cần nỗ lực tìm nó và bạn có thể phân bổ trách nhiệm đối với quyền của hệ thống tệp đối với người có thể truy cập tệp của bạn.

0

Tôi đã thành công bằng cách sử dụng 's StringEncrytor để mã hóa thông tin nhạy cảm trong tệp thuộc tính và một số quy trình nội bộ để tạo muối và truy xuất mật khẩu. Vì bạn đang sử dụng dịch vụ web, bạn có thể sử dụng số Web PBE Configuration của Jasypt để nhập mật khẩu theo cách thủ công tại thời điểm triển khai hoặc thậm chí là cuộn giải pháp tương tự của riêng bạn.

+0

Hi Dan, bạn đã sử dụng Cấu hình PBE Web chưa? Tôi nghĩ rằng nó có thể giải quyết vấn đề về trứng gà (luôn cần một khóa chính để mã hóa văn bản). Nó phải được thiết lập như thế nào? Tôi hơi bối rối. Cảm ơn đã giúp đỡ! V. – Viktor

4

Điểm mấu chốt là ở đâu đó cần phải có mật khẩu "root-of-the-chain" ở dạng không được mã hóa. Tệp cục bộ được bảo vệ bằng OS, tệp từ xa được bảo vệ bởi hệ điều hành, được mã hóa cứng trong nguồn, v.v.

Cách duy nhất để yêu cầu con người nhập mật khẩu ban đầu khi bắt đầu ứng dụng, điều này rõ ràng là không thể cho các ứng dụng cần tự khởi động.

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