网络安全签名与认证

       网络安全的签名与认证是非常实用的技术知识,但是了解的人比较少。因为相关的内容基本都有成熟的解决方案,很少需要我们做什么。这些东西经常被用到,需要真正理解才能更好和更正确的使用。这里把相关的内容整理出来,帮助大家更好的掌握。

一、密码学

1.1 古典密码学

密码学的起源是古代战争。因为战争需要传递消息,而消息可能被对方截获。为了保证消息的安全,而产生了古典密码学。对原文进行加密,只有用特殊的方式才能还原。古典密码学主要有移位式加密和替换式加密两种。

移位式加密

如下图这样,将布条缠绕在木棒上,进行书写。拿掉木棒就是加密后的消息。需要用同样粗细的木棒重新缠绕上,就可以看到原始的信息。这里缠绕木棒后进行书写,就是加密算法。木棒的尺寸规格就是密钥。

替换式加密

替换式加密是将原文的字符按照指定的方式进行替换,从而让原文的意思无法被解读。如,a到z用00001到11010替换。hello就会变成01000 00101 01100 01100 01111。这种加密方式加密算法是替换文字,密钥是码表。

1.2 现代密码学

现代密码学主要伴随数据在网络上传输而产生。古代信件被截获也是有概率的,而现代数据在网络上传输,想要不被截获是不可能的。相对于古典密码学,现代密码学主要关注数据的加密与破解。现代密码学分为对称加密和非对称加密两种。

二、加密算法

2.1 对称加密

它的定义是:使用密钥和加密算法对数据进行转换,得到的无意义的数据即为密文;使用密钥和解密算法对密文进行逆向转换,得到原始数据。

加解密的过程如下图所示,它加密和解密使用的密钥是同一个,因而叫做对称加密。

经典的对称加密算法有DES和AES两种。因为DES密钥太短,只有56位,密钥短意味着可以使用的值比较少,容易被用“穷举法”暴力破解,因而被弃用了。现在主要用的是AES,它的密钥有128位和256位两种可选。

 对称加密有一个缺点,因为数据都是在网络上传输,密钥也是通过网络传输,因而密钥有可能在传输中泄漏。密钥一旦被攻击者获取,加密也将失效。解决这个问题可以用非对称加密算法。

2.2 非对称加密

它的定义是:使用公钥对数据进行加密得到密文,使用私钥对数据进行解密得到原数据。

它的工作过程如下图,它的加密和解密用的是不同的密钥。用加密密钥加密的数据只有用解密密钥才能还原。因而,可以将加密密钥通过网络发出去,发送方用该密钥对数据进行加密,接收方用解密密钥进行解密。

由于解密密钥没有在网络上传输,因而没有被截获的风险。攻击者得到加密密钥也只能用于加密,不能对密文进行解密。因而是安全的。因为这两种密钥的特性,加密密钥又称为公钥,解密密钥称为私钥

非对称加密是采用复杂的数学技巧,传统的密码学没有对应的原型。这里也不进行详细介绍,只要了解它有这种特性即可。

非对称加密也有一个问题,攻击者不能解密密文,但他可以拿到收发双发的公钥,对数据进行加密后发给双发。既是可以伪造消息。解决这个问题就要用到数字签名。

 2.3 数字签名

数字签名是非对称加密的衍生用法。非对称加密有一个特点:公钥加密的数据私钥可以解;私钥加密的数据,用公钥也可以解。即公钥和私钥可以互相解密。

因而,反着使用非对称加密算法--用私钥对数据进行加密,就可以对数据进行签名。因为只有签名方才有私钥,如果公钥可以解开这个消息,这个消息就一定是签名方发的。具有不可伪造性。

为了方便比对,通常发送方会将原文和签名后的数据一起发送,接收方将签名数据解密后与原数据对比。如果相同则可以证明是来自发送方的。

这里说公钥和私钥可以相互解密,并不意味着公钥和私钥可以互换。公钥和私钥在诞生时,它们的身份就确定了。公钥就是公钥,私钥就是私钥。因为公钥通常是可以用私钥计算出来的。而私钥不能通过公钥来计算。

例如,加密比特币的椭圆曲线算法。它的大概思路是,选择椭圆上一个顶点和发射算法,从这个顶点进行发射,遇到椭圆的边进行一次弹射,弹射的次数是私钥,而最终弹射的位置则是公钥。确定了弹射次数之后,我们就能确定最终的位置。而如果只知道最后的位置是无法确定弹射次数的。

加密+签名

