Создание ключей PGP в приложении для iOS

Мне нужно создать приложение iOS, в котором будут созданы ключи PGP для шифрования и расшифровки определенных сообщений.

Поскольку я новичок в шифровании PGP в iOS, есть ли какая-то библиотека, которая позволит мне создавать, хранить и получать доступ к ключам PGP, а также выполнять шифрование и дешифрование с использованием ключей.

Я реализовал серверную часть и версию для Android, используя алгоритм RSA с надувным замком и OpenPGP в JAVA, однако мне нужно будет сделать то же самое с версией для iOS. Это означает, что ключи, созданные в iOS, должны быть в том же формате и совместимы с ключами, созданными в версии для Android.


person R3dH4nd5    schedule 17.11.2013    source источник
comment
когда вы говорите, что ключи должны быть совместимы, вы имеете в виду открытые или закрытые ключи?   -  person Michael Dautermann    schedule 18.11.2013
comment
И закрытый, и открытый ключи должны быть совместимы. Я использую 2048-битные ключи RSA, основанные на надувном замке и открытом PGP в приложении для Android.   -  person R3dH4nd5    schedule 18.11.2013


Ответы (4)


Ознакомьтесь с этими проектами: UNNetPGP или ObjectivePGP, это может помочь вам.

person Marcin    schedule 12.12.2013
comment
Я интегрировал ObjectivePGP. когда я пытаюсь преобразовать строку ключа в PGPKey, ей дается ноль. из-за этого мое приложение выходит из строя. Не могли бы вы помочь мне, как я могу преобразовать его. - person Ravi; 14.12.2016

Ключи OpenPGP имеют стандартный формат, определенный в RFC 4880 (два формата — двоичный и в кодировке base64). Насколько я знаю, именно BouncyCastle умеет создавать ключи в каком-то пользовательском нестандартном формате.

Один из вариантов — использовать наш SecureBlackbox (версия C++) на iOS — он предлагает полный набор функций OpenPGP, включая генерацию ключей и управление ими.

person Eugene Mayevski 'Callback    schedule 18.11.2013

Если вам действительно нужен Bouncy Castle как есть, рассмотрите возможность использования j2objc

Недавно мы столкнулись с такой же ситуацией, и до сих пор нам удавалось использовать j2objc для преобразования как Bouncy Castle, так и код, который использовал его, в Objective C. Нам нужна была строгая совместимость между версиями приложения для iOS и Android, и мы не хотели рисковать, обнаружив несовместимости с нашим решением в будущем.

Чтобы преобразовать Bouncy Castle, нам пришлось удалить несколько классов, связанных с LDAP (в которых мы и так не нуждались), но помимо этого все было довольно просто. Мы сделали это путем проб и ошибок, посмотрев, что не удалось преобразовать, а затем просто удалив файл и попытавшись снова.

Использование j2objc также имело то преимущество, что позволило нам перенести большую часть бизнес-логики и избежать повторной реализации ее в Swift/Objective-C. Мы только что создали несколько простых оболочек в Swift для классов, которые нам нужно было использовать напрямую, и использовали их во всем приложении.

Важные предостережения

Стоит отметить, что это решение подходит не всем, как указано в этом прокомментируйте проблему использование Bouncy Castle таким образом может привести к некоторым последствиям, поэтому убедитесь, что вы знаете, что делаете. Это также то, что требует времени и ноу-хау для настройки, между пониманием потенциальных проблем с путями к классам Java и выяснением того, как извлекать и конвертировать все, что вам нужно (в идеале с использованием сценариев оболочки или чего-то подобного для автоматизации процесса, когда у вас есть обновления) .

Поэтому, если вы не используете много функций Bouncy Castle, это может привести к дополнительным сложностям, которые делают его нецелесообразным, в частности, часть Соответствия экспорту США.

person thesquaregroot    schedule 18.03.2019

Я только что провел беглый поиск (думаю, что вы, возможно, тоже это сделали) и нашел проект "GPGTools", который в основном является реализацией OpenPGP с открытым исходным кодом.

А поскольку он основан на OpenPGP, создаваемые вами ключи должны быть совместимы с ключами, созданными на стороне Android. У них есть проект OLD (около 2011 г.). страницу здесь, но текущий код (который находится в состоянии изменения) можно найти на GitHub.

person Michael Dautermann    schedule 17.11.2013
comment
Спасибо Михаил за ответ. Я посмотрел, но это мне не поможет, так как это не собственный проект iOS (Objective C). - person R3dH4nd5; 18.11.2013