[关闭]
@zhongdao 2024-08-30T03:35:20.000000Z 字数 8352 阅读 3514

密码学算法应用机制

密码学算法 图示


0. 前言

一般人往往认为"保密的密码算法比较安全", 然而密码界的常识却是"不要使用保密的密码算法".

本文的插图主要来自图解密码技术一书, 也有google里搜索到的相关图片. 因为内容比较多,虽然都是图片和示范,适合产品了解相关的产品流程图细节,但是不容易短时间内把内容串起来理解.
推荐一个简单易懂的应用介绍:
What is a Digital Signature?
http://www.youdzone.com/signature.html
看完之后对整体概念有介绍, 然后再把下面的内容作为逐个的细节进行深入的了解.

1. 对称密码(共享秘钥密码)

对称密码(symmetric cryptography)是指在加密和解密时使用同一秘钥的方式.

1.1 对称秘钥

加解密展示:
image_1busqc4ka1tr8bin1tri1kh81htg3t.png-148.5kB
加解密过程:
image_1buspgoe2dbh1rkj1gut1m4n1lph26.png-38.4kB

1.2 中间人攻击引发的对称秘钥配送问题

如果要在2个不同的人之间进行加密的通讯,那么秘钥配送就是一个问题,会引发中间人的窃取.
秘钥配送问题
image_1busopidoa451v8o18f21ppago39.png-76.9kB
公钥的意义在于,解决了中间人攻击,共享秘钥的配送问题.

2. 公钥密码

公钥密码(public-key cryptography)是指再加密和解密时使用不同秘钥的方式. 因此又称为非对称密码(asymmetric cryptography).
加解密展示:
image_1busp3une4uco4q1qgb1stq75tm.png-52.6kB
加解密过程:
image_1buspifrsc77ebjbmu1pph4302j.png-41.2kB

通过公钥加密发送消息过程:
image_1busovqnp1g1d5n4ommi5e1qfl9.png-78.8kB

2.1 RSA

RSA的加密解密
image_1busqt1091il0lhchl67bnhki4n.png-36.8kB
RSA密钥对的生成
image_1busqv4tp4lrj31n6kdk81vj75h.png-42.1kB

image_1busqujcp6kq13kidgd1rmeheg54.png-41.1kB

2.1.1 RSA密钥对生成, 加密,解密的过程实例

...

2.1.2 RSA与质数

质数会不会用光呢?
512比特能容纳的质数数量比整个宇宙的原子还多, 生成质数组合撞车的可能性可以认为是没有的.

2.2 针对公钥的中间人攻击

公钥没有被破译, 但是仅靠公钥无法防御中间人攻击.
image_1busrr6olg9a10vo15js1v0312ou6o.png-89.4kB
所以需要认证对方的公钥来确认身份.

3. 单向散列(哈希)函数

单向散列函数可以获取消息数据的指纹,通过对比指纹,就可以知道两条消息是否一致.
特点:
1. 根据任意长度的消息计算出固定长度的散列值.
2. 计算时间必须要短.
3. 消息不同,散列值不同.哪怕只有1比特的变化,也要有很高的概率产生不同的散列值. (抗碰撞性, collision resistance).
4. 单向性, 无法通过散列值反算出消息的性质.

散列函数展示:
image_1busqn3gg1co11c8icnr1ekg1nik4a.png-73.4kB

散列函数应用于密码验证图示:
image_1but0hdv82pe14gf9fj1q4o1khd9.png-201.9kB
散列函数应用于软件未篡改验证图示:
image_1but11ms911qm1jslmteu2e7ltm.png-76.5kB

4. 数字签名

4.1 公钥密码与数字签名的关系

4.1.1 回顾公钥密码的机制:

image_1but17sn7nam1mmj6651fmp193r13.png-44.1kB

image_1but1cst2jff1lpv4ng1vinno52n.png-37.1kB

4.1.2 数字签名的机制:

image_1but18fqm1kro1tns12729rsiqu1g.png-43.7kB

image_1but1bo6rru41a5pulb19f42152a.png-36.5kB

加密相当于生成签名,解密相当于验证签名.

数字签名的应用:
image_1busr788712vp1gugaf27r6av5u.png-50kB

4.1.3 签名和验证过程:

签名与验证展示:
image_1busrmi2359m1pp1dijkgk1rm06b.png-184.8kB
签名与验证过程:
image_1but1isoftps1cej10f517qi17o34.png-76.7kB

对消息的散列值进行签名:
公钥密码算法比较慢, 通过生成消息的散列值,然后再签名, 比较轻松.
对消息的散列值签名和验证的时间过程:
image_1but1lj7jr8r1hqm13r61e5agnd3h.png-98.9kB

