右侧
黑客技术
当前位置:网站首页 > 破解邮箱 > 正文

生日攻击软件_生日软件制作教程

作者:hacker发布时间:2023-04-01分类:破解邮箱浏览:99评论:1


导读:哪个协议可为电子邮件提供更高的安全性PGP协议!!!!!电子邮件的方便、快速、费用低廉等优点,再加上它不但能传送文字信息,还可以附上图像、声音等功能,这使得电子邮件越来越受人们的...

哪个协议可为电子邮件提供更高的安全性

PGP协议!!!!!

电子邮件的方便、快速、费用低廉等优点,再加上它不但能传送文字信息,还可以附上图像、声音等功能,这使得电子邮件越来越受人们的欢迎。

1 电子邮件的传输过程

电子邮件通过SMTP和POP协议来进行发送和接受,但由于互联网的开放性,邮件内容是以明文的形式在互联网上进行传递。这使得人们在使用电子邮件时不得不考虑其安全因素,因此如何保证电子邮件的机密性、完整性、真实性和不可抵赖性等方面的问题显得尤为重要。

2 PGP介绍

为了使电子邮件在互联网上能够安全运行,开发出了一些安全电子邮件标准:PGP和S/MIME。其中PGP被广泛运用。

PGP(Pretty Good Privacy)是美国人Phil Zimmermann研究出来的,它是由多种加密算法(IDEA、RSA、MD5、随机数生成算法)组合而成,不但能够实现邮件的保密功能,还可以对邮件进行数字签名,使收信人能够准确判断邮件在传递过程中是否被非法篡改。

3 PGP工作原理

3.1 IDEA算法

IDEA属于对称加密算法,即加密密钥和解密密钥相同,具体的算法规则是,将输入数据以每64为一块,对每块进行分组,分为4组,每组16位,作为第一轮的输入,进行相乘、相加、异或等运行后,形成4个子分组,将中间两间进行交换,作为下一轮的输入,经过8轮运算后,同样得到4个子分组,再将这4组重新连接到一起形成密文共64位。

3.2 RSA算法

RSA属于非对称加密算法,也称公钥算法,即加密密钥和解密密钥不同,并且加密密钥可以完全公开,但由于没有解密密钥,即使非法者窃取到了密文和发送者的加密密钥也无法查看内容,解决了对称加密中对密钥管理困难的问题,RSA的安全性取决于对大数的因式分解,这是数学上的一个难题。

RSA算法描述:

1)随意选择两个大的质数p和q,p不等于q,q和p保密;

2)计算n=pq;

3)欧拉函数,φ(n) = (p-1)(q-1),n公开,φ(n)保密;

4)选择一个小于φ(n)的正整数e,满足gcd(e,φ(n))=1,e是公开的加密密钥;

5)计算d,满足de≡1(modφ(n)), d是保密的解密密钥;

6)加密变换:对明文m∈Zn,密文为C=me mod n;

7)解密变换:对密文C∈Zn,明文为m=Cd mod n;

由于RSA涉及的运算非常复杂,所以在运算速度上很慢,因而RSA算法只适合于对少量数据进行加密,如数字签名,一般情况下,如果要对大量信息进行加密,还是采用对称加密算法,因为对称加密速度比公钥加密速度快得多。

3.3 MD5算法

MD5属于Hash函数,可以将任意长度的输入压缩到固定长度的输出,具有多对一的单向特性。可以用于数字签名、完整性检测等方面。

4 PGP提供的业务

PGP提供的业务包括:认证、加密、压缩、与电子邮件兼容、基数-64变换。

4.1 认证

认证的步骤是:①发信人创建信息M;②发信人使用MD5算法产生128位的消息摘要H;③发信人用自己的私钥,采用RSA算法对H进行加密ER,M‖ER连接后进行压缩得到Z;④将Z通过互联网发送出去;⑤接收者收到信息后首先进行解压Z-1,使用发信人的公开密钥采用RSA算法进行解密得出H,用接收到的M计算消息摘要H,将得出的两个H进行比较,如果相同则接收,否则表示被篡改,拒绝。

4.2 加密

加密的步骤:发信人对信息M进行压缩,采用IDEA算法对其进行加密,用接收者的公钥对密钥进行加密,与M进行连接后发出,接收者采用RSA算法进行解密得到会话密钥,将会话密钥按IDEA算法进行解密,并解压缩,并到原文。

在加密过程中,由于信息相对内容较多,因此对信息的加密采用的是对称加密算法IDEA来实现,而密钥采用的是安全强度为高的非对称加密算法RSA实现,通过IDEA和RSA结合,不但提高了邮件传输的安全性,而且在加解密时间上也缩短了。

4.3 压缩

PGP采用ZIP算法压缩信息,这不但节省了存储空间,而且在传输过程中也节省了时间,另外,在对信息进行加密之前压缩,也相当于进行了一次变换,使其安全性增强。

4.4 与电子邮件兼容

由于电子邮件只允许使用ASCⅡ字符串,而PGP的输出却是8位串,为了与电子邮件进行兼容,PGP采用基数-64变换实现将输出的8位串转换为可以打印的ASCII字符串。

4.5 PGP消息分段和重组

电子邮件中对消息内容的长度有限制的,当大于所限制的长度时要进行分段,分段是在所有处理结束之后才进行,所以会话密钥和签名在第一个段开始位置出现。在接收端,PGP将重新组合成原来的信息。

5 PGP安全性分析

由于PGP是一种混合密码体系,它的安全性在于IDEA、RSA、MD5算法的安全性分析。

5.1 IDEA的安全性

在PGP中采用IDEA的64位CFB模式,很多研究者对IDEA的弱点进行了分析,但也没有找到破译的方法,由此可见,IDEA算法也是比较安全的,它的攻击方法只有“直接攻击”或者是“密钥穷举”攻击。(原作者:钟泽秀)5.2 RSA的安全性

