Webアプリケーションでサーバーとクライアントの間を行き来するデータを暗号化したいと考えています。 SSLを使用しますが、専用のIPアドレスとともに証明書が必要です。証明書を取得するのに問題はありませんが、専用IPを使用すると、私のWebホストで毎月20ドルのビジネスホスティングプランにアップグレードする必要があります。私は20ドル/年の共有ホスティングプランを守っているので、これを行う計画はありません。SSLの代わりに - "手動で"暗号化する?
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);
、データクライアントサーバーへの送信は暗号化され、逆もまた同様です。また、データベースのデータも暗号化されています。もちろん、私はそのようなキーを決して実装しません。おそらく、各ユーザーのためにランダムに生成される2番目または3番目のキーがあります。したがって、transfer_keyはrandom_keyと連結されたconstant_keyに等しいことができ、storage_keyにも同じことが起こります。
これはSSLの代替手段ですか?このタイプの暗号化を実装するには、どうすれば敗北するのが難しいのですか?このアプローチには特に弱点がありますか?
おそらく、暗号化を担当するJSライブラリを見つけて、サーバ側でPHPのmcrypt拡張を使用するつもりです。私はBlowfish、おそらくAES256を考えていましたが、どちらが私に暗号化の強さとメモリ消費の比率が最も良いか分かりません。
アドバイス?
私はSSLに専用のIPが必要であることに気づいていません。また、私はこれが擬似コードであることを知っていますが、現時点では、 'DBData = encrypt(encrypt(clientData、transfer_key)、storage_key)' - あなたが示しているように、transfer_keyが何らかの方法で一時的である場合、データベースデータを復号化する。 –
だから私は(攻撃者として)私が行う必要があるのは、暗号化/復号化キーを使ってjavascriptコードを含むクライアントに送信するプレーンhtmlトラフィックを盗聴することだけです。いいです...真剣に、SSL/TLSを貼ってください – NotMe
@Damien_The_Unbeliever:SSL自体はそうではありません。彼の提供者はより高価な計画の一部としてそれを詰め込んでいるかもしれない。 – NotMe