用C进行简单的加密实现
以前,我已经使用了不错的公共领域C ++ DES实现,但是现在我需要一些简单,基本,快速的嵌入式系统加密技术。
它并不需要牢不可破,但确实需要阻止临时黑客(例如,没有任何东西可用于金钱或者身份盗用,但是存储卡上传输的其他个人信息可能会丢失或者落入错误的人手中) )。
由于该处理器上的内存有限,我希望可以以离散块(小于或者等于512字节)进行编码的东西。
该项目不是开源的,并且不会使用库,我知道这进一步限制了公有领域的选择,但是BSD / apache / etc可能可以接受...
我犹豫要自己动手(每个人都应该这样做)。
-亚当
解决方案
回答
如果我们只是在寻找混淆,带有秘密常量的XOR就是我们所能发现的很小的实现。打破它也是微不足道的,因为它很容易通过频率分析来寻找最常见的英文字母。
如果我们需要更强大的算法,我建议我们看一下河豚鱼,这种河豚往往又小又快。它仍然确实需要用于表的内存,但是希望它将对应用程序有效。
布鲁斯·施耐尔(Bruce Schneier)明确地将Blowfish算法置于公共领域,而无视专利。我们可以从他的站点获取他在C中的实现(以及其他实现)。此来源不附带版权声明。我怀疑源代码也属于公共领域,但是可能需要进行更多检查。
回答
发布C ++ DES实现的那个人还发布了C Rijndael加密算法,我本该在他的网站上稍作介绍,Tiny Encryption Algorithm(此处为学术论文)也具有非常小的C实现足迹。
河豚看起来不错,就安全性而言,这可能是三者中最好的。
我将从TEA(较小的代码和内存占用空间)开始,但先对其进行包装,以便以后在需要时可以使用其他算法。它在早期的实现中有明显的弱点,但是对于这个项目可能甚至是过大的。
-亚当
回答
RC4简单快速。
回答
我们可以使用伪随机数生成器(PRNG)生成可重复的单词序列,然后将其与数据流中的相应单词进行XOR。 (发送器和接收器需要事先知道用于生成伪随机序列的参数。)
这种方法并非牢不可破,但这是对XOR-ing使用常量的一个提升,PRNG的实现非常简单,通常每个单词包含一个乘法和模运算。