1.6 开发工具
纵观本书,我们使用了一些很容易获得的工具,例如适合X86 32位和64位平台以及ARMv4处理器的GNU Compiler Collection C 编译器(GCC)。之所以选择它们,是因为它们非常专业,可以免费使用并且对读者具有真正的价值。
书中出现的各种算法大部分是以可移植的C语言实现,尽可能地方便更多的读者来阅读下面的那些代码列表。这些代码列表都是读者可以马上拿来就用的C代码,同时读者也可以在相应的网站上获得这些代码。同样,对C编译器产生的汇编代码列表也进行了适当的分析。如果读者熟悉AT&T风格的X86汇编语言和ARM风格的ARMv4汇编语言就更好不过了。
对于大部分的算法和问题,可能都有多种实现方法。例如,乘法就有3种基本的算法,并且每种算法又有各种不同的实现技术。对各种配置的大小和效率在列出的平台上也进行了一些适当的比较。当然,也鼓励读者在书中没有列出的平台上对这些配置进行测试比较。
一些算法也有安全权衡问题。例如,AES在使用查找表时速度最快。在这种配置条件下,它也有可能泄漏侧信道(side channel)信息(在第4章进行讨论)。本书探讨了各种变化试图最小化这种泄漏情况的发生。对这些算法实现的分析紧紧联系了现代处理器的设计技术,尤其是具有数据缓存功能的。建议读者能够至少熟悉X86处理器(例如Intel Pentium 4和AMDAthlon64)是怎样在块层次上进行操作的。
有时在书中会参考一些现有的源代码,例如TomsFastMath和LibTomCrypt。这些都是用C编写的开源算法库,并且已经用于工业生产中的各种平台,小到传感器,大到企业服务器。而本书中的代码列表是不依赖于这些算法库的,建议读者参阅算法库,研究它们的设计,甚至也可以使用它们来做“重复造轮子”之类的事情。这并不是说你不需要自己试着实现这些算法;相反地,在环境允许的条件下,使用发布的源代码可以缩短产品开发和测试周期。当这些算法库不适合项目的限制时,建议读者使用自己的实现。这些项目都可以在
www.libtomcrypt.com网站上获得。
在X86处理器上的时间数据是通过RDTSC指令生成的,它提供了精确的周期时间数据。建议读者熟悉这条指令及其用法。
【责任编辑:
杨硕 TEL:(010)68476636-8001】