假设一个好的C程序员想要从头开始编写给定对称密码的VHDL代码。任何人都有任何关于写一个不太难的想法或提示吗? 它仅用于最后一年项目的概念验证。我已经使用opencores核心成功地运行了AES。
基本上,我有一周的时间来编写VHDL实现。我会高于C的平均水平但VHDL并不高,所以不要寻找太难的东西。正在阅读有关EStream密码的内容。如果有人能指出我正确的方向......谢谢!
P.S。考虑到我工作的时间有限,我担心的是我会在FPGA中实现一些太尴尬的事情!
答案 0 :(得分:1)
我在1996年的2 1/2天内编写了数字加密标准(DES)的实现,开始时非常彻底地理解这个特定的(现在过时的)对称加密算法,更不用说VHDL了。我还使用很少的C程序来生成部分VHDL代码(比如测试平台的测试向量,S Boxes)。 DES最初需要在硬件中实现,在RTL级别的一项IBM专利中进行了描述,而在FIPS Pub 46中以中性方式记录了参考实现。
我的实现可以用作参考,不是直接合成的,它有RTL级别的I / O缓冲区,需要删除。它还使用配置在R和L的四个相同的字节寄存器对中指定S Box作为组件。在使用尚未支持配置的VHDL分析器/模拟器之前,我已将它们统一起来。
该分布的最大部分是关于DES排列的PDF文档,其具有8位接口,用于初始置换,反向初始置换和置换选择1(添加第9条线)的8条线的转置。 E置换也是非常规则的。唯一不规则的排列是置换选择2和P置换。当然还有S盒。
在最简单的实现中,DES可以在大约4,700个NAND门等效物中实现,并且存在具有预期结果的测试向量。请参阅Dropbox上的vhdl_des.tar.gz和des.test(测试向量)。
还有一个javascript DES实现,它被禁用,以防止它在教育环境中使用任意键。捕获页面您可以实际撤消禁用,允许它使用任意键。见JavaScript DES Example。这里的值是显示每轮的内部值。
[可以在JS-DES.html http://dpades.googlecode.com/svn/trunk/simu_js/JS-DES.html找到带有可写密钥的JS-DES.html副本,项目主页(http://code.google.com/p/dpades/)表示它是GPLv2。]
您可以使用javascript实现来查找舍入值,以便对您的实施进行问题排查。
如果它不够精致,请尝试使用Triple DES。
答案 1 :(得分:0)
HDL需要与软件不同的开发思维。你不会在一周内从头开始跑步。您可以尝试使用原始的Verilog AES实现(也在Opencores上)。将其转换为VHDL的过程将教会您一些事情,但您也不会学会正确利用Verilog缺乏的VHDL功能。