RSA算法是非对称密码体制,它的安全性基于大整数的素分解的难解性,经过长期的研究至今也未找到一个有效的解决方案,在数学上就是一个难题,因此,RSA公钥密码体制就建立在对大数的因式分解这个数学难题上。

假设密码分析者能够通过n分解因子得到p和q,那么他很容易就可以求出欧拉函数φ(n)和解密密钥d,从而破译RSA,因此,破译RSA比对n进行因式分解难度更大。

假设密码分析者能够不对n进行因子分解就求出欧拉函数φ(n),那么他可以根据de≡1(modφ(n)),得到解密密钥d,从而破译RSA,因为p+q=n-φ(n)+1,p-q=sqr(p+q)^2-4n,所以知道φ(n)和n就可以容易地求得p和q,从而成功地分解n,所以不对n进行因子分解而直接计算φ(n)比对n进行因子分解难度更大。

假如密码分析者能够即不对n进行因子分解也不需要求φ(n)而是直接求得解密密钥d,那么他就可以计算ed-1,其中ed-1是欧拉函数φ(n)的倍数,因为利用φ(n)的倍数可以容易的分解出n的因子。所以,直接计算解密密钥d比对n进行因式分解更难。

虽然n越大其安全性越高,但由于涉及到复杂的数学运算,会影响到运行速度,那么我们实际运用中,如果来决定n的大小使其既安全其速度又不能太慢,目前n的长度为1024位至2048位比较合理。

研究人员建议,在运用RSA算法时,除了指定n的长度外,还应对p和q进行限制:①p和q的大小应该相差不多;②p-1和q-1都应该包含大的素因子;③gcd(p-1,q-1)应该很小。

5.3 MD5的安全性

MD5是在MD4的基础上发展起来的,在PGP中被用来单向变换用户口令和对信息签名的单向散列算法。它的安全性体现在能将任意输入长度的消息转化为固定长度的输出。目前对单向散列的直接攻击包括普通直接攻击和“生日攻击”。

在密码学中,有这么一句话:永远不要低估密码分析者的能力。这也将是密码设计者与密码分析者的较量,事实上绝对不可破译的密码体制在理论上是不存在的,因此,在实际应用中,一个密码体制在使用一段时间后,会换一些新的参数,或者是更换一种新的密码体制,当然,密钥也是要经常换的。由此可见,PGP软件虽然给我们的电子邮件带来了安全性保障,但它也不是永恒的,也许在不久的将来,由于它的弱点被攻击而被新的安全电子邮件产品所代替。

md5加密后的数据

用MD5爆力破解程序,大概要一个月的时间,运气好一个星期也许可以.前些日子召开的国际密码学年会(Crypto 2004)上,来自中国山东大学王小云教授的一篇关于"破译MD5、HAVAL-128、MD4以及RIPEMD-128算法"的报告引起了轰动,报告中提到的新破译方法几乎标志着世界通信密码标准——MD5堡垒的轰然倒塌。一石激起千层浪,此前一直负责公开征集针对MD5的攻击而设立的权威站点http�//www.md5crk.com/宣布"由于MD5破译获得突破性进展,MD5破解项目(MD5CRK Project)即日停止",并开始提供该站点以往技术资料的下载,预计该站点也将在不久的将来完全关闭。面对MD5被破译,有人一声叹息,有人觉得不可思议,更有人忧虑甚至恐慌......那么究竟MD5有什么来头?它被破译是否意味着"地球将不再旋转"?谁将成为它的继承者?请看——

一、MD5是何方神圣?

所谓MD5,即"Message-Digest Algorithm 5(信息-摘要算法)",它由MD2、MD3、MD4发展而来的一种单向函数算法(也就是HASH算法),它是国际著名的公钥加密算法标准RSA的第一设计者R.Rivest于上个世纪90年代初开发出来的。MD5的最大作用在于,将不同格式的大容量文件信息在用数字签名软件来签署私人密钥前"压缩"成一种保密的格式,关键之处在于——这种"压缩"是不可逆的。

为了让读者朋友对MD5的应用有个直观的认识,笔者以一个比方和一个实例来简要描述一下其工作过程:

大家都知道,地球上任何人都有自己独一无二的指纹,这常常成为公安机关鉴别罪犯身份最值得信赖的方法;与之类似,MD5就可以为任何文件(不管其大小、格式、数量)产生一个同样独一无二的"数字指纹",如果任何人对文件做了任何改动,其MD5值也就是对应的"数字指纹"都会发生变化。

我们常常在某些软件下载站点的某软件信息中看到其MD5值,它的作用就在于我们可以在下载该软件后,对下载回来的文件用专门的软件(如Windows MD5 Check等)做一次MD5校验,以确保我们获得的文件与该站点提供的文件为同一文件。利用MD5算法来进行文件校验的方案被大量应用到软件下载站、论坛数据库、系统文件安全等方面。

笔者上面提到的例子只是MD5的一个基本应用,实际上MD5还被用于加密解密技术上,如Unix、各类BSD系统登录密码(在MD5诞生前采用的是DES加密算法,后因MD5安全性更高,DES被淘汰)、通信信息加密(如大家熟悉的即时通信软件MyIM)、数字签名等诸多方面。

二、MD5的消亡之路

实际上,从MD5诞生之日起,来自美国名为Van Oorschot和Wiener的两位密码学专家就发现了一个暴力搜寻冲突的函数,并预算出"使用一个专门用来搜索MD5冲突的机器可以平均每24天就找到一个冲突"。不过由于该方案仅仅从理论上证明了MD5的不安全性,且实现的代价及其夸张(当时要制造这种专门的计算机,成本需要100万美元),于是MD5自其诞生十多年来一直未有新版本或者被其它算法彻底取代。

