密钥是什么?

生活世界的钥匙,是一把有形的开门的锁,或指纹,或虹膜等不同生物特征的载体。

数字世界的密钥是什么,是一串字符或数字,准确是说是字节序列,或比特序列,不同的密钥有其不同的长度,在不同的表达方式下(不同进制下)长度也不一样。
类似于:
二进制下:
01110001 10101011 10101010 01010110 10101010 11110100 11100001
当然,也可以用十六进制或十进制表示。不过,经常用十六进制表示。

一些核心的概念:
1、对称加密
A和B共有一个密码,这个密码不仅用于加密,也用于解密。这个在家人之间用比较合适,但是面一广,问题就来了。
此外,不同的场景,需要不同的密码。

痛点是:不可能针对N个不同的场景,设计N个不同的密码,如果你银行卡多,邮箱多,你会知道这个根本记不住,行不通。这个也叫“配送难题”。

2、公钥密码(或称非对称性密钥)
有没有这种可能,我放一个空箱,外面放上一把空锁,如果有人用信件,锁上就行。送上门时,只有我能打开?
公钥密码是一对,一个放在外面的公钥(用于加密)和一个自已用的私钥(用于解密)。
比如,A在外面放了一个公钥,任何人都可以用这个公钥key,把信件加密后,都可以送给A,A也能解密,看到相关内容。

痛点:外面key,有可以被人换了。比如,A发布的时侯,公钥key1被人故意换成了key2.如果别人用key2加密了,送的过程中,又被人拦截了,那就这个危险就大了。这个叫“中间人攻击“的风险。

3、混合加密
对称加密的优点是加密-解密效率快;非对称加密则相反,效率低。
可以把这个两的特点给合起来使用。
生成一个随机数,作为对称加密的密钥(key1);
加密的信件(内容一般长)用对称加密key1进行加密和解密;
非对称加密的公钥对key1进行加密;
然后,用私钥进行解密,解密出key1.然后用key1对加密后的信件进行解密;
这种方式把两者的优点充分结合起来了。

4、消息摘要(digest):也叫hash值(或单向散列函数)=>证明文件或字符的唯一性
学过计算机的人都知道,好的hash算法能实现(至少很高很高概率)任何信息集与一个固定长度字符的一一对应。
好的hash的一个特点是,两篇红楼梦小说,如果任何一个标点符号不同,都会完全不一样,也叫【强抗碰撞性】。
因此,可以通过hash值的不同,来判断,你的信息是否与原先的信息发生变化。
这就是消息摘要的作用,鉴别真伪,识别信息是否补篡改。
hash值的优点,还有一个,即同一算法,对任意长度的输入,其输出值的长度是一样的。压缩率高,且标准整齐。
正因为此,在识别真伪的应用中,经常可以看到hash值的应用,比如
(1)口令进行加密:当然,还要加个随机值(salt),抗字典攻击。
(2)消息认证码:比较多的用于SSL和TLS网络通讯中。
(3)数字签名:如果我们对一个可能很长的信息,我们就不需要对信息的本身进行操作,对信息对应的hash值进行操作就可以了,实现了降维处理。
hash算法很多,MD4,MD5.SHA1,SHA2,SHA3,SHA-256…; RIPEMD-160等;

hash值的本质解决的是信息的完整性及一致性问题。

5、消息认证码(Message Authentication Code,MAC)

消息认证码的MAC值与hash值很象,只要MAC值不一样,就可以判断不一致。因此都是鉴别真伪,识别信息是否补篡改。
但有什么不同?
hash值的计算除了信息本身外,没有输入参数;而消息认证码MAC值,计算还多了一个共享的密钥。
为什么要这样设计?和hash值相比,增加了一道保险,需要两把钥匙才能进行识别。经常用于银行之间的业务通讯中。

当然,也可以认为,消息认证码是一种与密钥相关的hash值。

痛点:无法防止否认。因为双方都有共享的密钥,对于同一份信息而言,两个人的MAC值都是一样的?那么到底是谁签发的?不清楚。双方都无法自证清白。

6、数字签名(signature)=>解决消息是谁的发问题

