2014-09-01 2 views
0

Я разрабатываю частную систему обмена сообщениями для своего сайта с использованием Laravel 4, и я хочу, чтобы сообщения оставались частными. До сих пор, я следующий код, написанный:Как шифровать и хранить личные сообщения?

class PkeyEncryption { 

    public static function encrypt($input, $cipher = MCRYPT_RIJNDAEL_128) { 

     $key = sha1(microtime(true) . mt_rand(10000, 90000)); 

     $iv_size = mcrypt_get_size($cipher, MCRYPT_MODE_CFB); 
     $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); 

     return mcrypt_encrypt($cipher, $key, $input, MCRYPT_MODE_CFB, $iv); 
    } 

    public static function decrypt($data, $key, $cipher = MCRYPT_RIJNDAEL_128) { 

     $iv = $data['iv']; 
     $data = $data['data']; 

     return mcrypt_decrypt($cipher, $key, $data, MCRYPT_MODE_CFB, $iv); 
    } 
} 

Итак, я знаю, как для шифрования сообщений, и я также знаю, что я могу хранить IV наряду с сообщением. Но я не знаю, где я должен хранить открытый ключ. Я уже прочитал несколько других вопросов на сайте, и я до сих пор не нашел ответа. Может ли кто-нибудь указать мне в правильном направлении?

+2

Обратите внимание, что если веб-сервер имеет доступ к информации дешифрования (ключ и IV), то злоумышленник, способный скомпрометировать веб-сервер, также получит к нему доступ. – cdhowie

+0

Сохраните ключ на стороне клиента (например, в файле cookie?) – ferdynator

+0

Итак, я мог хранить ключи за пределами сайта или на другом сервере? –

ответ

0

Вы должны хранить все открытые ключи пользователей на сервере, и только сами пользователи должны иметь свои личные ключи.

Когда пользователь A хочет отправить сообщение пользователю B, он возьмет открытый ключ пользователя B и зашифрует сообщение с ним. Это сообщение затем может быть дешифровано только с помощью закрытого ключа пользователя B.

+0

Так должен ли пользователь B находиться в физическом владении своим личным ключом? –

+0

Действительно. Это достигается с помощью сертификатов SSL. Асимметричная криптография. – bulforce

Смежные вопросы