收藏 分享(赏)

密码学课程设计报告.doc

上传人:精品资料 文档编号:10770788 上传时间:2020-01-08 格式:DOC 页数:33 大小:741.59KB
下载 相关 举报
密码学课程设计报告.doc_第1页
第1页 / 共33页
密码学课程设计报告.doc_第2页
第2页 / 共33页
密码学课程设计报告.doc_第3页
第3页 / 共33页
密码学课程设计报告.doc_第4页
第4页 / 共33页
密码学课程设计报告.doc_第5页
第5页 / 共33页
点击查看更多>>
资源描述

1、1密码学课程设计报告班级:信安 09-2 班姓名:李明月学号:080937552目录1 古典密码算法凯撒密码 41.1 凯撒密码概述 .41.2 算法原理及设计思想 .41.3 主要算法分析 .41.4 程序运行结果 .41.5 密码安全性分析 .52 序列密码 RC4 .52.1 RC4 算法概述 .52.2 算法原理及设计思想 .52.3 程序主要算法分析 62.4 程序运行结果 72.5 算法分析 73 分组密码算法 .83.1 DES 加解密算法的实现 .83.1.1 DES 算法概述 83.1.2 算法原理及设计思想 .83.1.3 程序主要算法分析 .113.1.4 程序运行结果

2、133.1.5 安全性分析 143.2 AES 加解密算法的实现 .143.2.1 AES 算法概述 153.2.2 算法原理及设计思想 .153.2.3 程序主要算法分析 .173.2.4 程序运行结果 223.2.5 安全性分析 224 HASH 函数MD5 算法 .234.1 算法概述 234.2 算法原理及设计思想.234.3 程序主要算法分析 264.4 程序运行结果 284.5 安全性分析 2835 公钥密码算法-RSA .295.1 算法概述 295.2 算法原理及设计思想 .295.2.1 算法描述密钥生成 295.2.2 算法描述 加密、解密 .295.2.3 原理 295.

3、3 程序主要算法分析 .305.4 程序运行结果 .315.5 安全性分析 .316 设计体会 .324一、 古典密码算法-凯撒密码1.1 凯撒密码概述凯 撒 密 码 作 为 一 种 最 为 古 老 的 对 称 加 密 体 制 , 在 古 罗 马 的 时 候 都 已 经 很 流行 , 他 的 基 本 思 想 是 : 通 过 把 字 母 移 动 一 定 的 位 数 来 实 现 加 密 和 解 密 。 例 如 ,如 果 密 钥 是 把 明 文 字 母 的 位 数 向 后 移 动 三 位 , 那 么 明 文 字 母 B 就 变 成 了 密 文的 E, 依 次 类 推 , X 将 变 成 A, Y 变

4、 成 B, Z 变 成 C, 由 此 可 见 , 位 数 就 是 凯 撒密 码 加 密 和 解 密 的 密 钥 。 它 是 一 种 代 换 密 码 。 据 说 凯 撒 是 率 先 使 用 加 密 函 的 古 代 将 领 之 一 , 因 此 这种 加 密 方 法 被 称 为 凯 撒 密 码 。 在 密 码 学 中 凯 撒 密 码 ( 或 称 凯 撒 加 密 、 凯 撒 变 换 、 变 换 加 密 ) 是 一 种 最 简单 且 最 广 为 人 知 的 加 密 技 术 。 它 是 一 种 替 换 加 密 的 技 术 , 明 文 中 的 所 有 字 母 都在 字 母 表 上 向 后 ( 或 向 前 )

5、 按 照 一 个 固 定 数 目 进 行 偏 移 后 被 替 换 成 密 文 。 例 如 ,当 偏 移 量 是 3 的 时 候 , 所 有 的 字 母 A 将 被 替 换 成 D, B 变 成 E, 以 此 类 推 。 这个 加 密 方 法 是 以 凯 撒 的 名 字 命 名 的 , 当 年 凯 撒 曾 用 此 方 法 与 其 将 军 们 进 行 联 系 。凯 撒 密 码 通 常 被 作 为 其 他 更 复 杂 的 加 密 方 法 中 的 一 个 步 骤 , 例 如 维 吉 尼 亚 密 码 。凯 撒 密 码 还 在 现 代 的 ROT13 系 统 中 被 应 用 。 但 是 和 所 有 的 利

