首页
社区
课程
招聘
解密就是个笑话
2020-5-9 10:56 14117

解密就是个笑话

2020-5-9 10:56
14117

  信息加密这里主要说文件加密,大家公认一次一密的加密是不可破解的安全加密,但为什么大家不用呢,因为那种加密需要和被加密文件一样长的真随机数,这样长的数据存放传递都不方便,而且获得真随机数也不太容易,所以一般不用。
  真随机数不好用,只好选择其它,调用随机函数可以产生无穷无尽的数,有个缺陷就是有周期性,好在一般周期都比较大,周期之内数据是不重复的,截取一段和文件一样长的不重复数据就可以加密了,随机函数生成的数组由于来自一套生成方式所以随机性并不好,被称为伪随机数,用它们来加密似乎不太安全,其实大可不必担心,伪随机序列不会裸奔的一般:
      密文字节 = 明文字节 + 密钥字节*参数1 + 参数2
  因为随机函数的值只在运算内部出现,窃密者不掌握随机函数的应用起点即便知道了随机函数的运算结构,也不能从密文中得到任何有用的信息,既然如此加密依然是安全的。
  用随机函数加密一般也称为序列密码加密,这些伪随机数值形成的数组比真随机数组要好管理的多,它们几乎不占有空间,只要一个种子就可以调用了,实际是选择了随机序列的一个起点,那有人就想了,可以排查这个起点啊,如果你用两个不同的种子各引导一个数组再合并成一个数组的话,基本就很难寻找种子了,如果用两个随机函数参与建造密钥数组就更好了,有的随机函数周期长的吓人,例如Twister MT19937周期大约10的6000次方,找到的可能性几乎为零。即便是周期小的随机函数因为被加密的文件数据的影响密文也很难从那些小周期的随机函数重复性中得到些破解的好处。
  程序用随机函数加密一般是这样的:程序得到用户密码,用这些数据算出一些种子和参数是很容易的事,有了种子用随机函数生成和被加密文件一样长的数组加密即可,解密就是将用于加密的数组请出来。通过上面的分析得知虽然是伪随机数加密和真随机数加密的破解难度不分伯仲,况且算出的几个种子和参数可以使用几个随机函数同时参与加密或解密,这在程序里是易如反掌的,运算速度也是差不多的,解密难度确增加了不知多少倍。
  上面仅从随机函数加密文件说明想要靠分析法破解此类加密的密文是不可能的,至于穷举攻击有专门的方法对付这里就不多述了。


[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

最后于 2020-5-26 16:50 被sjdkx编辑 ,原因: 丰富内容
收藏
点赞0
打赏
分享
最新回复 (51)
雪    币: 377
活跃值: (5996)
能力值: ( LV4,RANK:55 )
在线值:
发帖
回帖
粉丝
zx_838741 2020-5-9 11:40
2
0
大佬ctf是咋回事,看他们用的都是一些主流的加密,怎么还能被逆出来,什么这个函数,那个方程我看了都头疼
雪    币: 1422
活跃值: (728)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Barrientos 2020-5-9 15:41
3
0
但凡有点花生米楼主也不至于醉成这样。随机函数不随机,加密的安全性不仅仅取决于加密算法的复杂度,还包括计算机算力、代码逻辑、代码安全性(第三方库安全性、自带库安全性)等等,安全攻击一直都是防御面的问题。
回复下楼上,CTF中的加密程序只是出题人设置好的有问题的加密程序,至于哪里设置问题要看出题人,在这个过程中能考察选手对加密算法的了解程度(大概率是考数学,是数学不是算术),当然更能考察这个选手是不是能坐的住
雪    币: 10014
活跃值: (2012)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
sjdkx 2020-5-9 19:02
4
0
打嘴仗是最没意思的,有本事解个最简单密文试试。随机函数是不怎么随机,即便如此您能得到任何好处吗?随机函数真只是个过程中的参数,从来也不单独出现。您们的看家本事就是穷举攻击,在长密码多入口下也是废柴,现代密码学只是混饭吃的东西。
雪    币: 4119
活跃值: (1500)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
Boring勇哥 2020-5-9 20:15
5
0

https://bbs.pediy.com/thread-257050.htm

最后于 2020-5-9 20:35 被Boring勇哥编辑 ,原因:
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
wx_沁沁她爸 2020-5-9 22:54
6
0
你们这些说大话的,现在都什么年代了,MD5 都给你碰撞出来。
雪    币: 10014
活跃值: (2012)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
sjdkx 2020-5-9 23:17
7
0
@Boring勇哥  一个字节凭空扩展成任意字节没见过这种怪东西,这种假设就是空谈,我举的例子是借助于随机函数丰富的信息量的,也很容易用现有的函数来实现,请不要拿些虚幻的假设来说事,那样毫无意义。
雪    币: 835
活跃值: (612)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
stand ot law 2020-5-9 23:27
8
0
能加密就能解密。加密的目的是为了让特定对象得到有用信息。如果对信息加了密,连接收方都无法解密,那直接发送垃圾信息给对方就好,反正对方也看不懂。
雪    币: 10014
活跃值: (2012)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
sjdkx 2020-5-9 23:50
9
0

再说一遍为什么不可破解

如果我用一个字符去加密另一个字符得到密文,谁也不能破解,因为这是一次一密。

现在改用随机函数来加密了,随机函数的妙处在于定义一个种子,就可以使用其后许多数值,并且可以使用多个随机函数,随机函数不同但种子可以是相同的,所以能用大量的数值去加密少量的明文,并且用户密码的用途只是算出种子而已,所以不用多长。这样的加密能破解吗?不能和一次一密媲美才怪。

雪    币: 10014
活跃值: (2012)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
sjdkx 2020-5-10 00:11
10
0
@stand ot law   一粒沙子藏在桌子上和藏在沙漠里的寻找难度相差太大了。不能找到也就是没解。
雪    币: 10
活跃值: (62)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
nengmao 2020-5-17 17:54
11
1
建议先看看PRG(伪随机数生成器) PRF(伪随机函数) 和PRP(伪随机置换)的区别
像流密码很多是基于PRF,分组密码很多是基于PRP,他们虽然跟PRG名字类似但是完全不一样的东西。如果你的另一篇帖子底下的一个大神发的逆向源码没错的话,你的算法只是设计了一个PRG
一个安全的密码学算法应该能一定程度上抵御唯密文攻击,已知明文攻击,选择明文攻击,选择密文攻击和已知文本攻击,攻击的强度是由低到高的,燃鹅你的算法似乎连已知明文攻击都防不了,因为你设想的安全场景局限于唯密文攻击
雪    币: 10
活跃值: (62)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
nengmao 2020-5-17 18:11
12
1

我再详细解释一下已知明文攻击吧,意思是一个密码应该能抵御这种场景:我知道密文及其对应的明文,要求是不能由此推断出密钥
那么你的算法如何推断出密钥呢,首先因为你的密码算法是公开的,所以攻击者应该能自己实现一套加密解密算法,包括随机数生成算法
你的加密流程如下:用户输入一个短密码(这里假设只有一字节)作为seed
key = Rand(seed)
ciphertext = Encrypt(key, plaintext, length)

这里是key是很长的,是你认为的不可被攻破的点,但你想想下面这种攻击方式

我现在有ciphertext和plaintext,只要
for(seed=0; seed<=0xff; seed++)
  key = Rand(seed)
  if( plaintext == Decrypt(key, ciphertext, len) )
    print("Cracked")

    print("seed= %d", seed)

只要这样就能直接算出用户输入的seed,密码也就算是被破解了

最后于 2020-5-17 18:15 被nengmao编辑 ,原因:
雪    币: 10014
活跃值: (2012)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
sjdkx 2020-5-18 00:31
13
0

你这样规定的场景,一个字节的密码,那用穷举攻击只要用从0-255个数值走一走就OK了。是不是太简单了。
我的程序也许是这样的,从那个字节的密码,用CRC16函数算出,一个整数当种子,用一号随机函数生成和明文一样长的密钥数组。还用那个字节用CRC32再算出一个整数以此为种子,用二号随机函数生成和明文一样长的密钥数组。不多说了就用这两个数组加密明文吧。你怎么求解呢,请说说高见。当然你还可以用穷举攻击,因为就一个字节的密码,不过那也太让人笑话了,你需要考虑如果密码是几个到几十个字节您怎么破解?

最后于 2020-5-18 00:53 被sjdkx编辑 ,原因: 详细内容
雪    币: 10
活跃值: (62)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
nengmao 2020-5-18 01:06
14
0
sjdkx 你这样规定的场景,一个字节的密码,那用穷举攻击只要用从0-255个数值走一走就OK了。是不是太简单了。我的程序也许是这样的,从那个字节的密码,用CRC16函数算出,一个整数当种子,用一号随机函数生成和 ...
你还是没懂我的意思啊。。。你提出的生成密钥数组的方法一切都是基于你的生成方法不为人所知(即从你所谓的短密码生成长密码的方法)。一旦有人知道你生成密钥数组的算法它只需要爆破你的短密码就能得到长密码,方法就是用与你的算法相同的程序从短密码生成长密码,再用这个长密码去解密,看看跟明文一不一样,如果不一样就继续遍历。这样只需要遍历完你短密码的密钥空间就可以爆破了,具体对应我上面回帖的伪代码,你所说的一字节密码对应seed,对seed求CRC16和CRC32并且初始化随机数对应Rand,使用两个随机数生成的序列解密对应Decrypt
你提出的这个方法跟流密码基本没有什么本质区别,只不过流密码没有所谓的短密码和长密码,或者说流密码的随机数种子本身已经够长了,从计算角度上无法爆破
然后如果你说seed是几个到几十个字节,那跟我们现在使用的密码有什么区别么。或者说你这个项目初衷不就是不用那么长的密码么(当然我上面那些话都是为了证明这样使用短密码的方法是不成立的)
雪    币: 2938
活跃值: (18)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
fqbqrr 2020-5-18 08:23
15
0
好像有真随机吧.
雪    币: 2938
活跃值: (18)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
fqbqrr 2020-5-18 08:24
16
0
楼主不要骗我.
雪    币: 4866
活跃值: (2657)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
野狼 2020-5-18 09:29
17
0
不管你怎么加密,你一定要给对方能解密出来。只要对方能解密出来,就可以破解。不要不信
雪    币: 399
活跃值: (68)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
koop 2020-5-18 10:20
18
0
哪有什么真随机啊,所谓的随机甚至还不如摇骰子来的随机呢
雪    币: 2938
活跃值: (18)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
fqbqrr 2020-5-18 10:47
19
0
我就是给你的加密的东西呢.而且我就不打算让你们解密.你能解密吗?
雪    币: 2938
活跃值: (18)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
fqbqrr 2020-5-18 10:47
20
0
连我也解密不了的,你能解密吗?
雪    币: 4698
活跃值: (2916)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
任蝶飞 2020-5-18 11:16
21
0
我们的老鹰又出来了么
雪    币: 1422
活跃值: (728)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Barrientos 2020-5-18 12:07
22
0
就喜欢楼主这样,建议推广全国
雪    币: 343
活跃值: (2119)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
红颜小学生 2020-5-18 15:00
23
0
台湾那老哥学会简体字了?
雪    币: 10014
活跃值: (2012)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
sjdkx 2020-5-18 20:32
24
0

@nengmao 短密码如果只有一个入口,那不可避免的是容易受到穷举攻击的,而且因为密码短成功的可能性很大。我说的方法似乎没什么用。尽管方法中利用了长的默认密码,但只要短密码被攻破,后面都是程序自动运行的所以办法没用。还不如我以前提出的密码加后缀的办法好,这是爆破不能突破的,但穷举时也可以是加后缀的,所以后缀要经常更换才好。还有入口最好不要单一,增加一些选项每一选项对应不同的方法或参数,这样穷举攻击就没有决心了。我用的加密方法就是流密码,思考的东西也是不完善的,希望发现者指正,谢谢大家了。
寻找种子可不容易,有的随机函数周期特别长,找起来太难了。尤其是使用两种以上的随机函数。即便使用一种随机函数若用多个种子得到数组综合起来使用也是不好对付,你有多种加密方式,让用户密码的衍生值,去控制程序的走向是不错的选择,即使读懂了程序的方法也没有用,不知用户密码是没有办法的。
已知明文攻击在这里是无效的,这里虽然也是流密码加密,这里的流密码并不是直接使用随机函数当密钥,它有一个进一步随机化的操作,就是对随机函数形成的数组做随机排序,基本上确保了数组类似于真随机数,明温和密文之间没有逻辑关系,什么已知啊选择啊等攻击都不起作用。

最后于 2020-5-19 10:43 被sjdkx编辑 ,原因: 丰富内容
雪    币: 5514
活跃值: (2254)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
敏而好学 2020-5-19 00:03
25
0
没有解不了的密这是句哲学思想,为什么非要用自然哲学,去解读唯心主义?
游客
登录 | 注册 方可回帖
返回