RSA密码可以在具有32Kb内存的8位设备上实现吗?

时间:2014-10-17 21:42:32

标签: c cryptography rsa microcontroller public-key-encryption

我正在开发一个RSA加密库,用于微控制器等小型设备。我想知道是否有人已经有过做这种事的经验。

到目前为止我已尝试过:

我尝试的第一件事就是从这个库http://axtls.sourceforge.net/中获取一些代码。我不想要任何TLS特性,因为它太复杂(而且很大)。我在从内存加载字节时遇到问题,也许我应该使用来自它们的加载器例程,DER无聊阅读,ASN1是二进制XML,我用XML完成,我没有空间也解码XML。

由于我不知道的互操作性问题,或许我不应该使用openssl转储工具来占用字节数。

第二次尝试是使用库https://github.com/wernerd/ZRTPCPP/blob/master/bnlib/bn16.c中的代码。问题是CRT算法太大而不适合,即使它提供了一些性能提升,我不需要它,因为我有小数据包,我不会使用更长的密钥。我无法拥有更长的密钥,因为我没有足够的RAM内存。

我更喜欢有一些小型图书馆。此库也有太多的指针间接。 从Stackoverflow中读取更多信息我发现了这段代码,但是我从中得到了除零,我不确定加载大数字时是否有endianes问题。 https://github.com/Coder-666/uRSAlib/blob/master/uRSA/BN.c

这些库看起来很有希望,但我没有时间测试它们: http://cryptopp.com/#downloadhttps://github.com/jedisct1/libsodium/tree/master/src/libsodium

就是这样,我需要尽快完成这项工作,因为我几乎没有时间,如果有人知道一些小型RSA库真正适用于8位的小东西,我将不胜感激,否则我会使用像AES和固定密钥之类的东西,但这对安全性来说并不是最理想的。 (更新:现在我正在探索使用ECC曲线,因为他们使用固定数量的内存并且需要更少的内存,根据本文http://eprint.iacr.org/2013/375.pdf

问题:

是否可以在少于15Kb的PIC十六进制代码中实现RSA加密,或者是否有一些已知的库可以执行此操作?

参考文献:

encryption : RSA algorithm

How to encrypt a string using public key cryptography

Library for RSA implementation in pure C

Are there any very simple RSA implementation in C++

Implementation of RSA without dynamic allocation

implementing a bignum library for rsa encryption

http://en.wikipedia.org/wiki/RSA

http://www.di-mgt.com.au/rsa_alg.html#encryption 我也从PGP项目看过这个库,但它太复杂了。

http://fossies.org/dox/pgpsrc658unix-gnu/dir_d8387bb0a43f1d00e085a9a2c8a94120.html

http://www.math.mtu.edu/mathlab/COURSES/holt/dnt/phi4.html

http://cacr.uwaterloo.ca/hac/(应用密码学,这个看起来很有希望,我现在正在阅读)。

ftp://ftp.cs.pdx.edu/smn/ipsec/skip/ 值得一看的东西。

http://www.codeproject.com/Articles/14462/Build-your-own-cryptographically-safe-server-clien

http://www.codeproject.com/script/Articles/ViewDownloads.aspx?aid=8536

http://www.codeproject.com/script/Articles/ViewDownloads.aspx?aid=5266

http://www.codeproject.com/Articles/60108/BigInteger-Library

1 个答案:

答案 0 :(得分:2)

BigDigits图书馆+ Wikipedia为我工作。 BigDigit库非常小(我只使用了1个头文件和1个源文件),但速度非常快,并且已经实现了"取幂和模数"功能,所以编码和解码是直截了当的。我不是在微控制器上生成键。

我的代码大小(在ARMv7上)介于38到27 KB之间,具体取决于优化。