6、 用 字 母 表 进 行 替 换的 加 密 技 术 一 样 , 凯 撒 密 码 非 常 容 易 被 破 解 , 而 且 在 实 际 应 用 中 也 无 法 保 证 通信 安 全 。1.2 算 法 原 理 及 设 计 思 想它 是 一 种 替 代 密 码 , 通 过 将 字 母 按 顺 序 推 后 起 3 位 起 到 加 密 作 用 , 如 将字 母 A 换 作 字 母 D, 将 字 母 B 换 作 字 母 E。 因 据 说 恺 撒 是 率 先 使 用 加 密 函 的古 代 将 领 之 一 , 因 此 这 种 加 密 方 法 被 称 为 恺 撒 密 码 。 这 是 一 种 简 单 的 加 密 方

7、法 , 这 种 密 码 的 密 度 是 很 低 的 , 只 需 简 单 地 统 计 字 频 就 可 以 破 译 。 现 今 又 叫“移 位 密 码 ”, 只 不 过 移 动 的 为 数 不 一 定 是 3 位 而 已 。密 码 术 可 以 大 致 别 分 为 两 种 , 即 易 位 和 替 换 , 当 然 也 有 两 者 结 合 的 更 复 杂的 方 法 。 在 易 位 中 字 母 不 变 , 位 置 改 变 ; 替 换 中 字 母 改 变 , 位 置 不 变 。凯 撒 密 码 表 就 是 用 D 代 a, 用 E 代 b, , 用 z 代 w, ( 注 意 ! ) 用 A 带x, 用 B 代

