2016年暑期学习总结
密码学培训
通过这次培训,了解了密码学的发展简史,密码学在战争,国防,生活中的有着不可忽略的重要性,密码学从古典密码学,近代密码学到现代密码学的蜕变。重点了解了现代密码学的基本体系,以及一些密码破译的手段。另外,在知名密码学大师带领下,站在科技的前沿,瞻仰了量子密码的神奇与强大,并且了解了抗量子密码标准化发展趋势。下面进行具体总结。
密码学概述
- 密码是通讯双方按约定的规定,为隐蔽信息原型而生成的一组具有随机特性的特定符号。
- 密码学解决的主要问题。
- 信息的保密传输和存储问题(机密性)
- 信息的真实性认证问题(身份认证和完整性认证)
- 承诺的不可否认性问题
- 古典密码实例:中国古诗,古希腊的天书······
- 机械密码实例:德国的Enigma
- 近代密码:香农的《通讯的数学理论》,《保密系统的通讯理论》
- 现代密码学:1976年,美国斯坦福大学的密码学家Diffie和Hellman等发表“密码学的新方向”,提出了适应网络上保密通信的公钥密码思想,奠定了公钥密码学的基础 。
- 量子密码:Heisenberg不确定原理,BB84协议
- 生物密码:DNA密码
- 全同态密码:适用于云计算环境下
经典序列密码算法
DVD版权保护加密CSS算法
Content Scrambling System(内容扰乱系统)
GSM手机加密A5/1算法
A5-1算法用于蜂窝式移动电话系统语音和数字加密.
通訊模式:
用户A→基站1→基站2→······基站n→用戶B
A5-1算法用于用户的手机到基站之间的通信加密保护。
- 基本密钥
KA1:预置在SIM卡中,与基站1共享。
生存期:一旦植入SIM卡将不再改变。
用途:用来分配用户A和基站1之间的会话密钥。 - 回话秘钥
产生方式:在每次会话时,基站产生一个64比特的随机数 k。
分配方式:利用基本密钥 KA1,使用其它密码算法将 k 加密传给用户手机。
生存期:仅用于一次通话时间。
用途:用来保护本次通话。
蓝牙加密标准E0算法
- LFSR由秘钥K和蓝牙地址,时钟等信息进行初始化填充;
- 生成200比特密码流;
- 后128比特线性变换后填充LFSR;
- 每一帧生成2745比特秘钥流。
数据库加密RC4算法
RC4密码算法是由RSA数据安全公司开发的密钥长度可变的序列密码算法。
Key:40-2048 bit
RC4算法是一个有记忆变换模型,包括一个8进8出的S盒,即:
S:{0,1}的8次方→{0,1}8
密钥K产生方式: RC4算法用于WEP协议时移动节点和数据存取点之间预先共享的密钥
生存期:预先植入移动节点的硬件设备中,永远不变
Trivium序列密码算法
rivium是由Christophe De Canniere和Bart Preneel在2005年基于分组密码思想设计的一个面向硬件实现的同步流密码算法.它设计简洁、结构优美,是典型的基于非线性反馈组合模型设计的密码算法。
SALSA20序列密码算法
Salsa20算法由Daniel J. Bernstein(美国芝加哥大学担任数学教授)等人设计;它采用了分组密码的多圈迭代思想,类分组型序列密码,面向软件实现;圈变换中仅采用模加,模2加,循环移位这3种运算—-ARX型。
分组密码编码原理与经典算法
分组密码编码思想
分组密码算法只负责固定长度消息的加、脱密;
工作模式负责长消息的处理方式;
短块处理方式负责短块处理方式的约定。
AES算法
ES算法是迭代型分组密码算法。它的分组长度为128比特。秘钥长度128,192或256比特。圈数有10(秘钥长度为128),12(秘钥长度为192),14(秘钥长度为256)
- 字节代替变换是一个逐字节变换的非线性变换,它利用同一个S盒S:{0,1}8→{0,1}8,将字节矩阵中的每一个字节变换为另一个字节。变换后的位置不变。
- 行移位变换: 如果将一个字节矩阵的行从上到下分别称为第0,1,2,3行,则行移位变换就是将这个字节矩阵的第 i 行循环左移 i 个字节。
DES算法
DES加密框图:
分组密码分析方法
- 对敌手攻击能力的基本假设
- 密码分析方法的分类
- 穷举攻击
- 中间相遇攻击
- 线性密码分析
- 差分分析
- 不可能差分分析
- 代数分析
- 相关密钥攻击
- 旁道攻击
公钥密码原理与应用
公钥密码产生的背景及设计思想
RSA公钥密码算法
RSA数字签名
EIGamal公钥密码算法
EIGamal数字签名
消息认证技术
消息认证(Message Authentication)是“用户”检验它收到的文件是否遭到第三方有意或无意的篡改.它利用了密码的机密性,真实性,不可抵赖性。
- 基于分组密码的消息认证码
- 基于杂凑函数的消息认证码
序列密码概述
- 面向硬件
GF(2)上LFSR、比特级运算
Trivium, Grain, Mickey - 面向软件
S盒 、面向字运算(机器指令集)
Salsa20, HC-128, SOSmenuk, Rabbit
一次一密
1917年,弗纳姆发明了“一次一密”的密码体制。1949年,香农在他划时代的一篇重要论文《Communication Theory of Secrecy Systems》中证明了一次性加密算法在正确使用时是不可破译的。
“一次一密”的正确使用:
- 秘钥是真随机的;
- 秘钥至少和待加密的明文一样长;
- 秘钥和明文的结合方式是拉丁方
- 每个秘钥仅用一次。
多表代替
- 维吉尼亚密码
- 凯撒密码
量子密码
- 量子密码体系采用量子态作为信息载体,经由量子通道在合法的用户之间传送密钥。
- 绝对安全性:即使在窃听者可能拥有极高的智商、可能采用最高明的窃听措施、可能使用最先进的测量手段,密钥的传送仍然是安全的。通常,窃听者采用截获密钥的方法有两类:一种方法是通过对携带信息的量子态进行测量,从其测量的结果来提取密钥的信息。但是,量子力学的基本原理告诉我们,对量子态的测量会引起波函数塌缩,本质上改变量子态的性质,发送者和接受者通过信息校验就会发现他们的通讯被窃听,因为这种窃听方式必然会留下具有明显量子测量特征的痕迹,合法用户之间便因此终止正在进行的通讯。第二种方法则是避开直接的量子测量,采用具有复制功能的装置,先截获和复制传送信息的量子态。然后,窃听者再将原来的量子态传送给要接受密钥的合法用户,留下复制的量子态可供窃听者测量分析,以窃取信息。这样,窃听原则上不会留下任何痕迹。但是,由量子相干性决定的量子不可克隆定理告诉人们,任何物理上允许的量子复制装置都不可能克隆出与输入态完全一样的量子态来。这一重要的量子物理效应,确保了窃听者不会完整地复制出传送信息的量子态。因而,第二种窃听方法也无法成功。量子密码术原则上提供了不可破译、不可窃听和大容量的保密通讯体系。
其他方面学习
- 这个假期又学习了java,已经熟悉了java的基本语法,接下来打算自己做几个项目,把它熟练的用起来。
- 对于CTF中Linux下的漏洞分析及利用实在太难,对于我这样的小白来说实在是如同坑的一笔。而且现在的CTF中关于这一块的题越来越难,实在是可恨那。到现在为止看了n个writeup,如同嚼蜡。好在到现在为止掌握了大致题型,现总结如下:
- 栈溢出
考虑是不是栈溢出 有canary时
通过leak got表计算偏移 有libc
用DynELF 没有libc
使用通用gadgets x64 - 格式化字符串
直接的向任意地址写 格式化串在栈中
构造跳板,利用两次,实现任意写 格式化串不在栈中 - 堆
堆溢出
模拟堆机制