Я новичок в шифровании AES, но пытаюсь создать решение, которое:
- Принимает данные потребителей
- Шифрует эти данные с помощью AES и «открытого» ключа.
- Храните эти данные в базе данных MySQL.
- Иметь возможность извлекать и расшифровывать данные ТОЛЬКО с помощью закрытого ключа (хранящегося на моей личной машине, а не на самом сервере).
Я понимаю, что это может быть излишним, но хочу, чтобы мои данные потребителя были чрезмерно защищены.
Несколько замечаний:
- Это не информация о кредитной карте, поэтому, пожалуйста, не пишите мне о PCI-DSS, это другая форма личной информации, длина каждого поля не превышает 500 символов.
- Я могу хранить части информации о потребителях и другие данные во второй базе данных, связанных вместе уникальным идентификатором участника для дополнительной безопасности.
- Входящие вызовы MySQL могут осуществляться только на мой сервер напрямую с моего статического IP-адреса.
- Корень SSH отключен, порты изменены и так далее, поэтому я чувствую, что мой сервер находится в отличной форме, чтобы предотвратить любое «простое» неправильное использование.
Я искал статьи в Интернете и ТАК, но не нашел многого с точки зрения полного сохранения закрытого ключа на сервере. Даже если мне нужно оставить сам сервер - мои мысли или предложения о том, как двигаться дальше, приветствуются.
РЕДАКТИРОВАТЬ - УТОЧНЕНИЕ
Чтобы быть более ясным, цель, которую я пытаюсь достичь, заключается в следующем (в очень простой форме):
Клиент вводит свой номер телефона онлайн.
Введенный номер телефона зашифрован онлайн с использованием ключа A и хранится в базе данных mysql.
На этом этапе клиент никогда не сможет снова увидеть телефон полностью, но, безусловно, сможет обновить его (выполняя процесс с клавишей A в энный раз)
- Как системный администратор, я могу получить доступ к данным только путем загрузки и расшифровки данных на моем локальном компьютере (это или я должен сначала загрузить временный файл, который затем используется для расшифровки нужных мне данных).
РЕДАКТИРОВАТЬ 2 - Я идиот
Я использую ответ Эндрю Купера ниже, но мне не удается заставить мой скрипт прочитать содержимое созданного мной файла .pem. На основе приведенного ниже кода - как мне получить открытый ключ $, соответствующий определенному файлу .pem на моем сервере?
<?php
if (isset($_SERVER['HTTPS']) )
{
echo "SECURE: This page is being accessed through a secure connection.<br><br>";
}
else
{
echo "UNSECURE: This page is being access through an unsecure connection.<br><br>";
}
// Create the keypair
$res=openssl_pkey_new();
// Get private key
openssl_pkey_export($res, $privatekey);
// Get public key
$publickey=openssl_pkey_get_details($res);
$publickey=$publickey["key"];
echo "Private Key:<BR>$privatekey<br><br>Public Key:<BR>$publickey<BR><BR>";
$cleartext = '1234 5678 9012 3456';
echo "Clear text:<br>$cleartext<BR><BR>";
openssl_public_encrypt($cleartext, $crypttext, $publickey);
echo "Crypt text:<br>$crypttext<BR><BR>";
openssl_private_decrypt($crypttext, $decrypted, $privatekey);
echo "Decrypted text:<BR>$decrypted<br><br>";
?>
РЕДАКТИРОВАТЬ 3 - возможно, не «идиот», но точки с запятой меня ненавидят
Я поставил точку с запятой не на своем месте. Я использую функцию file_get_contents (), но есть ли более предпочтительный метод чтения данных для файла .pem?