8、 y, C 代 z。 这 些 代 替 规 则 也 可 用 一 张 表 格 来 表 示 ( 所 以 叫 “密 表 ”)。1.3 主 要 算 法 分 析/密 码 表 的 定 义char a26;for(int i=0;ix = 0;s-y = 0;m = s-m;for(i = 0; i = length) k = 0;密钥流的生成向量 S 一旦初始化完成,输入密钥就不再被使用。密钥流的生成是从 S0到S255,对每个 Si,根据当前 S 的值,将 Si与 S 中的另一字节置换。当S255完成置换后,操作继续重复从 S0开始。7加密中,将 k 的值与下一明文字节异或;解密中,将 k 的值与下一密文

9、字节异或。void rc4_crypt(struct rc4_state *s, unsigned char *data, int length)int i, x, y, *m, a, b;x = s-x;y = s-y;m = s-m;for(i = 0; i x = x;s-y = y;2.4 程序运行结果2.5 算法分析RC4 算法的优点是:算法简单、高效,特别适合软件实现,RC4 是目前应用最广的商密级序列密码,目前被用于 SSL/TLS 标准中。由 于 RC4 算 法 加 密 是 采 用 的 xor, 所 以 , 一 旦 子 密 钥 序 列 出 现 了 重 复 , 密 文就 有 可

10、能 被 破 解 。 那 么 , RC4 算 法 生 成 的 子 密 钥 序 列 是 否 会 出 现 重 复 呢 ? 经 过我 的 测 试 , 存 在 部 分 弱 密 钥 , 使 得 子 密 钥 序 列 在 不 到 100 万 字 节 内 就 发 生 了完 全 的 重 复 , 如 果 是 部 分 重 复 , 则 可 能 在 不 到 10 万 字 节 内 就 能 发 生 重 复 , 因此 , 推 荐 在 使 用 RC4 算 法 时 , 必 须 对 加 密 密 钥 进 行 测 试 , 判 断 其 是 否 为 弱 密 钥 。但 在 2001 年 就 有 以 色 列 科 学 家 指 出 RC4 加 密

11、算 法 存 在 着 漏 洞 , 这 可 能 对 无线 通 信 网 络 的 安 全 构 成 威 胁 。 以 色 列 魏 茨 曼 研 究 所 和 美 国 思 科 公 司 的 研 究 者 发 现 , 在 使 用 “有 线 等 效 保密 规 则 ”( WEP) 的 无 线 网 络 中 , 在 特 定 情 况 下 , 人 们 可 以 逆 转 RC4 算 法 的加 密 过 程 , 获 取 密 钥 , 从 而 将 己 加 密 的 信 息 解 密 。 实 现 这 一 过 程 并 不 复 杂 , 只8需 要 使 用 一 台 个 人 电 脑 对 加 密 的 数 据 进 行 分 析 , 经 过 几 个 小 时 的

12、时 间 就 可 以 破译 出 信 息 的 全 部 内 容 。 专 家 说 , 这 并 不 表 示 所 有 使 用 RC4 算 法 的 软 件 都 容 易 泄 密 , 但 它 意 味 着RC4 算 法 并 不 像 人 们 原 先 认 为 的 那 样 安 全 。 这 一 发 现 可 能 促 使 人 们 重 新 设 计 无线 通 信 网 络 , 并 且 使 用 新 的 加 密 算 法 。三、 分组密码3.1 DES 加解密算法的实现3.1.1 DES 加解密算法概述1977 年 1 月,美国政府颁布:采纳 IBM 公司设计的方案作为非机密数据的正式数据加密标准(DES Data Encryption

13、 Standard) 。DES 算法在POS、ATM、磁卡及智能卡(IC 卡) 、加油站、高速公路收费站等领域被广泛应用,以此来实现关键数据的保密,如信用卡持卡人的 PIN 的加密传输,IC卡与 POS 间的双向认证、金融交易数据包的 MAC 校验等,均用到 DES 算法。DES 算法的入口参数有三个:Key、Data、Mode。其中 Key 为 8 个字节共64 位,是 DES 算法的工作密钥;Data 也为 8 个字节 64 位,是要被加密或被解密的数据;Mode 为 DES 的工作方式,有两种:加密或解密。DES 是一个分组密码算法,它使用 56 位的密钥,以 64 位为单位对数据分组进

14、行加密解密(密文和明文的分组长度相同,均为 64 位) ,DES 加密与解密使用同一密钥,DES 的保密性依赖于密钥。DES 的加密过程可简单描述为三个阶段: 3.1.2 算法原理及设计思想DES 算法把 64 位的明文输入块变为 64 位的密文输出块,它所使用的密钥也是 64 位,其功能是把输入的 64 位数据块按位重新组合,并把输出分为 L0 、R0 两部分,每部分各长 32 位,其置换规则见下表: 58,50,12,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,4

15、9,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,即将输入的第 58 位换到第一位,第 50 位换到第 2 位,依此类推,最9后一位是原来的第 7 位。 L0、R0 则是换位输出后的两部分,L0 是输出的左 32位,R0 是右 32 位,例:设置换前的输入值为 D1D2D3D64,则经过初始置换后的结果为:L0=D550D8;R0=D57D49.D7。经过 26 次迭代运算后,得到 L16、R16,将此作为输入,进行逆置换,即得到密文输出。逆置换正好是初始置的逆运算,例

16、如,第 1 位经过初始置换后,处于第 40 位,而通过逆置换,又将第 40 位换回到第 1 位,其逆置换规则如下表所示:40,8,48,16,56,24,64,32,39,7,47,15,55,23,63,31, 38,6,46,14,54,22,62,30,37,5,45,13,53,21,61,29, 36,4,44,12,52,20,60,28,35,3,43,11,51,19,59,27, 34,2,42,10,50,18,58 26,33,1,41, 9,49,17,57,25, 放大换位表 32, 1, 2, 3, 4, 5, 4, 5, 6, 7, 8, 9, 8, 9, 10,

17、11, 12,13,12,13,14,15,16,17,16,17,18,19,20,21,20,21, 22,23,24,25,24,25,26,27,28,29,28,29,30,31,32, 1, 单纯换位表 16,7,20,21,29,12,28,17, 1,15,23,26, 5,18,31,10, 2,8,24,14,32,27, 3, 9,19,13,30, 6,22,11, 4,25, 在 f(Ri,Ki)算法描述图中,S1,S2.S8 为选择函数,其功能是把 6bit 数据变为 4bit 数据。下面给出选择函数 Si(i=1,28)的功能表: 选择函数 Si S1: 14,4

18、,13,1,2,15,11,8,3,10,6,12,5,9,0,7, 0,15,7,4,14,2,13,1,10,6,12,11,9,5,3,8, 4,1,14,8,13,6,2,11,15,12,9,7,3,10,5,0, 15,12,8,2,4,9,1,7,5,11,3,14,10,0,6,13, S2: 15,1,8,14,6,11,3,4,9,7,2,13,12,0,5,10, 3,13,4,7,15,2,8,14,12,0,1,10,6,9,11,5, 0,14,7,11,10,4,13,1,5,8,12,6,9,3,2,15, 13,8,10,1,3,15,4,2,11,6,7,1

19、2,0,5,14,9, S3: 10,0,9,14,6,3,15,5,1,13,12,7,11,4,2,8, 13,7,0,9,3,4,6,10,2,8,5,14,12,11,15,1, 13,6,4,9,8,15,3,0,11,1,2,12,5,10,14,7, 1,10,13,0,6,9,8,7,4,15,14,3,11,5,2,12, S4: 7,13,14,3,0,6,9,10,1,2,8,5,11,12,4,15, 13,8,11,5,6,15,0,3,4,7,2,12,1,10,14,9, 10,6,9,0,12,11,7,13,15,1,3,14,5,2,8,4, 3,15,0,

20、6,10,1,13,8,9,4,5,11,12,7,2,14, S5:2,12,4,1,7,10,11,6,8,5,3,15,13,0,14,9, 14,11,2,12,4,7,13,1,5,0,15,10,3,9,8,6, 104,2,1,11,10,13,7,8,15,9,12,5,6,3,0,14, 11,8,12,7,1,14,2,13,6,15,0,9,10,4,5,3, S6: 12,1,10,15,9,2,6,8,0,13,3,4,14,7,5,11, 10,15,4,2,7,12,9,5,6,1,13,14,0,11,3,8, 9,14,15,5,2,8,12,3,7,0,4,

21、10,1,13,11,6, 4,3,2,12,9,5,15,10,11,14,1,7,6,0,8,13, S7: 4,11,2,14,15,0,8,13,3,12,9,7,5,10,6,1, 13,0,11,7,4,9,1,10,14,3,5,12,2,15,8,6, 1,4,11,13,12,3,7,14,10,15,6,8,0,5,9,2, 6,11,13,8,1,4,10,7,9,5,0,15,14,2,3,12, S8: 13,2,8,4,6,15,11,1,10,9,3,14,5,0,12,7, 1,15,13,8,10,3,7,4,12,5,6,11,0,14,9,2, 7,11,

22、4,1,9,12,14,2,0,6,10,13,15,3,5,8, 2,1,14,7,4,10,8,13,15,12,9,0,3,5,6,11, 加密流程图如下所示:密钥生成过程111、子密钥 Ki(48bit)的生成算法初始 Key 值为 64 位,但 DES 算法规定,其中第 8、16、64 位是奇偶校验位,不参与 DES 运算。故 Key 实际可用位数便只有 56 位。即:经过缩小选择换位表 1 的变换后,Key 的位数由 64 位变成了 56 位,此 56 位分为C0、D0 两部分,各 28 位,然后分别进行第 1 次循环左移,得到 C1、D1,将C1(28 位) 、D1(28 位)合

23、并得到 56 位,再经过缩小选择换位 2,从而便得到了密钥 K0(48 位) 。依此类推,便可得到 K1、K2、K15,不过需要注意的是,16 次循环左移对应的左移位数要依据下述规则进行: 循环左移位数 1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1 以上介绍了 DES 算法的加密过程。 DES 算法的解密过程是一样的,区别仅仅在于第一次迭代时用子密钥 K15,第二次 K14、,最后一次用 K0,算法本身并没有任何变化。 密钥生成过程流程图如下所示:3.1.3 程序主要算法分析(1)S 盒功能通过下列函数来实现,将 48 位的输入转换成 32 位的输出如下所示:void S_f

24、unc(bool Out32,const bool In48)/将 48 位转换成 32 位int j,m,n;/膨胀后的比特串分为 8 组,每组 6 比特。 for(j=0;j=0;i-)memcpy(tmp,Li,32);F_func(Li,SubKeyi);Xor(Li,Ri,32);memcpy(Ri,tmp,32);Transform(M, M, LP, 64);BitToByte(out, M, 64);/ return(out);3.1.4 程序的运行结果为:14程序总的流程图如下所示:3.1.5 安全性分析对 DES 安全性的主要争论:(1) 、对 DES 的 S 盒、迭代次数

25、、密钥长度等设计准则的争议15(2) 、DES 存在着一些弱密钥和半弱密钥(3) 、DES 的 56 位密钥无法抵抗穷举工具 对于 DES 算法可以利用互补性、弱密钥和半弱密钥、密钥搜索、差分分析和线性分析等方式进行攻击。对于 DES 密码也可使用穷举密钥攻击,n=2567106,即使使用每秒种可以计算一百万个密钥的大型计算机,也需要算 106 天才能求得所使用的密钥,因此看来是很安全的。但是密码专家Diffie 和 Hellman 指出,如果设计一种一微秒可以核算一个密钥的超大规模集成片,那么它在一天内可以核算 8.641010 个密钥。如果由一个百万个这样的集成片构成专用机,他们当时估计:

26、这种专用机的造价约为两千万美元。在五年内分期偿还,平均每天约需付一万美元。由于用穷举法破译平均只需要计算半个密钥空间,因此获得解的平均时间为半天。为保证 DES 的安全性,又出现了 2DES,三重 DES 等。3.2 AES 加解密算法的实现3.2.1 AES 算法概述AES 加密算法即密码学中的高级加密标准(Advanced Encryption Standard,AES) ,又称 Rijndael 加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的 DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院 (NIST)于 200

27、1 年 11 月 26 日发布于 FIPS PUB 197,并在 2002 年 5 月 26 日成为有效的标准。AES 的基本要求是,采用对称分组密码体制,密钥长度的最少支持为128、192、256,分组长度 128 位,AES 加密数据块大小最大是 256bit,但是密钥大小在理论上没有上限。AES 加密有很多轮的重复和变换。大致步骤如下:1、密钥扩展(KeyExpansion) ,2、初始轮(Initial Round) ,3、重复轮(Rounds) ,每一轮又包括:SubBytes、ShiftRows、MixColumns、AddRoundKey,4、最终轮(Final Round) ,

28、最终轮没有 MixColumns。3.2.2 算法原理及设计思想AES 算法基于排列和置换运算。排列是对数据重新进行安排,置换是将一个数据单元替换为另一个。AES 使用几种不同的方法来执行排列和置换运算。 AES 是一个迭代的、对称密钥分组的密码,它可以使用 128、192 和 256 位密钥,并且用 128 位(16 字节)分组加密和解密数据。与公共密钥密码使用密钥对不同,对称密钥密码使用相同的密钥加密和解密数据。通过分组密码返回16的加密数据的位数与输入数据相同。迭代加密使用一个循环结构,在该循环中重复置换和替换输入数据。(1)首先将明文以字节为单位进行处理,以 128 位分组、128 位

29、的密钥为例。先将明文按字节分成列组,将明文的前四字节组成一列,接下来的 4 个字节组成第二列,后面的字节依次组成第三列和第四列,则组成了一个 4 乘 4 的矩阵。(2)AES 也是由基本的变换单位“轮”多次迭代而成的。AES 的轮变换由四个不同的变换组成:1) 字节代替变换非线性的字节替代,单独处理每个字节:求该字节在有限域 GF(28)上的乘法逆,“0“被映射为自身,即对于 GF(2 8),求GF(2 8),使得 =1mod(x 8+x4+x2+x+1)。对上一步求得的乘法逆作仿射变换yi=xi + x(i+4)mod8 + x(i+6)mod8 + x(i+7)mod8 + ci(其中 c

30、i是 6310即 011000112的第 i 位)2) 行移位变换行移位变换完成基于行的循环位移操作,变换方法: 即行移位变换作用于行上,第 0 行不变,第 1 行循环左移 1 个字节,第 2 行循环左移 2 个字节,第 3 行循环左移 3 个字节。3) 列混合变换(最后一轮中没有)逐列混合,方法:b(x) = (03x3 + 01x2 + 01x + 02) a(x) mod(x4 + 1)17矩阵表示形式:4) 与子密钥异或只是简单的将密钥按位异或到一个状态上。每轮加密密钥按顺序取自扩展密钥,扩展密钥是由初始密钥扩展而成。密钥扩展AES 密钥扩展算法输入值是 4 字(16 字节),输出值是

