Это возможно.
Вы можете просто использовать криптографические алгоритмы с открытым ключом RSA без каких-либо накладных расходов и инфраструктуры, которую оборачивает PGP или X.509v3.
- Создайте пару открытый-закрытый ключ.
- Безопасно храните закрытый ключ на сервере.Хорошо защитите его.
- Распространите открытый ключ в приложении iPhone.
- Приложение iPhone шифрует данные с помощью открытого ключа.
- Приложение iPhone отправляет зашифрованные данные всервер.
- Сервер расшифровывает зашифрованные данные с помощью закрытого ключа.
С этой идеей можно поиграть, используя инструменты командной строки openssl
:
На сервере запустите:
$ openssl genrsa -out myprivatekey.pem 2048
$ openssl rsa -in myprivatekey.pem -pubout -out mypublickey.pem
Скопируйте mypublickey.pem на клиент, а на клиенте создайте некоторые данные в data.dat и выполните:
$ openssl rsautl -encrypt -pubin -inkey mypublickey.pem -in data.dat -out enc.dat
Отправьте код.dat на сервер, а затем на сервере запустите:
$ openssl rsautl -decrypt -inkey myprivatekey.pem -in enc.data -out data2.dat
Открытый ключ не нужно защищать, поэтому вы можете распространять его в приложении iPhone любым удобным для вас способом.Например, вставьте его в приложение, поместите на общедоступный веб-сервер, отправьте клиенту по небезопасной электронной почте.Нет проблем, если плохие парни возьмутся за это.
Примечание: в примере я создал 2048-битный ключ RSA.Имейте в виду, что для асимметричных алгоритмов (то есть алгоритмов с открытым ключом) вам нужны ключи большей длины в битах, чтобы обеспечить тот же уровень безопасности, что и ключи, используемые для симметричных алгоритмов.Не думайте, что 128-битное шифрование AES является очень надежным, поэтому я просто создам 128-битный ключ RSA - это слишком мало для ключа RSA и не даст вам ожидаемого уровня безопасности.
Теперь вам просто нужно реализовать это, вызывая библиотеки openSSL в коде.