2010-10-20 40 views
5

Vì Trung Quốc Tường lửa tuyệt vời đã chặn cổng https của appengine của google. Vì vậy, tôi muốn mô phỏng một Lớp Socket Bảo mật bằng javascript và python để bảo vệ thông tin người dùng của tôi sẽ không bị chụp bởi những ISP và GFW đó.Mã hóa: mô phỏng SSL trong javascript và python

Kế hoạch của tôi:

  • Lắc tay:

trình duyệt yêu cầu máy chủ, máy chủ tạo ra một mã hóa key k1, k2 và giải mã chủ chốt, gửi k1 để trình duyệt. Trình duyệt tạo khóa mã hóa k3 và giải mã khóa k4, gửi k3 tới máy chủ.

  • Duyệt:

Trong phiên giao dịch, dữ liệu trình duyệt mã hóa với k1 và gửi đến máy chủ, máy chủ giải mã với k2. máy chủ mã hóa dữ liệu với k3 và phản hồi trình duyệt, giải mã trình duyệt với k4.

Hãy tìm hiểu sai lầm của tôi.

Nếu đó là đúng, câu hỏi của tôi là

  1. làm thế nào để tạo ra một cặp khóa trong javascript và python, đang có một số thư viện?
  2. cách mã hóa và giải mã dữ liệu trong javascript và python, có một số thư viện không?

Trả lời

0

Có vấn đề lớn, nếu bảo mật thực sự là mối quan tâm lớn: Thuật toán của bạn sẽ được chuyển không an toàn. Bạn có thể tin tưởng khách hàng chút nào không? Khách hàng có thể tin tưởng máy chủ không?

+0

Tôi nghĩ rằng thuật toán mã nguồn mở là OK, có một số mã hóa, thậm chí bạn biết khóa mã hóa, nhưng bạn không thể giải mã nó, và bạn không thể lấy khóa giải mã từ khóa mã hóa. –

+1

Không, vấn đề là những gì Marcelo nói, điều gì ngăn cản Bức tường lửa xấu xa của Trung Quốc khỏi bị một người đàn ông ở giữa và vứt bỏ một phiên bản hoàn toàn không được bảo vệ cho khách hàng của bạn? Hoặc với các khóa riêng của chúng, chúng có thể giải mã mọi thứ. Với SSL bạn có một vài hoặc root CA được cài đặt từ đầu, client sử dụng chúng để đảm bảo khóa công khai thực sự, thực sự thuộc về đúng địa chỉ . Khi bạn cố gắng làm điều này bằng javascript thì bạn không thể xác minh đối tác của bạn nữa, và một lỗ hổng bảo mật lớn được mở ra .. – Onkelborg

+0

chỉ dành cho trang web của riêng tôi, không sử dụng rộng rãi. –

2

Bạn có vấn đề cơ bản trong việc triển khai JavaScript của SSL sẽ không có chứng chỉ gốc tích hợp để thiết lập sự tin cậy, điều này khiến cho việc ngăn chặn cuộc tấn công giữa người là không thể. Bất kỳ chứng chỉ nào bạn cung cấp từ trang web của mình, bao gồm chứng chỉ gốc, có thể bị gián điệp chặn và thay thế.

Lưu ý rằng đây là một hạn chế cơ bản, không phải là tính đặc thù của cách SSL hoạt động. Tất cả bảo mật mã hóa đều dựa trên việc thiết lập bí mật được chia sẻ. Chứng chỉ gốc được triển khai với các trình duyệt chính cung cấp các điểm vào cho mạng tin cậy được thiết lập bởi các cơ quan chứng nhận (CA) cho phép bạn thiết lập bí mật được chia sẻ với bên thứ ba đã biết. Các chứng chỉ này không phải là AFAIK, có thể truy cập trực tiếp vào mã JavaScript. Chúng chỉ được sử dụng để thiết lập các kết nối an toàn (ví dụ: https).

+0

Cảm ơn bạn. Vâng, kế hoạch của tôi quá yếu. Nhưng điều tôi muốn là bảo vệ hơn một chút, tôi buộc phải làm điều này chống lại ý muốn của tôi. –

+0

Không có cách nào để làm những gì bạn muốn mà không triển khai bí mật hoặc gốc CA thông qua kênh truyền thông thay thế hoặc triển khai chúng qua kênh chính và xác nhận tính hợp lệ của chúng qua kênh thay thế (ví dụ: chứng chỉ có dấu vân tay, được đọc qua điện thoại để xác nhận). Nếu không có những điều này, nó gần như là tầm thường để gắn kết một cuộc tấn công trung gian, giả sử truy cập đầy đủ vào kênh truyền thông của bạn. –

1

Bạn không thể ngăn chặn những người đàn ông ở giữa bẫy các gói tin của bạn/tin nhắn, đặc biệt là nếu họ không thực sự quan tâm nếu bạn tìm hiểu. Những gì bạn có thể làm là mã hóa tin nhắn của bạn để bẫy chúng không cho phép chúng đọc những gì bạn đang gửi và nhận. Về lý thuyết thì tốt, nhưng trong thực tế bạn không thể làm mật mã hiện đại bằng tay ngay cả với các phím: bạn cũng cần chuyển một số phần mềm, và đó là nơi nó trở nên khó xử hơn nhiều.

Bạn muốn có mặt của khách hàng của phần mềm mã hóa cục bộ, hoặc ít nhất là đủ để có thể kiểm tra xem chữ ký số của phần mềm mã hóa có đúng không. Chữ ký số là rất khó giả mạo.Cung cấp mã đã ký, kiểm tra chữ ký của nó, và nếu chữ ký xác nhận dựa vào khóa công khai mà bạn tin cậy (than ôi, bạn sẽ phải chuyển nó ra khỏi băng) thì bạn biết mã đó (cộng với mọi chứng chỉ CA - rễ tin cậy - đã gửi đi) cùng với nó) có thể được tin cậy để hoạt động như mong muốn. Các gói tin sau đó có thể đi qua HTTP đồng bằng; họ sẽ đến được nơi họ đang có ý định hoặc bị chặn, nhưng dù bằng cách nào, không ai khác ngoài người nhận dự định sẽ có thể đọc chúng. chỉ có lợi thế của SSL là nó xây dựng hầu như tất cả các công cụ này cho bạn và làm cho nó dễ dàng.

Tôi không biết làm thế nào để thực hiện điều này tất cả trong Javascript. Rõ ràng nó có thể làm điều đó - đó là một ngôn ngữ hoàn chỉnh Turing, nó có quyền truy cập vào tất cả các syscalls cần thiết - nhưng nó có thể là đắt tiền ngu ngốc. Nó có thể được dễ dàng hơn để suy nghĩ về sử dụng GPG ...

1

Những câu trả lời khác ở đây là đúng (Ẩn thực tế từ chính phủ mà bạn đang giao tiếp với nhau là một vấn đề hoàn toàn khác.): Bạn thắng' t có thể phân phối một cách an toàn mã JavaScript đang chạy trên máy khách. Tuy nhiên, nếu bạn chỉ muốn xem xét công cụ này một chút nữa, hãy xem dự án mã nguồn mở Forge. Nó có một giao thức SSL/TLS thực hiện trong JavaScript và một máy chủ Python SSL đơn giản:

http://github.com/digitalbazaar/forge/blob/master/README

Nếu bạn muốn đọc lên một số chi tiết về cách sử dụng của nó:

http://digitalbazaar.com/2010/07/20/javascript-tls-1/

http://digitalbazaar.com/2010/07/20/javascript-tls-2/