目录
0,思维导图
1,对称密码、公钥密码、消息认证、数字签名的对比
对称密码 | 公钥密码 | |
发送者 | 共享秘钥加密 | 公钥加密 |
接收者 | 共享秘钥解密 | 私钥解密 |
秘钥配送问题 | 存在 | 不存在,但需要CA认证公钥 |
机密性 | √ | √ |
消息认证 | 数字签名 | |
发送者 | 共享秘钥计算MAC | 私钥签名 |
接收者 | 共享秘钥计算MAC | 公钥验证 |
秘钥配送问题 | 存在 | 不存在,但需要CA认证公钥 |
完整性 | √ | √ |
认证 | √(仅限本次通信对象) | √ |
防止否认 | X | √ |
2、数字签名
数字签名的本质,是利用了私钥只有个人持有的特性。下面是数字签名的流程:
问答:
RSA非对称秘钥,为什么加解密秘钥角色可以互换?
(公钥密码:公钥加密私钥解密。数字签名:私钥加密公钥解密)
密钥对是对称的关系,只是赋予的意义不同:
破译者知道公钥,是否可以根据 N 推导出 p 和 q ?
在有限的时间内不可能:目前RSA的秘钥强度一般是 4096 个bit位 大整数,对如此之大的大整数进行质因数分解的高效算法还没有出现 !
现实世界的签名独一无二,但是数字世界的签名只是一段二进制,可以任意复制吗?
这个是不可避免的,但是并不影响 “特定的签名者与特定的消息绑定在一起” 的事实。
如何作废一条数字签名?
废除一条数字签名,不同于将实现世界的合同撕毁,因为数字签名可以有多个副本。但是可以生成一个废除数字签名的数字签名。
数字签名具有防篡改、防否认、防伪装的能力
如果原文修改哪怕一个字节,原文的Hash值会变。防止签名者否认签过名,因为私钥只有签名者一个人持有,除非私钥泄密。防止中间人攻击,因为伪装的签名使用真正的签名者的公钥,解密会失败。签名验证的公钥的合法性问题,是CA认证的问题。
非对称秘钥这么好用,为什么还需要对称秘钥?
众所周知,非对称秘钥算法非常慢,可能比对称秘钥算法慢100倍。所以TLS使用混合秘钥系统,先使用非对称秘钥交换生成会话秘钥(对称秘钥)的信息,然后两边生成相同的会话秘钥进行加解密通信。
目前那些密码技术算法被破解了?
对称算法DES密文能在现实时间内被破译,AES(Rijndael)算法还是安全的(秘钥空间512bit足够)。
MD5的强抗碰撞性已经被破解,也就说对一个MD5值可以找到另外一输入值。SHA-2是安全的。
比特币使用了那些密码技术?
非对称秘钥算法、数字签名、Hash散列值 等等
比特币的挖矿从技术角度来看到底是什么意思?
比特币的特点每隔一段时间的交易打包成一个区块,对区块的交易生成一个Hash1值,再加上一个nonce任意值,再生成一个Hash2值作为该区块的散列值。Hash2 值需要满足前若干比特位必须为0的要求,因此需要不断尝试nonce计算Hash2,以满足 Hash2的格式要求,这个就是工作量的证明,俗称 "挖矿"。
3、证书
证书解决的是,持有的公钥合法性问题。
非对称秘钥虽然没有对称秘钥配送的问题,但是解密所使用的公钥却有可能是伪装的 (中间人攻击:攻击者的私钥对应的公钥)。证书由CA机构生成并管理,一般以X509格式规范签发,下面是证书的签发过程:
问答:
CA认证是认证Bob的公钥的合法性,但是CA证书本身的签名,CA的公钥又应该如何保证合法性?
这里就涉及递归认证,总有一个终点的判断条件:根CA,这个是PKI公钥基础设施。一般固化在浏览器、软件或者主机上。
根CA是否全世界只有一个?
任何国家、地方、公司、团体、个人都可以成为 根CA PKI,这个就看CA认证层级的用途了。
私钥泄密了怎么办?
立刻联系CA机构作废公钥(更新CRL证书作废清单),客户端也需要定期从CA拉去最新的CRL
4,量子密码和量子计算机
量子密码:一种让通信本身不可窃听的技术;原理:
1)无法准确测出光子的偏振方向 (保证了机密性)
2)测量行为本身会导致光子的状态发生变化(能直接判断是否被监听)
量子纠缠:测定一个光子状态能确定另一个相距甚远的光子状态 !
量子计算机:密码破解的终极工具;原理:
粒子可以同一时刻具有多种状态,比如对于 RSA 4096bit 秘钥空间的大整数质因数分解,4096个同时具有0和1两种状态的粒子,就可以同时计算 2^4096 种状态,是一台超级并行的计算机。
问题是:那种技术会先成熟?
5,应用案例 https
其中会话秘钥,即对称秘钥。
问题,https握手阶段,为什么客户端和服务器需要相互交换随机数?
1,确保会话唯一性:
在 HTTPS 握手过程中,客户端和服务器都会生成随机数。这些随机数将用于生成对称密钥,该密钥用于加密和解密后续的通信数据。由于随机数是随机生成的,每个握手过程都会生成不同的对称密钥,从而确保了通信的唯一性。
2,防止重放攻击:
随机数的引入可以防止重放攻击。重放攻击是指攻击者截获之前的通信数据并试图将其再次发送到服务器,以模拟合法通信。由于每次握手都生成不同的随机数,攻击者无法重放之前的通信数据,从而增加了攻击的难度。