消息认证码的问题在于通讯的双方使用共享相同的密钥。那通讯的双方能否各使用自己的”私钥“?
这就是数字签名与消息认证码的不同。他们的本质作用是一样的,但数字签名,比消息认证码还多了一层,可以自证清白了。
在数字签名中,谁主动发送了消息,也就是对消息进行了签名,即为签名方。

数字签名包括两部分,生成消息签名和验证消息签名。
因此,数字签名包括两种不同的密钥,并进行了区分,专钥专用。一种签名密钥(不能用于验证),一种是验证密钥(不能用于签名)。
此外,签名密钥只能由签名的人持有,而验证密钥则是任何需要验证签名的人都可以持有。
这点和公钥加密是相反的。即数字签名即使用私钥进行签名,让持有公钥的人进行验证。

因此,用私钥进行加密就是签名。并不需要专门手写一个特殊的字符。因为这已经具有了唯一性。

数字签名有两种方法:对信息的本身就行签名;或对信息的hash值进行签名。后面因为信息量小,所有速度快。

举个对信息hash值进行签名的例子:

A是签名者,要把信息发给B。如何证明是A发出去的呢?
A发出向B发一份信息;同时A对信息的hash值,用私钥进行加密,即签名;同时也发送给B。
B不仅收到信息,而且收到一份签名。B需要对信息计算hash值;同时,也需要用A的公钥对签名进行解密,得到签名中加密的hash值;同时进行比对,如果一致,那么,就可以认为是A发出来的。

痛点:

签名看上去很强大,但是,这个是建立在签名者的“公钥”是签名者本身发出来的基础之上的。如果存在“中间人攻击”,那么,这个基础就被破坏了。
谁来证明“公钥”是签名者属有?

7、PKI(public key infrastructure)即公钥基础设施

有专门的、可信的第三方认证机构(CA, certification Authority),对“公钥”发布证书,让其它的人,一看到“公钥”就确信无疑。
这有点象身份证,公安机关(权威机构)给了你一张二代身份证,上面有一些信息,那么,大家看到身份证后,都认为“你就是你”。

具体来说,认证机构会针对公钥,进行数字签名。因此,公钥+认证机构的数字签名就是公钥证书(public -key certifcate),简称证书。

可以理解的是,公钥的发布者(用户),首先需要向认证机构注册自己的公钥,此后,认证机构为注册的公钥生成数字签名,进而生成证书。

对于信息接受者而言,只要收到用户的证书,就确信是特定的公钥注册人申请的,身份就确认了,进而放心使用公钥。

PKI又是什么?PKI就是为了这一套公钥认证、使用规范和标准的总称。主要要素包括,用户,认证机构和保存证书的数据库。

证书的数据库很重要,因为证书可能过期、作废、也可能用户的私钥被盗,运维人员的变化等原因,需要重新更新证书相关的数据。

认证机关也拥有一张证书作废清单(Certificate Revocation List),供大家查验,看看相应的证书是否有效。

痛点:

认证机关是否可信?是否被攻击?
注册人被山寨。比如“Jacky Ma”,有人也注册了“Jacky ma”.只要有人一下子没有注意,很可能就相信“B就是A”了。
CRL也有可能被人利用。有点象银行卡报挂失到,正式挂失,也有一个时间差。

