密码学的基本概念

密码通信协议

基于密码学的安全通信

基于对称加密算法的安全通信

一般来说,对称加密算法的特点就是在加密和解密中需要使用相同的密钥。

基于对称加密算法的安全网络通信协议存在以下问题:

  1. 密钥必须秘密地进行分配,而这通常只能采用物理的传输手段实现,对于自动化程度高和应用广泛的加密系统来说,这样做的代价是不可接受的;

  2. 一旦加密密钥丢失,那么获得密钥的攻击者就有能力解密通信中的任何数据,并且可以假装成其中任何一方发送虚假信息而不被发觉;

  3. 随着用户的增多,需要密钥个数会成平方级迅速增长。

基于公开密钥算法的安全通信

公开密钥算法的主要特点就是加密和解密密钥不同,由加密密钥推导不出解密密钥而且加密密钥是可以公开的。

在这里插入图片描述
这样,基于对称加密通信协议中存在的问题就轻而易举解决了。由于Jim的解密密钥不用通过网络传输,而加密密钥不能解密加密的信息,所以攻击者不能获得任何有用的信息。

公开密钥算法的缺点:

  1. 公开密钥算法比对称加密算法慢。

  2. 公开密钥算法抵抗明文攻击的能力较低。因为公开密钥算法的加密密钥是公开的,攻击者可以尝试加密各种明文以及跟获取的密文相对照来确定明文,如果明文取值范围是有限的,这种攻击就很有效,而对称加密算法因为密钥都是秘密的,所以不容易受到这种攻击。

在现在大多数的使用安全通信协议中,综合对称加密和公开密钥算法的优点,使用公开密钥算法对对称加密在网络中传输的密钥进行加密,这种被加密的密钥称为称为会话密钥。这种即使用公开密钥算法,又使用对称加密算法的系统为混合密码通信系统或混合密码系统。

事实上,为了防止会话密钥泄露,通常会话密钥在使用之后就立即销毁,并且在通信过程中根据需要进行更换,增加了会话密钥的安全性。

单向散列函数

单向散列函数又称为信息摘要函数或压缩函数,结合了单向函数和散列函数的特点,是指一个方向上工作的散列函数,从输入值得到散列值很容易,但使散列值等于某一个值确实非常困难的事情。一般来说,一个好的单向散列函数如果其输入值有一位改变,那么将引起其散列值一半数据位的改变。

基本上来说可以分为不加密散列值和加密散列值的应用,加密的散列值一般称为消息鉴别码,它的功能跟单向散列函数基本一样。

数字签名

数字签名的基本问题

签名具备以下特质:

  1. 签名值得信任;

  2. 签名不能伪造和抵赖;

  3. 签名不能重用;

  4. 被签名的文件不能改变;

数字签名相比现实签名实现的困难:

  1. 难以实现信任关系,数字签名与个人关系建立困难;
  2. 难以防止伪造,数字信息很容易被复制到别的文件上使用;
  3. 难以保证被签名文件内容不被修改,因为数据文件很容易修改而不留痕迹。
基于对称加密算法的数字签名

基于对称加密算法的数字签名方案需要一个第三方的参与,第三方作为签名者和验证者都信任的仲裁者存在的。一个数字签名系统起作用的范围称为域,仲裁者能够与域内的任何一个用户进行通信,而且跟各个用户都分别共享着不同的密钥。

在这里插入图片描述

这个协议基本上达到了跟手写签名同样的效果,其特点:

  1. 签名是值得信任的,因为server是一个公正和可信的仲裁者,而且因为只有它跟Tom共享私钥,所以它能够确定发送消息的人就是Tom,所以server的声明对于Jim来说是可信的,能够证明确实是Tom发送的消息;

  2. 签名不能伪造和抵赖,因为只有Tom和server知道KTom,所以别人不可能使用KTom加密消息,也就不能伪造Tom的签名。而server是大家都信任的,不会伪造签名,因为别人不能伪造签名,而且server会记录和证明Tom发送过该消息,所以Tom不能抵赖自己的签名。

  3. 签名不能重用,如果Jim怀有恶意,想把server对Tom发送的消息证明信息附加到另一个对他有利的消息上,Tom可以申请server仲裁,server将收到的Tom的消息和Jim提供的消息使用Tom的共享私钥进行对比,就可以发现Jim的欺骗行为。

  4. 签名后的文件不能修改,因为文件信息的改变会导致加密后的信息改变,所以使用上面相同的办法,可以防止Jim恶意修改Tom签名后的信息。

此方案的缺点:

  1. 对于仲裁者server处理能力要求高,因为所有需要进行数字签名的域内用户都必须和server通信,在一个用户数量比较大的系统中,对server的处理能力的要求将是非常高的,这往往会成为通信带宽的瓶颈。

  2. 信任关系过度集中于server,在该数字签名系统中,server与用户共享了所有的私钥,是整个域的信任基础,所以要求server必须是高度安全的,不能出现任何错误,所有私钥都不能泄露,程序也必须保证是安全的。

基于公开密钥算法的数字签名

当公开密钥算法用于数据签名时,因为数字签名时要求所有的人都能够验证的,所以要求数字签名的公开密钥的解密密钥是公开的,而用于签名的加密密钥是保密的,为了安全和防止签名伪造,同时要求根据解密密钥不能推算出加密密钥,并非所有公开密钥算法都能满足用于数字签名的这些要求,目前常用于数字签名的算法有RSA和DSA。

使用公开密钥算法的数字签名方案基本步骤如下:

  1. Tom使用自己的私人密钥加密文件,从而实现对文件的签名并传送给Jim;
  2. Jim用Tom的公开密钥解密文件,从而实现签名的验证。

这个方案非常简单,不需要第三方参与,并且可以满足我们对数字签名期待的性质和功能。

  1. 签名值得信任,当Jim使用Tom的公钥解密信息成功时,就可以确定时Tom签发了这个文件,因为别人不可能拥有Tom的私钥。

  2. 签名不能伪造和抵赖,因为只有Tom知道自己的私钥,所以别人不可能伪造出他的签名,同时Tom也不能地来自己的签名。

  3. 签名不能重用,因为私钥对整个文件进行加密操作,使用另外的文件再次签名会产生不同的签名值,这样跟容易就可以戳穿Jim的骗局。

  4. 签名后的文件不能改变,使用上述相同方法,就可以发现文件是否改变。

因为公开密钥加密数据的速度一般比较慢,尤其是对大的文件,这种速度有时候是不能忍受的,为了解决这个问题,实际中通常采用单向散列函数和公开密钥算法相结合的数字签名解决方案。

  1. Tom对要签名的文件使用单向散列函数,然后使用自己的私钥将得到的散列值加密,最后将文件和加密后的散列值发送给Jim。

  2. Jim收到Tom发来的文件和加密的散列值后,用同样的单向散列函数算法对给文件作处理得到的新的散列值,然后使用Tom的公钥将Tom发送过来的加密散列值解密,并与自己计算得到的散列值对比,如果一致就证明文件是Tom做了签名的。

这种协议第一个好处是文件和签名的保存可以分开,只要记住他们的对应关系就可以,给管理带来了跟大的方便。第二个好处是减少了签名系统尤其是签名接受者需要的存储空间。

密钥交换协议

在实际的密码应用协议中,通常要生成一个临时的密钥用于对信息进行加密,这个密钥称为会话密钥,一般只在通信期间使用,有时候一个通信会话还会使用多个会话密钥以增加安全性,而这些会话密钥在通信完成之后都会被销毁,如何安全地完成通信双方对会话密钥协商是非常重要的问题。

基于对称加密算法的密钥交换协议

基于对称加密算法的密钥交换协议需要可信任的仲裁者的存在,作用域内任何一个使用这个协议的用户都分别跟仲裁者预先共享一个私钥,假设仲裁者名字为server,Tom和Jim执行的密钥交换协议步骤如下:

  1. Tom向server申请一个跟Jim进行安全通信的密钥;
  2. server产生一个会话密钥,分别使用Tom的私钥和Jim的私钥加密成两个副本,并发送给Tom。
  3. Tom收到server返回的信息后,解密自己的会话密钥信息,同时将使用Jim私钥加密的会话密钥发送给Jim。
  4. Jim将收到的信息解密得到会话密钥,Tom跟Jim可以使用会话密钥进行安全通信。

此方案的不足与基于对称加密算法的数字签名协议一样。

基于公开密钥算法的密钥交换协议

  1. Tom产生会话密钥,使用Jim的公钥加密该会话密钥并发给Jim;
  2. Jim使用自己的私钥解密收到的消息得到会话密钥,双方使用该会话密钥进行安全通信。

高级密钥交换协议

中间人攻击

中间人攻击步骤:

  1. Tom将自己的公钥传给Jim,攻击者截获Tom的公钥并用自己的公钥代替Tom的公钥发给Jim。
  2. Jim将自己的公钥传给Tom,攻击者截获Jim的公钥并用自己的公钥代替Jim的公钥发给Tom。
  3. Tom和Jim开始互相用对方的公钥加密信息并通过网络传输个对方。攻击者只要简单地监视两者的通信,并用自己的私钥解密双方发送的消息,就可以得到全部消息。

