Альтернатива SSL - «ручное» шифрование?

Я хотел бы зашифровать данные, которые передаются между сервером и клиентом в моем веб-приложении. Я бы использовал SSL, но для этого требуется сертификат вместе с выделенным IP-адресом. У меня нет проблем с получением сертификата, но выделенный IP-адрес требует от меня перехода на тарифный план бизнес-хостинга, который стоит 20 долларов в месяц на моем веб-хосте. У меня нет планов на это, поскольку я придерживаюсь своего плана общего хостинга за 20 долларов в год.

Итак, я хотел бы реализовать альтернативу SSL. Однако он делает больше, чем SSL. Наряду с шифрованием данных, отправляемых туда и обратно, он также шифрует строки в базе данных. Я думал сделать что-то вроде этого:

Код JavaScript:

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:

$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); 

Как видите,данные, которые клиент отправляет на сервер, зашифрованы, и наоборот. И данные в базе данных тоже зашифрованы. Конечно, я бы никогда не реализовал такие ключи. У меня, вероятно, был бы второй или третий ключ, который генерируется случайным образом для каждого пользователя. Таким образом, transfer_key может быть равен constant_key, соединенному со случайным ключом, и то же самое касается storage_key.

Будет ли это хорошей альтернативой SSL? Как я могу реализовать этот тип шифрования таким образом, чтобы его было труднее победить? Есть ли у этого подхода какие-то особые недостатки?

Я, вероятно, найду JS-библиотеку, которая позаботится о шифровании и будет использовать расширение PHP mcrypt на стороне сервера. Я думал о Blowfish, может быть, AES256, но я не уверен, какой из них дает мне лучшее соотношение силы шифрования и потребления памяти.

Совет?

5
задан Ryan 12 July 2011 в 01:23
поделиться