2010-09-03 28 views
8

Có bất kỳ nhược điểm bảo mật nào khi mã hóa một khóa đã cho với chính nó bằng AES ở chế độ CBC và sử dụng IV (tất nhiên)?Có an toàn để mã hóa chuỗi bằng cách sử dụng cùng một chuỗi là khóa không?

Các nguyên tắc được tôn trọng: khóa là bí mật và IV là công khai (vì điều này không ảnh hưởng đến bảo mật mã hóa).

Tuy nhiên, kẻ tấn công tiềm năng sẽ biết (vì anh ấy có thể truy cập mã nguồn), rằng chuỗi được mã hóa bằng chính nó làm khóa.

Bản án của tôi không thấy bất kỳ vấn đề nào, nhưng tôi đang cố gắng đảm bảo.

Cảm ơn bạn.

EDIT - chi tiết của công việc, tôi hy vọng tôi sẽ có thể vượt qua chúng trên rõ ràng, đó là chưa rất rõ ràng cho bản thân mình:

  1. hệ thống của tôi sử dụng mã hóa để lưu trữ các giá trị nhất định trong bảng MySQL . Mã hóa được thực hiện trên mã PHP (không phải là AES tích hợp MySQL). Rõ ràng, tôi cần một khóa bí mật, mà cần phải được thiết lập bởi người quản trị hệ thống, chỉ cần ONCE, tại thiết lập hệ thống. Điều này là rất quan trọng, bởi vì thay đổi khóa sau khi bất kỳ dữ liệu mã hóa nào đã được lưu như vậy, sẽ làm cho dữ liệu đó không thể giải mã được.

  2. Quản trị viên có thể thiết lập khóa bí mật bằng cách chỉ cần chỉnh sửa tệp tập lệnh PHP qua FTP (hoặc bất kỳ thứ gì). Nhưng đó không phải là điều tôi muốn.

  3. Điều tôi muốn có tập lệnh cài đặt, trong đó quản trị viên chọn khóa bí mật được mã hóa với chính nó và được lưu trữ vào bảng. Cấp, một điểm hợp lệ đã được thực hiện dưới đây, là bạn cần chìa khóa để giải mã khóa ... Tôi đã không nhận được như xa trong lý luận của tôi, tôi đã ở giai đoạn điều tra nếu mã hóa một khóa với chính nó như chìa khóa vẫn là một điều an toàn.

Nếu bạn có bất kỳ ý tưởng nào ở trên, nó sẽ được đánh giá cao.

Cảm ơn.

+2

Lúc đầu, tôi đồng ý với @Piskor, "Điểm là gì?" Nhưng tôi thấy rằng nếu bạn mã hóa một mật khẩu với chính nó, sau đó lưu trữ cipertext kết quả, bạn có thể xác minh mật khẩu chính xác bằng cách cố gắng giải mã cipertext bằng mật khẩu đã cung cấp. Điều này có tương tự như trường hợp sử dụng của bạn không? – Greg

+0

Chỉ là tôi hoặc là tiêu đề của bạn và câu hỏi khác? : S –

+6

@Greg Nếu anh ta chỉ là thử nghiệm để xem nếu mật khẩu là chính xác, ông sẽ tốt hơn off lưu trữ một băm mật mã của mật khẩu. Bạn băm đầu vào của người dùng, và nếu băm phù hợp, bạn biết mật khẩu đầu vào là chính xác. – JMarsch

Trả lời

11

Câu hỏi là, điểm là gì? Nếu bạn muốn giải mã chuỗi, bạn phải biết chuỗi đã có; nếu bạn không biết, bạn không thể giải mã được. Có thể nhưng IMHO vô nghĩa.

+2

Khả năng duy nhất nó mang lại cho bạn là khả năng xác nhận rằng một chuỗi nhất định thực ra là mật khẩu. (Bạn mã hóa nó với chính nó và xem các chuỗi có khớp hay bạn giải mã chuỗi được lưu trữ và xem các chuỗi có khớp không.) Có những cách an toàn để biết khả năng này - tại sao rủi ro tạo ra một chuỗi có điểm yếu tinh tế. –

1

đầu tiên: Không thực sự chuyên gia an ninh

Vì vậy, để có được điều này hiện nay, bạn muốn lưu trữ một giá trị bí mật, và chỉ có thể nhận được giá trị bí mật, nhưng nói cho nó giá trị bí mật? :)

Nhưng tôi có thể nhìn thấy nơi bạn muốn đi với điều này, cho một hệ thống mật khẩu (có lẽ), sau đó bạn chỉ có thể xác nhận chúng với nhau.