31、一个 44 字(176 字节)的一维线性数组,为初始轮密钥加阶段和其他 10 轮中的每一轮提供 4 字的轮秘密钥,输入密钥直接被复制到扩展密钥数组的前四个字,然后每次用四个字填充扩展密钥数组余下的部分3.2.3 程序主要算法分析(1) 程序编写的过程中严格按照 AES 算法的执行过程,将用到的参数及函数封装在 AES 类中,再进行调用,如下所示:class AES public:AES(unsigned char* key);18virtual AES();unsigned char* Cipher(unsigned char* input);unsigned char* InvCipher(

32、unsigned char* input);void* Cipher(void* input, int length=0);void* InvCipher(void* input, int length);private:unsigned char Sbox256;unsigned char InvSbox256;unsigned char w1144;void KeyExpansion(unsigned char* key, unsigned char w44);unsigned char FFmul(unsigned char a, unsigned char b);void SubByt

33、es(unsigned char state4);void ShiftRows(unsigned char state4);void MixColumns(unsigned char state4);void AddRoundKey(unsigned char state4, unsigned char k4);void InvSubBytes(unsigned char state4);void InvShiftRows(unsigned char state4);void InvMixColumns(unsigned char state4);(2)先将输入的明文按列序组合成 4*4 的矩