在接下来的日子里,有关MD5的破译又诞生了"野蛮攻击",也就是用"穷举法"从所有可能产生的结果中找到被MD5加密的原始明文,不过由于MD5采用128位加密方法,即使一台机器每秒尝试10亿条明文,那么要破译出原始明文大概需要10的22次方年,而一款名为"MD5爆破工具"的软件,每秒进行的运算仅仅为2万次!

经过无数MD5算法研究专家的努力,先后又诞生了"生日攻击"、"微分攻击"等多种破译方法(相关信息大家可以参考研究成果,大大推进了md5算法消亡的进程。尽管在研究报告中并没有提及具体的实现方法,我们可以认为,md5被彻底攻破已经扫除了技术上的障碍,剩下的仅仅是时间和精力上的问题。/" target=_blank)。此次山东大学几位教授的最新研究成果,大大推进了MD5算法消亡的进程。尽管在研究报告中并没有提及具体的实现方法,我们可以认为,MD5被彻底攻破已经扫除了技术上的障碍,剩下的仅仅是时间和精力上的问题。

QQ密码的哈希算法怎样得到求大神帮助

Hash,一般翻译做“散列”,也有直接音译为"哈希"的,就是把任意长度的输入(又叫做预映射, pre--mage),通过散列算法,变换成固定长度的输出,该输出就是散列值。 这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能 会散列成相同的输出,而不可能从散列值来唯一的确定输入值。 数学表述为:h = H(M) ,其中H( )--单向散列函数,M--任意长度明文,h--固定长度散列值。 在信息安全领域中应用的Hash算法,还需要满足其他关键特性: 第一当然是单向性(one-way),从预映射,能够简单迅速的得到散列值,而在计算上不可能 构造一个预映射,使其散列结果等于某个特定的散列值,即构造相应的M=H-1(h)不可行。这样,散列值就能在统计上唯一的表征输入值,因此,密码学上的 Hash 又被称为"消息摘要(message digest)",就是要求能方便的将"消息"进行"摘要",但在"摘要"中无法得到比"摘要"本身更多的关于"消息"的信息。 第二是抗冲突性(collision-resistant),即在统计上无法产生2个散列值相同的预映射。 给定M,计算上无法找到M',满足H(M)=H(M') ,此谓弱抗冲突性;计算上也难以寻找一对任意的M和M',使满足H(M)=H(M') ,此谓强抗冲突性。要求"强抗冲突性"主要是为了防范 所谓"生日攻击(birthday attack)",在一个10人的团体中,你能找到和你生日相同的人的概率是2.4%,而在同一团体中,有2人生日相同的概率是11.7%。类似的,当预映射的空间很大的情况下,算法必须有足够的强度来保证不能轻易找到"相同生日"的人。 第三是映射分布均匀性和差分分布均匀性,散列结果中,为 0 的 bit 和为 1 的 bit ,其总数应该大致相等;输入中一个 bit 的变化,散列结果中将有一半以上的 bit 改变,这又叫做"雪崩效应(avalanche effect)";要实现使散列结果中出现 1bit 的变化,则输入中至少有一半以上的 bit 必须发生变化。其实质是必须使输入中每一个 bit 的信息, 尽量均匀的反映到输出的每一个 bit 上去;输出中的每一个 bit,都是输入中尽可能多 bit 的信息一起作用的结果。Damgard 和 Merkle 定义了所谓“压缩函数(compression function)”,就是将一个固定长度输入,变换成较短的固定长度的输出,这对密码学实践上 Hash 函数的设计产生了很大的影响。Hash函数就是被设计为基于通过特定压缩函数的不断重复“压缩”输入的分组和前一次压缩处理的结果的过程,直到整个消息都被压缩完毕,最后的输出作为整个消息的散列值。尽管还缺乏严格的证明,但绝大多数业界的研究者都同意,如果压缩函数是安全的,那么以上述形式散列任意长度的消息也将是安全的。这就是所谓Damgard/Merkle 任意长度的消息被分拆成符合压缩函数输入要求的分组,最后一个分组可能需要在末尾添上特定的填充字节,这些分组将被顺序处理,除了第一个消息分组将与散列初始化值一起作为压缩函数的输入外,当前分组将和前一个分组的压缩函数输出一起被作为这一次压缩的输入,而其输出又将被作为下一个分组压缩函数输入的一部分,直到最后一个压缩函数的输出,将被作为整个消息散列的结果。 MD5 和 SHA1 可以说是目前应用最广泛的Hash算法,而它们都是以 MD4 为基础设计的。 链表查找的时间效率为O(N),二分法为log2N,B+ Tree为log2N,但Hash链表查找的时间效率为O(1)。 设计高效算法往往需要使用Hash链表,常数级的查找速度是任何别的算法无法比拟的,Hash链表的构造和冲突的不同实现方法对效率当然有一定的影 响,然而Hash函数是Hash链表最核心的部分,下面是几款经典软件中使用到的字符串Hash函数实现,通过阅读这些代码,我们可以在Hash算法的执行效 率、离散性、空间利用率等方面有比较深刻的了解。 下面分calc_hashnr_caseup(const byte *key,uint length) { register uint nr=1, nr2=4; html

口令攻击的主要方式及防护手段各有哪些?

口令是网络系统的第一道防线。当前的网络系统都是通过口令来验证用户身份、实施访问控制的。口令攻击是指黑客以口令为攻击目标,破解合法用户的口令,或避开口令验证过程,然后冒充合法用户潜入目标网络系统,夺取目标系统控制权的过程。

如果口令攻击成功黑客进入了目标网络系统,他就能够随心所欲地窃取、破坏和篡改被侵入方的信息,直至完全控制被侵入方。所以,口令攻击是黑客实施网络攻击的最基本、最重要、最有效的方法之一。

口令攻击的主要方法

1、社会工程学(social Engineering),通过人际交往这一非技术手段以欺骗、套取的方式来获得口令。避免此类攻击的对策是加强用户意识。

2、猜测攻击。首先使用口令猜测程序进行攻击。口令猜测程序往往根据用户定义口令的习惯猜测用户口令,像名字缩写、生日、宠物名、部门名等。在详细了解用户的社会背景之后,黑客可以列举出几百种可能的口令,并在很短的时间内就可以完成猜测攻击。

3、字典攻击。如果猜测攻击不成功,入侵者会继续扩大攻击范围,对所有英文单词进行尝试,程序将按序取出一个又一个的单词,进行一次又一次尝试,直到成功。据有的传媒报导,对于一个有8万个英文单词的集合来说,入侵者不到一分半钟就可试完。所以,如果用户的口令不太长或是单词、短语,那么很快就会被破译出来。

4、穷举攻击。如果字典攻击仍然不能够成功,入侵者会采取穷举攻击。一般从长度为1的口令开始,按长度递增进行尝试攻击。由于人们往往偏爱简单易记的口令,穷举攻击的成功率很高。如果每千分之一秒检查一个口令,那么86%的口令可以在一周内破译出来。

5、混合攻击,结合了字典攻击和穷举攻击,先字典攻击,再暴力攻击。

避免以上四类攻击的对策是加强口令策略。

6、直接破解系统口令文件。所有的攻击都不能够奏效,入侵者会寻找目标主机的安全漏洞和薄弱环节,饲机偷走存放系统口令的文件,然后破译加密的口令,以便冒充合法用户访问这台主机。

7:网络嗅探(sniffer),通过嗅探器在局域网内嗅探明文传输的口令字符串。避免此类攻击的对策是网络传输采用加密传输的方式进行。

8:键盘记录,在目标系统中安装键盘记录后门,记录操作员输入的口令字符串,如很多间谍软件,木马等都可能会盗取你的口述。

9:其他攻击方式,中间人攻击、重放攻击、生日攻击、时间攻击。

避免以上几类攻击的对策是加强用户安全意识,采用安全的密码系统,注意系统安全,避免感染间谍软件、木马等恶意程序。

口令攻击的防护手段

要有效防范口令攻击,我们要选择一个好口令,并且要注意保护口令的安全。

1、好口令是防范口令攻击的最基本、最有效的方法。最好采用字母、数字、还有标点符号、特殊字符的组合,同时有大小写字母,长度最好达到8个以上,最好容易记忆,不必把口令写下来,绝对不要用自己或亲友的生日、手机号码等易于被他人获知的信息作密码。

2、注意保护口令安全。不要将口令记在纸上或存储于计算机文件中;最好不要告诉别人你的口令;不要在不同的系统中使用相同的口令;在输入口令时应确保无人在身边窥视;在公共上网场所如网吧等处最好先确认系统是否安全;定期更改口令,至少六个月更改一次,这会使自己遭受口令攻击的风险降到最低,要永远不要对自己的口令过于自信。

md5 破解现状

一.MD5的由来

MD5的全称是message-digest algorithm 5(报文摘要算法)。是由Ron Rivest(RSA中的“R”)于90年代初提出,经md2、md3和md4发展而来的。Rivest最早于1989年提出了MD2算法,它是面向8位机的而作了优化。为了提高算法的安全性,Rivest在1990年又开发出MD4算法。Den Boer和Bosselaers以及其他人很快的发现了攻击md4版本中第一步和第三步的漏洞。Dobbertin向大家演示了如何利用一部普通的个人电脑在几分钟内找到md4完整版本中的冲突(这个冲突实际上是一种漏洞,它将导致对不同的内容进行加密却可能得到相同的加密后结果)。一年以后,即1991 年,Rivest开发出技术上更为趋近成熟的MD5算法。它在MD4的基础上增加了"安全-带子"(safety-belts)的概念。

下面简单介绍一下MD5比MD4改进的地方:

1. MD4使用三次循环处理,而MD5使用四次循环处理。每次循环仍是16步

2. MD4中,每一步都采用相同的附加限制,而MD5的四次循环分别采用了64个不同的附加限制;

3. 在第二次循环中,函数g从(XY v XZ v YZ)改成了(XZ v Y not(Z)),使得g更对称;

4. 每步运算结果都会加入下一步的运算中。如步骤1的结果更新了缓存A,步骤2的结果存在B中由A与循环左移的结果相加而得,以此类推,Rivest 认为这样加快了“雪崩效应”;

1993年,美国国家标准和技术协会(NIST)提出了安全散列算法(SHA)。1995年又发

布了一个修订版,即SHA-1。SHA-1与MD5均由MD4导出,所以彼此很相似。相应的,他们的强度和其他特性也是相似的。

1.对强行攻击的安全性:最显著和最重要的区别是SHA-1摘要比MD5摘要长32bit。使用强行技术,产生任何一个报文使其摘要等于给定报文摘要的难度对 MD5是2的123次方数量级的操作,而对SHA-1则是2的160次方数量级的操作。此外,使用强行技术,产生具有相同报文摘要的两个报文的难度对 MD5是264数量级的操作,而对SHA-1则是2的80次方数量级的操作。所以,SHA-1对强行攻击有更大的强度。

2. 对密码分析的安全性:由于MD5他的设计,它易受密码分析的攻击。SHA-1则显得不易手这样的攻击。由于有关SHA-1的设计标准几乎没有公开,因此很难判断其强度。

3.速度:因为两个算法都在上以来模2的32次方的加法,因此两者在32bit结构的机器上速度均很好。SHA-1有更多的步骤(80对64)且要处理 160bit的缓存,相比之下MD5仅处理128bit的缓存。这样在相同的硬件上,SHA-1的行速度应该比MD5慢。

4. 简单性和紧凑性:两个算法均描述简单、易于实现,并且无须冗长的程序或很大的替换表。

5. 小数在前结构与大数在前结构:MD5使用小数在前方案来解释以32bit字序列的报文,SHA-1则使用大数在前。当然,这两种结构并没有更突出的优点。

二.MD5的强度

Rivest 曾猜想MD5作为128bit的散列码是足够强的,即提出具有相同散列码的两个报文需要2^64数量级的操作,而找报文摘要等于与给定摘要的报文需要 2^128数量级的操作。从密码分析的角度看,MD5是被认为易受攻击的。从强行攻击的角度上看,MD5也易受生日攻击,所需的数量级是2^64。对 MD5攻击的历程:

1. Berson表明,对单循环的MD5,使用不同的密码分析可能在合理的时间内找出能够产生相同摘要的两个报文,这个结果被证明对四个循环中的任意一循环也成立。然而,作者还没有能够提出如何攻击包含全部四个循环MD5的攻击。

2. Boer和Bosselaers显示了如何找到一个报文分组X和两个相关链接变量来产生相同的状态,也就是即使缓存ABCD有不同的输入值,MD5对单个512bit分组的执行将得到相同的输出。这就是伪冲突。

3. Dobbertin提出了使MD5的压缩函数产生冲突的技术,即通过寻找另一个分组来产生相同的128bit的输出,攻击将针对MD5对单个512bit的输入分组的操作进行。

4.而现在王小云教授的发现使得MD5堡垒轰然倒塌。加拿大CertainKey公司早前宣布将给予发现MD5算法第一个碰撞人员一定的奖励, CertainKey的初衷是利用并行计算机通过生日攻击来寻找碰撞,而王小云教授等的攻击相对生日攻击需要更少的计算时间。以下是王教授在 “Crypto’2004”上有关攻击MD5的部分

IV0: A0 = 0x67452301, B0 = 0xEFCDAB89, C0 = 098BADEFD, D0 = 0x10325476

M' = M + ΔC1, ΔC1 = (0, 0, 0, 0, 231, ..., 215, ..., 231, 0)

Ni' = Ni + ΔC2, ΔC2 = (0, 0, 0, 0 231, ..., -215, ..., 231, 0)

(位置4、11和14非零)

此时,

MD5(M, Ni) = MD5(M', Ni')

在IBMP690 上,要用将近一个小时的时间来寻找这样的M和M’,之后只需要15秒至5分钟的时间就可以找到Ni 和 Ni',此时的(M, Ni) 和 (M', Ni')将产生相同的散列值。此外,这样的攻击可以工作于任意给定的初始值。我的理解是对给定的报文M,用王教授的方法可以在一个可接受的时间内(1小时左右)找到伪报文M’使得二者的Hash值是相同的。

下面是会产生碰撞的1024位消息,这两个例子具有相同的前半部512位。

X1 M 2dd31d1 c4eee6c5 69a3d69 5cf9af98 87b5ca2f ab7e4612 3e580440 897ffbb8

634ad55 2b3f409 8388e483 5a417125 e8255108 9fc9cdf7 f2bd1dd9 5b3c3780

N1 d11d0b96 9c7b41dc f497d8e4 d555655a c79a7335 cfdebf0 66f12930 8fb109d1

797f2775 eb5cd530 baade822 5c15cc79 ddcb74ed 6dd3c55f d80a9bb1 e3a7cc35

X1' M' 2dd31d1 c4eee6c5 69a3d69 5cf9af98 7b5ca2f ab7e4612 3e580440 897ffbb8

634ad55 2b3f409 8388e483 5a41f125 e8255108 9fc9cdf7 72bd1dd9 5b3c3780

N1 d11d0b96 9c7b41dc f497d8e4 d555655a 479a7335 cfdebf0 66f12930 8fb109d1

797f2775 eb5cd530 baade822 5c154c79 ddcb74ed 6dd3c55f 580a9bb1 e3a7cc35

H 9603161f f41fc7ef 9f65ffbc a30f9dbf

X2 M 2dd31d1 c4eee6c5 69a3d69 5cf9af98 87b5ca2f ab7e4612 3e580440 897ffbb8

634ad55 2b3f409 8388e483 5a417125 e8255108 9fc9cdf7 f2bd1dd9 5b3c3780

N2 313e82d8 5b8f3456 d4ac6dae c619c936 b4e253dd fd03da87 6633902 a0cd48d2

42339fe9 e87e570f 70b654ce 1e0da880 bc2198c6 9383a8b6 2b65f996 702af76f

X2' M' 2dd31d1 c4eee6c5 69a3d69 5cf9af98 7b5ca2f ab7e4612 3e580440 897ffbb8

634ad55 2b3f409 8388e483 5a41f125 e8255108 9fc9cdf7 72bd1dd9 5b3c3780

N2 313e82d8 5b8f3456 d4ac6dae c619c936 34e253dd fd03da87 6633902 a0cd48d2

42339fe9 e87e570f 70b654ce 1e0d2880 bc2198c6 9383a8b6 ab65f996 702af76f

H 8d5e7019 6324c015 715d6b58 61804e08

表1 MD5 的两对碰撞

至此,作为一个安全的摘要算法在设计时必须满足两个要求——其一是寻找两个输入得到相同的输出值在计算上是不可行的,这就是我们通常所说的抗碰撞的;其二是找一个输出,能得到给定的输入在计算上是不可行的,即不可从结果推导出它的初始状态——MD5已经无法满足第一个条件,。也就是说MD5已经不安全了,但并没有完全被破解。

三.王教授的发现对MD5的应用的影响

首先我们先来看看MD5的应用领域:

对一段信息(message)产生信息摘要(message-digest),以防止被篡改。比如,在unix下有很多软件在下载的时候都有一个文件名相同,文件扩展名为.MD5的文件,在这个文件中通常只有一行文本,大致结构如:

MD5 (tanajiya.tar.gz) = 0ca175b9c0f726a831d895e269332461

这就是tanajiya.tar.gz文件的数字签名。MD5将整个文件当作一个大文本信息,通过其不可逆的字符串变换算法,产生了这个唯一的MD5信息摘要。如果在以后传播这个文件的过程中,无论文件的内容发生了任何形式的改变(包括人为修改或者下载过程中线路不稳定引起的传输错误等),只要你对这个文件重新计算MD5时就会发现信息摘要不相同,由此可以确定你得到的只是一个不正确的文件。如果再有一个第三方的认证机构,用MD5还可以防止文件作者的 "抵赖",这就是所谓的数字签名应用。

MD5还广泛用于加密和解密技术上。比如在unix,linux系统中用户的密码就是以MD5(或其它类似的算法)经加密后存储在文件系统中。当用户登录的时候,系统把用户输入的密码计算成MD5值,然后再去和保存在文件系统中的MD5值进行比较,进而确定输入的密码是否正确。通过这样的步骤,系统在并不知道用户密码的明码的情况下就可以确定用户登录系统的合法性。这不但可以避免用户的密码被具有系统管理员权限的用户知道,而且还在一定程度上增加了密码被破解的难度。

下面我们讨论一下王教授的发现对MD5的应用的影响。

应该可以认为在unix,linux系统中用户身份验证还是安全的,并不象网络上一些人指出的出现安全漏洞。从王教授给出的对伪报文的计算方法:

M' = M + ΔC1, ΔC1 = (0, 0, 0, 0, 231, ..., 215, ..., 231, 0)

Ni' = Ni + ΔC2, ΔC2 = (0, 0, 0, 0 231, ..., -215, ..., 231, 0)

可以看出如果想得到M’,N’必须有原文M,N。而在unix,linux的用户身份验证中,攻击的一方即使找到的了用户的密码文件(存有密码的MD5值)也不可能从中得到与原密码产生碰撞的报文。不过作为一个摘要算法而言,MD5已经是不安全的了。

而在文件的数字签名方面,我们也暂时不用过于恐慌。王教授的算法找到了相同原始初值的1024位的MD5消息,但是对于任意给定的文件未必就可以找到碰撞的文件。所以暂时还没有对文件行之有效的攻击手段。

综上所述,王教授的算法对于实际应用中破解MD5算法并无太大的帮助。不过他们四人的研究成果,是若干年来密码学获得的重大突破,通过他们的研究,使密码研究者认识到对于MD5这样的算法,自身存在很大缺陷,未来的密码设计人员,要避开这些缺陷,设计出更强大,更安全,更保密的算法。

四.对其他散列函数的影响

王教授的论文还对除MD5外的三种算法MD4、HAVAL-128 和 RIPEMD进行了破解。同时她还提出其他一些散列函数也并不具有理想的安全性。例如,SHA-0 [6] 的碰撞就可以通过大约 240 次 SHA-0 计算找到,以及 HAVAL-160 的一个概率为 1/232 的碰撞也是可以被找到的。对此Francois Grieu说:“王小云、冯登国、来学嘉和于红波的最新成果表明他们已经成功破译了MD4、MD5、HAVAL-128、RIPEMD-128。并且有望以更低的复杂度完成对SHA-0的攻击。一些初步的问题已经解决。他们赢得了非常热烈的掌声。”而美国国家技术与标准局(NIST)于2004年8月24 日发表专门评论,评论的主要内容为:“在最近的国际密码学会议(Crypto 2004)上,研究人员宣布他们发现了破解数种HASH算法的方法,其中包括MD4,MD5,HAVAL-128,RIPEMD还有 SHA-0。分析表明,于1994年替代SHA-0成为联邦信息处理标准的SHA-1的减弱条件的变种算法能够被破解;但完整的SHA-1并没有被破解,也没有找到SHA-1的碰撞。研究结果说明SHA-1的安全性暂时没有问题,但随着技术的发展,技术与标准局计划在2010年之前逐步淘汰SHA-1,换用其他更长更安全的算法(如SHA-224、SHA-256、SHA-384和SHA-512)来替代。”

密码学笔记

别人用A的公钥加密传输的信息,只有A的私钥可以解密。保证了传输的信息的安全性。

A用A的私钥加密的信息,别人用A的公钥才可以解密。可以证明这个信息一定是A传输而来的。

共享秘钥(对称加密):速度快,但无法保证客户端与服务器之间传输时秘钥的安全性。

和公开密钥(非对称加密):安全,速度慢。

一、客户端请求SSL(安全套接层)通信,报文中包含自己支持的SSL版本、加密算法等。

二、服务器应答,附带自己的公钥证书,协商定好的SSL版本、加密组件。

三、客户端根据自己本地的收信任的CA公钥,解封服务器公钥证书,得到服务器公钥。客户端生成一个随机码序列,用服务器公钥加密后,发回服务器。

四、服务器用私钥解密后,再加密将字符串传回客户端。

五、客户端确认服务器身份后,生成对称加密算法和共享秘钥,使用服务器公钥加密后,传给服务器。

六、此后,双方使用对称加密算法加密数据,进行传输。

上面过程中,一二用于获得合法的服务器公钥,三四用于确认服务器是否为真正私钥持有者(因为,服务器公钥谁都可以得到)。

使用与明文比特序列一样长的,真正的随机数序列,进行加密,绝对安全,因为穷举破译后能得到整个秘钥空间,毫无意义。

以分组为单位进行处理的密码算法称为 分组密码。

采用 Feistel网络。

以 64 bit 为一个加密单位,首先分成两部分,各32 bit 。

加密过程持续数轮,每轮中,使用子秘钥与右侧数据经过轮函数生成一个序列,然后与左侧做 XOR 。

每轮结束后,左右两侧交换。

加解密结构相同,轮数任意,函数任意。

使用秘钥1、2、3对明文进行加密、解密、加密三个过程,称为三重DES。

解密过程是为了兼容老版DES,如果1、2、3秘钥相同,则成为了普通DES。

1、3秘钥相同,2不同时,称为DES-EDE2 。

1、2、3秘钥不同,称为DES-EDE3 。

采用的是 Rijndael 算法,SPN结构。

输入分组为 128bit(16字节),秘钥长度可以以 32bit 为单位,在128~256bit之间选择。

该算法由多轮构成,10~14轮。

一轮中:

SubBytes,按字节,将输入分开,以每个字节为索引,查表找值,替换。

ShiftRows(平移行),按字节,打乱上面的输出。

MixColumns (混合列),按4个字节,比特运算。

与轮秘钥进行 XOR 。

分组密码:每次处理,特定长度的一块数据。

流密码:对数据流,连续处理,需要保持内部状态,记录进度。

明文分组加密后,直接成为,密文分组。

特点:攻击者无需破译,即可操纵明文。

明文分组,与前一个密文分组XOR,加密得到自己的密文分组。

第一个分组的前一个密文分组,由 初始化向量(随机比特序列) 代替。

加密时,需要从头开始。因为需要与密文分组做 XOR 。

解密时,对密文分组解密,直接与密文分组 XOR 即可。

同样的明文分组,密文值可以不相等。

密文分组可以损坏,影响部分。

密文分组比特缺失,影响全部。

前一个密文分组,通过加密算法得到一个比特序列,称为 密钥流 。

明文分组,与密钥流 XOR,得到自己的密文分组。

解密时,加密算法对密文分组进行加密,得到密钥流,与密文 XOR 可得到明文。

重复攻击:假设秘钥相同。发送 4 个分组,攻击者保存了后面3个。转天,你又发送了 4 个分组,攻击者将你后面三个替换,接收方解密后,只有 2 号分组有错。

对于每个分组,初始化向量加密后,得到密钥流。明文与密钥流 XOR 后,得到密文。

速度快,密钥流可以提前生成,或者,生成秘钥过程可以和 XOR 运算并行。

对每个计数器加密得到密钥流。密钥流与明文分组 XOR ,得到密文分组。

计数器生成的数,由 一个随机序列 nonce + 从1开始的递增数字 组成。

对每个分组,计数器递增后,加密,得到密钥流。

能够以任意顺序处理分组,因为加密时需要的初始数字序列能够计算出来。

为了确保安全,有地理局限,与不同的人通信需要不同密钥,共享繁琐。

每个员工有自己的密钥,密钥分配中心使用个人密钥,包裹临时会话密钥,分配给各个员工使用。

密文=明文的E次方 MOD N

E 和 N 是RSA加密用的密钥,也就是说,E 和 N 的组合就是公钥。

明文=密文的D次方 MOD N

D 和 N 的组合就是私钥。

寻两个很大的质数 p 和 q,相乘得到 N

L为 p-1 和 q-1 的最小公倍数

随机数生成器,不停地生成数字,直到满足如下条件:

1 E L

E 和 L 的最大公约数为 1

根据 E ,计算 D

1 E L

E × D MOD L = 1

保证 E 与 L 互质,则 D 一定存在。

求对数很容易,求 离散对数 很困难

对一个大数字进行质因数分解,人类未找到高效算法

利用了 MOD N下,求离散对数的困难度

加密后,密文长度翻倍

利用了 MOD N下,求平方根的困难度

密码实现通过 对椭圆曲线上的特定点进行特殊乘法。

利用了该种乘法的逆运算非常困难这一特性

单向散列函数 又称为,消息摘要函数、哈希函数、杂凑函数

输入的消息 又称为,原像

散列值 又称为,消息摘要、指纹

完整性 又称为,一致性

根据任意消息,计算出的散列值长度,固定

用时短

消息不同,散列值不同

具备单向性

MD是消息摘要的意思

可以产生 128bit 的散列值,但它们的抗碰撞性已被攻破

SHA-1散列值长度为 160bit,强碰撞性已被攻破

其余的统称为 SHA-2,散列值长度为各自后面的数字

欧盟版本

第三代 SHA

消息上限 2^64 bit。

消息长度需要是 512bit 的整数倍。这样的 512比特 称为一个输入分组。

过程:

消息末尾添加 1

然后添加 0,直到最后一个分组的 448比特 的位置

最后 64比特 需要保存原是消息的长度

对每个分组计算 80 个 32bit 的值。

过程:

将 512bit 分成 32bit × 16组,称为 W0~W15

从15组中按规律取4组,进行 XOR 运算,结果循环左移 1 位,得到另外一组。如此反复,得到总共 80 组。

ABCDE 五个 32bit 的缓冲区,保存了 160bit 的消息内部状态。

内部状态与每个 512bit 的输入分组混合,一共 80 个步骤。

最终得到 160bit 的最终内部状态。

暴力破解:暴力寻找与 1亿元合同 散列值相同的文件

生日攻击:准备两份 散列值相同的 1亿元合同

可以辨别 篡改,无法辨别 伪装,因此还需要 认证技术

认证技术包括 消息验证码 和 数字签名

消息验证码:可以向通信对象保证消息不被篡改

数字签名:可以向任何人保证通信对象不被篡改

message authentication code,简称 MAC。

相当于 使用共享密钥的单向散列函数

SWIFT:负责银行间的交易,公钥密码使用前,都是人工配送密钥的。

IPsec:对IP协议增加安全性,采用的是消息认证码

SSL/TLS:网上购物等场景中所用协议。

过程:

密钥填充 至单向散列函数要求的输入分组大小

填充后的密钥 与 ipad(16进制的36不断循环)XOR,得到ipadkey

与 消息 组合,计算散列值

填充后的密钥 与 opad(16进制的5C不断循环)XOR,得到opadkey

与 上面得到的散列值 组合,计算新的散列值,为最终的MAC值

对第三方证明

防止否认

因为知晓密钥的只有两个当事人,第三者无法确定能拿到合法的密钥,无法自己计算合法MAC值

RSA:利用质因数分解难度的那个

ElGamal:利用求离散对数的困难度的那个,数字签名有漏洞,现仅用于公钥密码

DSA:Schnorr算法与ElGamal方式的变体,只能用于数字签名

Rabin:利用了求MOD N中平方根的困难度,可用于数字签名和公钥密码

例如,verisign公司的认证业务分为三个等级,等级越高,越严格

ITU 国际电信联盟和 ISO 国际标准化组织制定的 X.509 规范如下

大体包含以下内容:

签名前的证书——签名对象的各种消息

数字签名算法——签名时所用的算法

数字签名——得到的数字签名

PKI :为了能有效使用公钥而制定的一系列规范和规格

PKI 的组成要素如下

两种方法:一种是由认证机构生成,一种是由 PKI 用户自行生成

认证机构有一个 CRL(认证作废清单),具有数字签名,记载了已经作废的证书的编号。

认证时,从上(根证书)往下

对于密钥,关键的是 密钥空间的大小

DES 的密钥 实质长度(即,除去校验错误的比特后的长度)7字节

DES-EDE2 的实质长度 14字节,DES-EDE3 的实质长度 21字节

AES 的密钥长度可以从 128、192 和 256bit 当中选

会话密钥:每次通信中,仅使用一次的密钥

主密钥:一直被重复使用的密钥

CEK:Contents Encrypting Key

KEK: Key Encrypting Key

各个步骤中的密钥管理方法

两种方法:

用随机数生成密钥:使用具备不可预测性的伪随机数生成器生成随机数

用口令生成密钥:一般使用,口令 + 一串称为 salt 的随机数,得到他们的散列值作为密钥(这种方法称为:基于口令的密码)

事先共享

秘钥分配中心

使用公钥密钥

Diffie-Hellman 密钥交换

密钥更新:一种提高通信机密性的技术

原理:

使用 共享密钥 进行通信时,定期改变密钥。

双方使用同样的方法,对当前密钥求 散列值,并作为下一个密钥

优点:

后向安全:防止破译过去的内容

对密钥进行加密,然后保存

意义:

同时对多个密钥进行加密,可以减少保存密钥的数量

步骤:

P 为非常大的质数,G 为 P 的 生成元

目的为,将 随机数 A 的信息 含蓄地发给了 B

目的为,将 随机数 B 的信息 含蓄地发给了 A

计算方法:密钥 = (G ^ B MOD P) ^ A MOD P = G^(A × B) MOD P

计算方法:密钥 = (G ^ A MOD P) ^ B MOD P = G^(A × B) MOD P

对于一个质数 P ,只有它的生成元在进行 G ^ x MOD P 时,结果能够覆盖 0 ~ P-1 的所有数字

用途:用于安全的保存密钥

由来:

一 生成会话密钥 CEK ,加密消息

二 需要保密 会话密钥CEK,使用 密钥加密密钥KEK 对会话密钥进行保密

三 现在需要保密 KEK 这个密钥,选择使用口令生成这个 KEK

保密的问题最终都归结为了 安全保存密钥,然而我们记不住密钥。

于是,选择单向散列函数对口令生成散列值,作为密钥。

这个密钥无需保存,我们可以通过口令随时求得,口令也无法被反向推出,且口令方便记忆。

顺带,为了防止字典攻击,生成口令散列值时,需要使用 口令 + salt(随机数序列)

事先 已准备好 候选列表 的攻击方法

随机性

不可预测性

不可重见性

这三个性质,越往下越严格。分别称为:

弱伪随机数(不可用于密码学)

强伪随机数

真随机数

伪随机数生成器是公开的,种子是保密的。

确保种子的不可预测性,更加容易些。

种子是用来对伪随机数生成器的 内部状态进行初始化 的

R1 = (A × R0 + C) MOD M

数据有限,不能用于密码学

单向散列函数的单向性是支撑伪随机数序列不可预测性的基础

利用 AES 等对称密钥对内部状态进行加密

从当前时间开始,利用加密算法 求得加密后的时间的掩码 (因为密钥未知,别人无法推测出掩码信息)

与内部状态 XOR,加密后输出, 得到伪随机数序列

对伪随机数序列加密后,作为 下一个内部状态

针对极端情况的密码软件,具有全部功能。

TLS 由 TLS 记录协议 和 TLS 握手协议 叠加而成。

负责消息的 加密、压缩 和 认证

商定 客户端和服务器 所用的加密算法和密钥

负责 传递 变更密码的信号

发生错误时 通知对方

传输数据

标签:生日攻击软件


已有1位网友发表了看法:

  • 访客

    访客  评论于 2023-04-01 20:44:56  回复

    8 7b5ca2f ab7e4612 3e580440 897ffbb8634ad55 2b3f409 8388e483 5a41f125 e8255108 9fc9cdf7 72bd1dd9 5b3c3780N2

欢迎 发表评论:

破解邮箱排行
最近发表
标签列表