【问题标题】:Tiny asymmetric cipher implementation to validate download用于验证下载的微小非对称密码实现
【发布时间】:2011-03-19 04:02:52
【问题描述】:

为了允许小型 C++ 应用程序在通过 Internet 连接的客户端更新自身,我需要一种基于公钥验证下载的机制。 DSA 或 RSA 等算法似乎可以很好地做到这一点。

但是,查看众所周知的可用库(Crypto++、LibTomCrypt),它们最终都使我的二进制文件变大了 > 500k,而在我看来,这样的逻辑可以在几个 k 中实现。是否有任何库可以在

【问题讨论】:

  • 500k 的问题是什么?严重地。谁的硬盘或连接无法承受 500kb?
  • 500k 实际上很多。尤其是当一些谷歌搜索可以产生 RSA 和 MD5 的独立实现时。您只需要一个哈希算法 (MD5),然后是 RSA 来执行公钥/私钥部分。

标签: c++ rsa dsa


【解决方案1】:

如果您只有 Windows,只要您的应用程序部署在 win2k 或更高版本上,您就可以链接到 windows Crypto API。 Windows Crypto MSDN article.

编辑: 另一种可能的解决方案,如果您只需要验证下载没有损坏,请快速搜索一下 google 找到this small implementation of MD5 的来源。根据编译的目标代码顶部 3k 处的自述文件。

【讨论】:

  • MD5 基本上已被严肃的密码学家弃用,SHA-1 可能是更好的选择。
  • MD5 在检测损坏方面绝对是矫枉过正,CRC64 可能是更好的选择。
【解决方案2】:

http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.143.3049&rep=rep1&type=pdf 中描述了一个椭圆曲线库,根据作者的说法,它可以配置为在微控制器上只需要大约 7k ROM 和 200 字节以下的 RAM

【讨论】:

    【解决方案3】:

    你真的需要密码吗? 通常,要验证下载,您可以使用 MD5 或 SHA 等哈希函数。也许你可以找到一个使用这些的小型图书馆。

    无论哪种方式,您都可以尝试 openssl 库。但是我机器上的 .a 大约是 400K 和 250K 被剥离。

    【讨论】:

    • 重点不是验证下载的字节顺序是否正确,而是验证其真实性并防止同一网段上的某人使用恶意二进制文件强制更新。
    【解决方案4】:

    我想您可能会发现MIRACL 库满足您的需求。

    【讨论】:

      【解决方案5】:

      校验和可以轻松处理此类验证工作。

      【讨论】:

      • 重点不是验证下载的字节顺序是否正确,而是验证其真实性并防止同一网段上的某人使用恶意二进制文件强制更新。
      【解决方案6】:

      由于我没有找到适合我特定需求的库,因此我为此创建了自己的库:http://github.com/paiq/dsa_verify。当前的实现占用了大约 50k 的程序内存,这主要是由于包含了 bignum 数学库,但未来的版本可能会被剥离更多。

      【讨论】:

        猜你喜欢
        • 2011-11-17
        • 1970-01-01
        • 1970-01-01
        • 2018-06-14
        • 1970-01-01
        • 2012-11-11
        • 1970-01-01
        • 2016-03-02
        • 1970-01-01
        相关资源
        最近更新 更多