如果两者之间不交换密钥,它们可能会从一个公钥数据库中去的对方的公钥。

连锁密钥交换协议

连锁密钥交换协议是解决中间人攻击的一个巧妙地协议,当然不是一个能够完全防止中间人攻击的协议,只是增加了中间人攻击的难度。

它基于这样一种技术,即拥有加密消息的一半是没有意义的,不能解密。分组加密算法中消息的解密依赖初始向量,后面部分消息的解密要依靠前面的消息。

连锁密钥交换协议的基本步骤:

  1. Tom和Jim相互交换自己的公钥;
  2. Tom用Jim的公钥加密要发送的消息,并发送加密后消息的一半给Jim;
  3. Jim用Tom的公钥加密要发送的消息,并发送加密后消息的一半给Tom;
  4. Tom在收到Jim的第一部分消息后,将加密消息的另一半发送给Jim;
  5. Jim在收到Tom的另一半消息后,将自己加密消息的另一半发送给Tom,并将收到的两部分消息合起来,用自己的私钥解密消息。
  6. Tom收到Jim的另一半消息后,将两部分消息合在一起,然后用自己的私钥解密。

连锁协议最重要的特点是,双方发送消息的时候是相互连锁的,也就是说,通信一方只有收到另一方发送的消息的一部分后才会继续协议,否则就会等待或终止协议。这样的信息发送连锁,使得中间的攻击者没有办法进行窃听式的中间人攻击。

使用证书的密钥交换协议

分析基本的基于公开密钥算法的密钥交换协议之所以容易受到中间人攻击,是因为公开密钥没有跟个人的身份证明联系在一起,所以攻击者可以随意地用任何公开密钥替代通信双方的公开密钥。假设我们使得公开密钥跟身份证明是紧紧联系在一起的,那么攻击者就难以通过简单的替换公开密钥的方式冒充通信一方。数字证书或者说数字签名技术可以将公开密钥跟某个人的身份证明关联在一起。

在这种改进密钥交换协议中,需要一个可信任的第三方,这个第三方能够验证任何想通过验证的用户,他是绝对可信的。他用自己的私钥对一个用户的公钥和用户个人信息进行签名,形成一个数字证书。可信任的第三方自己的公钥是任何用户都可以取得的,这样任何用户都可以通过验证这个第三方的数字签名来确定通信对方发送过来的公钥是不是真的是他自己的公钥。这样,攻击者想要冒充第三方就很困难,因为他没有可信任的第三方的私钥,没有办法伪造他的签名。

这种使用证书的密钥交换协议很依赖可信任的第三方,如果可信任的第三方受到攻击,整个通信系统的安全性将面临威胁,但是这种攻击显然比中间人攻击难得多,事实上即使攻击者取得了第三方私钥的控制权,也难以对以前签发的公钥证书记性更方便的攻击。

不需要密钥交换协议的安全通信

这里所说的不需要密钥交换协议的安全通信,并非是真的不需要进行密钥的协商,只是指在信息传输之前,可以不进行专门的密钥交换步骤,而是直接将密钥和传输信息一起发送给对方。这样的协议在只发送简单地消息而不需要太多的信息交换的时候显得特别有效。

基本步骤:

  1. Tom产生随机会话密钥,并用会话密钥加密要发送的信息;
  2. Tom使用Jim的公钥加密会话密钥,Jim的公钥可以从公钥数据库中取得,或者Tom已经存有Jim的公钥。
  3. Tom将使用会话密钥加密的信息和使用Jim公钥加密的会话密钥通过网络传送给Jim;
  4. Jim收到Tom发送的信息,先用自己的私钥解密加密的会话密钥;
  5. Jim使用解密得到的会话密钥解密加密的信息。

这种方式只需要发送一次即可,而不需要建立Tcp连接等待Jim的响应。

在实际消息广播中,接受者可能是很多人,发送者不一定期待接受者的回应,就可以采用下面这种没有密钥交换协议的安全通信协议。

  1. 发送者产生一个会话密钥,并使用该回话密钥加密要发送的消息;
  2. 发送者使用Tom、Jim或更多用户的公钥分别加密会话密钥;
  3. 发送者将加密的信息和使用各个接受者的公钥加密的会话密钥分别发给Tom和Jim等人;
  4. Tom和Jim等人将收到的信息使用自己的公钥加密的会话密钥和使用会话密钥加密的信息,它们首先使用自己的私钥解密加密的会话密钥,然后使用会话密钥解密加密的信息。

鉴别协议