34、阵,直接与第 0 组密钥(即输入的密钥)相加(异或),作为轮加密的输入然后循环 10 次进行 SubBytes、ShiftRows、MixColumns、AddRoundKey 运算,最后恢复原序列(3)需要注意的是最后一轮并不进行 MixColumns(列混淆变换)加密过程函数 Cipher,它只有一个参数,为输入的明文,函数的返回值为加密之后的密文,解密过程与加密过程类似。unsigned char* AES:Cipher(unsigned char* input)unsigned char state44;int i,r,c;/将明文按字节分成列组for(r=0; r 3) if (_c

35、ount0 += (uint32)length 29);partLen = 64 - index; /计算已有的消息的bits 长度的字节数的模/用于判断已有消息加上当前传过来的消息总长度能不能达到512bits, 如果能够达到则对凑够的512bits 进行一次处理if (length = partLen)memcpy(transform(_buffer);/对当前输入的剩余字节做转换for (i = partLen; i + 63 3) /计算需要填充的字节数,padLen的取值范围在1-64之间padLen = (index 0)long double temp;temp=fmod(t0-q*t),a);t0=t;t=temp;a0=b0;b0=r;q=floor(a0/b0);r=a0-q*b0;/选择的 b 不满足 if(b0!=1)coutinput;/用户输入要加密的字符串,本程序只处理连续大小写英文字母 /处理并储存结果 const int lenth=input.size();/输入字符串的字符数

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报