Tôi muốn mã hóa dữ liệu truyền qua lại giữa máy chủ và ứng dụng khách trong ứng dụng Web của tôi. Tôi sẽ sử dụng SSL nhưng điều đó đòi hỏi một chứng chỉ cùng với một địa chỉ IP chuyên dụng. Tôi không có vấn đề gì khi nhận được chứng chỉ nhưng IP chuyên dụng yêu cầu tôi nâng cấp lên kế hoạch lưu trữ doanh nghiệp với mức phí $ 20 một tháng trên máy chủ web của tôi. Tôi không có kế hoạch làm điều đó khi tôi gắn bó với kế hoạch lưu trữ chia sẻ 20 đô la/năm của mình.Thay thế cho SSL - Mã hóa "thủ công"?
Vì vậy, tôi muốn triển khai thay thế cho SSL. Tuy nhiên, nó thực hiện nhiều hơn SSL. Cùng với việc mã hóa dữ liệu được gửi qua lại, nó cũng mã hóa các hàng trong cơ sở dữ liệu. Tôi đã nghĩ đến việc làm một cái gì đó như thế này:
Javascript Code:
var transfer_key = 'whatever';
function encrypt(data, key) {...}
function decrypt(data, key) {...}
function send_data_to_server(url, data)
{
$.post(url, {'data' : encrypt(data, transfer_key) }, function(response) {
var decrypted_response = JSON.parse(decrypt(response));
});
}
PHP Code:
$data = $_POST['data'];
$transfer_key = 'whatever';
$storage_key = 'whatever2';
function encrypt($data, $key) {...}
function decrypt($data, $key) {...}
databaseQuery('INSERT INTO table VALUES (?)', encrypt($data, $storage_key));
$decrypted_data = decrypt($data, $transfer_key);
$response = processData($decrypted_data);
echo encrypt($transfer_key, $response);
Như bạn có thể thấy, các dữ liệu khách hàng gửi đến máy chủ được mã hóa và ngược lại. Và dữ liệu trong cơ sở dữ liệu cũng được mã hóa. Bây giờ tất nhiên, tôi sẽ không bao giờ thực hiện các phím như thế. Tôi có thể sẽ có một khóa thứ hai hoặc thứ ba được tạo ngẫu nhiên cho mỗi người dùng. Vì vậy, transfer_key có thể bằng với một hằng số_key được nối với một khóa ngẫu nhiên, và tương tự như vậy cho storage_key.
Đây có phải là giải pháp thay thế tốt cho SSL không? Làm thế nào tôi có thể thực hiện loại mã hóa này theo cách mà khó đánh bại hơn? Có bất kỳ điểm yếu cụ thể nào đối với phương pháp này không?
Tôi có thể sẽ tìm một thư viện JS để quản lý mã hóa và sử dụng phần mở rộng mcrypt của PHP cho phía máy chủ. Tôi đã nghĩ đến Blowfish, có lẽ AES256, nhưng tôi không chắc cái nào mang lại cho tôi tỷ lệ mã hóa tốt nhất để tiêu thụ bộ nhớ.
Lời khuyên?
Tôi không biết rằng SSL yêu cầu IP chuyên dụng.Ngoài ra, tôi biết đây là mã giả, nhưng vào lúc này, 'DBData = mã hóa (mã hóa (clientData, transfer_key), storage_key) '- nếu như bạn chỉ ra, transfer_key là tạm thời theo một cách nào đó, có nghĩa là bạn không bao giờ có thể giải mã dữ liệu cơ sở dữ liệu. –
Vì vậy, tất cả tôi (như một kẻ tấn công) phải làm là đánh hơi lưu lượng html đơn giản mà bạn gửi cho khách hàng có chứa mã javascript với các khóa mã hóa/giải mã. tốt ... Nghiêm túc, gắn bó với SSL/TLS – NotMe
@Damien_The_Unbeliever: bản thân SSL thì không; nhưng nhà cung cấp của anh ta có thể đóng gói nó như là một phần của một kế hoạch đắt tiền hơn. – NotMe