4.2 用RSA实现数字签名

image_1but20hj51u7hk821pe7eubsjh3u.png-39.1kB

针对公钥密码的中间人攻击(man-in-the-middle attack)对数字签名也颇具威胁.

5. 混合密码

用于加密内容的秘钥和用于加密秘钥的秘钥:
image_1but2a450paehoj7jn1d5f1j0155.png-42kB
混合密码加解密示意:
image_1busd2bt8nrh9150vpe11rgrm.png-107.4kB
用混合密码加密过程:
image_1but02p1vqgr1lb1f5a1laetep7l.png-83.7kB
用混合密码解密过程:
image_1but04mrm90s16kj19oo1ja31u9f82.png-81.6kB

基于口令的秘钥(password based encryption):
image_1but2ee1h13ot1u4mgi110ihvbm5i.png-92.1kB
PBE加密:
image_1but2f7rl1n1vlmck204r11ru15v.png-92.1kB
PBE解密:
image_1but2gb7a12v011k2vime33rqc6c.png-86kB
其中盐Salt是用于防止字典攻击的.
image_1but2kej9eie1d7sm01o2a1onq79.png-91.4kB

6. CA 与 PKI

6.1 CA认证机构协助完成认证与加密通讯的机制

认证机构必须是可信的.
image_1but2581q1gvokfs17l01vqdcp74b.png-73.6kB

6.2 PKI

PKI的组成要素与证书注册下载
image_1but27ad713klvjm1gfd12od1iau4o.png-45.6kB

7. PGP

PGP的加密过程:
image_1but2tnfa1uhv8n69tdovg170a86.png-101.3kB
PGP的解密过程:
image_1but2uvuc41j1tuv1hlk1nc81nc78j.png-99.6kB
PGP的签名过程:
image_1but30e6alpj1nh92g9ntubo90.png-89.5kB
PGP的验证签名过程:
image_1but31ci5d30cc61uft19ik1uqb9d.png-86.3kB

签名并加密过程:
image_1but32ejgc2r1n2h1ngq3hl72f9q.png-108kB
解密并验证签名过程:
image_1but33fub30pa11hs2k761ejva7.png-115.8kB

8. SSL/TLS 安全通信

image_1but36m1j2ot1idc1ub41e3i1u05bk.png-43.6kB
image_1but37f9vre61kf2nts2nk11pfc1.png-63.3kB

9. 密码技术与现代社会

9.1 密码学家的工具箱汇总

image_1but3ah12lun2fh5j142f1bmnce.png-107.2kB

9.2 密码技术就是压缩:

image_1but3c5uj4v1kml70v1iaier6cr.png-0.1kB
image_1but3evf71a41rmo1u5ffal1n7gdo.png-62kB

9.3 量子密码

总结

解决问题链:

问题: 机密性 秘钥配送 防止公钥伪造 证书本身合法 CA可信
解决办法: 秘钥 公钥私钥密码 证书证明 建立CA中心 对根CA的信任

最后追溯到对根CA的信任问题.

资料链接:

图解密码技术, 结城浩, 人民邮电出版社
google image

深入揭秘HTTPS安全问题&连接建立全过程
https://zhuanlan.zhihu.com/p/22142170

:非对称加密算法(公钥和私钥)交换对称密钥+数字证书验证身份(验证公钥是否是伪造的)+利用对称密钥加解密后续传输的数据=安全

企业内部CA的技术规范

证书颁发流程与规范
1.符合smpte标准,dci测试规范
2.记录分别发给哪些服务器哪些证书
3.初始阶段分发,需要让根证书预先配置到服务器或客户端的受信任的根证书库中。
4.客户请求后随时通过ca api分发,csr由客户端生成,若有hsm则私钥不可读取,借助pkcs11接口与openssl的开放引擎对接,用openssl生成csr请求文件提交
5.为了完整的证书链验证,可以在分发证书时将二级中间证书附上,以便和根证书链一起,从叶子到根证书的完整的证书路径验证。如果业务简单,只设置一个二级CA时,也可以初始阶段分发根和二级CA证书,终端只需申请并获得叶子证书即可完整验证证书链。
6.一个用户或终端在一个项目中通常被颁发一个证书,可以获得两个证书,对于电影行业的KDM文件而言,「签名证书及私钥」只用于签名验签,「加密证书及私钥」只用于加密解密,也就是对AES对称秘钥进行加密。
7.终端证书相关的操作包括颁发、更新、撤销、状态查询。如果私钥泄露或不再需要,需发起撤销请求。当证书到期,终端需主动发起更新续订的请求,以返回新证书。需妥善处理好原有私钥,若私钥下仍有加密数据或签名,就需要保留私钥,基于相同私钥和使用者名称发起证书请求,若不再需要相同私钥签名或加密,则可以生成新的公私钥,并基于使用者名称发起更新请求。
8.根CA和中间CA设置了较长的有效期,当他们过期失效时,也需要更新。

