Trước hết, điều này KHÔNG cải thiện tính bảo mật của ứng dụng của bạn (giả sử đó là một ứng dụng web).
Sử dụng SSL (Hoặc thực tế là TLS, thường được gọi là SSL), nó không thực sự tốn kém (Đo thời gian bạn đang sử dụng để tìm cách xoay quanh nó và nhân nó với mức lương tối thiểu, mua chứng chỉ thắng hầu như luôn luôn).
Tại sao điều này là đơn giản. TLS giải quyết một vấn đề (khi được sử dụng với các chứng chỉ đã mua, không tự ký) khá lớn về mật mã: Làm thế nào để tôi biết máy chủ mà tôi đang nói chuyện là máy chủ mà tôi nghĩ tôi đang nói chuyện? Chứng chỉ TLS là một cách để nói: "Tôi, cơ quan cấp chứng chỉ, được trình duyệt của bạn tin cậy, xác nhận rằng trang web tại [url] có khóa chung này, với khóa riêng tương ứng, chỉ (khóa riêng) mà máy chủ biết, nhìn Tôi đã ký chữ ký của mình trên tất cả các tài liệu, nếu có ai thay đổi nó, bạn có thể thấy ".
Không có TLS, mọi mã hóa đều trở nên vô nghĩa, bởi vì nếu tôi ngồi cạnh bạn trong một quán cà phê, tôi có thể khiến máy tính xách tay / điện thoại thông minh của bạn nghĩ rằng tôi là máy chủ và MiTM (Người đàn ông ở giữa). Với TLS, máy tính xách tay / điện thoại thông minh của bạn sẽ hét lên "KẾT NỐI KHÔNG GIỚI HẠN", vì tôi không có giấy chứng nhận đã ký chứng nhận phù hợp với trang web của bạn. (Mã hóa so với xác thực).
Tuyên bố miễn trừ trách nhiệm: người dùng có xu hướng nhấp chuột phải qua các cảnh báo sau: "Kết nối không tin cậy? Cái gì? Tôi chỉ muốn hình ảnh của tôi về mèo con! Thêm ngoại lệ Nhấp vào Xác nhận Nhấp vào YAY! Mèo con!"
Tuy nhiên, nếu bạn thực sự không muốn mua chứng chỉ, vẫn KHÔNG thực hiện băm javascript phía máy khách (và sử dụng thư viện standford (SJCL) cho điều đó, KHÔNG BAO GIỜ THỰC HIỆN CRYPTO CỦA BẠN ).
Tại sao? Sử dụng lại mật khẩu! Tôi có thể đánh cắp cookie phiên của bạn (cho phép tôi giả vờ với máy chủ của bạn rằng tôi là bạn) mà không cần HTTPS một cách dễ dàng (xem Firesheep). Tuy nhiên, nếu bạn thêm javascript vào trang đăng nhập, trước khi gửi, băm mật khẩu của bạn (sử dụng SHA256 hoặc thậm chí tốt hơn, hãy sử dụng SHA256, gửi cho họ khóa công khai mà bạn đã tạo và sau đó mã hóa mật khẩu băm bằng mật khẩu đó, bạn không thể sử dụng muối với điều này), và sau đó gửi mật khẩu băm / mã hóa đến máy chủ. REHASH băm trên máy chủ của bạn bằng một muối và so sánh nó với những gì được lưu trữ trong cơ sở dữ liệu của bạn (lưu trữ mật khẩu như thế này:
(SHA256(SHA256(password)+salt))
(cũng lưu muối dưới dạng văn bản gốc trong cơ sở dữ liệu)). Và gửi mật khẩu của bạn như thế này:
RSA_With_Public_Key(SHA256(password))
và kiểm tra mật khẩu của bạn như thế này:
if SHA256(RSA_With_Private_Key(SHA256(sent_password))+salt_for_username) == stored_pass: login = ok
Bởi vì, NẾU ai đó đang đánh hơi khách hàng của bạn, họ sẽ có thể đăng nhập như khách hàng của bạn (phiên hijacking) nhưng họ sẽ không bao giờ nhìn thấy các mật khẩu chữ thô (trừ khi họ thay đổi javascript của bạn, tuy nhiên, một Starbucks của hacker có thể sẽ không biết howto / được quan tâm trong này.) Vì vậy, họ sẽ có quyền truy cập vào ứng dụng web của bạn, nhưng không truy cập email / facebook / của họ. (người dùng của bạn có thể sẽ sử dụng cùng một mật khẩu). (Địa chỉ email sẽ là tên đăng nhập của họ hoặc sẽ được tìm thấy trong hồ sơ / cài đặt của họ trên ứng dụng web của bạn).