CTF竞赛进阶(⼀)密码学
0x01概述
Crypto相⽐于web和pwn,更考验参赛者的基础知识,对数学能⼒、逻辑思维能⼒与分析能⼒都有很⾼的要求。
密码学题⽬多种多样,包括但不限于:
1.通过密⽂分析明⽂
2.缺陷⾃定义密码体制分析解密⽂
3.加/解密机交互接⼝,利⽤弱点来泄露某些敏感信息
0x02编码
0x02a概念
字符编码(英语:Characterencoding)、字集码是把字符集中的字符编码为指定集合中某⼀对象(例如:⽐特模式、⾃然数序列、8位
组或者电脉冲),以便⽂本在计算机中存储和通过通信⽹络的传递。常见的例⼦包括将拉丁字母表编码成摩斯电码和ASCII。其中,ASCII
将字母、数字和其它符号编号,并⽤7⽐特的⼆进制来表⽰这个整数。通常会额外使⽤⼀个扩充的⽐特,以便于以1个字节的⽅式存储。
在计算机技术发展的早期,如ASCII(1963年)和EBCDIC(1964年)这样的字符集逐渐成为标准。但这些字符集的局限很快就变得明
显,于是⼈们开发了许多⽅法来扩展它们。对于⽀持包括东亚CJK字符家族在内的写作系统的要求能⽀持更⼤量的字符,并且需要⼀种系统
⽽不是临时的⽅法实现这些字符的编码。
0x02bBaencode
64
Ba64是⼀种基于64个可打印字符来表⽰⼆进制数据的表⽰⽅法。每6bit为⼀个单元,对应⼀个可打印字符.
ba64通常⽤于只能处理⽂本数据的场合,表⽰、传输、存储⼀些⼆进制数据,包括MIME电⼦邮件、XML复杂数据等。
tips:
原数据长度不是3的倍数且剩下1个输⼊数据,则在编码结果后⾯加2个“=”;
剩下2个输⼊数据,则在编码结果后⾯加1个“=”;
是3的倍数则⼀个“=”也不加。
32andba16
与ba64⽬的⼀样,只是具体编码规则不同。
ba32编码将⼆进制⽂件转换成32个ASCII字符组成的⽂本
转换表:
ABCDEFGHIJKLMNOPQRSTUVWXYZ234567
ba16…
转换表:
0-9
A-F
de
uuencode这个名字是衍⽣⾃"Unix-to-Unixencoding",原先是Unix系统下将⼆进制的资料借由uucp邮件系统传输的⼀个编码程
式,是⼀种⼆进制到⽂字的编码。uudecode是与uuencode搭配的解码程式,uuencode/decode常见于电⼦邮件中的档案传送以
及unet新闻组和BBS的贴⽂等等。近来已被MIME所⼤量取代。
de
类似BASE64,转换表不同
0x02c其他编码
ode
百分号编码(英语:Percent-encoding),⼜称:URL编码(URLencoding)是特定上下⽂的统⼀资源定位符(URL)的编码机
制,实际上也适⽤于统⼀资源标志符(URI)的编码。也⽤于为application/x-www-form-urlencodedMIME准备数据,因为它⽤
于通过HTTP的请求操作(request)提交HTML表单数据。
deandaaencode
jjencode和aaencode都是针对JavaScript代码的编码⽅式。前者是将JS代码转换成只有符号的字符串,后者是将JS代码转换
成常⽤的⽹络表情。本质上适对JS代码的⼀种混淆。
0x03古典密码
0x03a线性映射
1.凯撒密码
凯撒密码(英语:Caesarcipher),或称凯撒加密、凯撒变换、变换加密,是⼀种最简单且最⼴为⼈知的加密技术。凯撒密码是⼀
种替换加密技术,明⽂中的所有字母都在字母表上向后(或向前)按照⼀个固定数⽬进⾏偏移后被替换成密⽂。例如,当偏移量是3的
时候,所有的字母A将被替换成D,B变成E,以此类推。这个加密⽅法是以罗马共和时期凯撒的名字命名的,据称当年凯撒曾⽤此⽅
法与其将军们进⾏联系。
凯撒密码通常被作为其他更复杂的加密⽅法中的⼀个步骤,例如维吉尼亚密码。凯撒密码还在现代的ROT13系统中被应⽤。但是和所
有的利⽤字母表进⾏替换的加密技术⼀样,凯撒密码⾮常容易被破解,⽽且在实际应⽤中也⽆法保证通信安全。
2.维吉尼亚密码
维吉尼亚密码(⼜译维热纳尔密码)是使⽤⼀系列凯撒密码组成密码字母表的加密算法,属于多表密码的⼀种简单形式。
维吉尼亚密码曾多次被发明。该⽅法最早记录在吉奥万·巴蒂斯塔·贝拉索(GiovanBattistaBellaso)于1553年所著的书《吉奥
万·巴蒂斯塔·贝拉索先⽣的密码》(意⼤利语:BattistaBellaso)中。然⽽,后来在19世纪时被误传
为是法国外交官布莱斯·德·维吉尼亚(BlaiDeVigenère)所创造,因此现在被称为“维吉尼亚密码”。
维吉尼亚密码以其简单易⽤⽽著称,同时初学者通常难以破解,因⽽⼜被称为“不可破译的密码”(法语:lechiffre
indéchiffrable)。这也让很多⼈使⽤维吉尼亚密码来加密的⽬的就是为了将其破解
0x03b固定替换
1.培根密码
培根密码,⼜名倍康尼密码[1](英语:Bacon’scipher)是由法兰西斯·培根发明的⼀种隐写术。
2.猪圈密码
猪圈密码(英语:pigpencipher),亦称共济会密码(masoniccipher)或共济会员密码(Freemason’scipher),是⼀种以格
⼦为基础的简单替代式密码。即使使⽤符号,也不会影响密码分析,亦可⽤在其它替代式的⽅法。右边的例⼦,是把字母填进格⼦的
模样。
早在1700年代,共济会常常使⽤这种密码保护⼀些私密纪录或⽤来通讯,所以⼜称共济会密码。
0x03c移位密码
1.栅栏密码
栅栏密码是⼀种置换式密码。其名称来⾃其加密⽅法。所谓栅栏密码,就是将要加密的明⽂分为N个⼀组,再从每组的选出⼀个字母连
起来,形成⼀段⽆规律的密⽂。
栅栏密码并⾮⼀种强的加密法,其加密原理限制了密钥的最⾼数量不可能超过明⽂字母数,⽽实际加密时密钥数⽬更少,因此有些密
码分析员甚⾄能⽤⼿直接解出明⽂。
2.曲路密码
曲路密码是⼀种置换密码,其中密钥是从明⽂创建的块中读取密⽂时要遵循的路径,该密钥需双⽅事先约定好(曲路路径)。
0x04分组密码
0x04a分组密码常见⼯作模式
ECB模式(电⼦密码本模式)
ECB模式是将明⽂消息分成固定⼤⼩的分组,当最后⼀个分组的内容⼩于分组长度时,需要⽤特定的数据进⾏填充以⾄于长度等于分
组长度,每个分组的加密和解密都是独⽴的,可以进⾏并⾏操作,但是安全性较低,对于相同的明⽂会被加密成相同的密⽂,因此不
能很好的保护数据模式。
模式(密码分组链接模式)
CBC模式中的第⼀个分组需要⽤初始化向量IV(⼀个随机的且长度为⼀个分组长度的⽐特序列)进⾏异或操作再进⾏加密,⽽后⾯的
每⼀个分组都要先和前⼀个分组加密后的密⽂分组进⾏异或操作,然后再加密。加密是连续的,不能进⾏并⾏操作。
模式(输出反馈模式)
OFB模式是通过将明⽂分组和密码算法的输出进⾏异或操作来产⽣密⽂分组的,也需要使⽤初始化向量(IV),可以将块密码变成同
步的流密码,将之前⼀次的加密结果使⽤密钥再次进⾏加密,产⽣的块作为密钥流,然后将其与明⽂块进⾏异或,得到密⽂。由于
XOR操作的堆成性,加密和解密操作是完全相同的。
模式(密⽂反馈模式)
CFB模式类似OFB模式,是将前⼀个分组的密⽂加密后和当前分组的明⽂进⾏异或操作⽣成当前分组的密⽂,第⼀个明⽂分组通过初
始化向量lV进⾏加密再与之进⾏异或操作得到第⼀个密⽂分组。
模式(计数器模式)
CTR模式也被称为ICM模式、SIC模式。在CTR模式中,每次加密时都会⽣成⼀个不同的值来作为计数器的初始值,每个分组对应
⼀个逐次累加的计数器,通过对计数器进⾏加密来⽣成密钥流,再将密钥流与明⽂分组进⾏异或操作得到密⽂分组。
0x04b费斯妥密码和DES
1.费斯妥密码
在密码学中,费斯妥密码(英语:Feistelcipher)是⽤于构造分组密码的对称结构,以德国出⽣的物理学家和密码学家霍斯特·费斯
妥(HorstFeistel)命名,他在美国IBM⼯作期间完成了此项开拓性研究。通常也称为费斯妥⽹络(Feistelnetwork)。⼤部分分组
密码使⽤该⽅案,包括数据加密标准(DES)。费斯妥结构的优点在于加密和解密操作⾮常相似,在某些情况下甚⾄是相同的,只需
要逆转密钥编排。因此,实现这种密码所需的代码或电路⼤⼩能⼏乎减半。
费斯妥⽹络是⼀种迭代密码,其中的内部函数称为轮函数。
密码
数据加密标准(英语:DataEncryptionStandard,缩写为DES)是⼀种对称密钥加密块密码算法,1976年被美国联邦政府的国
家标准局确定为联邦资料处理标准(FIPS),随后在国际上⼴泛流传开来。它基于使⽤56位密钥的对称算法。这个算法因为包含⼀些
机密设计元素,相对短的密钥长度以及怀疑内含美国国家安全局(NSA)的后门⽽在开始时有争议,DES因此受到了强烈的学院派式
的审查,并以此推动了现代的块密码及其密码分析的发展。
DES现在已经不是⼀种安全的加密⽅法,主要因为它使⽤的56位密钥过短。1999年1⽉,与电⼦前哨基⾦会合
作,在22⼩时15分钟内即公开破解了⼀个DES密钥。也有⼀些分析报告提出了该算法的理论上的弱点,虽然在实际中难以应⽤。
为了提供实⽤所需的安全性,可以使⽤DES的派⽣算法3DES来进⾏加密,虽然3DES也存在理论上的攻击⽅法。DES标准和
3DES标准已逐渐被⾼级加密标准(AES)所取代。另外,DES已经不再作为国家标准科技协会(前国家标准局)的⼀个标准。
在某些⽂献中,作为算法的DES被称为DEA(DataEncryptionAlgorithm,数据加密算法),以与作为标准的DES区分开来。
在发⾳时,DES可以作为缩写按字母拼出来(/ˌdiːˌiːˈɛs/),或作为⼀个词念成/ˈdɛz/。
初始置换->subkeys的⽣成->轮函数
⾼级加密标准(英语:AdvancedEncryptionStandard,缩写:AES),⼜称Rijndael加密法(荷兰语发⾳:[ˈrɛindaːl],⾳似英
⽂的“Rhinedoll”),是美国联邦政府采⽤的⼀种区块加密标准。这个标准⽤来替代原先的DES,已经被多⽅分析且⼴为全世界所
使⽤。经过五年的甄选流程,⾼级加密标准由美国国家标准与技术研究院(NIST)于2001年11⽉26⽇发布于FIPSPUB197,并
在2002年5⽉26⽇成为有效的标准。现在,⾼级加密标准已然成为对称密钥加密中最流⾏的算法之⼀。
该算法为⽐利时密码学家JoanDaemen和VincentRijmen所设计,结合两位作者的名字,以Rijndael为名投稿⾼级加密标准的甄选
流程。
0x05流密码
在密码学中,流密码(英语:Streamcipher),⼜译为流加密、资料流加密,是⼀种对称加密算法,加密和解密双⽅使⽤相同伪随机加密
数据流(pudo-randomstream)作为密钥,明⽂数据每次与密钥数据流顺次对应加密,得到密⽂数据流。实践中数据通常是⼀个位
(bit)并⽤异或(xor)操作加密。
该算法解决了对称加密完善保密性(perfectcrecy)的实际操作困难。“完善保密性”由克劳德·⾹农于1949年提出。由于完善保密
性要求密钥长度不短于明⽂长度,故⽽实际操作存在困难,改由较短数据流通过特定算法得到密钥流。
0x06公钥密码
0x06a概述
公开密钥密码学(英语:Public-keycryptography)也称⾮对称式密码学(英语:Asymmetriccryptography)是密码学的⼀种算法,
它需要两个密钥,⼀个是公开密钥,另⼀个是私有密钥;公钥⽤作加密,私钥则⽤作解密。使⽤公钥把明⽂加密后所得的密⽂,只能⽤相对
应的私钥才能解密并得到原本的明⽂,最初⽤来加密的公钥不能⽤作解密。由于加密和解密需要两个不同的密钥,故被称为⾮对称加密;不
同于加密和解密都使⽤同⼀个密钥的对称加密。公钥可以公开,可任意向外发布;私钥不可以公开,必须由⽤户⾃⾏严格秘密保管,绝不透
过任何途径向任何⼈提供,也不会透露给被信任的要通信的另⼀⽅。
基于公开密钥加密的特性,它还能提供数字签名的功能,使电⼦⽂件可以得到如同在纸本⽂件上亲笔签署的效果。
公开密钥基础建设透过信任数字证书认证机构的根证书、及其使⽤公开密钥加密作数字签名核发的公开密钥认证,形成信任链架构,已在
TLS实现并在万维⽹的HTTP以HTTPS、在电⼦邮件的SMTP以SMTPS或STARTTLS引⼊。
另⼀⽅⾯,信任⽹络则采⽤去中⼼化的概念,取代了依赖数字证书认证机构的公钥基础设施,因为每⼀张电⼦证书在信任链中最终只由⼀个
根证书授权信任,信任⽹络的公钥则可以累积多个⽤户的信任。PGP就是其中⼀个例⼦。
0x06bRSA
RSA加密算法是⼀种⾮对称加密算法,在公开密钥加密和电⼦商业中被⼴泛使⽤。RSA是由罗纳德·李维斯特(RonRivest)、阿迪·萨
莫尔(AdiShamir)和伦纳德·阿德曼(LeonardAdleman)在1977年⼀起提出的。当时他们三⼈都在⿇省理⼯学院⼯作。RSA就是
他们三⼈姓⽒开头字母拼在⼀起组成的。
1973年,在英国政府通讯总部⼯作的数学家克利福德·柯克斯(CliffordCocks)在⼀个内部⽂件中提出了⼀个与之等效的算法,但该算
法被列⼊机密,直到1997年才得到公开。
对极⼤整数做因数分解的难度决定了RSA算法的可靠性。换⾔之,对⼀极⼤整数做因数分解愈困难,RSA算法愈可靠。假如有⼈找到⼀
种快速因数分解的算法的话,那么⽤RSA加密的信息的可靠性就会极度下降。但找到这样的算法的可能性是⾮常⼩的。今天只有短的
RSA钥匙才可能被强⼒⽅式破解。到⽬前为⽌,世界上还没有任何可靠的攻击RSA算法的⽅式。只要其钥匙的长度⾜够长,⽤RSA加密的
信息实际上是不能被破解的。
1983年9⽉12⽇⿇省理⼯学院在美国为RSA算法申请了专利。这个专利于2000年9⽉21⽇失效。由于该算法在申请专利前就已经被发表
了,在世界上⼤多数其它地区这个专利权不被承认。
0x07其他常见密码学应⽤
0x07aDiffle-Hellman密钥交换
迪菲-赫尔曼密钥交换(英语:Diffie–Hellmankeyexchange,缩写为D-H)是⼀种安全协议。它可以让双⽅在完全没有对⽅任何预先
信息的条件下通过不安全信道创建起⼀个密钥。这个密钥可以在后续的通讯中作为对称密钥来加密通讯内容。公钥交换的概念最早由瑞夫·
墨克()提出,⽽这个密钥交换⽅法,由惠特菲尔德·迪菲(BaileyWhitfieldDiffie)和马丁·赫尔曼(Martin
EdwardHellman)在1976年⾸次发表。马丁·赫尔曼曾主张这个密钥交换⽅法,应被称为迪菲-赫尔曼-墨克密钥交换(英语:Diffie–
Hellman–Merklekeyexchange)。
0x07bHash长度扩展攻击
在密码学和计算机安全中,长度扩展攻击(Lengthextensionattacks)是指针对某些允许包含额外信息的加密散列函数的攻击⼿段。
该攻击适⽤于在消息与密钥的长度已知的情形下,所有采取了H(密钥∥消息)此类构造的散列函数。MD5和SHA-1等基于Merkle–
Damgård构造的算法均对此类攻击显⽰出脆弱性。注意,由于密钥散列消息认证码(HMAC)并未采取H(密钥∥消息)的构造⽅式,因
此不会受到此类攻击的影响(如HMAC-MD5、HMAC-SHA1)。SHA-3算法对此攻击免疫。
0x07cShamir门限⽅案
Shamir(t,n)门限⽅案是通过构造⼀个t-1次多项式,并将需共享的秘密作为该多项式的常数项,将秘密分成n部分分别给n个参与者,使t
个参与者联合可恢复秘密,但少于t个参与者联合不能得到共享秘密的任何信息。Blakley独⽴地提出的另⼀个(t,n)门限⽅案,它的基本思
想是利⽤多维空间中的点来建⽴门限⽅案,将共享的秘密看成t维空间中的⼀个点,每个⼦秘密为包含这个点的t-1维超平⾯的⽅程,任意t个
t-1维超平⾯的交点刚好确定共享的秘密,⽽t-1个⼦秘密(即t-1个t-1维超平⾯)仅能确定其交线,因⽽得不到共享秘密的任何信息。
本文发布于:2023-01-03 10:49:47,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/90/83961.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |