• 安全之初——加解密、签名和证书理解


    尽管我不是做信息安全的。可是却被各种信息安全的东西包围着。通过把公钥拷贝到github上从而能够无passwordfetch和push代码,hadoop节点节点间也通过公钥实现无password登陆。可是,我一直不知道为什么能够这样。今天最终忍不住要把它们搞清楚了。它们各自是对称加密、非对称加密、数字签名和证书。


    一、对称加密
    加密是一个非常好理解的概念。就是把一个信息保护起来,让别人无法知道信息的真实面目。

    实现对信息加密的东西就是密钥。密钥的功能和钥匙一样。钥匙用来锁门。密钥用来锁数字信息,也和钥匙一样,钥匙能够用来开门,密钥也能够用来解密数字信息。

    当加密数字信息和解密数字信息的密钥相同一时候。这就是对称加密,例如以下图:
    这里写图片描写叙述
    在图中,加密方法就是锁。密钥就是钥匙,而加密方法和密钥一起被当作一种函数。
    对称加密有一个非常大的问题,当我们用密钥把一个东西加密后,还有一个人想解密这个东西。就必须要我们用于加密的密钥,也就是说,假设要传送加密后的信息给别人,同一时候也得把密钥传送过去,密钥须要在网络上传输,这是非常危急的。于是。就有了非对称加密。
    二、非对称加密
    非对称加密是加密数字信息和解密数字信息的密钥不同的加密方法。每个使用非对称加密的人都自己生成一对钥匙,分别称为公钥和私钥。公钥加密的信息私钥能够解密,私钥锁上的信息公钥也能够解密。我们用PA表示Alice的公钥,SA表示Alice的私钥,于是有例如以下等式:
    M=SA(PA(M))
    M=PA(SA(M))
    当中。M是被加密的信息。

    公钥被公之于众,私钥仅仅有自己知道。当我们须要给某人传送私密信息的时候。就把那人的公钥拿过来,对信息加密,加密的信息仅仅有那人的私钥才干解开,而那人的私钥仅仅有他一人拥有。固信息是绝对安全的。比如。Bob要给Alice传送秘密信息,例如以下图所看到的:
    这里写图片描写叙述
    即使窃密者拿到加密后的C,也无法获得原来的信息,由于他不可能知道Alice的密钥。
    可是,问题又来了,Alice怎么能确定给她发送信息的人是Bob,而不是别人呢?这就是数字签名要做的事情了。并且相同能够通过非对称加密实现。
    三、数字签名
    用PB表示Bob的公钥,SB表示Bob的私钥。Bob能够先用自己的私钥对要传送给Alice的信息M进行加密,得到加密后的信息C,然后用Alice的公钥PA对(M。 C)进行加密。得到MC/。Alice得到MC/后先用自己的私钥对MC/解密,得到(M, C),然后再用Bob的公钥PB对C进行解密,看解密得到结果和M是否相等,假设相等,说明消息确实是Bob,否则就不是。由于仅仅有Bob能依据M得到C。所以这能够算作Bob的签名。
    只是。如今问题又来了,Alice怎么能确定PB就是Bob的公钥呢?假设PB不是Bob的公钥。而是别人伪造的,那么通过上面验证签名的过程也就失去意义了。

    而数字证书就是来让Alice确定PB确实是Bob的公钥的。
    四、证书
    数字证书由一家权威机构提供,它的公钥众所周知。

    证书里保存着谁的公钥是什么这种信息,并且是通过权威机构的私钥加密了的。Bob能够把包括自己的公钥是什么的证书传送给Alice,Alice通过权威机构的公钥得到证书里面的内容,从而就能够确定PB是否是Bob的公钥了。


    如今问题又要了。非对称加密(少说密钥也有512位)通常非常费时。而对称加密(如AES算法的密钥仅仅有128位、192位或256位)比較快,另外计算数字信息的哈希值也非常快,对称加密和计算哈希的差别在于一个可逆。一个不可逆,所以它们俩分别用来和非对称加密结合提告加密和计算数字签名的效率。
    五、提高加密和签名效率
    对称加密和非对称加密结合提高加密效率。

    详细是这样操作的,首先把信息用对称加密进行加密,然后用非对称加密对对称加密密钥进行加密。

    对称加密加密信息非常快。非对称加密加密非常短的对称加密密钥也非常快,所以加密效率提高了。
    非对称加密和哈希函数结合提高计算数字签名的效率。

    详细是这样操作的,Bob通过哈希函数计算数字信息M的哈希值,比方MD5值,仅仅有128位,然后用自己的私钥SB对这个哈希值进行加密得到C。

    Alice通过Bob的公钥PB对C进行解密,同一时候用相同的哈希函数计算哈希值,看两者的结果是否一样。从而验证文件是否是Bob传送过来的。


    学习资料:
    1.《算法导论》第31章第7节
    2.极客学院视频教程《Android基础知识-Android系统安全深入剖析》1到7集
    3.对称加密和分组加密中的四种模式(ECB、CBC、CFB、OFB)

  • 相关阅读:
    Flume入门与进阶
    git如何忽略已经加入版本控制的文件
    Redis常用命令
    如何在宝塔面板上添加创建一个定时任务
    PHP代码篇(九)PHP接口开发如何使用JWT进行验证身份
    七. Go并发编程--sync.Once
    六. Go并发编程--WaitGroup
    5. Go 并发编程--sync/atomic
    4. Go并发编程--Mutex/RWMutex
    docker内服务访问宿主机服务
  • 原文地址:https://www.cnblogs.com/llguanli/p/8300848.html
Copyright © 2020-2023  润新知