soloman
@soloman
web-dev

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

Доброго времени суток, уважаемые господа! Задался вопросом, можно ли зашифровать на клиенте средствами JS файл/фото, отправить на сервер и средствами PHP это расшифровать и сохранить? Какие есть варианты? Может есть готовые пакеты/практики? До этого момента совершенно не сталкивался с криптографией...
Благодарю всех за любую помощь!
  • Вопрос задан
  • 368 просмотров
Решения вопроса 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, за время, меньше секунды.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы