发表于 2023-12-12 14:52:42 江苏| 2024-1-2 14:25编辑 | 显示全部楼层
[quote]吃了学院将近4年白食了,也该写点有用的东西了[/quote

因为有人回了所以我提前在开头声明:请不要刷感谢分享,影响帖子观感不说,我赌你肯定没认真看帖子内容。以后有人再回感谢分享我一律拉黑
导言
首先我们要知道为什么会有密码学。密码学来源于人们对于信息传递过程中的追求。由古至今发展出了许许多多的密码,人们将它们分为了古典密码学和现代密码学。密码学(Crypto)一词源于希腊语kryptós“隐藏的“,和gráphein“书写“。古典密码学通常依赖于创造力,作为一种实用性艺术存在,并没有对于密码学原理的清晰定义。而现代密码学是计算机与数学的交叉学科。如果你是数论大佬的话,请您务必教导我在密码学方面的学习,不胜感激。
言归正传,现代密码学则起源于20世纪末出现的大量相关理论,这些理论使得现代密码学成为了一种可以系统而严格地学习的科学。
我上了大学后加入了网安社团,主要进行密码学方向的研究。本人水平依旧有限,如有谬误,还请各方大佬斧正。也请大佬们积极补充,使本文更加翔实。
古典密码部分学院已经有大量帖子讲过了,我就不多加赘述了。
而我呢,正如上文所说,我依然是一个密码学入门菜鸟,各位中肯定有人的天赋要远远高于我,我现在敢在这里讲密码学,只是因为我的水平高于一部分人(无恶意),所以还请大家多多给我提建议,我都会听的。
本人无意写一篇密码大合集,本文只希望能帮助读者建立基础的密码思想。如果想找一部密码百科,还请移步别处。





2 | 楼主| 发表于 2023-12-12 15:05:06 江苏| 2023-12-17 23:24编辑 | 显示全部楼层
常见单表替换密码

凯撒密码
这个我不想,也觉得自己不应该在这上面花费时间。如果您是小白,确实不了解这种密码,请灵活运用搜索引擎。
传说凯撒大帝曾经用这种方式和他的将领们传递军情。历史证明这种方法在当时是安全的,而且要知道那会儿可没有义务教育。
破解方法
爆破。

简单密码表替换
将字母表随机替换成一个新的密码表,形成一种新的对应关系。破解难度来源于其巨量的排列组合可能性(密钥空间的数量为26!=26×25×…×2×1),使其难以暴力破解。
破解方法
字频分析:我们知道,英语字母的出现频率是不一样的,比如最高的是e。那么将e替换之后,比如替换为x,那么x的字频就是最高的。
1. 高频与低频字母均可成为线索
2. 拥有的密文数量越多越容易破解
3. 要进行适当猜测与推理
https://quipqiup.com/
这个网站我平时经常使用,简单的替换类密码都能爆。

Polybius密码
也是简单的替换,虽然没有j,但是不影响明文的可读性。

破解方法
字频分析。

猪圈密码
这个我看学院里也有大佬讲的很详细的 帖子 ,可以移步过去看看。
破解方法
这个密码表似乎都是公开的吧……破解难度甚至低于凯撒…

培根密码
培根密码使用两种不同的字体,代表 A 和 B,结合加密表进行加解密。我认为它本质上其实是一种隐写术。

上面的是常用的加密表。还有另外的一种加密表,可认为是将 26 个字母从 0 到 25 排序,以二进制表示,A 代表 0,B 代表 1。
下面这一段内容就是明文 steganography 加密后的内容,正常字体是 A,粗体是 B:
To encode amessage each letter ofthe plaintext is replaced bya groupoffiveof the letters'A'or 'B'.
可以看到,培根密码主要有以下特点
- 只有两种类型的字符
- 每一段的长度为 5
- 加密内容会有特殊的字体之分,亦或者大小写之分。
破解方法
在线网站:http://rumkin.com/tools/cipher/baconian.php当然,你非要爆破的话我也不拦你。

云影密码
学院里我看也有人讲过了, 那篇 讲的很好。我就不写了。不过还是忍不住想指出一个小错误,就是
引用
可知falg为WELLDONE
falg应该是flag,问就是打CTF打的。
破解方法
可以口算。
以下是解码脚本,大家可以随意取用。


def decrypt_cloud_shadow_code(encoded_message):   
# 将数字映射到字母(1 -> A,2 -> B,...,26 -> Z)   
num_to_letter = {i: chr(64 + i) for i in range(1, 27)}   

# 使用'0'作为分隔符将消息分成组   
groups = encoded_message.split('0')   

# 解密每个组   
decrypted_message = ''   
for group in groups:        
if group:  # 检查组是否非空            
total = sum(int(digit) for digit in group)            
decrypted_message += num_to_letter.get(total, '?')  # 对于无效数字,使用'?'表示   
return decrypted_message

# 用户输入user_input = input("输入加密的消息: ")
decrypted_message = decrypt_cloud_shadow_code(user_input)
print(f"解密后的消息: {decrypted_message}")

本帖子中包含更多图片或附件资源

您需要 登录 才可以下载或查看,没有帐号?加入学院

1 | 楼主| 发表于 2023-12-12 16:32:50 江苏| 2023-12-17 22:22编辑 | 显示全部楼层
占一楼,说不定未来有用
2 | 楼主| 发表于 2023-12-17 22:09:20 江苏| 2023-12-18 16:23编辑 | 显示全部楼层
回来了,接着讲,这两天有点忙,承蒙大家错爱了。你们不要给我点赞了,弄得我都良心不安了,所以这次的我要讲的很细很细
仿射密码 ——年轻人的第一种现代密码
这个学院里也有人讲过,我就直说了,不够细致/明朗,至少我看完仍然是一头雾水的。这个属于现代密码范围,要求有一定的数学能力。但是大家不要害怕,这个还是很简单的。我觉得我讲的小学生都可以听懂。如果你真的没有听懂,可以回帖询问,虽然我现在不活跃了,但是每天还会来学院看一看,我会尽我最大能力讲懂你。
好,言归正传,开课。
首先介绍一点密码学的概念
在密码学中,通常使用以下标记来表示不同的概念:
m(明文):表示原始消息或文本,即加密前的信息。
c(密文):表示经过加密后的消息或文本,即加密后的信息。
这是一种通用的标记约定,但并非所有加密算法都采用这种符号约定。在某些情况下,也可能使用其他符号或术语,具体取决于特定的加密方案或协议。

然后正式开讲
仿射密码通常会有形式为(a,b)的密钥,在英文中其加密函数为C=(am+b)%26
c是密文,a和b是密钥,26是字符集的大小,所以我上面的表述是“在英文中”。
如果拿俄文或者日文甚至是ASCII码的话字符集的大小肯定会变化,解密的时候可能会出现这些情况。尤其是在CTF比赛中,遇到这种情况选手的做法一般是暴打出题人
说笑了,然后相对的,在英文中解密函数是m=a⁻¹(c-b)%26。
这里a⁻¹并不是a的倒数,在仿射密码中a⁻¹是a在模26下的逆元素, a⁻¹通常满足(a*a⁻¹)%26=1,在仿射密码的上下文中,我们通常要求a和26互质以确保a在26下有逆元素。
以上的26都是以英文为基础确定的,26是字符集的大小,如果拿俄文或者日文甚至是ASCII码的话字符集的大小肯定会变化


破解
我知道你们关心这个
我就这样说吧,1.这种密码依然是单表代换密码,最后都会形成一个明文字母和密文字母一对一的关系。这意味着字频分析仍然是一种行之有效的手段。
2.然而区别在于,仿射密码的对应关系是由加密函数生成的,所以我们可以同样可以通过给定一个已知的明文攻击,求解出仿射方程式。
| 楼主| 发表于 2023-12-17 22:23:32 江苏| 显示全部楼层 发帖际遇
嗯,这两天在复盘上次比赛的题目,如果有大佬也想做的话,可以私信我要题目,咱们可以交流一下
2 | 楼主| 发表于 2023-12-19 22:25:32 江苏| 显示全部楼层
多表代换密码
上面我们粗略接触了单表代换密码,你大概可以发现,字频分析是一个屡试不爽的办法,只要有一台说得过去的设备,破译班花传给后排帅哥的纸条看起来就不像是一件不可能的事了。你摩拳擦掌兴致勃勃,准备破解纸条内容再大刀阔斧的篡改一遍,给予帅哥一记迎头痛击,告诉他谁才是老大。但是你发现竟然不管用?没关系,我来拯救你的恋情。接下来我们将讲解一下几种多表代换密码和破解方法。

维吉尼亚密码
维吉尼亚密码可以看作一种加强版的凯撒密码,具体加密方法学院里各路大佬已经讲的很好了,我就不写了。

破解
学院里曾经也有师傅讲过破解方法,讲的是真TM的好啊,人家还写了脚本,他真的,我哭死请大家一定要去看一看那篇帖子
首先我们要了解为什么维吉尼亚相比于单表代换密码更加安全,因为依据它采用的加密方法,明文中的一个相同的字母在密文中可以被加密成多种字母,如果我们进行字频分析的话会发现在频率分布直方图上,图像会变得更加平缓,失去了其在字母表中的频率特征。这就是其相比于单表代换密码的强大之处。
但是,这亦成为了维吉尼亚密码的阿喀琉斯之踵。
我上面写了,这是一种加强型的凯撒密码,具体在每个密钥长度n的循环中,都进行了一次相同的凯撒加密。即维吉尼亚密码的密文c是由明文(设长度为h)分成的h/n段凯撒密码组成的。
听起来有些难理解?
我来举个例子。
设明文m=abcdefg,密钥k=key,则我们对其进行加密的话,a会在m行里找到k,b会在e行找到f,c会在y行变成a。然后d又会在k行变成n,你发现了吗,其密钥重复使用了。所以们就会发现,这相当于将明文每h个字母为一组分组,分别用相同的密钥进行凯撒加密。凯撒加密是一种凯撒大帝创造的一种单表代换密码,后面忘了。


另一个方法,Kasiski检测。它利用了相同子串的重复。通过找到密文中相同的子串,攻击者可以推断出密钥的长度。一些常见的单词,比如of,the有几率被密钥的相同部分加密,即原文中的of/the可能在密文中呈现为相同的三个字母。在这种情况下,相同片段的间距就是密文长度的倍数。所以我们可以通过在密文中找到相同的片段,计算出这些相同片段之间的间距,而密钥长度理论上就是这些间距的公约数。
以下是Kasiski检测的详细过程:
1.找出重复子串: 攻击者首先在密文中寻找重复出现的子串。这些子串可能对应于相同的明文片段在不同位置被相同的密钥加密而成。
2.计算子串的距离: 一旦找到相同的子串,攻击者计算它们在密文中出现的位置之间的距离。这个距离可能是密钥长度的倍数。
3.分析距离: 攻击者分析这些距离,尝试找到它们的最大公约数。最大公约数可能是密钥的长度,因为同一个密钥会导致相同的距离。
4.确定密钥长度: 通过找到最大公约数,攻击者可以得到一个可能的密钥长度。这个长度通常是密钥长度的候选值。
确定出了密钥长度,我们就可以将密文转换为多段凯撒密码。凯撒加密是一种凯撒大帝创造的一种单表代换密码,后面忘了。
Kasiski检测的核心思想在于利用相同的明文片段在密文中的重复出现,因为这些重复可以揭示密钥的周期性。通过分析这些周期,攻击者可以推断出密钥的长度,从而更容易地进行后续破解步骤。


我们也可以通过IC测试来破解维吉尼亚密码。IC是基于凹凸度量理念。如果字母完全平滑分布,说明密文中每个字母出现的概率相同,都为1/26。然而标
准英文中字母频率分布不是平滑的,因此,凹凸度量是密文中字母实际频率与完全平滑频率(1/26)之差。然后。。。。。啊啊啊啊那几个公式该怎么打啊。你们去看那位师傅写的文章吧,他讲的比我好。
我只说一个结论吧:单码加密法的IC值大概为0.066,对于完全平滑文字,其值为0.038,如果IC值位于0.038与0.066之间,说明加密的密钥长度不同。不同长度的密钥对应不同的IC值。你就找密钥长度是多少时最接近0.066,然后你就可以确定密钥长度了。确定出了密钥长度,我们就可以将密文转换为多段凯撒密码。凯撒加密是一种凯撒大帝创造的一种单表代换密码,后面忘了。
| 楼主| 发表于 2023-12-26 23:06:04 江苏| 显示全部楼层
最近有点忙,就随口聊聊密码学吧。
现在的比赛密码题,一般都是从现有的加密方法中选取出题,所以想要正确的做出题目就必须要识别出加密类型。而在其他地方出现的密码题,比如学院密码板块,一般会出现自创的加密方法。这时候重要的是了解出作者的加密思路。
囧宅定理:一切密码题都是可解的。
所有密码题都必须且必然满足这个定理。因为这是一道题目,作者必须在满足难度的同时保证其可解性。不想让人了解到明文的不叫题目,叫机密。所以自创的密码都会有一段作者给出的提示,该提示是加密方法的指针。但是一旦知道了加密方法就必然可以进行解密(其实这么说是不严谨的,在非对称加密中即使我把公钥给你,你也解不出明文),作者要保证难度啊,所以他就化身谜语人,此时题目已经转变成了对明文的双层加密:第一层是通过作者自创的加密方法进行加密,第二层是对题目的加密。当然也有提示和密文互为提示的,唔,这么说好像有点奇怪。
2 | 发表于 2023-12-30 13:52:43 北京| 发自安卓客户端 | 显示全部楼层
好东西,不过古典密码基本没啥抗攻击力,编好程序破解很快。还是现代密码更恶心
登录帐号可查看完整回帖内容
| 发表于 2024-1-2 12:18:57 四川| 发自安卓客户端 | 显示全部楼层
感谢分享
| 发表于 2024-1-28 23:12:18 湖北| 发自安卓客户端 | 显示全部楼层 发帖际遇
感谢分享
返回版块
123
尚未登录
您需要登录后才可以回帖 登录 | 加入学院