无公式无数学内容下,如何理解加密与解密知识?相关推荐

  1. 从Java程序员的角度理解加密的那些事

    前言 在我们日常的程序开发中,或多或少会遇到一些加密/解密的场景,比如在一些接口调用的过程中,我们(Client)不仅仅需要传递给接口服务(Server)必要的业务参数,还得提供Signature(数 ...

  2. 深度学习热点|超直观无公式图解Contrastive Predictive Coding从脸盲说起

    作者 | 得未曾有 出品 | 对白的算法屋 编者寄语: 通过对比学习来区分李沁和孙怡. Contrastive Learning (对比学习) 是这两年深度学习非常热的话题,可以说是刷新了很多人对无监 ...

  3. ajax怎么找回地址栏,使用ajax和window.history.pushState无刷新改变页面内容和地址栏URL...

    HTML5里引用了新的API,就是history.pushState和history.replaceState,就是通过这个接口做到无刷新改变页面URL的. 与传统的AJAX的区别 传统的ajax有如 ...

  4. 使用ajax和window.history.pushState无刷新改变页面内容和地址栏URL

    1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" ...

  5. undo表空间文件丢失恢复(4)--无备份无recover的情况下恢复

    undo表空间的数据文件丢失,如果没有备份的情况下,而且丢失的undo文件可以置为offline状态后(注意是offline不是recover状态),则可以如下恢复,下边给出一个例子. undo表空间 ...

  6. nodejs 调用微服务器_无服务器NodeJS:构建下一个微服务的快速,廉价方法

    nodejs 调用微服务器 by Filipe Tavares 由Filipe Tavares 无服务器NodeJS:构建下一个微服务的快速,廉价方法 (Serverless NodeJS: the ...

  7. Methyltetrazine-DBCO,1802238-48-7该试剂可用于在无催化剂试剂的情况下,将含氮肽或蛋白质转化为四胺改性多肽或蛋白质

    产品名称:Methyltetrazine-DBCO 供应商:陕西新研博美生物科技有限公司 CAS:1802238-48-7 分子式:C34H33N7O7S 分子量: 683.7 主要用途:陕西新研博美 ...

  8. 无80和443端口下申请域名SSL证书(适用于 acme.sh 和 certbot)

    无80和443端口下申请域名SSL证书 文章目录 无80和443端口下申请域名SSL证书 SSL 证书申请的方式 通过 DNS 申请 SSL 证书 获取个人域名 acme.sh 方式 certbot ...

  9. python2.7 解决email foxmail for mac 收到附件无后缀未命名文件,无发件人,漏掉邮件内容问题

    python2.7 解决email中foxmail for mac 收到附件无后缀,无发件人,漏掉邮件内容问题:https://blog.csdn.net/SHSQLDLL/article/detai ...

  10. Latex公式无编号

    Latex公式无编号 \begin{equation}\begin{aligned}E&=\frac{1}{2}\sum_{j=1}^{2}(z_j-f_j(x_k))^2 \\&=\ ...

最新文章

  1. 设置IDEA自动导入import 关联的包
  2. Halcon资料:image,region,xld三者如何转化和保存
  3. 注意:python flask 里image文件 css文件 html文件都必须有固定存放位置!
  4. 高并发负载均衡(一):网络协议原理
  5. Delphi调用外部程序的集中方法
  6. python 写入文件编码_使用Python写入文本文件时的编码问题
  7. PHP 基础知识测试题
  8. IOS学习笔记(五)——UI基础UIWindow、UIView
  9. cockroachdb的一些网址信息
  10. 快准狠才叫爽!六款智能电视语音识别大比拼
  11. Linux开发_判断程序是否以管理员权限运行(root/sudo)
  12. oracle日期加一天的函数,关于oracle日期函数的介绍和使用
  13. win10 远程桌面由于以下原因之一无法连接到远程计算机
  14. ORCA(Optimal Reciprocal Collision Avoidance)笔记
  15. 提高排名的 15 个基本 SEO 技巧
  16. eMarketer:女性网民更偏爱网络社区
  17. sizebox模型下载_css盒子模型:内联盒模型、width、height、替换元素、边距、border...
  18. 瑜伽修身 偷师动物12招(组图)
  19. Nuxt3 -- 组件 Components
  20. 3GP/FLV/AVI 格式整理

热门文章

  1. 颜色模式中8位,16位,24位,32位色彩是什么意思?会有什么区别?计算机颜色格式( 8位 16位 24位 32位色)【转】...
  2. jquery $(document).ready() 与window.onload的区别(转)
  3. 如何编译符合自己路由器的的OpenWrt固件
  4. DataType--数值类型
  5. GBin1分享:一个漂亮的jQuery页面内容导航插件 - Flexiable Nav
  6. spring任务调度的使用
  7. 页面之间传递参数的几种方法荟萃(经典)
  8. 熊逸《唐诗50讲》聚散篇 - 学习笔记与感想
  9. 利用vsftpd在Linux构建安全的FTP服务
  10. javascript二叉树基本功能实现