通信安全基础知识

通信安全基础知识,程序员都应该了解的网络通信相关的安全基础知识。

散列(HASH)

散列也叫哈希,是把任意长度的输入通过散列算法变换成固定长度的输出,该输出就是散列值,也叫摘要。

这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值,但如果输出的位数足够,散列成相同输出的概率非常非常小。

简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。

散列是不可逆的,也就是无法通过散列输出还原出输入。

SHA-512、MD5是著名的散列函数,MD5生成的是128位,甚至MD5就是哈希的同名词,你可以通过网站:https://passwordsgenerator.net/sha512-hash-generator/ 在线计算哈希。

散列有什么用?

  1. 用来保存密码,明文保存密码是危险的,通常我们把密码哈希加密之后保存,这样即使泄漏了密码,因为是散列后的值,没有办法还原出密码明文(字典攻击难以破解)。验证的时候,只需要对密码做同样的散列,对比散列后的串就可以验证同一性。

  2. 可以用来验证下载文件的完整性以及防止篡改,比如网站提供安装包的时候,经常也同时提供md5值,这样用户下载之后,可以重算安装包的md5值,如果一致,则证明下载到本地的安装包跟网站提供的是一样的,没有出错。

加密

加密就是把明文变成密文的过程,解密就是反方向,把密文变成明文。

比如著名的凯撒密码,就是把每个字对应到另一个,这样的话,只要有密码本,就能加解密。比如最简单的,对于英文26个字母,每个字母右移3个,abc变成def,这种自然是最简单,也很容易被破译。

而诸如AES(高级加密标准)、3DES(三重数据加密算法)则被公认很难破解,不过山东大学有个叫王小云的女教授很厉害,破解了MD5和SHA-1,迫使加密升级,当上了院士。

对称加密

对称加密就是加解密的密钥是一样的,优点是快,这个也是传统的加密方式。像AES、3DES都是对称加密。

非对称加密

非对称加密用于加解密的密钥不一样,有2个密钥,公钥和私钥,公钥可以公开,私钥妥善保管。

非对称加密很慢,有多慢?相比对称加密慢1000倍,因为慢,所以它常用于密钥协商,协商出会话密钥后,再用对称加密加密应用通信数据。

1976年,Whitfield Diffie和Martin Hellman首次提出了非对称加密的概念,该算法被称为Diffie-Hellman密钥交换。然后在1978年,麻省理工学院的Ron Rivest,Adi Shamir和Leonard Adleman发表了RSA 算法。这些都可以被视为非对称加密的基础。

非对称加密也称为公钥基础结构,又称PKI,非对称加密的提出是密码学上的一次革命,影响深远。

非对称加密算法用私钥加密,用公钥解密,或者用公钥加密,用私钥解密。

网络通信中要解决的核心安全问题

加密,解决数据私密性的问题,因为数据在网络上传输,很有可能被窥探,密文传输的数据,会减少数据泄露的风险,因为你即使窃取也不知道它含义。

身份认证,就是证明你是你的问题,比如客户端需要确定,我现在正在跟正规网站通信,而不是伪造的山寨服务器通信,这个一般通过证书解决。

数据完整性,接收端得确认,它收到的数据是完整的,不是残缺的。

防篡改,接收端得确认,数据没有被篡改,这个一般通过签名做到。

下面举一个例子来说明这几个问题:

张三有2把钥匙,一把公钥,公告天下,一把私钥,妥善保管,只有自己知道,很明显,非对称加密。

李四给张三写信,写完之后,用张三的公钥加密,通过邮局寄给张三,即使邮递员拆开信封看,他也看不懂,因为内容是密文,只有张三的密钥才能解密。

张三收到信后,用私钥解密,可以正常阅读。

现在张三要给李四回信,写完后,用hash函数生成摘要digest。

然后张三,再用私钥对摘要加密,生成数字签名signature。

然后把签名附在信的下面,一起发给李四。

过程是:信明文 -> hash -> digist -> 私钥加密 -> signature。

李四收到回信后,用张三的公钥对数字签名解密,得到摘要,由此证明,信确实是张三发出的,为什么?因为如果不是张三发的,那写信的人就没有张三私钥,用别的私钥加密得到的签名,是无法用张三的公钥解开的。

李四,再对信的内容做hash,得到摘要,与上一步得到的摘要对比,如果一致,则证明信的内容没有被修改过,信的内容是完整的。

复杂的情况出现了。

王五,用自己的公钥替换李四保存的张三的公钥,也就是王五欺骗了李四,李四误把王五的公钥当张三的公钥,这样一来,王五就能冒充张三给李四写信(王五用自己的私钥加密)。

问题是什么?问题是李四不能确信自己保存的公钥真的是张三的公钥。如果客户端电脑上存的工商银行官网的公钥,实际上是骗子公司的公钥,那就麻烦大了。

怎么破?让张三去认证中心CA(Certificate Authority),为公钥做认证,怎么做呢?CA中心用自己的私钥,对张三的公钥和其他相关信息一起加密,生成数字证书(Digital Certificate)。

张三拿到数字证书后,以后给李四回信,在签名的同时,附带上数字证书。

李四收到信之后,从CA的公钥解开数字证书,取出张三的公钥(一定是真的),然后就能放心的愉快的按之前的流程解开签名了。

数字证书加入后,核心区别就是张三的公钥不再保存在李四处,而是通过数字证书下发。

为什么数字证书里的张三的公钥一定是真的呢?因为CA是权威机构,假设全世界就一家(其实不止,但也不多),它的公钥天下尽知,就是固定的串,所以能用CA公钥解开的证书,一定是CA颁布的,因为CA用它的私钥加密产生的证书。很明显,非对称加密能用于证明我是我。

密钥交换算法

著名的DH密钥交换算法,这个算法很有意思,也很巧妙,简而言之,就是通信双方交换一点信息(不怕被偷看到),然后就在两端,分布产生出一个相同的密钥,神奇啊。

有一个很有意思的例子。

Alice和Bob要协商出一个公共的颜色,他们可以交换信息,但交换的信息,可以被偷看到,怎么办?既能协商出公共颜色,又不能让别人知道呢。

  1. 首先,他们有公共的颜色,都是1毫升黄色。

  2. 然后Alice挑选一个私密的红色,Bob选绿色,都是1毫升。只有自己知道,不会告诉别人。

  3. 然后Alice把黄色和红色混合在一起,Bob把黄色和绿色混合在一起,各为2毫升。

  4. 然后,他们把自己混合后的2毫升颜色液体,发给对方。

  5. 然后,用自己的一毫升私密颜色液体,跟从对方那里收到的2毫升液体,混合,下面就是见证奇迹的颜色的时刻,他们得到了相同的颜色,而第三方并不能通过偷看他们传递的数据知道他们最终得到的颜色(基于一个假设,图里有说明)。

密钥交换算法的原理跟这个差不多,网上有大量的资料讲述这个问题,我觉得理解了上面的例子,再看ECDH便也不难了。

众所周知http是互联网协议,但是它不够安全,所以后面有改进版的https,其实就是多了一个TLS,这个是传输层加密,本质上,就是通过handshake,协商出一个会话密钥,后面的数据传递,都用这个密钥做对称加解密。

我们经常讲安全通道,其实也就是协商出一个会话密钥,他并不神秘。胡乱放几张图片吧。

为了减少这几个RTT,又想了各种办法,然后复用连接的话,就可以做到0RTT,1RTT了。

就说这些吧,最后抛几个名词,有兴趣自行百度学习:DTLS,HMAC,AEAD,重放攻击,放大攻击,是不是很高端?

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值