Arduino的加密库


9

我正在使用Arduino读取键盘并在键盘PIN输入时打开电击。对于此草图,我想使用某种轻量级加密将PIN存储在EEProm中。有人知道这样的图书馆吗?我听说使用TwoFish是可能的。

Answers:


12

您不想加密密码(PIN),而是希望对它们进行哈希处理。当有人输入密码时,您对密码进行哈希处理,然后将哈希与存储的哈希进行比较。这种方法(使用了30多年)的优点在于,即使有人掌握了源和哈希,只要您选择足够强大的哈希函数,他们仍然无法分辨出与哈希匹配的PIN 。

您不想自己实现加密-您想使用其他人的库,尤其是使用已经由大型社区测试过的开放实现的库。加密很难,测试很难,测试加密也很难,所以请别人为您做。

您应该签出GPLv3许可的AVR加密库。还有一个用于AVRSkein实现


1
推荐-很好的资源,应该将其设置为问题的答案。
Lou

9

Hristos发布的链接虽然可能有用,但肯定不算作“加密”。它实际上只是“混淆”。

众所周知,即使对于那些懂数学的人来说,正确的密码学也很容易出错。

作为对原始帖子的回应-有什么攻击方法可以使某人访问EEProm中的PIN?当然,如果他们已经得到了远到您的电子产品,他们可以只是“剪断红线”开门?

如果您以某种方式确实拥有一个系统,使攻击者可能没有足够的权限来打开门,但攻击者可能会掌握EEProm内容,那么您可能希望重新设计它。你可以看一下类似Unix口令散列单向散列函数-这样EEPROM不会需要牛逼包含解密密钥-问题是引脚的搜索空间是非常小的-如果我可以下载的散列版本PIN,我可以很快尝试所有10,000个PIN,我怀疑任何现代的笔记本电脑都将在几秒钟内运行所有PIN。


我同意(并在上面同意),单向哈希将很有用,如果您正在对系统进行编程,则可以按需要制作销钉,例如8位数字给出了100 000 000个组合,这将花费更长的时间。
Amos

1

我预见的问题是,如果他们可以看到您的密码,那么他们也可以看到您的程序,该程序可以加密/检查/解密您的密码。另外,如果他们有您的芯片,他们不仅可以修改程序以始终对输入的任何引脚都给出肯定的结果(有效地绕过检查)。


1

您打算如何计划对加密的PIN进行解码,以检查用户是否输入了有效的PIN?您需要存储解密密钥...在这一点上,如果攻击者可以读取您的eeprom,他也可以读取您的闪存以找到加密密钥。基本上使您的整个加密完全无用。就像其他人所说的那样,如果他已经具备读取您的芯片的能力,那么他就可以编写一个新程序。打开门要简单得多,我怀疑有人会麻烦尝试破解您的芯片。


1

是一种简单的C语言刻写方法,可以很容易地移植到Arduino。这似乎是用arduino有限的资源加密数据的最简单方法。

-编辑-要使密钥不进入程序,您可以将PIN的一半作为密钥。这意味着您的程序将使用PIN的密钥一半来解密EEProm中存储的加密的1/2 PIN。如果EEProm的解密密钥与您的密码部分(不是密钥)匹配,则门将解锁。这仅在入侵者无法打破门或对Arduino重新编程的情况下才有效。


但是,如果他们无法访问您的芯片,则不需要加密该引脚。
Amos

1

我讨厌在问另一个问题时不回答这个问题,但是...

您的设备不防篡改有某些原因吗?我已经看到在“长凳”上实现的螺丝孔中的按钮开关,用于检测您担心的篡改类型。然后..这是一个带有丁烷微炬的孩子,他可以在不松开任何东西(或不损坏芯片)的情况下设法拿到您的芯片。.以某种方式,他知道您的防篡改系统的设计(也希望是)可以检测到芯片的变化。环境光和/或声音。当盖子脱落时,两者都变得完全不同。

如果是这样,应该是一个两部分系统,其中公开的部分与更易于实现加密的部分进行通信。另外,校验和(帮助)说明了拿着火炬的孩子。

我认为您是在要求螺丝起子充当锤子。


1

这些评论确实是实话实说。尝试尝试学习加密并没有错,但这并不是学习此类东西的好项目。您确实想要一本好的教科书和一台计算机,就像@bigiain所说的,数学很容易出错。

为了更好地了解加密技术的工作原理以及您要面对的挑战,《应用密码学手册》非常出色且免费:

如果您只是想保护您的项目,这是一种低效的方式。如果您对密码学感兴趣,请从本书和计算机开始。


我了解加密技术,阅读Bruce Schneier的书,并且已有20多年的编程经验。我知道真正的威胁只是打破大门,走过任何种类的Arduino控制器。如果可以避免的话,我只是出于良心无法在EEProm中使用明文PIN码进行安装。飞

如果您要避免存储明文PIN,则有许多简单的混淆方法在此角色中同样有效。上面的响应者仅试图帮助您了解加密的作用和不起作用。这是一个AES库:hoozi.com/Articles/AESEncryption.htm 我也想说,仅仅因为您已经编程20年,并不意味着您就可以“理解”密码学。这是一个完全不同的领域。一个有20年汽车修理工的技术人员,但是我不希望他从头开始设计CAN总线。请检查你的态度。
Lou

哦,上帝... 20年的编码,您认为可以加密运行时数据吗?退出。
MickLH '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.