• 从数学到密码学(三)


    密码学模型与密码算法

    前已得知,用密钥处理明文的过程称为加密,加密过程在计算机上的实现称为加密算法。同理,解密过程在计算机上的实现称为解密算法,加/解密算法和后面将提到的签名/验证等算法统称为密码算法。

    对于保护明文的密钥自然需要通信双方加以保密,不能泄露。剩下的问题是:加/解密算法需不需要保密?

    乍一想,你可能会说,算法如果不保密,岂不是能够被不怀好意的第三方把明文还原出来?

    错!请注意,我们还有密钥。回顾前面讲到的异或的例子,假设E截获了A发给B的密文,虽然E知道加/解密算法,但是E不知道A、B之间共享的密钥,因而E仍无法得到原始的明文。

    所以只要保证共享密钥(此处是对称密钥)的安全性,就保证了明文的安全性。稍后我们将看到,对于公钥密码体制,这个原则仍然是成立的。

    事实上,密码学上的有一个Kerckhoffs原则,它的大意是:公开密码系统的任何细节(即公开加/解密算法),只要密钥未泄漏,该系统也应该是安全的。

    换句话说,密钥决定了密码体制的安全性。
     
    我们再从另一个角度去思考:密码算法到底是公开好还是不公开好?我的理解:总体讲,公开比不公开要好。

    两个角度解释:一、算法公开,将经受全世界专家的检验(通常一有漏洞,就会被公开),剔除那些有漏洞的密码算法,剩下的都是安全性较高的算法,可以放心使用。二、不公开,仍然有可能被泄露。RC4算法就是一个典型的例子,感兴趣的同学可以google一下。

    对于搞研究的人来说,还有一个Publish or perish的问题,你有了成果不拿出来公布,就会灭亡(没有拿得出手的东西,自然得不到研究经费,学术生涯必然危险)。关于这一点,密码学中大名鼎鼎的RSA算法也给我们上了生动的一课--你不发表出来,自然有人发表,感兴趣的同学,请再google之。

    此外,公开算法后,理论上任何人都可以依据算法的标准进行代码实现,有利于互联互通。提示:你用别人给你的应用程序进行通信放心,还是用自己写的应用程序进行通信放心?

    最后一点,公开算法符合开放的世界潮流。想想开放源码运动的蓬勃发展。我们平常见到的各种加/解密算法、网络安全协议都是算法公开的,这就是最好的见证。

    基于以上理由,现在社会中大多数民用/商用密码算法都使用公开的算法。 但还是有例外,用于政府或军事机密的密码算法通常就是保密的。为啥要保密?有一点可以解释,如果公安部使用了公开的加/解密算法,假设有人发现该算法有个漏洞,却不公开指出,则此人就可以利用该漏洞干些自己的私事(是否会造成损失取决于漏洞的严重性),而公安部还蒙在鼓里。基于此,干脆就不公开算法算了,同时辅以管理上的严格措施,使密码体制保持较高的安全性。

    在继续讨论密码学内容前,我们再描述这方面研究的一个基本共识。

    Dolev-Yao模型

    该模型认为:通信双方发出的数据包可被攻击者监听(截获)、阻止、篡改。攻击者甚至可以控制整个通信网络,唯一不被攻击者控制的是通信双方(及其控制的计算机)。

    你可能会问:攻击者为什么不能控制通信双方?因为这是终端安全的范畴。比如说计算机被植入木马了,等等。均不属于密码学或网络安全的研究范围内。

    模型还假定,攻击者熟知通信双方间进行的各种密码算法和协议。具有密码分析的知识和能力,能够进行各种攻击(后面会讲到),例如重放攻击。

    总之,一句话,攻击者除了不知道双方的密钥之外,其他的什么能力都具备。

    这什么要搞得这么可怕?难道真的有这么厉害的攻击者吗?首先我们注意到的是其中的某些条件,攻击者在现实生活中已经具备,比如监听对方的通信(现在到处都是无线上网,很容易通过软件实现监听)。另外这里要解释下,这是理论上的最恶劣假设。我们可以认为,如果一个密码算法/协议在这种模型下(证明)是安全的,那它在现实生活中也是比较安全的。最后问一句:有没看过电影《1984》?

    密码学中的行话:对于正常通信的双方,一般分别用A(Alice)、B(Bob)表示,对于怀有恶意的攻击者,通常用E(Eve)来表示

  • 相关阅读:
    我们是如何实现DevOps的
    cmp命令
    全排列II
    chown命令
    两个数组的交集II
    MVVM模式的理解
    chmod命令
    路径总和
    cat命令
    跳水板
  • 原文地址:https://www.cnblogs.com/efzju/p/2116734.html
Copyright © 2020-2023  润新知