二进制流的拆分、衔接等操作。
表1和表2实例给出了部分基本函数。
表1移位操作函数集 ’ 函数名 函数原型 功能 符号表示 shiftleft b=shiftleft(a,x) 左移x位 b=a<<x shiftright b=shiftright(a,X) 右移x位 b=a>>x shiftleftcyc shifileftcyc(a,x) 左环移x位 a<<<X shiftrighteyc shiftrightcyc(a,x) 右环移x位 a>>>x 表2算术运算函数集 函数名 函数原型 功能 符号表示 And c=and(a,b) 按位与 c=a and b Or C=or(a,b) 按位或 C=a or b Xor C=xor(a,b) 按位异或 c=a xor b jlon b=jion(al,…an) 衔接比特串 b=al l I a2…l 8/1 split (bl,..,bn)=split(a) 拆分比特串 (bl I I b2…I bn)=a switch switch(a,b) 交换比特串 2.4.2密码算法模块函数 -密码算法有一些常用模块,比如P置换、s变换及AES中的字节替代等。
为了算法描述方便,我们设计实现了一些常用的密码算法模块,表3实例给出了分组密码算法中的P置换、S变换。
·25l· 第十八届全国信息保密学术会议(IS2008)论文集 表3分组密码算法密码模块函数集 函数名 函数原型 功能 P置换,对M进行P置换,置换结果放在C中, C=permute(a,b) {3, permute a表示M的位数,b表示C的位数,{}中表示置 2.…,15}(M) 换表 s变换,对B进行s变换,变换的结果放置在C C=substitute(a,b){5, suhstitute 中,a,b用来表示s变换为几进几出。
{}中表 6,…15f(B) 示S盒 2.5基于BCADSL的DES密码算法描述 根据上述BCADSL的语法规范,下面以密码算法DES为例进行相关的说明。
2.5.1注释部分 注释部分类似通用程序设计语言的注释,对单行的注释使用//,对多行的注释使用/木宰/。
在生成目标代码时直接翻译成目标代码的注释部分。
在任何允许空格出现的地方,都允许出现注释。
2.5.2说明部分 说明部分以/explain开始,以/end结束,主要用来说明算法的基本常量,如分组长度、密钥长度等。
这部分内容相当于C语言中的宏定义,在程序编译期间可进行宏替换。
如DES密码算法的说明部分可写为: /explain KEYLENGTH(64);//密钥长度64位 GROUPLENGTH(64);//分组长度“位 /end 2.5.3主体部分 主体部分12A/start开始,以、end结束,主要用来描述密钥变换、加解密主过程。
在主体部分首先进行密钥变换生成子密钥,子密钥以subkey(a,b)表示,其中a表示子密钥长度,b表示子密钥个数,subkey为关键字。
下面以DES密码算法为例说明密码算法描述的主体部分。
/start //密钥变换 subkey(64,16); ·252· 分组密码算法领域专用语言 key=0x56248934; X=permute(56,56){50,…,11,4}(key); (C II D) =X; C<<<l;//采用循环左移位 D<<<1: subkey〔1〕=permute(56,48){14,17,……,36,29,32}(C Il D); //加密主过程 M=0x12345678; (L 0 R)=permute(64,64) {58,50,42,34…….,23,15,7}(M); //16轮循环变换 /Loop(s=l;step=1)=16 X=permute(32,48){32,l,……,32,1}(R); Y=Xxorsubkey〔i〕; (B1 ff B2 ll B3|I B4 lI B5|{B6 l{B7 Ij B8)=Y; S1=substitute(6,4){14,0,4,……,6,o.,.13}(B1); Fp=permute(32,32){16,7,……,4,25}(S1 mS2|l S3 I|s4 0 s5 0S6 II s7 J|S8); switch(xor(L,Fp),R);//实现比特串左、右部的交换 、Loop//循环结束 C=permute(64,64){8,40,……,57}(R 0 L); 、end//加密结束3 BCADSL的实现 BCADSL通过密码算法代码生成系统来实现。
密码学算法代码生成系统的流程如图1所示。
密码算法代码生成系统接收BCADSL描述的密码算法,并自动生成相应的源程序代码。
从图1可看出,该系统主要包括两部分: (1)将描述密码算法的 ·253· 第十八届全国信息保密学术会议(IS2008)论文集 图1 密码算法代码生成系统的流程XX.mdsl文件直接转化为xx.g文件;(2)借助ANTLR工具将X.X.g文件直接转换为XX.c文件。
但如何将描述密码算法的XX.mdsl文件直接转化为XX.g文件是本文至关重要的部分。
为了实现这种转化,本文借鉴ANTLR词法和语法扫描的思想及自动转化机制,进行程序源代码的修改,直接将】【】【.mdsl转化为XX.g。
另外,如何准确将XX.mdsl文件中的不同动作加入到XX.g中也是一个难解的问题,如DES算法中P置换和S变换这两个动作,如何准确翻译到XX.g文法文件中。
ANTLR自动将XX.g文件生成对应的c语言程序时,自动生成的程序并不包括main函数,main函数每次都需要自己书写,而且调用的都是ANTLR的API接口。
为了使ANTLR通过XX,g文件自动生成main函数,还需要修改ANTLR源程序的词法库。
4结束语 基于BCADSL实现的密码算法代码生成系统使得密码学专家只需专注自己的密码算法设计,而不必再花费更多的时间去关注算法的实现。
通过本系统直接产生的源代码能不作改动就能编译执行,立即产生算法结果并验证,为密码算法的安全性自动化检测分析提供了一种可行的方法,也为密码算法安全性等测评提供一种易用、高效的工具,具有重要的理论意义和现实意义。
随着对BCADSL的研究,今后在此基础上可扩充到序列密码、公钥密码、数字签名等其他密码算法的描述。
参考文献〔1〕Martin Fowler.Language Workbenches:The Killer-App for Domain Specific Languages?〔oL〕. ·254· 分组密码算法领域专用语言 http://martinfowler.corn/articles/languageWorkbench.html,2005.〔2〕MARJAN MERNIK,JAN HEERING,ANTHONY M.SLOANE.when and How to Develop Do- main-SpecLfic Languages〔c〕.ACM Computing Surveys,2005(37):316~344〔3〕张乃孝,蒋凌霄.Au广_一算法与数据结构教学小语言.计算机科学,2003(30):178 _180 .〔4〕Rod Coffm,Paul Holser.Cr
上一篇:
电信网管报表系统
下一篇:
政府形象媒体危机的处置策略研究