soloman
@soloman
web-dev

Как лучше зашифровать на клиенте и расшифровать на сервере?

Доброго времени суток, уважаемые господа! Задался вопросом, можно ли зашифровать на клиенте средствами JS файл/фото, отправить на сервер и средствами PHP это расшифровать и сохранить? Какие есть варианты? Может есть готовые пакеты/практики? До этого момента совершенно не сталкивался с криптографией...
Благодарю всех за любую помощь!
  • Вопрос задан
  • 534 просмотра
Решения вопроса 3
profesor08
@profesor08 Куратор тега PHP
На сервере создаешь public/private ключи. public отправляешь на клиент, с его помощью шифруешь все. public на то и придуман, что его можно было давать кому угодно, чтоб им можно было шифровать, но дешифровать может тот, у кого только private ключ. Собственно и все, в качестве алгоритма бери RSA, с ним проще всего, инфы полно, библиотек полно. Но можешь выпендриться и придумать что-то свое.
Ответ написан
@abberati
frontend-разработчик
То, что вы описали, называется HTTPS
Ответ написан
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
То, что написано в гугл и википедии - смысла повторять нет.

Напишу как бы я сделал:
Чтобы усложнить дешифрацию, нужно избавиться от подбора ключа по известной сигнатуре/типу данных. Непосредственно перед шифрованием нужно сделать "мутацию" данных: текст, изображение, звук, видео или что-то ещё - должно быть абсолютно непонятно "что это?" по сигнатуре после корректной дешифрации.

Порядок действий:
1. Получаем с сервера публичный ключ и формулу (на JS) для мутации исходных данных одним из N-способов (это могут видеть все).
2. Выбираем случайным образом N из предложенного сервером диапазона и мутируем данные по формуле.
3. Шифруем мутированные данные публичным ключом.

Теперь, чтобы расшифровать, нужно знать точный "приватный ключ" и корректно подобрать N, используя алгоритм обратного преобразования.

Если не знать, что зашифрованные данные были подвержены мутации, то подбор ключа - будет бесполезен, т.к. неизвестно как должны выглядеть данные с корректным ключом.
А если - знать, то на каждый приватный ключ придётся перебирать все возможные N-мутации.

Пример: если ключей всего 1000 [1..1000], а N всего 5 [1..5], то это 1000*5=5000 комбинаций к проверке.
При том, что сервер, используя свой приватный ключ, подбирает лишь только N, за время, меньше секунды.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы