我一直在阅读斯坦福大学的Secure Remote Password protocol,它看起来非常适合iPhone应用程序运行的环境。不幸的是,我无法找到协议的良好Objective-C实现。据我所知,crypto libraries in the SDK也没有实现它。
有谁知道这样的实现?
如果做不到的话,你认为最好的选择是什么?我可以尝试build OpenSSL into my app,但这对于这一小块来说,感觉就像一个非常大的。我可以尝试将JavaScript或Java实现转换为Objective-C,但这违反了加密的第1条规则(使用已知的,经过测试的实现)。
一些后续项目:首先,它应该从上下文中显而易见,但我需要一些与闭源商业用法兼容的东西(我链接的JavaScript实现,我后来注意到,是AGPL)。
另外,假设我最终选择使用OpenSSL,我很难找到使用它来执行SRP的示例。他们的网站声称代码在那里,但我找不到任何证据,无论是在OpenSSL documentation,还是在寻找源代码(v 0.9.8k)。 (或者我是否认真地误读了一些内容,我仍然需要将their patches中的一个应用于OpenSSL源代码?)
修改
此时我真正可以使用的是即用型代码,相当完整的配方,或者在OpenSSL中使用SRP的某种示例。我很确定我可以用protocol docs从头开始拼凑一些东西,但我真的试图避免重新发明轮子,如果我能帮助的话。
答案 0 :(得分:5)
SRP-TLS的OpenSSL和GnuTLS实现是我所知道的唯一基于C的实现(TinySRP自2001年以来一直没有更新,并且有许多安全通知针对它所基于的底层OpenSSL版本,虽然我不知道它们是否会影响TinySRP本身。)
也就是说,我构建的每个iPhone项目最终都必须包含OpenSSL的副本。我建议只是咬住子弹并使用它。您链接的说明正常工作。
就个人而言,我使用具有arm和x86版本的lipo将OpenSSL构建到Universal库中。这样我可以链接到模拟器和设备的单个.a。脂肪很容易。只需构建两个库并将它们粘合在一起。这是我的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)
答案 1 :(得分:3)