Как получить вектор инициализации (iv) из зашифрованных данных OpenSSL - PullRequest
2 голосов
/ 09 сентября 2011

Отказ от ответственности: новинка в криптографии.

У меня есть внешний процесс, который использует OpenSSL для шифрования данных, который сейчас использует соль.

Приложение iPhone получает эти данные с сервера, загружает их в каталог документов приложения и требует их расшифровки.IPhone OS не включает в себя библиотеку OpenSSL.Вы можете построить его самостоятельно, но это сложно и сложно.Самым простым решением, которое я нашел благодаря помощи Stackoverflow, является использование CommonCrypto/CommonCryptor.h, которое является частью Security Framework.

Но для правильной расшифровки функции C для расшифровки данных требуется iv.

Есть ли способ извлечь iv из зашифрованных данных (что, на мой взгляд, отрицательно скажется на дополнительной безопасности)?Или мне сначала нужно как-то указать iv и сообщить приложению iPhone, что это такое?Или просто не пользуетесь солью?

Edit1: чтобы уточнить, я использую OpenSSL для шифрования текста в файле данных.Сценарий, использующий OpenSSL, шифрует текст, загружает в Dropbox , затем приложение загружает файл из Dropbox, анализирует его и пытается расшифровать текст.

Edit2: Да, я использую утилиту командной строки OpenSSL с опцией -pass.

Ответы [ 3 ]

5 голосов
/ 10 сентября 2011

IV следует выбирать случайным образом для каждого зашифрованного сообщения.Я предполагаю, что вы используете утилиту командной строки OpenSSL, openssl enc, но неясно, используете ли вы шифрование на основе пароля (параметры -pass и -salt) или явно указываете ключ (-K и -IV параметров).

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

IV может быть публичным;Вам не нужно это скрывать.Важно то, что вы используете непредсказуемый IV для каждого сообщения.

1 голос
/ 09 сентября 2011

IV не может быть получен из зашифрованных данных, он должен быть либо согласован вне связи между двумя сторонами, либо обнародован.Также в зависимости от режима шифрования это может не потребоваться, но CBC является наиболее распространенным и требует iv.В основном, внутривенное затрудняет сбор любой информации из первого блока.

В вашем случае вам просто нужно выяснить iv, либо он статичен, либо просто жестко закодировать его илиесли оно передано, возможно, в преамбуле, выясните, как извлечь его из данных.

iv может быть простым, как 0.

OneПроблема с SSL пытается перехватить пакеты.Это легко сделать с помощью приложения Charles (ссылка здесь) , у него есть бесплатная пробная версия.Я использую это регулярно.

0 голосов
/ 09 сентября 2011

Лично я использую для компиляции OpenSSL для широкого спектра функций, попробуйте это tuto http://www.x2on.de/2010/07/13/tutorial-iphone-app-with-compiled-openssl-1-0-0a-library/ действительно просто.

Ура!.

...