Какой большой ключ мне нужен?

Я изучаю шифрование. Я сделал несколько ключей, закодировал образец строки ("1234 5678 9012 3456") и без проблем смог ее декодировать. Первая часть работает нормально.

Затем я попробовал это с образцом реальных данных, которые я хочу закодировать, и получил ошибку «данные слишком велики для размера ключа».

Длина строки составляет 14041 символ, а конечный результат может быть еще больше, так как мне заставить его работать, не имея 1024000-битного ключа или чего-то в этом роде?

Изменить: поскольку я уже кое-что узнал, когда это было открыто несколько часов назад, текущий метод, с которым я играл, использует RSA, так как это значение по умолчанию для openssl_pkey_new.

По сути, у меня есть мобильное приложение, и я хочу иметь возможность обновлять данные в приложении наиболее безопасным способом. Мой босс немного параноик по поводу "облака". Моя идея состоит в том, чтобы использовать RSA или что-то еще, чтобы проверить приложение с помощью страницы веб-API, получить самые последние данные из базы данных, которая была закодирована, и декодировать их в приложении для хранения, чтобы избежать необходимости выталкивать новую версию каждый раз, когда обновляются данные приложения (пару раз в год).
Моему начальнику действительно не нравится мысль об утечке данных, поэтому я могу сделать все, чтобы заблокировать его. вниз было бы хорошо.


person AndyD273    schedule 17.03.2017    source источник
comment
Может помочь: stackoverflow.com/questions/7143514/   -  person CD001    schedule 17.03.2017
comment
Какой ключ и шифр вы используете? Это звучит почти как RSA, но это могут быть и другие.   -  person jww    schedule 17.03.2017
comment
@jww Это все, что я понял: $keysize = 4096; $res=openssl_pkey_new(array('private_key_bits' => $keysize));   -  person AndyD273    schedule 17.03.2017
comment
@ CD001 CD001 Это похоже на то, что мне нужно, но я еще не уверен, что понимаю это :) Если я правильно понял, я хочу сгенерировать ключ RSA, закодировать его с помощью моего закрытого ключа openssl, закодировать файл с помощью ключ RSA, а затем отправить закодированный файл RSA и закодированный ключ в место назначения, где ключ будет декодирован, а затем файл будет декодирован с этим ключом? Хотя в этом случае это будет не файл, а сколь угодно длинная строка.   -  person AndyD273    schedule 17.03.2017
comment
Ммм, мне просто нужно кивнуть и сказать, что, вероятно :) Обычно я использую GnuPG для шифрования, что представляет собой немного другой подход, поскольку сначала вам нужен открытый ключ получателя ... Я не могу вспомнить, когда в последний раз я использовал что-то для интерфейс напрямую с OpenSSL, помимо создания самозаверяющих сертификатов на Apache, поэтому я немного (очень) ржавый ... но это звучит правильно.   -  person CD001    schedule 17.03.2017
comment
Нигде в своем вопросе вы не говорите, какое шифрование вы используете. Я мог бы предположить, что вы используете RSA, но это может быть что-то другое.   -  person Artjom B.    schedule 17.03.2017
comment
@ArtjomB. Очень хороший момент, и я, честно говоря, не понял, когда впервые открыл вопрос. Я новичок в мире шифрования, и именно поэтому я делаю этот небольшой проект, чтобы узнать кое-что. Я считаю, что то, что у меня есть сейчас, на самом деле является RSA, поскольку это похоже на значение по умолчанию для openssl_pkey_new.   -  person AndyD273    schedule 17.03.2017


Ответы (1)


Если не требуется пара открытый/закрытый ключ, шифрование RSA (асимметричное) не требуется. Размер асимметричных данных ограничен длиной ключа и очень медленный.

Обычно для данных используется алгоритм симметричного шифрования, такой как AES.

Для строки длиной 14041 байт, зашифрованной с помощью RSA, потребуется ключ размером более 112 КБ (нереалистично/невозможно), ключ AES обычно имеет длину 128 или 256 бит.

Если требуется RSA, стратегия заключается в использовании гибридного шифрования, при котором данные шифруются с помощью AES и сгенерированного случайного ключа, а затем ключ шифруется с помощью RSA.

person zaph    schedule 17.03.2017
comment
После дальнейших исследований я почти уверен, что в настоящее время у меня есть ключ RSA, поскольку он, по-видимому, используется по умолчанию для openssl_pkey_new(). Я все еще разбираюсь в этом, поэтому я немного почитаю об AES. - person AndyD273; 17.03.2017
comment
Добавьте больше к вопросу о том, чего вы пытаетесь достичь. Смотрите обновленный ответ. - person zaph; 17.03.2017
comment
Хорошо, я добавил свою конечную цель, и симметричное шифрование похоже на то, что нужно. Я нашел ссылку эта страница с примером AES-256 для замены mcrypt, но в примере есть предупреждение: This library is unsafe because it does not MAC after encrypting, и я даже не знаю, что это значит... Вероятно, мне нужно закрыть этот вопрос и откройте новый, который задает правильный вопрос. - person AndyD273; 17.03.2017