文章分类

当前位置:首页>技术文章>利用汇编语言实现DES加密算法

利用汇编语言实现DES加密算法

利用汇编语言实现 DES 加密算法摘要:DES 算法是一种数据加密算法。自从 1977 年公布以来,一直是国际上的商用保密通信和计算机通信的最常用的加密标准。DES 算法的实现一般用高级语言。 关键词:加密算法 DES 汇编语言目前在金融界及非金融界的保密通信中,越来越多地用到了 DES 算法。DES(Data Encryption Standard)即数据加密算法,是 IBM 公司于 1977 年研究成功并公开发表的。

随着我国三金工程尤其是金卡工程的启动,DES 算法在 POS、ATM、磁卡及智能卡(IC 卡)中被广泛应用,以此来实现关键数据的保密。如信用卡持卡人的 PIN 的加密传输、IC 卡与 POS 间的双向认证、金融交易中的密码键盘等,均用到 DES 算法。由于密码键盘不可能使用高级语言,所以用汇编语言实现 DES 就非常实用。1 DES 算法的简单原理 DES 是一种分组密码。假定明文 m 是由 0 和 1 组成的长度为 64 位的符号串,密钥 k 也是 64 位的 0、1 符号串。

设:M=m1m2m3…m64 K=k1k2k3…k64 加密过程可表达如下: DES(m)=IP-1·T16·T15…T2·T1·IP(m) 其中:IP(m)是初始置换,IP-1 是逆置换,T16~T1 是 16 次迭代。

(1)初始置换 IP 功能是把输入的明文 m 按位重新组合,并把输出分为 L0、R0 两部分,每部分各长 32 位,其置换规则如下:58,50,42,34,26,18,10,2,60,52,44,36,28,20,12,4,62,54,46,38,30,22,14,6,64,56,48,40,32,24,16,8,57,49,41,33,25,17,9,1,59,51,43,35,27,19,11,3,61,53,45,37,29,21,13,5,63,55,47,39,31,23,15,7

(2)逆置换 IP-1 经过 16 次迭代运算后,得到 L16、R16,将此作为输入,进行逆置换。逆置换满足: IP·IP-1=IP-1·IP=I 逆置换正好是初始置换的逆运算。

(3)T16~T1 的迭代计算 DES 的迭代算法采用模 2 加法。 在通信网络的两端,双方约定了一致的密钥。在通信的源点用密钥对核心数据进行加密并形成密文,然后,以密文的形式在公共通信网中传输到通信网络的终点。数据到达终点后,用同样的密钥对密文数据进行解密,便再现了明文形式的核心数据。这样,便保证了核心数据(如 PIN、MAC 等)在公共通信网中传输的安全性和可靠性。2 汇编语言的实现用汇编语言实现 DES 算法有它的优势也有它的难点。

优势是 51 汇编的位操作可以方便地实现置换功能。但用汇编语言实现算法的迭代运算及循环功能比较烦琐。在用 51 汇编实现 DES 的过程中,我编写了几个子程序,组合起来可实现 DES 算法加密。在这里写出一些思路,有需要的同行可与我联系(E-mail:zhoubin@jlu.edu.cn)。 8031 有 16 个可以位寻址的寄存器,可放置 128 位的数据,利用它可实现 DES 的转置功能。将明文 m 放入寄存器 27H~20H 中,即位地址 00H 对应 m64,3FH 对应 m1。

利用标志寄存器 C 可实现置换与逆置换程序。在 DES 的 16 次迭代过程中,要实现公式: Li=Ri-1;Ri=Li-1f(Ri-1,ki) 的运算过程,其关键在于 f(Ri-1,ki)的功能。f 是将 32 位的输入转化为 32 位的输出。其中含 3 项技术: ① 将 32 位膨胀为 48 位的 E 功能。该项功能可用类似于置换功能的子程序编写。 ② 48 位子密钥的生成。为了便于 51 汇编生成子密钥,可以使用主机用串口下传的方式,由主机将 16 个子密钥传给 89C52 为核心的单片机,然后存入 80H~FFH 中。

如果密钥是固定的,则可直接将子密钥固化在 89C52 的 Flash 中。 ③ S 盒的功能是将 48 位的输入再次缩为 32 位。具体实现是将 S 盒表存入 89C52 的 Flash 中,每次通过查表求得 S 输出的结果。 下面列举其中的几个子程序。

(1)IP 置换子程序;入口寄存器:(MSB)2726252423222120(LSB),出口寄存器:(MSB)2F2E2D2C2B2A2928(LSB);功能:将入口寄存器的数据按置换表换位。IP: MOV C,06H;将 m58 送到进位标志中 MOV 7FH,C;将进位标志送 m1 中 MOV C,0EH;将 m50 送到进位标志中 MOV 7EH,C;将进位标志送 m2 中;重复,按表编写...MOV C,31H;将 m15 送到进位标志中 MOV 41H,C;将进位标志送 m63 中 MOV C,39H;将 m7 送到进位标志中 MOV 40H,C;将进位标志送 m64 中 RET(2)逆置换子程序;入口寄存器:(MSB)2726252423222120(LSB),出口寄存器:(MSB)2F2E2D2C2B2A2928(LSB);功能:将入口寄存器的数据按逆置换表换位。

IPRVS:MOV C,18H;将 m40 送到进位标志中 MOV 7FH,C;将进位标志送 m1 中 MOV C,38H...RET(3)异或子程序;入口寄存器:272625243F3E3D3C,出口寄存器:2B2A2928;功能:将寄存器 27262524 的内容和寄存器 3F3E3D3C 的内容异或。结果保存在 2B2A2928 寄存器中。XORLF: MOV A,3FH;将高 8 位异或 XRL A,27HMOV 2BH,A;放入出口处 MOV A,3EHXRL A,26HMOV 2AH,AMOV A,3DHXRL A,25HMOV 29H,AMOV A,3CHXRL A,24HMOV 28H,ARET(4)S 盒子程序;入口寄存器:(MSB)2F2E2D2C2B2A2928,出口寄存器:(MSB)27262524;功能:48 位→32 位 S6TO4: MOV 20h,2FH;取出高位数据 LCALL S162345;调用实现 Si(b1b6,b2b3b4b5);的功能子程序 MOV DPTR,#S1TAB;S 盒表的首址 MOV A,21H;取出第几个 S 盒 LCALL DPTRADDCLR AMOVC A,@A+DPTR;求出 S 盒的表地址及 S 结果 SWAP AMOV 27H,A;保存高位结果 MOV 20H,2EHLCALL S162345;重复 RET 利用这些子程序,我们成功地开发了以 89C52 为核心单片机的密钥键盘,可用于金融系统的用户远程密码修改,也可用于其它商用密文的传输。


© 星光电子技术工作室 2021 All Rights Reserved.
如有任何问题、建议、业务、合作,请联系手机/微信:13713820066