2009-07-15 74 views
11

Gần đây tôi đã tìm thấy thư viện JavaScript RSA này: http://www.ohdave.com/rsa/. Tuy nhiên, nó yêu cầu khóa được tạo trước. Dưới đây là câu hỏi của tôi/vấn đề:Tạo cặp khóa RSA trong JavaScript

  1. Tôi muốn tạo ra một cặp khóa RSA trong JavaScript

  2. (vì vậy mà tôi không cần phải thay đổi mã mỗi khi tôi muốn có một cặp khóa mới.)
  3. Trong khi tôi hiểu cách sử dụng để gửi dữ liệu an toàn, nếu không nhầm, thư viện này không thể sử dụng để máy khách nhận dữ liệu bảo mật từ máy chủ (vì số mũ công khai và riêng, và mô đun được truyền đi) plain-text từ máy chủ). Tôi có nhầm không?

Tôi rất muốn thảo luận về điều này. Tôi không có chuyên gia bảo mật, nhưng tôi có một nắm bắt khá vững chắc về mã hóa bất đối xứng.

+0

Bạn không thể chỉ gửi dữ liệu bằng SSL? Nó an toàn và điều quan trọng hơn là nó minh bạch cho bạn, do đó bạn không cần phải thực hiện bất kỳ loại mã hóa/giải mã nào ở bất kỳ phía nào. – RaYell

+2

Có lẽ tôi có thể thực hiện SSL. Nhưng nếu tôi đang sử dụng một máy chủ không hỗ trợ nó thì sao? Cá nhân, tôi không biết cách cấu hình SSL - tất cả những thứ tôi tìm thấy trực tuyến không thẳng thắn. Bất kể, SSL không thực sự liên quan đến câu hỏi của tôi. –

Trả lời

1

Tạo cặp khóa yêu cầu trình tạo số ngẫu nhiên mạnh (Tôi không nghĩ bạn có mã JavaScript), và khá nhiều tính toán (để thử nghiệm nguyên thủy). Sau đó, một khi bạn có cặp của bạn, khi bạn truyền chìa khóa công cộng của bạn lên phía bên kia, có một cơ hội cho cuộc tấn công man-in-the-middle kể từ khi không có kiểm tra tính toàn vẹn trên truyền chìa khóa công cộng.

Bạn sẽ nhận được truyền an toàn cho bất kỳ ai có khóa riêng tư. Nó không rõ ràng từ câu hỏi của bạn cho dù đó là khách hàng hoặc máy chủ. Bạn có thể khởi tạo một bí mật được chia sẻ bằng cách chỉ cho phép bất kỳ ai chỉ có khóa công khai tạo ra một bí mật được chia sẻ, mã hóa nó và gửi nó đến bất cứ ai có khóa công khai.

Bạn có thể nhận được một bộ tính năng tương tự (phụ thuộc vào trình tạo số ngẫu nhiên, lỗ hổng cho MITM, khả năng tạo bí mật dùng chung làm khoá phiên) nhưng ít tính toán hơn bằng cách thực hiện trao đổi khóa Diffie-Hellman.

Có thể bạn nên tìm hiểu cách định cấu hình SSL trên máy chủ của mình.

+0

Trao đổi khóa Diffie-Hellman có vẻ thú vị, tôi sẽ xem xét điều đó. Đây là một liên kết mà tôi đã tìm thấy trong một implant javascript: http://enanocms.org/News:Article/2008/02/20/Diffie_Hellman_key_exchange_implemented Về điểm cặp khóa đối xứng, một trình tạo số ngẫu nhiên mạnh có thể được chuyển dễ dàng từ một ngôn ngữ khác. Cùng với thử nghiệm nguyên thủy. Tôi không nghĩ rằng điều này sẽ hoàn toàn bị cấm trong javascript, đặc biệt là với chủ đề nền phải chạy nó (trong khi người dùng sử dụng phần còn lại của trang). Bạn có biết bất kỳ mã tạo khóa RSA kiểu C nào tốt mà tôi có thể sử dụng không? –

+0

Tôi nghe rằng cuốn sách của Simson Garfinkel về PGP có một lời giải thích khá tốt về mã bao gồm trình kiểm tra nguyên thủy - sử dụng các phương pháp nhanh khác nhau sau đó thực hiện một số bước cuối cùng với mã dựa trên Định lý nhỏ của Fermat. Và bạn sẽ có thể tìm thấy nó trong một số nguồn PGP cũ hoặc bất kỳ triển khai OpenPGP hoặc gpg nào. Nhưng tôi nghĩ bạn sẽ thấy rằng nó chạy quá chậm trong Javascript. –

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