Một số nhược điểm có thể là nếu hacker truy cập vào tất cả mật khẩu người dùng và hacker có tài khoản có mật khẩu, thì anh ta có thể dễ dàng phát hiện ra mã hóa logic của mình. Sau đó anh ta có thể thực hiện một cuộc tấn công từ điển và nhận được rất nhiều mật khẩu. Đối với điều đó tôi sẽ xem xét ít nhất bằng cách sử dụng một băm duy nhất cho mỗi bản ghi. Sau đó, anh ta vẫn có thể tấn công từ điển, nhưng nó sẽ mất nhiều thời gian hơn. Sau đó, cũng thêm một băm tùy chỉnh được lưu trữ sâu trong ứng dụng của bạn, vì vậy anh ta cũng cần phải đoán rằng, hoặc có quyền truy cập vào mã ứng dụng.

Vì vậy, tôi đã ít nhất muốn giới thiệu một chìa khóa đó là một hỗn hợp của mật khẩu + record_hash + shared_hash

UPDATE: Tôi có thể thấy rằng các hacker sẽ có quyền truy cập vào mã, sau đó cố gắng để lưu trữ các shared_hash một nơi anh ta không thể truy cập.

+0

Hacker sẽ có quyền truy cập vào logic mã hóa, dù sao anh ta cũng có thể thấy mã nguồn (mở). Vì vậy, sức mạnh nằm trong khóa mã hóa, như thường lệ. – webmaster

+0

Tôi có thể thấy trong bản cập nhật của bạn rằng đó thực sự là một kịch bản một phím trong trường hợp của bạn, sau đó tôi không thể thấy một vấn đề với giải pháp của bạn. :) –

2

Như bạn đã đề cập trong nhận xét của bạn trong câu trả lời của Jesper, "sức mạnh nằm trong khóa mã hóa" và trong thuật toán mã hóa. Nếu cả hai đều mạnh, nó sẽ an toàn. Theo tôi biết, liên kết yếu kỹ thuật của mã hóa và khóa mạnh là trong quá trình triển khai, nếu có.

Bạn muốn biết bạn sẽ sử dụng ứng dụng nào để sử dụng phương pháp này, nếu bạn có thể nói.

Sửa này là không chính xác trả lời câu hỏi trong tiêu đề của bài viết, nhưng tôi cho rằng nó có liên quan đến bài viết cập nhật của bạn:

Giả sử một AES mạnh mẽ và thực hiện một cách chính xác với CBC và IV, và rằng những kẻ tấn công có thể truy cập vào bảng nơi bạn lưu trữ khóa chính được mã hóa.

Nên có ít sự khác biệt về bảo mật cho dù bạn đang lưu trữ khóa chính được mã hóa bằng chính nó hay lưu trữ hàm băm mật mã của khóa chính. Giả sử cả băm mật mã và AES trong chế độ CBC đều an toàn như nhau, sức mạnh nằm ở độ mạnh của khóa chính. Nếu khóa chính yếu, ngay cả khi kẻ tấn công không thể lấy khóa chính từ mã băm mật mã của khóa chính, người đó sẽ có thể nhận khóa chính và do đó "các giá trị nhất định" thông qua "một số giá trị "bảng. Nếu sử dụng khóa chính để mã hóa chính nó, anh ta có thể lấy khóa chính thông qua bảng "giá trị nhất định" hoặc bảng khóa chính.

Cho dù bạn chọn sử dụng cùng một mật mã để mã hóa và lưu trữ khóa chính hoặc băm mật mã và lưu trữ khóa chính, hãy đảm bảo khóa chính mạnh. Có vẻ như bạn đang viết một số hệ thống nguồn mở. Đề xuất của tôi là hệ thống của bạn sẽ kiểm tra bất kỳ khóa chủ tiềm năng nào với một biểu thức chính quy (hoặc một hàm) và từ chối khóa đó nếu nó được coi là không đủ mạnh.

Tôi hy vọng tôi cũng đã hiểu chính xác bài đăng của bạn.

Tuyên bố từ chối trách nhiệm: Tôi không phải là chuyên gia bảo mật cũng như trong ngành bảo mật.

+0

Vui lòng xem chỉnh sửa câu hỏi ban đầu của tôi. – webmaster

+0

@webmaster: Tôi đã cập nhật bài đăng của mình. – blizpasta

+0

Đọc nó, cảm ơn bạn! – webmaster

5

Mã hóa khóa với chính nó về cơ bản là một hàm băm đặc biệt. Vì vậy, bạn có thể sử dụng một thực tế để thay thế.

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