【问题标题】:Secure Remote Password Implementation for iPhoneiPhone 的安全远程密码实施
【发布时间】:2010-12-04 03:07:55
【问题描述】:

我一直在阅读斯坦福大学的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 或grepping 源代码(v 0.9.8k)中找不到任何证据。 (或者我是否严重误读了一些东西,我仍然需要将their patches 之一应用于 OpenSSL 源?)

编辑:

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

【问题讨论】:

    标签: iphone objective-c security cryptography openssl


    【解决方案1】:

    SRP-TLS 的 OpenSSL 和 GnuTLS 实现是我所知道的唯一被维护的基于 C 的实现(TinySRP 自 2001 年以来没有更新,并且针对它所基于的底层 OpenSSL 版本有许多安全通知,虽然我不知道它们是否会影响 TinySRP 本身)。

    也就是说,我构建的每个 iPhone 项目最终都必须包含一个 OpenSSL 副本以用于某些用途。我建议只是咬紧牙关并使用它。您链接的说明可以正常工作。

    就个人而言,我使用 lipo 将 OpenSSL 构建到一个通用库中,该库同时具有 arm 和 x86 版本。这样我就可以为模拟器和设备链接到一个 .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)
    

    【讨论】:

    • 那么设备的 OpenSSL 库最终有多大? (它的结构是否足够让链接器可以忽略未使用的位?)
    • libcrypto.a + libssl.a 超过 250 万,但它们在最终二进制文件中不代表任何类似的东西。如果我记得上次我调查的时候,OpenSSL 在最终的二进制大小上增加了大约 400-500k。比我想要的多,但比我担心的要少。我尝试减少 OpenSSL 中的文件数量以缩短编译时间,因为我们只需要几个函数,但我很快发现这不可行。 OpenSSL 的结构足以让链接器拆分,但对于编译器来说还不够。 YMMV 取决于您使用的功能。
    【解决方案2】:

    iOS平台SRP的实现需要OpenSSL,所以一个好办法是通过pods安装OpenSSL。

    hoccer 有一个很好的 srp C 实现,叫做csrp

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-29
      • 2012-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-08
      • 2017-11-14
      相关资源
      最近更新 更多