其他:
分发kdm的节点服务器是如何信任终端播放器设备的?怎么知道这个设备证书就是我们认可的证书?

交叉认证

交叉证书颁发机构(Cross Certification Authority,Cross-CA)是指两个或多个证书颁发机构之间相互信任并签署对方证书的关系。 通过交叉认证,用户可以使用任一证书颁发机构颁发的证书与另一个证书颁发机构下的资源进行通信和认证。

https://pki.wiki/%E4%BA%A4%E5%8F%89ca%EF%BC%88cross-ca%EF%BC%89/#:~:text=%E4%BA%A4%E5%8F%89%E8%AF%81%E4%B9%A6%E9%A2%81%E5%8F%91%E6%9C%BA%E6%9E%84%EF%BC%88Cross,%E8%B5%84%E6%BA%90%E8%BF%9B%E8%A1%8C%E9%80%9A%E4%BF%A1%E5%92%8C%E8%AE%A4%E8%AF%81%E3%80%82

创建第一个 CA(CA1):
首先,创建第一个 CA(CA1)的根证书和私钥:

生成 CA1 根证书和私钥
openssl req -newkey rsa:2048 -nodes -keyout ca1.key -x509 -days 365 -out ca1.crt -subj "/C=US/ST=California/O=CA1 Root CA"

创建第二个 CA(CA2):
接着,创建第二个 CA(CA2)的根证书和私钥:

生成 CA2 根证书和私钥
openssl req -newkey rsa:2048 -nodes -keyout ca2.key -x509 -days 365 -out ca2.crt -subj "/C=US/ST=New York/O=CA2 Root CA"

提取 CA1 证书的公钥信息,创建一个新的 CSR:
openssl x509 -x509toreq -in ca1.crt -signkey ca1.key -out ca1.csr

使用 CA2 对 CA1 的 CSR 进行签名:
openssl x509 -req -in ca1.csr -CA ca2.crt -CAkey ca2.key -CAcreateserial -out ca1_signed_by_ca2.crt -days 365

对 CA2 执行相同的步骤:
openssl x509 -x509toreq -in ca2.crt -signkey ca2.key -out ca2.csr
openssl x509 -req -in ca2.csr -CA ca1.crt -CAkey ca1.key -CAcreateserial -out ca2_signed_by_ca1.crt -days 365

这样,您就完成了 CA1 和 CA2 的交叉签署。

交叉认证的基础原理
https://blog.csdn.net/fangwm2011/article/details/6623887

其他

一个不错的pki学习指南
https://medium.com/@martin.hodges/my-guide-to-public-key-infrastructure-pki-90856bf554f8

https://www.okta.com/identity-101/public-key-infrastructure/

PKI, or public key infrastructure, encompasses everything used to establish and manage public key encryption. This includes software, hardware, policies, and procedures that are used to create, distribute, manage, store, and revoke digital certificates.
PKI(即公钥基础设施)包含用于建立和管理公钥加密的所有内容。这包括用于创建、分发、管理、存储和撤销数字证书的软件、硬件、策略和程序。

A digital certificate cryptographically links a public key with the device or user who owns it. This helps to authenticate users and devices and ensure secure digital communications.
数字证书以加密方式将公钥与拥有该公钥的设备或用户链接起来。这有助于对用户和设备进行身份验证并确保安全的数字通信。

PKI is one of the most common forms of internet encryption, and it is used to secure and authenticate traffic between web browsers and web servers. It can also be used to secure access to connected devices and internal communications within an organization.
PKI 是最常见的互联网加密形式之一,用于保护和验证 Web 浏览器和 Web 服务器之间的流量。它还可用于保护对组织内连接设备和内部通信的访问。

pki要素

https://medium.com/@wrellis82/pki-101-understanding-the-basics-of-public-key-infrastructure-223b8bad61ed

Public Key Infrastructure (PKI) is a security framework designed to manage digital certificates and public key encryption, enabling secure communication while ensuring the authenticity, confidentiality, and integrity of digital transactions.
公钥基础设施 (PKI) 是一个安全框架,旨在管理数字证书和公钥加密,实现安全通信,同时确保数字交易的真实性、机密性和完整性。

