IOTA Crypto核心FPGA – 第一份进展报告

这是我关于EDF资助项目IOTA Crypto Core FPGA的第一份进度报告。我试着每4个星期做一次,直到所有里程碑都完成...... ^^IOTA Crypto核心FPGA - 第一份进展报告

关于该项目

IOTA的核心功能,如地址生成,签名,“Mini-Pow”和工作证明(PoW)需要很大的计算能力,这使得小型嵌入式系统几乎不可能(在实际意义上)。

该项目的目标是开发几个可供现有或新的嵌入式应用程序使用的模块,这些应用程序需要IOTA核心功能。

第一个是IOTA核心FPGA模块,它为大多数IOTA核心功能提供硬件加速。它将提供易于使用的高级API,而计算密集的低级计算可以卸载到专用逻辑,与纯软件解决方案相比,速度显着提高 - 使其成为嵌入式应用的理想选择。

此外,FPGA模块实现了几种安全机制,这使得攻击者很难未经授权地获取存储在模块上的种子的访问权。

第二个模块是将使用FPGA模块的系统级模块(SoM)。该SoM将有足够的资源将其用于大量应用程序。它甚至可以运行Linux。SoM可以看作是FPGA模块的集成示例。它可以不经修改地用于自己的应用,但其他微控制器也可以轻松使用FPGA模块。

第三个模块是使用SoM的应用板,它将成为IOTA传感器网关,用于简单和便宜的传感器。

总的来说,架构看起来像这样:IOTA Crypto核心FPGA - 第一份进展报告

目前,我正在研究第二个里程碑(第一个是PiDiver PoW),它将成为实际的FPGA内核。库存FPGA板用于此任务,将开发SoC系统。

FPGA是“现场可编程门阵列”的缩写。它由逻辑块组成,可以在FPGA内部进行配置,以构建更大的逻辑功能,直至完成CPU。在编程中描述了这种逻辑像Verilog或VHDL这样的语言,然后由综合工具合成逻辑。最知名的FPGA制造商Xilinx和Altera免费提供完整的IDE(适用于中小型FPGA)。FPGA具有一些优势,因为您可以描述真正的并行工作逻辑 - 但您也可以使用状态机来描述串行执行的逻辑。但FPGA并不适合所有事情,因为通常最好将微控制器用于某些任务,因为在尝试使用Verilog或VHDL时,逻辑利用率很容易爆炸。对于这种情况,可以在FPGA内部使用soft-cpus(例如来自ARM)。

该项目使用这种软硬件(Cortex M1)与硬件加速器相结合。这些加速器是逻辑块(在VHDL中描述),可以非常快速地完成一项任务 - 但没有其他任何东西(如SHA3)。它们可以集成到CPU的32位地址空间中,从而提供非常好的耦合和快速传输时间。

系统在Xilinx Vivado的BlockDesigner中看起来像这样:IOTA Crypto核心FPGA - 第一份进展报告

(红色组件已经开发 - 另一个在目录中作为IP提供或者是示例设计的一部分)

比较

在以下部分中,显示了不带加速器的Cortex M1,带加速器的Cortex M1,Cortex M3,Cortex M4,Raspberry Pi 3B和我的台式PC(Core i5)之间的比较。

到目前为止,已经开发了以下加速器:

- Curl-P81(用于PoW)

- Keccak384(用于Kerl用于地址生成和签名 - 它是SHA3的变体)

- 转换器字节< - > Trits

- Troika

Curl-P81,Keccak384和Troika是散列算法,在FPGA上每轮只需要一个时钟周期。转换器更昂贵,因为它需要大量的划分和乘法。

字节到Trits

这种转换很多,因为Kerl使用的是Keccak384,它在二进制中工作,但大多数IOTA函数后来都在三进制中工作。任务计算量很大,因为它需要大量的分工。Cortex M3和M4默认有硬件分配器,但Cortex M1没有。因此,为此转换构建加速器至关重要。IOTA Crypto核心FPGA - 第一份进展报告

尝试字节

这是相反的。与划分相反,Cortex M1具有硬件乘法器,其导致与Cortex M4几乎相同的速度。Cortex M3线性速度较慢,因为系统时钟较慢。IOTA Crypto核心FPGA - 第一份进展报告

Keccak384

SHA3​​在所有(二进制)CPU上运行得非常好。这是安全和快速的。但是,由于FPGA在一个时钟周期内非常好地执行大量逻辑,因此M1可以从硬件加速中受益匪浅。IOTA Crypto核心FPGA - 第一份进展报告