加密是问了防止消息泄漏,签名是问了防止消息伪造。

增加了签名机制的消息传输机制如下图。发送方用对方的公钥对数据进行加密,同时再用私钥对数据进行签名。这两包数据同时发送给对端。接收方收到数据后,公钥对签名数据解密,确定发送者的身份。用私钥对解密密文拿到原始数据。

这个机制还有一个问题,就是攻击方拿到这一包数据后,用公钥对签名数据解密,还是可以拿到原数据。解决这个问题,就要用到下面说的哈希算法。

三、哈希

Hash的原意是“将东西切碎”的意思。这里Hash算法是把任意数据转换成指定大小范围的数据。例如学校给每个学生一个学号,用这个学号可以指代这个学生。它的主要作用是做摘要和数字指纹,用来进行数据完整性验证、快速查找和进行隐私保护。经典的算法用MD5、SHA1和SHA256等。

3.1完整性验证

我们可以将一串很长的字串进行Hash,得到一段很短的序列。进行网络传输时,将数据和Hash序列一起发送出去。接收方拿到数据,对数据进行同样的Hash,如果得到的序列和发送方给的Hash序列一致。则说明数据在传输中没有丢失或者被破坏。

3.2快速查找

java中经常用Hash算法实现相等性的快速比对。我们知道有一条规则是“重写equals方法,也要重写hashCode方法”。

java就是用这两个方法判读对象是不是相等。这样的设计是出于性能考虑。hashCode方法开销很小,可以快速进行粗略判断。相同的对象hashCode一定相同,不同的可能相同。因此通过判断hashCode不同,就可以快速判断两个对象不相等。如果两个对象hashCode相同,则再用equals方法精确比对,确定是否同一对象。

3.3隐私保护

用户登录网站的信息,通常保存在服务器的数据库中。如果这些信息如果用明文保存,一旦信息泄漏,就会带来很大的安全风险。

因此,用户登录信息,通常是经过Hash处理(如,SHA1算法)之后保存到服务器。用户登录的时候,用同样的SHA1算法对登录信息进行Hash,如果Hash后的值与库中存储的一致,则认为登录有效。

因为经过Hash处理后的数据,无法还原原数据,因此即使数据泄漏也不会造成风险。如,SHA1(“test@123”) = fdjsaklklljk…,无法根据密文还原原文。

彩虹表攻击

针对服务器用Hash加密登录信息的方法。攻击者通常采用“彩虹表”的攻击手段。彩虹表,就是将常用的密码用Hash算法整理一张表。然后用从服务器获取的密文进行一一比对,通过穷尽暴力破解。

彩虹表形式如下,它可以有几百上千万行,这个数据量对于现代计算机来说不是问题。

SHA1(“123456”) = kljklnklnklj

SHA1(“666666”) = jklsafdagdsa

SHA1(“111111”) = fadsdgfdghds

SHA1(“888888”) = fasdfdfasdf

加“盐”

为防止彩虹表攻击,服务器通过加“盐”的方式,进行防范。它的方法是在用户信息上,增加一段特有的信息,对这一段信息进行Hash。如,用户信息是:zhangsan,盐是123,Hash的数据可以是SHA1(“zhangsan123”)。加盐之后Hash的数据和元数据Hash的结果有极大的差异,会导致彩虹表失效。并且“盐”和加盐的方法,是每个服务器严格保密的信息。它可以有效的防止彩虹表的攻击。

四、网络安全认证过程

通过前两个章节加密算法和Hash算法的介绍。看一下加密+签名+Hash的完整网络安全认证过程。

发送方先将原数据进行Hash,生成简短的摘要信息,对该摘要信息用私钥进行假面,形成签名摘要。同时发送方将原数据用对端的公钥进行加密。这两段数据同时发送到对端。对端先用私钥对原数据进行解密,然后用公钥对签名摘要进行解密。再对解密后原数据进行Hash,用生成摘要与签名数据比对,验证发送者身份。身份验证成功后,再使用解密后的原数据。

这个过程可以做到安全的信息传递。Hash后生成的摘要体积要比原数据小的多,可以减小需要传递数据的体积。

因为非对称加密算法比较复杂,开销较大。通常网络连接再第一次建立连接时使用非对称加密。连接建立后,使用非对称加密方式,传递对称加密密钥。在后续信息交互中,使用对称加密的方式,以此来提高网络访问的性能。

以上就是完整的网络安全与认证过程。主要涉及到非对称加密、签名、Hash和对称加密几个相关的知识点。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值