killBase系列 -- 密码学(二)

2017-11-15 11:38:10来源:segmentfault作者:Allen人点击

分享
前言

因为排版不理想,所以直接用两个文档承载,有什么不便,还请担待。
killBase -- 密码学(一) 传送门


附录
1. DES 详细加密过程
1. **对输入的密钥进行变换**。
用户的64bit密钥,其中第8, 16, 24, 32, 40, 48, 56, 64位是校验位, 使得每个密钥都有奇数个1。所以密钥事实上是56位。对这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,表的意思是第57位移到第1位,第49位移到第2位,...... 以此类推。变换后得到56bit数据,将它分成两部分,C[0][28], D[0][28]。2. **计算16个子密钥**,计算方法C[i][28] D[i][28]为对前一个C[i-1][28], D[i-1][28]做循环左移操作。16次的左移位数如下表: 1,2,3,4,5,6,7,8,9, 10, 11, 12, 13, 14, 15, 16 (第i次)
1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1(左移位数)3. **串联**计算出来的C[i][28] D[i][28] 得到56位,然后对它进行如下变换得到48位子密钥K[i][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,表的意思是第14位移到第1位,第17位移到第2位,以此类推。在此过程中,发现第9,18,22,25, 35,38,43,54位丢弃。4. 对64bit的明文输入进行换位变换。换位表如下: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, 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表的意思就是第一次变换时,第58位移到第1位,第50位移到第2位,...... 依此类推。得到64位数据,将这数据前后分成两块L[0][32], R[0][32]。5. 加密过程,对R[i][32]进行扩展变换成48位数,方法如下, 记为E(R[i][32])32,1,2,3,4,5,
4,5,6,7,8,9,
8,9, 10, 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,6. 将E(R[i][32])与K[i][48]作异或运算,得到48位数,将48位数顺序分成8份,6位一份,B[8][6]。7. 使用S[i]替换B[i][6]。过程如下: 取出B[i][6]的第1位和第6位连成一个2位数m, m就是S[i]中对应的行数(0-3),取出B[i][6]的第2到第5位连成一个4位数n(0-15),n就是S[i]中对应的列数,用S[i][m][n]代替B[i][6]。S是4行16列的对应表,里面是4位的数,一共有8个S,定义如下:S[1]:
14,4,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,
S[2]:
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,12,0,5,14,9,
S[3]:
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,
S[4]:
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,6,10,1,13,8,9,4,5,11,12,7,2,14,
S[5]:
  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,
  4,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,
S[6]:
  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,10,1,13,11,6,
  4,3,2,12,9,5,15,10,11,14,1,7,6,0,8,13,
S[7]:
  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,
S[8]:
  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,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,8. 将从B[i][6]经过S得到的8个4位数连起来得到32位数。对这个数进行如下变换: 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,得到的结果与L[i][32]作异或运算,把结果赋给R[i][32]。9. 把R[i-1][32]的值赋给L[i],从5开始循环。直到K[16][48]结束。10. 将最后的L,R合并成64位,然后进行如下转化得到最后的结果。这是对第4步的一个逆变化。
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
2. https 的加密算法

由于之前看过 https 是 由 secure socket layer 实现的。 也是通过 公钥私钥 保证其安全性,所以在学习这篇文章的时候,就想 https 是由哪种 加密算法 做为其 底层实现的呢。 因此,就有了下面这部分。


关于 https 与 http 的区别 请看我的这篇博客,不再赘述。网络基础知识



原理:

浏览器把自身支持的一系列Cipher Suite(密钥算法套件,后文简称Cipher)[C1,C2,C3, …]发给服务器;


服务器接收到浏览器的所有Cipher后,与自己支持的套件作对比,如果找到双方都支持的Cipher,则告知浏览器;


浏览器与服务器使用匹配的Cipher进行后续通信。如果服务器没有找到匹配的算法,浏览器(以 Chrome 56为例)将给出错误信息:

下面讲一下如何分析。

准备: 通过可以抓取网络包的工具,这里通过 Wireshark 分析。关于wireshark 的介绍请点击这里.查看浏览器发送给服务器的 Ciper服务器的 Ciper

流程:

浏览器首先发起握手协议, 一个'Client Hello'消息,如下图,按照Protocol协议顺序排序,然后,找到Client Hello,选中,依次查找 'Secure Sockets Layer' -> TLSv1.2 Record Layer -> Handshake protocal ->Ciper Suites.


可以看到, Cipher有很多。总共16,第一个是Cipher Suite: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 (0xc02b)。


如果按照顺序继续寻找第一个 Info 为'Sever Hello' 的报文,可以找到相应的Cipher Suite: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 (0xc02b) 。.

Cipher介绍:

密钥交换算法,用于决定客户端与服务器之间在握手的过程中如何认证,用到的算法包括RSA,Diffie-Hellman,ECDH,PSK等


加密算法,用于加密消息流,该名称后通常会带有两个数字,分别表示密钥的长度和初始向量的长度,比如DES 56/56, RC2 56/128, RC4 128/128, AES 128/128, AES 256/256


报文认证信息码(MAC)算法,用于创建报文摘要,确保消息的完整性(没有被篡改),算法包括MD5,SHA等。


PRF(伪随机数函数),用于生成“master secret”。

TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 (0xc02b):

基于TLS协议


使用 ECDHE,ECDSA作为密钥交换算法


加密算法 AES(密钥与初始向量的长度为128)


MAC 算法 SHA


总结:

Client端密钥算法套件[C1,C2,C3],Server端密钥算法套件[C4,C2,C1,C3],
则,IIS[(Internet Infomation Services)](),C2将被优先返回

3. wireshark 的使用问题

问题:第一次使用 wireshark 的时候,不显示接口。原因是。。。
刚开始使用 在windows 上需要 winpacp 并且开启 npf 服务。
注: 如果 没有安装 winpacp ,想直接 通过 net start npf 开启服务,将会提示。 发生系统错误2


winpacp 安装 。。。


这里是下载网站
直接安装即可。


开启 npf 服务


打开 cmd ,输入 net start npf ,提示:服务已经启动。


进入界面,选择相应的网卡。



这里,可以通过 网络连接 看出来。

所以,我的是无线网络连接。


最终界面



WireShark 主要分为这几个界面

Display Filter(显示过滤器),用于过滤


Packet List Pane(封包列表), 显示捕获到的封包, 有源地址和目标地址,端口号。 颜色不同,代表


Packet Details Pane(封包详细信息), 显示封包中的字段


Dissector Pane(16进制数据)


Miscellanous(地址栏,杂项)

结语

发现排版,好像是有问题的,阅读效果不理想,可以去我的个人博客中。


都看到这里了,点个关注,点波赞再走,QAQ。
你的小手轻点,是我最大的动力哦。


一只想当程序员的1米88处女座大可爱如此说。


参考

DES 加密算法解析


分组加密的四种模式


阮一峰--RSA算法原理


java中RSA加解密的实现


关于RSA算法密钥长度/密文长度/明文长度


https背后的加密算法


最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台