PKI consists of several components, including the Certificate Authority (CA), which issues digital certificates, the Registration Authority (RA), which verifies the identity of certificate applicants, the Certificate Revocation List (CRL), which lists revoked certificates, and the Certificate Store, which stores digital certificates.
PKI 由多个组件组成,包括颁发数字证书的证书颁发机构 (CA)、验证证书申请者身份的注册机构 (RA)、列出已吊销的证书的证书吊销列表 (CRL) 和证书颁发机构 (RA)。 Store,存储数字证书。

To use PKI, each user or device is assigned a public key and a private key. The public key is used to encrypt data and is shared with others, while the private key is kept confidential and used to decrypt data.
要使用 PKI,每个用户或设备都会分配一个公钥和一个私钥。公钥用于加密数据并与他人共享,而私钥则保密并用于解密数据。

It is vital to ensure the security of PKI by protecting the private key from unauthorized access, verifying the authenticity of the CA, and maintaining an updated CRL.
通过保护私钥免遭未经授权的访问、验证 CA 的真实性以及维护更新的 CRL 来确保 PKI 的安全至关重要。

pki用途

One of the most common uses of PKI is the TLS/SSL (transport layer security/secure socket layer), which secures encrypted HTTP (hypertext transfer protocol) communications.
PKI 最常见的用途之一是 TLS/SSL(传输层安全/安全套接字层),它可以保护加密的 HTTP(超文本传输​​协议)通信。

Website owners will obtain a digital certificate from a trusted CA. To be issued a CA, the owner of the website will have to prove that they are indeed the actual owner. Once verified, the website owner can purchase an SSL certificate to install on the web server. This tells the browser that it is the legitimate website the browser is trying to access.
网站所有者将从受信任的 CA 获取数字证书。要获得 CA,网站所有者必须证明他们确实是实际所有者。验证后,网站所有者可以购买 SSL 证书以安装在 Web 服务器上。这告诉浏览器这是浏览器尝试访问的合法网站。

The TLS/SSL protocol relies on a chain of trust, where the user has to trust the root-certificate granting authority. An alternative scheme is the web of trust, which uses self-signed certificates that are validated by a third party. Web of trust is often used in smaller communities of users, such as within an organization’s self-contained network.
TLS/SSL 协议依赖于信任链,其中用户必须信任根证书授予机构。另一种方案是信任网络,它使用由第三方验证的自签名证书。信任网络通常用于较小的用户社区,例如在组织的独立网络中。

Additional uses for PKI include the following:
PKI 的其他用途包括:

Email encryption and authentication of the sender
电子邮件加密和发件人身份验证
Signing documents and software
签署文件和软件
Using database servers to secure internal communications
使用数据库服务器来保护内部通信
Securing web communications, such as e-commerce
确保网络通信的安全,例如电子商务
Authentication and encryption of documents
文件的认证和加密
Securing local networks and smart card authentication
保护本地网络和智能卡身份验证
Encrypting and decrypting files
加密和解密文件
Restricted access to VPNs and enterprise intranets
VPN和企业内网访问受限
Secure communication between mutually trusted devices such as IoT (internet of things) devices
相互信任的设备(例如 IoT(物联网)设备)之间的安全通信

具体pki安全措施实施说明

ssl/tls加密传输

涉及角色:CA, Client, Server
前提: 客户端Client预置CA服务器证书到浏览器根安全存储区,CA颁发给Server证书,Server端保管好证书中公钥对应的私钥
过程:Client与Server建立链接,Server发Server证书给Client, Client通过CA根证书证书验证Server证书,确认身份,开始通过公私钥和会话密钥建立tls加密通讯传输。
要素说明:client可以通过CA验证Server身份,进而通过公私钥的原理进行加密传输,避免中间人攻击,确保了信息加密和数据完整性。
备注:通常通过nginx等实现证书配置, 如果需要双向认证,则Client端也配置证书

文件端到端加密

涉及角色:CA, sender, receiver, enctool
功能:任意人sender都可以发送只有recicer才能解密的文件。
前提:enctool工具内置receiver的公钥证书,receiver保管好公钥证书对应的私钥
过程:sender通过enctool加密文件,并基于混合密钥方案将对称会话密钥通过receiver的公钥加密,虽然对sender没有身份认证的需求,但是为了确保数据完整性,可以随机生成sender的公私钥,用于签名加密的元数据信息,receiver通过公共渠道接收到加密文件后,先验签,确保数据完整和未被修改,然后通过自身的私钥进行解密。
要素说明:sender可以通过CA验证receiver的证书身份,可以通过enctool生成自己的公私钥,用于签名。
备注:如果也需要认证sender,则Client端也分配证书。

身份验证

涉及角色:CA,dcp player, kdm distribution
功能:电影行业中播放密钥分发服务器(kdm distribution)只是针对认证和许可的播放器(dcp player)分发播放密钥kdm。
前提:
过程:
要素说明:
备注:

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注