2009-10-06 2 views
5

Я читал о Secure Remote Password protocol от Stanford, и он идеально подходит для среды, в которой работают приложения для iPhone. К сожалению, мне не удалось найти хорошую реализацию протокола Objective-C. Насколько я могу судить, я не знаю, как это сделать.Безопасная удаленная реализация паролей для iPhone

Кто-нибудь знает о такой реализации?

Если это не удастся, как вы думаете, что будет лучше? Я мог бы попробовать build OpenSSL into my app, но это похоже на действительно большой вещь, чтобы добавить для этого один маленький кусочек. Я мог бы попытаться перевести реализации JavaScript или Java в Objective-C, но это нарушает правило # 1 криптографии (используйте известную, протестированную реализацию).

Пара последующих элементов: во-первых, это должно быть очевидно из контекста, но мне нужно что-то, что совместимо с коммерческим использованием с закрытым исходным кодом (реализация JavaScript, с которой я связан, позже я заметил, AGPL).

Кроме того, предполагая, что я заканчиваю работу с OpenSSL, у меня возникают реальные проблемы с поиском примера использования SRP. Их сайт утверждает, что код там, но я не могу найти никаких доказательств этого, либо в OpenSSL documentation, либо grepping исходного кода (v 0.9.8k). (Или я серьезно неправильные вещи, и я до сих пор применять одну из their patches к источнику OpenSSL?)

EDIT:

Что я мог бы реально использовать в данный момент готов к использованию коды , довольно полный рецепт или какой-то пример использования SRP в OpenSSL. Я почти уверен, что смогу сцепиться с нуля с помощью protocol docs, но я действительно стараюсь не изобретать колесо, если смогу это сделать.

ответ

5

Реализации OpenSSL и GnuTLS SRP-TLS являются единственными, которые я знаю, которые поддерживаются (TinySRP не обновлялся с 2001 года, и было много уведомлений о безопасности в отношении базовой версии OpenSSL, основанной на , хотя я не знаю, влияют ли они на TinySRP).

Тем не менее, каждый проект iPhone, который я построил, в конечном итоге должен был включить копию OpenSSL для чего-то другого. Я рекомендую просто кусать пулю и использовать ее. Инструкции, на которые вы ссылаетесь, работают нормально.

Лично я строю OpenSSL в универсальную библиотеку, используя липо, у которой есть обе руки и x86-версии. Таким образом, я могу ссылаться на один .a для Simulator и Device. Липо очень легко. Просто создайте две библиотеки и приклейте их вместе. Вот правило из моего Makefile:

/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/lipo \ 
     -create \ 
     -arch armv6 iPhoneOS$(SDK_VER)/lib/$(1) \ 
     -arch i386 iPhoneSimulator$(SDK_VER)/lib/$(1) \ 
     -output iPhoneUniversal$(SDK_VER)/lib/$(1) 
+0

Итак, насколько велика библиотека OpenSSL для устройства? (И достаточно ли он структурирован, чтобы компоновщик мог оставить неиспользуемые биты?) –

+0

libcrypto.a + libssl.a старше 2.5M, но они не представляют ничего подобного в финальном двоичном файле. Если я помню последний раз, когда я исследовал, OpenSSL добавила около 400-500 к окончательному двоичному размеру. Больше, чем я хотел бы, но меньше, чем я боялся. Я попытался уменьшить количество файлов в OpenSSL, чтобы улучшить время компиляции, поскольку нам нужны только несколько функций, но я быстро нашел это неработоспособным. OpenSSL достаточно структурирован, чтобы компоновщик разделился, но недостаточно для компилятора. YMMV в зависимости от того, какие функции вы используете. –

3

Реализация SRP в платформе IOS требует OpenSSL, так что хороший способ установить OpenSSL через стручки.

Существует хорошая реализация C srp с помощью hoccer под названием csrp.

Я написал обертку iOS для этой реализации, которую вы можете найти here. Но я должен упомянуть, что csrp уже хорошо реализован и объяснен самостоятельно из документации.

 Смежные вопросы

  • Нет связанных вопросов^_^