美文网首页iOSiOS技术收藏计算机技术
网络安全——数据的加密与签名,RSA介绍

网络安全——数据的加密与签名,RSA介绍

作者: 时间已静止 | 来源:发表于2016-04-28 19:59 被阅读3418次
    达芬奇密码

    一、 密码概述

    发送者对明文进行加密然后生成密文,接受者再对密文解密得到明文的过程。 现在使用的所有加密算法都是公开的!但是密钥肯定不是公开的。

    1 散列(哈希)函数

    • 通常有MD5、SHA1、SHA256、SHA512
    • 实质是抽取特征码,这样一般不会重复!是的,不同的文本它的哈希结果是有可能相同的,但概率很小。
      (举例:比如想要识别一个人,我们可以通过他的指纹来锁定他,指纹出现相同的概率很低吧!在这里,人就相当于数据,而指纹就相当于对人这个数据进行hash后得到的结果)
    • 对任意一个二进制数据进行哈希,可以得到定长的字符串结果,例如MD5哈希结果是128位,更多是以32个字符的十六进制格式哈希输出
    • 还有就是不可逆的,既然是不可逆的,那么当然不是用来加密的,而是签名

    2 对称加密算法

    • 有DES、3DES、AES
    • 加密和解密使用同一个秘钥,加密解密的速度快
    • 适合给大数据进行加密
    • 密钥的安全性非常重要

    3 非对称加密算法:RSA

    1. 使用 公钥 加密,使用 私钥 解密
    2. 使用 私钥 加密,使用 公钥 解密(私钥签名,公钥验签)
    3. 更安全,当然速度会慢下来,如果随着硬件的突破,使用越来越多,特别是支付

    1是对数据加密,2是防止伪造客户端数据,对服务器攻击,更重要是防止模拟了客户端,进行支付相关的操作

    4 对称加密与非对称加密的区别

    就个人理解,最主要的就是密钥的不同,对称加密客户端和服务端使用同一个密钥,非对称加密使用不同的密钥。

    客户端的代码是很容易被破解的,IDA、hopper disassembler工具的使用,使得破解更加简单而且破解后容易阅读,再配合Charles抓取网络包,根据关键字很容易就定位到加密代码,然后获取密钥。

    由于对称加密密钥一样,所以解密就轻而易举;但是非对称加密就不会出现这种问题,因为服务端和客户端的密钥不一样,公钥加密私钥解密,加密的公钥也是公开的,而私钥一般放在服务端,黑客一般是拿不到的。

    另外就是没有密钥情况下强制暴力破解,非对称加密也要比对称加密花的多的多的时间来破解。一条信息就要花你几年的时间,所以很安全。

    二、加密与签名区别(RSA)

    • 最大的区别是,加密是可逆的,而签名是不可逆的。

    比如对于"Hello world!"进行加密后得到结果R,还可以使用密钥通过结果R解密得到"Hello world!";而对"Hello world!"进行签名得到结果R,却不能使用密钥通过R获得"Hello world!",要不然的话压缩算法要逆天了!比如hash,使用几十个字符就能存储几G几T的数据。。。

    • 加密是对数据进行机密性保护,签名主要用于身份验证

    比如A对B发送了信息Message;通过加密后,即便C通过网络包截取获得了Message,它也不知道里面的具体内容,只能看到一堆乱码;通过签名,假设D也用相同的加密算法发送了此Message,但是签名错误,那么B通过签名依然拒绝D的Message。

    • 以当前使用的比较多的RSA为例举例:

    假设A、B双方均拥有一对公私钥(PUB_APRI_APUB_BPRI_B)。

    A向B发送Message的整个签名和加密的过程如下:

    1. A先使用HASH对Message生成一个固定长度的信息摘要Message_hash_A
    2. A使用A的私钥PRI_AMessage_hash_A进行签名得到Message_sign(这里为什么不直接对Message进行签名,而要对Message_hash_A进行签名呢?因为Message的长度可能很长,而Message_hash_A的长度则是固定的,这样性能更高,格式也固定,况且hash的结果一般不会出现重复的可能)
    3. A接着使用B的公钥PUB_B对信息Message和信息Message_sign进行加密得到Message_RSA,这时A将Message_RSA发送给B。

    当B接收到A的信息Message_RSA后,获取Message的步骤如下:

    1. B用自己的私钥PRI_B解密得到明文:MessageMessage_sign
    2. 然后B使用A的公钥PUB_AMessage_sign得到Message_hash_A;同时,B再对Message使用与A相同的HASH得到Message_hash_B
    3. 如果Message_hash_AMessage_hash_B相同,则说明Message没有被篡改过。

    上面的过程中,A知道A的公私钥同时也要知道B的公钥;同理B要知道A的公钥和B的公私钥

    关于公私钥再打个比方:公钥就像一把锁一样将数据锁住;私钥就像钥匙一样,能将对应的锁打开。

    公钥加密,私钥解密的好处是:公钥可以公开,那么无论谁有公钥都可以给你发送信息,而且也只有你才能解密

    我们经常使用的Github就是使用了签名的方法,SSH,在本地电脑生成一对公私钥,将公钥传到github,然后使用私钥进行签名,github通过公钥延签后认为你的身份合法。

    另外,加密和编码是不一样的,比如ASCII是属于编码,是将0~255与字符一一对应。

    参考:http://www.cnblogs.com/mddblog/p/5380556.html

    相关文章

      网友评论

      • 甜甜起司猫_:“然后B使用A的公钥PUB_A解Message_sign得到Message_hash_A;同时,B再对Message使用与A相同的HASH得到Message_hash_B;”这一步,A的公钥是公开的,假设C也刚好使用了与A相同的HASH岂不是能得到一样的Message_hash_A?
        时间已静止:@我老公好帅 常用的:MD5、SHA1、SHA256、SHA512、HMAC
        甜甜起司猫_:@时间已静止 顺便问下HASH算法有多少种啊?很多吗:joy_cat:
        时间已静止:这种概率很小
      • 0063dadef62a:反挺好的
        时间已静止:@吃人的豹子 是的
        吃人的豹子:问个问题:A需要自己的公钥吗?我怎么看完整个过程觉得是, A需要A私钥和B公钥,A私钥用于签名,B公钥用于加密;B需要B私钥和A公钥,B私钥用于解密,A公钥用于验签。整个过程中:A没有用到A的公钥,B没有用到B的公钥,不知道我理解的对吗?请作者指正!
        时间已静止:@萌新上路 反正挺好的!
      • CD_Lee:平常可以这么说,写出来的东西是大家看的,还是严谨点好
        时间已静止:@CD_Lee 已更
      • 时间已静止:@Daniate
        较真了:
        1. hash加密,这是大家都说习惯的,如果一个工程师说“hash加密”,那么就是默认对方知道的。这样呢,确实会对一些对此一知半解的人造成误解和迷惑,如果你非要把它掰过来,也可以,就是有点太较真了。
        2. 还有部分人,根本不会理会这些,连“一知半解”都达不到,而是只要能用就可以了,也是可以的,这样他们也没什么迷惑

        然后,有啥问题可以继续吐槽。。。
        时间已静止:@Daniate 哈哈哈 对的,MD5结果就是128位
        时间已静止:@Daniate 恩 接触产品经理多了,还有各个部门合作,慢慢的就开始妥协,不在那么严谨了
      • affyzh:您好,您不是说签名不是不可逆的吗?那为什么在a b 传输的例子中用a的私钥签名之后,用a的公钥却可以解??
        CD_Lee:做学问要谨慎啊
        affyzh:@时间已静止 还是严谨点好:smile:
        时间已静止:@AffyFei 额,好较真:
        将hash和私钥加密整个过程称作签名。因为hash是不可逆的,所以整体说签名是不可逆的,习惯说法而已
      • mail天空:不错
      • 黄氏大补丸:你好, 关于那个钥匙与锁的比方 ,在私钥加密公钥解密的情况下 ,是不是该改为私钥是锁 公钥才是钥匙啊?既谁是钥匙谁是锁得分情况
        时间已静止:@黄氏大补丸 一般说私钥签名,公钥验签
      • Hom_zhang:如果B收到后,用B的公钥能解开吗? B的公钥和私钥是不是存在什么关系呢?
        时间已静止:@Hom_zhang 用B的公钥不能解开,如果能解开,B的公钥是公开的,那么谁都能解开了,加密也就无效了。 当然了,可以简单的理解为一组密钥对,都是根据大素数经过一些运算得来的
      • Hom_zhang:关于你最后举得例子问个问题, 为什么A用B 的公钥PUB_B对生成msg_RSA后,当B接收到A的信息后却用PRI_B来解密呢?可以解吗???
        时间已静止:@Hom_zhang 这就是公钥加密,私钥解密。好处是公钥是公开的,任何人都可以给你发信息,但是只有你能解开
      • Valkyrie0:这个总结不错,但学渣的我只写过维吉尼亚这种古典加密
      • Iam老J:hash 生成固定摘要算法相同?
        时间已静止:@布鲁斯xiaoY 没明白你的意思?hash有很多算法,key不同结果也不同

      本文标题:网络安全——数据的加密与签名,RSA介绍

      本文链接:https://www.haomeiwen.com/subject/ilyhrttx.html