适用于iPhone的安全远程密码实施

时间:2009-10-06 00:31:12

标签: iphone objective-c security cryptography openssl

我一直在阅读斯坦福大学的Secure Remote Password protocol,它看起来非常适合iPhone应用程序运行的环境。不幸的是,我无法找到协议的良好Objective-C实现。据我所知,crypto libraries in the SDK也没有实现它。

有谁知道这样的实现?

如果做不到的话,你认为最好的选择是什么?我可以尝试build OpenSSL into my app,但这对于这一小块来说,感觉就像一个非常大的。我可以尝试将JavaScriptJava实现转换为Objective-C,但这违反了加密的第1条规则(使用已知的,经过测试的实现)。

一些后续项目:首先,它应该从上下文中显而易见,但我需要一些与闭源商业用法兼容的东西(我链接的JavaScript实现,我后来注意到,是AGPL)。

另外,假设我最终选择使用OpenSSL,我很难找到使用它来执行SRP的示例。他们的网站声称代码在那里,但我找不到任何证据,无论是在OpenSSL documentation,还是在寻找源代码(v 0.9.8k)。 (或者我是否认真地误读了一些内容,我仍然需要将their patches中的一个应用于OpenSSL源代码?)

修改

此时我真正可以使用的是即用型代码,相当完整的配方,或者在OpenSSL中使用SRP的某种示例。我很确定我可以用protocol docs从头开始拼凑一些东西,但我真的试图避免重新发明轮子,如果我能帮助的话。

2 个答案:

答案 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)

在iOS平台上实施SRP需要OpenSSL,所以一个好方法是通过pod安装OpenSSL。

有一个名为csrp的srp的srp的良好C实现。

我为此实现编写了一个iOS包装器,您可以找到它here。但我必须提到 csrp 已经很好地实现并从其文档中自我解释。