工作证明(Curl-P81)

Proof-of-Work目前用于垃圾邮件防护,并使用Curl-P81,这是一种三元散列算法。PoW算法尝试在散列结尾处找到具有一定数量的Trits设置为0的散列。数百万次迭代直到找到有效的解决方案并不罕见。这是我开发的第一个加速器,用于PiDiver。图像不显示Cortex M3和M4的PoW时间,因为测量平均时间需要很长时间。但我希望它是Raspberry Pi的十倍。IOTA Crypto核心FPGA - 第一份进展报告

捆绑创建

在此性能测试中,创建了具有4个事务(1个输入,2个输出,1个签名)的IOTA包。由于内存不足,我无法在短时间内在Cortex M3上生成一个 - 所以我只是跳过了它。IOTA Crypto核心FPGA - 第一份进展报告

获胜者 - 并不奇怪 - Core i5。但是具有硬件加速功能的Cortex M1比Raspberry Pi 3B 的单核更快。

在这个测试PoW没有完成 - 这将是不公平的^^

三驾马车

Troika是新的轻量级哈希算法,特别针对三进制CPU架构进行了优化。对于在二进制CPU架构上运行不佳而言,它应该不会令人惊讶。该算法使用了3次幂的模数和除法,这对于较小的微控制器来说非常糟糕。对于三进制CPU,除以3只是一个Trit移位,一个模数只有3个Trit-masking。这两个操作都不会花费太多时间在这些CPU上 - 但是目前我们没有三进制CPU,我们必须使用我们的工作。Cortex M4和M3有硬件分频器(但每个分频需要几个时钟周期),但在M1上则非常糟糕。

如此糟糕,我担心如果IOTA将来会从Kerl切换到Troika时我的项目无法使用......所以我想知道在FPGA中可以做些什么,并且令人惊讶的是Troika散列轮也可以在一个时钟周期内计算像Curl-P81或Keccak384。IOTA Crypto核心FPGA - 第一份进展报告

我必须明确指出,性能是在Troika的参考实现上测量的,当然可以对二进制CPU架构进行大量优化。IOTA Crypto核心FPGA - 第一份进展报告

上图直接比较了Kekkac384和Troika。以前在所有二进制CPU架构上都运行良好。后者可能只适用于三元组。

如果你问我是否认为Troika重量轻...我会说不...不是二进制CPU,目前我们没有其他人(希望很快就会到来)。

但这并不意味着三驾马车暂时无法使用,原因如下:

- 三驾马车可能不会在2020年之前使用

- 如果三驾马车证明足够安全,可以减少轮数。

- 此外,参考实现当然可以针对二进制CPU架构进行大量优化,例如使用查找表来避免div 3和mod 3计算。通过计算LFSR(当然这会影响计算时间)而不是查找等等,可以将大内存占用(6kB常量表)减少到16字节环缓冲区...

Crypto Core FPGA可以使用吗?

如果没有加速器,我绝对不会说...... M1比预期慢得多,但是图片随着加速而变化。在大多数学科中表现都相当不错,所以我对这个项目的进一步发展有一个很好的感觉。

风险

开始很顺利,关键组件正在工作并适合FPGA,但可能会发现Cortex M1的内部存储器不足以完成我想要的一切,因为它总共限制在256kB左右,但RAM和ROM可以调整大小。例如,可以增加RAM并减少ROM,反之亦然。所以我有信心它应该工作:-)

下一步

Cortex M1正在运行,加速器正在开发中。列表中的下一个是将安全元素附加到FPGA并实现AES以进行安全通信。如果AES将由Cortex M1或加速器完成,我还没有决定。一方面,它取决于速度,另一方面取决于逻辑利用率。

感谢您阅读这么多文字:-)


原文:点击进入

如果你喜欢我的这篇文章或者我之前发表的文章,我很高兴能得到一点捐助;-):

IOTA:PGGB9HOSLZQOPPVTGONEYLMJQWFAOLTZJVHEDR9XKSWCRJRUEZZOJYRRKNDBVNKADUXK9UZRKRAWEIFYWECAA9BTIW

专栏作者:IOTA-方可

个人简介:我共发表了 60 篇文章,总计被阅读了21,722 次,共获得了 690 个赞。

作者邮箱 作者主页 Ta的文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注