鉴别是指确定一个人的身份是否是他所宣称的身份。

基于口令的鉴别协议

口令鉴别即使用用户名和口令密钥进行鉴别,是最常见的鉴别协议。

如果有办法取得该口令数据库或文件的读取权限,那么就可以轻而易举地冒充每一个用户,是的鉴别系统失效。

为了增加口令文件或口令数据库的安全性,我们需要密码学的帮助,目前有两种基本的方法:

  1. 将口令采用加密算法进行加密后在数据库保存,然后在鉴别的时候对瀛湖输入的口令作相同的运算,如果得出的值和数据库保存的值一直,则鉴别通过;
  2. 使用单向散列函数替代对称加密函数;

在改进的鉴别协议中,服务器保存的不再是明文口令,而是密文值,这样即使服务器遭受攻击,也使获取用户口令的难度增大了。

基于口令的鉴别缺点:

  1. 容易受到字典攻击。因为一般用户为了口令方便易记,会采用有意义或常用的字符串作为口令,这样,即使服务器存放的是口令的加密值而不是明文,攻击者也可以通过常用口令列表的字典式攻击有效获取大部分用户的口令。

  2. 容易遭受网络窃听的攻击,以明文形式在网络中传输,非常容易被有意的攻击者获取;

  3. 口令容易泄露,一般用户会选取简单而且长度短的口令,这样非常容易泄露。

  4. 口令持有人的身份容易被冒充。

基于公开密钥算法的鉴别协议

为了克服基于口令鉴别协议的缺点,在鉴别协议中采用公开密钥算法是一个不错的选择。

在基于公开密钥算法的鉴别系统中,主机只保存各个用户的公开密钥,每个用户保存自己的私人密钥。

  1. Tom向鉴别主机server发送鉴别请求;
  2. server产生一个随机数,并发送给Tom;
  3. Tom用自己的私人密钥加密收到的随机数和自己的名字,然后发送给server;
  4. server收到Tom的消息后,查找Tom在数据库中的公开密钥,并使用该公开密钥解密Tom发送来的消息,如果得到的随机数跟server原来发出去的相同,则鉴别通过。

因为是使用了公开密钥算法,在这个协议中,系统安全是基于私人密钥安全的基础上的,私人密钥不在网络传输,所以任何试图通过网络窃听进行的攻击都不太可能,除了使用唯密文攻击强力破解法。

私人密钥的存放是一个很关键的问题,一种方案是将私人密钥封装在不能读取出密钥数据的模块中,,如智能卡或USB Key,这种模块本身具有计算和存储功能。实际系统中还会在这种硬件本身加入口令验证功能,这样攻击者只有同时取得这个令牌和口令才能对鉴别系统发起攻击。

增加了令牌的鉴别协议的基本步骤如下:

  1. Tom在自己使用的计算机中接入自己的令牌Smart,然后向鉴别主机server发出鉴别请求;
  2. server产生一个随机数,并发送给Tom;
  3. Tom向存储私人密钥的设备Smart发送server发送来的随机数并输入口令;
  4. Smart设备验证Tom口令是否正确,如果正确则使用自己的计算机设备在内部用Tom的私人密钥加密收到的随机数和Tom的用户名,然后发送给server。
  5. server收到Tom的消息后查找Tom在数据库中的公开密钥,并使用该公开密钥解密Tom发送来的消息,如果得到的随机数跟server原来发出去的相同,鉴别通过。

有时候为了更高的安全性,需要防止聪明的攻击者对协议发起攻击,就需要采用更复杂的方式:

  1. Tom产生一个随机数,并使用自己的私人密钥进行加密计算,将结果发送给验证主机server;
  2. server产生一个随机数,并发送给Tom;
  3. Tom根据自己产生的随机数和收到的随机数用它的私人密钥进行加密计算,将结果发送给server;
  4. server查找到Tom的公开密钥,并解密收到的所有信息,并核对信息是否一致,如果一致则鉴别通过。

信息鉴别

除了对用户身份进行鉴别,还经常需要对信息进行鉴别,也就是说信息接受者需要对收到的信息尽心鉴别,以确定该信息是可信的,确实是由信息所声称的发送者发送的。

基于公开密钥的数字签名技术实现对信息的鉴别:

  1. Tom对要发送的信息用单向散列函数计算,并对得到的秘密值使用自己的私人密钥加密,然后将信息和签名的秘密值发送给server。
  2. server接收到信息后,对信息使用同样的单向散列函数作为计算,然后用Tom的公开密钥解密签名的秘密值,将计算值和解密值比较,如果一致,证明信息是可信的,完成信息的鉴别。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值