美国国家数据加密标准

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
-5-
错。切记:不要在转换成数组时,错排了位的顺序。
⑺ DES 算法的安全性
确定 DES 算法作为加密标准, 公开全部算法在全世界公开使用, 无疑是向全世界提出挑战,但如果 DES 算法一旦被击破,将将使所 有用户全部失密,后果不堪设想。为此,当时美国国家标准局曾成立 专门研究小组进行研究,1978 年公布的研究结论认为,10~15 年内 DES 算法的安全性不成问题。现在这个时间已经大大超过。 另外,我们知道 DES 算法只有 256≈7.21×1016 个密钥,如果有 一台每秒可搜索 1012 个密钥的专用计算机对 7.21×1016 个密钥进行穷 举搜索,最多只需 20 小时 01 分 40 秒就可以破密。这也表明密钥长 度 56bit 是不充分的。所以,DES 算法目前仅作为乘积密码的典型代 表在密码学发展的历史上具有重要的地位。 人们对 DES 安全性的顾虑一直存在。当年美国斯坦福大学的研 究小组认为 S 盒的设计虽然不是线性的, 然而也不是随机的,似乎是 针对某一种目的而设计的,可能还存在有弱点。现在人们已经纷纷使 用三组 DES 密钥进行加、 解密的三重 DES 加密算法(Triple-encryption Data Encryption Standard)。或者使用密钥长度为 128 位的国际数据加 密算法 IDEA(International Data Encryption Algorithm), 它比 DES 算法 要安全得多,且只使用 8 次迭代运算,比使用 16 次迭代运算的 DES 算法在速度上也毫无逊色。 DES 算法目前仍有广大的用户, 但通常的应用都是作为一次性密 码使用,即与 RSA 等算法相结合使用,如首先对报文 M 进行完整性 校验(Message Interity Check),求出唯一的报文完整性控制码 MIC0, 再产生 8 组 7bit 的二进制随机数,连同每组的校验位构成 64bit 二进 制数作为报文 M 的 DES 算法密钥 K,对报文 M 加密生成密文 C, 最 后把 K 用 RSA 算法加密作为报文头部的第一部分,把 MIC0 用 RSA 算法进行电子签名加密后作为报文头部的第二部分,放在密文 C 的 前部, 同时发送。 接收方在收到报文后, 用 RSA 算法解密 K 和 MIC0, 同时通过解密电子签名确定发报方的身份,再用密钥 K 对密文 C 用 DES 算法解密得到报文 M,对报文 M 进行完整性校验得报文完整性
# include <stdio.h> # include <string.h> # include <stdlib.h> # include <dos.h> # include <conio.h> extern unsigned __stklen=65535; unsigned char chinese1[]={ 0xa1,0xd4,0xe9,0x94,0x8a,0xfd,0x8c,0xf8, 0xe4,0xfa,0x84,0x9f,0xf5,0xa0,0x58,0x00, 0x00 }; unsigned char keyword3[]={ 0x1e,0x7e,0x5e,0x36,0x42,0x36,0x2f,0x42, 0x34,0x16,0x3e,0x6e,0x4a,0x05,0x78,0x20 }; unsigned char PC_1[56]={ 57,49,41,33,25,17, 9, 1, 58,50,42,34,26,18,10, 2, 59,51,43,35,27,19,11, 3, 60,52,44,36,63,55,47,39, 31,23,15, 7,62,54,46,38, 30,22,14, 6,61,53,45,37, 29,21,13, 5,28,20,12, 4 }; unsigned char L_S[16]={ 1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1 }; unsigned char PC_2[48]={ 14,17,11,24, 1, 5, 3,28, 15, 6,21,10,23,19,12, 4, 26, 8,16, 7,27,20,13, 2, 41,52,31,37,47,55,30,40, 51,45,33,48,44,49,39,56, 34,53,46,42,50,36,29,32 };
如果矩阵行、列分别用 I、J 表示,这 64bit 每位所对应的位数 z 与 I、J 的关系为: z=J+(I-1)×8 DES 算法中的第 8、16、24、32、40、48、56、64 位即为我们通 常所表示的各字节的位 7,位 7 通常用来表明+/-符号,而在 DES 算 法的密钥中用来作为奇偶校验位,去掉它们不会对加、解密形成任何 影响, 收报方只是利用这些位对密钥 K 进行校验, 如果这些位全为 0, 一般说明没有对密钥 K 进行奇偶校验,否则就要对这 8 个字节全部 验算奇偶校验,看其是否一致,如不一致就说明密钥 K 在传送中有
第 第 第 第 第 第 第 第 I, J→ 8 7 6 5 4 3 2 1 ↓ 第1行 第2行 第3行 第4行 第5行 第6行 第7行 第8行 列 列 列 列 列 列 列 列 0 0 0 0 0 0 0 0——0x0 第 1byte 0 0 0 0 0 0 0 1——0x1 第 2byte 0 0 0 0 0 0 1 0——0x2 第 3byte 0 0 0 0 0 1 0 0——0x4 第 4byte 0 0 0 0 1 0 0 0——0x8 第 5byte 0 0 0 1 0 0 0 0——0X10 第 6byte 0 0 1 0 0 0 0 0——0x20 第 7byte 0 1 0 0 0 0 0 0——0x40 第 8byte 位 位 位 位 位 位 位 位 7 6 5 4 3 2 1 0 (其中 0x40 等,表示 16 进制 40 等。 )
⑸ 迭代和逆初始置换 IP-1
第 i 次迭代的输入由 Li-1 和 Ri-1 两部分组成,迭代过程为: Li=Ri-1 Ri=Li-1 f(Ri-1,Ki) 这里 是按位作模 2 加运算,迭代连续进行 16 次。最后,把以 R16 为前 32bit 而 L16 为后 32bit 的数据组,经过逆初始置换 IP-1(表 5) 位置换后获得密文,即可完成加密。
-4-
⑹ 字节中的序
DES 算法的密钥 64bit 二进制块是 8 个 bytes,每个 byte 为 8bit, 通常标为位 0 至位 7,是自右向左排列(数组的序为自左向右) ,这 就是说,64bit 应排列成一个 8 行 8 列的矩阵,与通常矩阵不同的是 这个矩阵的物理排序法为行数自上而下,列数自右向左(矩阵的序为 自左向右) ,如 0x0、0x1、0x2、0x4、0x8、0x10、0x20 和 0x40, 这 8 个字节构成的 64bit 矩阵为:
-6-
控制码 MIC,检验 MIC 是否与 MIC0 相等以确认报文的完整性。
附录
下面是九十年代初使用的程序源码, 使用软盘作为密钥盘, 密鈅放在软盘 A: 上。附录二为密钥生成程序,仅使用了 C 语言的随机数发生器。
附录一:
三重 DES 加密算法的 C 语言程序(本程序在 Turbo C++ 1.0 编译通 过)
-2-
⑶ 初始置换 IP
初始置换 IP 把 64bit 明文按表 4 进行 位置换,生成 64bit 数据组,左右各 32bit 分别为 L0 和 R0。它把第 1 位置换到第 40 位,第 2 位置换到第 8 位,第 58 位置换到第 1 位,第 50 位置换到第 2 位,等等。 IP 的逆 置换 IP-1(表 5)正好恢复到各位的原来位置。
-1-
始置换 IP-1 得密文; ⑤ 脱密的算法相同,只是子密钥使用次序颠倒,K16 在第一次使 用,K1 在最后一次使用。
⑵ 密钥变换 KS
密钥有 64bit,分成 8 组每组 8bit,每组最后一位是奇偶校验 位,即 8、16、24、32、40、48、 56 和 64 位是校验位。 KS 的流程见图 2,密钥 K 经 KS 变换后产生子密钥 Ki,i=1, 2,3, …,16。 首先,K 经 PC 一 1 按 表 1 进行位置换,生成 C0、D0,即若: K=k1k2k3…k63k64 位置换得: C0=k57k49k41…k44k36 D0=k63k55k47…k12k4 Ci-1 和 Di-1 经左移位变换 LS 获得 Ci 和 Di,不同 LS 的左移位数见表 2,即若: C1=c1c2c3…c28 D1=d1d2d3…d28 经 LS2 左移位变换后得: C2=c2c3c4…c28c1 D2=d2d3d4…d28d1 Ci、Di 连接后得 CiDi,经 PC 一 2 按表 3 位置换后获得子密钥 Ki,如: C1D1=a1a2a3…a55a56 则有: K1=a14al7al1…a29a32
-3-
0 0=0, 1 0=1, 0 1=1, 1 1=0. 再把运算结果分为 s1、s2……s8 8 组,每组 6bit。 S 变换根据表 7 进行,若输入 B=b1b2b3b4b5b6, 则以 b1b6 组成的二进制数换算为十进制后作为行数 I,b2b3b4b5 组成的二进制数换算为十进制后作为列数 J,即 I=b1b6,J=b2b3b4b5。 在对应的 S 表中查出对应于 I 行 J 列的数字换算为二进制后作为 S 的输出。例如 S1 的输入为 110010,则 I=10,J=1001,换算为十 进制后知 I=2,J=9,在表 7 中对应于 S1 栏内的 I=2,J=9 的位置 处为 12,其二进制表示为 1100,因而 Sl 的输出即为 1100。所以,S 变换是将 6bit 的输入变换为 4bit 的输出,不同的 S 对应于不同的变 换表。 位置换 P 按表 8 将 32bit 输入经位置换 产生 32bit 输出,若 P 的输入为 L=l1l2l3…l31l32, 则输出为 P(L)=l16l7l20…l4l25。
美国国家数据加密标准
徐厚骏
百度文库
信息加密方法有替代加密和代数加密两种。 经典的信息加密以保 护加密的全部算法为特征。1975 年 3 月,IBM 公开发表了 DES(Data Encryption Standard)数据加密标准;1977 年,美国国家标准局(ANSI) 宣布 DES 用于非国家保密机关,开创了公开全部加密算法的先例。
⑴ DES 算法的流程
DES 算法用二进制 64bit 密钥 对 64bit 数据进行加密和脱密, 加密 和脱密使用同一个算法实现。用户 先把明文数字化, 以 8byte 为 1 段把 报文分若干段,每段 64bit,对不同 的段使用双方约定的不同的密钥按 DES 算法加密。 DES 算法的工作流程见图 1。 ① 64bit 密钥 K 经变换 KS 产 生 16 个 48bit 的子密钥 K1、 K2…K16, 分别供 16 次迭代使用; ② 64bit 明文段经初始置换 IP 得到 64bit 数据组, 左 32bit 构成 L0, 右 32bit 构成 R0; ③ 由加密函数 f 实现子密钥 Ki 对 Ri-1 的加密变换和 Li=Ri-1, Ri=Li-1 f(Ri-1,Ki)的迭代变换,迭代过程连续 16 次;(其中 称作按 位模 2 加运算) ④ 由 Rl6 为前 32bit,Ll6 为后 32bit 组成的 64bit 数据组,经逆初
⑷ 函数 f(Ri-1,Ki)
函数 f(Ri-1,Ki)包括变换 E、与子密钥 Ki 按位做 模 2 加运 算、8 组 S 变换和位 置换 P, 由 R i-1 和 Ki 获得 f(Ri-1,Ki)。 其流程如图 3 所示。 变换 E 将 32bit 的 Ri-1 按表 6 选位变 换为 48bit,即若: Ri-1=r1r2r3…r32 则: E(Ri-1)=r32r1r2…r31r32r1 然后与 Ki 按位作模 2 加运算。模 2 加运算法则为
相关文档
最新文档