-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
21 changed files
with
371 additions
and
56 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
OpenResty® 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。 | ||
|
||
OpenResty® 通过汇聚各种设计精良的 Nginx 模块(主要由 OpenResty 团队自主开发),从而将 Nginx 有效地变成一个强大的通用 Web 应用平台。这样,Web 开发人员和系统工程师可以使用 Lua 脚本语言调动 Nginx 支持的各种 C 以及 Lua 模块,快速构造出足以胜任 10K 乃至 1000K 以上单机并发连接的高性能 Web 应用系统。 | ||
|
||
OpenResty® 的目标是让你的Web服务直接跑在 Nginx 服务内部,充分利用 Nginx 的非阻塞 I/O 模型,不仅仅对 HTTP 客户端请求,甚至于对远程后端诸如 MySQL、PostgreSQL、Memcached 以及 Redis 等都进行一致的高性能响应。 | ||
|
||
|
||
https://openresty.org/cn/ | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,7 +1,71 @@ | ||
# HSM | ||
|
||
HSM 加密机原理 | ||
### HSM 硬件加密机 | ||
|
||
硬件安全模块(HSM)是一种物理设备,设计用于安全地管理、处理和存储加密密钥和数字证书。HSM广泛应用于需要高安全性的场景,如金融服务、数据保护、企业安全以及政府和军事领域。HSM提供了一种比软件存储密钥更安全的方式,因为密钥材料从不以未加密形式离开模块。 | ||
|
||
VSM 虚拟密码机 | ||
### VSM 虚拟密码机 | ||
|
||
虚拟密码机(VSM,Virtual Security Module)是一种基于软件实现的密码设备功能模拟系统。它利用软件技术在通用的计算平台(如服务器、云计算环境等)上提供密码学服务,模拟传统硬件密码机的功能,包括密钥管理、数据加密 / 解密、数字签名等操作。 | ||
|
||
### 总结HSM、VSM优劣势 | ||
|
||
VSM(虚拟密码机)和HSM(硬件密码机)的优劣势如下: | ||
|
||
#### VSM(虚拟密码机) | ||
- **优势**: | ||
- **成本低**:VSM是基于软件实现的密码设备功能模拟系统,不需要购买专门的硬件设备,大大降低了采购成本。对于预算有限的企业或项目来说,是一种经济实惠的选择。 | ||
- **灵活部署**:可以方便地部署在各种计算环境中,包括本地服务器、私有云、公有云等。并且能够根据业务需求灵活地进行扩展或缩减资源,适应不同规模的业务场景。 | ||
- **易于更新维护**:软件性质使得VSM的更新和维护相对容易。开发人员可以通过软件升级的方式来更新加密算法、修复安全漏洞或添加新的密码功能,无需像硬件密码机那样进行复杂的硬件更换或现场维护操作。 | ||
- **兼容性好**:VSM通常提供与实体密码设备相同的功能与接口,可完全兼容传统应用,方便企业将现有应用迁移到虚拟密码机环境中,降低了应用改造的难度和成本。 | ||
- **劣势**: | ||
- **安全性相对较低**:尽管VSM采取了多种安全措施,但由于它基于软件实现,其安全性在一定程度上依赖于运行环境的安全性。与硬件密码机相比,更容易受到软件漏洞(如操作系统漏洞、应用程序漏洞)的攻击。如果运行VSM的服务器被黑客入侵,攻击者可能会破坏VSM的安全机制,从而获取密钥或篡改加密数据。 | ||
- **性能受环境影响**:VSM的性能会受到运行环境的影响。在高负载或资源受限的情况下,如服务器CPU占用率过高、内存不足等,VSM的密码处理速度可能会下降,无法保证稳定的高性能密码服务。 | ||
- **缺乏物理保护**:硬件密码机通常具有物理层面的保护措施,如防篡改外壳、安全芯片等,而VSM缺乏这些物理保护机制,更容易受到物理攻击或硬件故障的影响。 | ||
|
||
#### HSM(硬件密码机) | ||
- **优势**: | ||
- **安全性高**:硬件密码机具有专门设计的硬件电路和安全芯片,能够提供更高的安全性。其密钥存储在安全的硬件环境中,难以被窃取或篡改,有效保护了密钥的安全。 | ||
- **性能稳定**:独立的硬件设备不受其他应用程序或系统的影响,能够提供稳定、高效的密码运算性能,适用于对密码处理速度和稳定性要求较高的场景,如金融、政务等关键业务领域。 | ||
- **物理保护机制**:具备物理层面的保护措施,如防篡改设计、硬件加密模块等,能够防止未经授权的访问和物理攻击,进一步增强了设备的安全性。 | ||
- **符合法规标准**:许多行业的法规和标准要求使用经过认证的硬件密码设备来保障数据安全,HSM通常经过严格的安全认证,符合相关法规标准,能够满足企业的合规需求。 | ||
- **劣势**: | ||
- **成本高**:购买、部署和维护硬件密码机需要较高的成本,包括硬件设备的采购费用、设备的安装调试费用、维护人员的培训成本等。 | ||
- **部署不够灵活**:硬件密码机是独立的硬件设备,部署相对固定,不太容易根据业务需求快速进行扩展或调整。如果业务量突然增加,可能需要购买新的硬件设备,导致部署周期较长。 | ||
- **管理复杂**:硬件密码机的管理和维护需要专业的技术人员,管理过程相对复杂。例如,密钥的备份、恢复、更新等操作都需要严格的管理流程和技术支持。 | ||
|
||
### 根秘钥(Root Key) | ||
|
||
根密钥是密码机密钥体系中的最顶层、最基础的密钥。它就像一棵大树的树根,是整个密钥体系的根基。通常是在密码机初始化或者系统建立初期通过非常安全、严格的方式生成或设置的。 | ||
|
||
生成方式极为谨慎,可能涉及到物理手段(如通过专门的安全设备写入)或者多重加密技术的复杂组合。其存储位置也是密码机中最安全的区域,例如采用专门的硬件安全模块(HSM)中的受保护存储单元,并且可能会有物理防护措施,如防篡改、防电磁泄露等。 | ||
|
||
主要用于生成和保护其他高级别的密钥,如主密钥。它为整个密钥体系提供信任根,用于验证主密钥的合法性。 | ||
|
||
### 主秘钥(Master Key) | ||
|
||
主密钥是密码机密钥体系中的核心密钥,由根密钥衍生而来。它是一种长期密钥,用于管理和保护其他密钥,如会话密钥和工作密钥。可以把主密钥想象成一个 “密钥管理员”,负责密钥的存储、分发等关键环节。 | ||
|
||
主密钥是在根密钥的基础上,通过安全的密钥生成算法生成的。其存储也非常安全,一般存储在密码机内部的安全存储区域,可能会被加密存储(使用根密钥或者其他保护机制)。 | ||
|
||
用于加密和存储会话密钥、工作秘钥。当需要创建一个会话密钥时,主密钥会对其进行加密,然后存储在密码机的密钥存储库中。当通信会话需要使用会话密钥时,主密钥再对存储的加密会话密钥进行解密。同时,主密钥还可以用于管理其他工作密钥,如对工作密钥进行备份、恢复和更新等操作。 | ||
|
||
### 工作秘钥(Working Key) | ||
|
||
工作密钥(Working Key)是密码系统中用于实际数据加密操作的密钥。它介于主密钥和会话密钥之间,是根据特定业务场景或操作流程而设立的密钥。工作密钥主要用于加密具体业务相关的数据,这些数据可以是批量的、有规律的,并且和特定的业务逻辑紧密相关。 | ||
|
||
工作密钥的更新通常是基于业务周期或者安全策略。例如,为了应对不断变化的安全威胁,金融系统中的工作密钥可能会定期更新,更新周期可以是每天、每周或者每月等。更新过程会涉及到主密钥对新工作密钥的加密存储,以及旧工作密钥的安全销毁或备份(用于密钥恢复等情况)。 | ||
|
||
### 会话秘钥(Session Key) | ||
|
||
会话密钥是为了一次特定的通信会话(如一次网络连接、一次数据传输交互等)而临时生成的对称密钥。它是一种短期密钥,只在本次会话期间有效。 | ||
|
||
可以通过密码机内部的随机数生成器生成,或者通过通信双方基于密钥协商协议(如 Diffie - Hellman 密钥交换协议)来共同生成。会话密钥在生成后,通常会被主密钥加密存储在密码机的存储区域,直到该会话开始使用。 | ||
|
||
以一个在线购物网站的安全通信为例,当用户浏览器和网站服务器建立安全连接(如 TLS 连接)时,双方通过密钥协商协议生成会话密钥,然后这个会话密钥被网站服务器的密码机中的主密钥加密存储。 | ||
|
||
主要用于对会话期间传输的数据进行加密和解密。例如,在上述购物网站的安全连接中,用户输入的个人信息(如账号、密码、收货地址等)会通过会话密钥加密后发送给服务器,服务器接收到密文后,使用相同的会话密钥进行解密,从而获取原始信息。这种方式可以有效地防止数据在传输过程中被窃取或者篡改,并且由于会话密钥是临时的,即使一次会话密钥被泄露,也不会影响其他会话的安全。 | ||
|
||
### 总结 | ||
|
||
工作密钥与主密钥、会话密钥协同工作,共同构建起一个完整的加密体系。主密钥用于管理工作密钥的生成、存储和更新,会话密钥则用于加密一次通信会话中的数据。例如,在一个企业内部的通信系统中,工作密钥用于加密业务文档等数据,当这些数据需要在网络中传输时,会临时生成会话密钥,会话密钥将会话期间传输的已经由工作密钥加密的数据再次加密,从而提供多层安全防护。 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
OpenSSL 是一个强大的开源工具包,主要用于加密、SSL/TLS 协议以及与安全通信相关的各种任务。 | ||
|
||
https://www.openssl.org/ | ||
|
||
https://github.com/openssl/openssl | ||
|
||
**一、主要功能** | ||
|
||
1. **加密和解密**: | ||
- 支持多种加密算法,如对称加密算法(AES、DES 等)和非对称加密算法(RSA、DSA、ECDSA 等)。 | ||
- 可以对文件、数据进行加密,确保信息的保密性。例如,使用 AES 加密一个文件:`openssl enc -aes-256-cbc -in input.txt -out encrypted.txt`。 | ||
|
||
2. **数字签名和验证**: | ||
- 用于生成和验证数字签名,确保数据的完整性和真实性。 | ||
- 可以使用私钥生成数字签名,然后使用相应的公钥进行验证。例如,生成 RSA 密钥对并对文件进行签名:`openssl genrsa -out private.key 2048`,然后`openssl rsautl -sign -inkey private.key -in input.txt -out signature.bin`,最后验证签名:`openssl rsautl -verify -inkey public.key -in signature.bin -pubin`。 | ||
|
||
3. **SSL/TLS 证书管理**: | ||
- 生成自签名证书和证书签名请求(CSR)。 | ||
- 可以用于创建服务器和客户端的 SSL/TLS 证书,以确保安全的网络通信。例如,生成自签名证书:`openssl req -new -x509 -days 365 -key private.key -out certificate.pem`。 | ||
|
||
4. **密码学操作**: | ||
- 支持哈希函数,如 MD5、SHA-1、SHA-256 等。 | ||
- 可以进行密钥生成、密钥交换等操作。 | ||
|
||
**二、应用场景** | ||
|
||
1. **Web 服务器安全**:为 Web 服务器配置 SSL/TLS 证书,确保用户与服务器之间的通信安全。 | ||
2. **数据安全**:在数据传输和存储过程中,使用加密和数字签名来保护敏感信息。 | ||
3. **软件开发**:在应用程序中集成加密功能,以提高软件的安全性。 | ||
4. **网络安全**:用于分析和测试网络通信的安全性,检测潜在的漏洞。 | ||
|
||
总之,OpenSSL 是一个非常重要的安全工具,广泛应用于各种领域,为保护信息安全提供了强大的支持。😃 | ||
|
||
|
||
OpenSSL有以下一些主要版本及其特性: | ||
|
||
可以使用`openssl version`查看安装的版本 | ||
|
||
1. **OpenSSL 0.9.x 系列**: | ||
- 这是早期的版本系列,从1998年开始。对SSL 2.0、SSL 3.0以及TLS 1.0都有支持。 | ||
- 提供了基本的密码学功能,包括多种对称加密算法(如DES、RC4等)、非对称加密算法(如RSA、DH等)以及信息摘要算法(如MD5等)。 | ||
- 为后续版本的发展奠定了基础,但在功能和安全性上相对较早期和基础。 | ||
2. **OpenSSL 1.0.x 系列**: | ||
- **OpenSSL 1.0.0**:被许多Linux系统采用,提供了一些硬件加速的功能,能够加快加密和解密的速度,对于一些对性能要求较高的应用比较重要。 | ||
- **OpenSSL 1.0.1**:是一个使用较为广泛的版本,但在2014年发现了严重的安全漏洞“心脏滴血(Heartbleed)”,该漏洞影响了此版本及之前的部分版本。 | ||
- **OpenSSL 1.0.2**:修复了之前版本中存在的一些漏洞和安全问题,提高了系统的防护能力。在加密算法和处理效率上有所改进,增加了一些新的加密算法和协议支持,为用户提供了更加多样化和灵活的选项。 | ||
3. **OpenSSL 1.1.1 系列**: | ||
- 对之前的版本进行了改进和优化,在性能和安全性方面都有提升。拥有更多的文档和经过测试的代码。 | ||
- 引入了提供者(Provider)概念,提供者聚集在一起并提供可用的算法实现,用户可以以编程方式或通过配置文件指定希望用于任何给定应用程序的提供程序。 | ||
- 弃用了一些不安全或过时的算法和函数,如MD2、DES等加密算法被视为遗留算法,强烈建议不要使用。 | ||
4. **OpenSSL 3.0 系列**: | ||
- 经过长时间的开发和迭代推出,是一个主要版本。大部分使用OpenSSL 1.1.1的应用程序至少需要重新编译才能使用该版本,但大多数应用程序在重新编译后能基本保持正常工作。 | ||
- 采用了Apache License v2许可证,取代了之前的双重OpenSSL和SSLeay许可。 | ||
- 标配5个不同的提供程序,其中包括FIPS提供程序(FIPS验证的加密算法),但默认处于禁用状态,需要显式启用。 | ||
- 弃用了所有低级API,强烈建议用户更新代码以使用高级API,因为不推荐使用的API可能会从未来版本中删除。 | ||
- 引入了许多新概念,如多线程应用、算法获取、编码和解码密钥等,在功能和安全性上有了进一步的提升。 | ||
|
||
目前,OpenSSL 3.0及以上版本是推荐使用的版本,旧版本(如1.0.x及更早版本)已经不再受支持或存在安全风险。用户应根据自己的需求和应用场景选择合适的OpenSSL版本,并及时进行升级以保证系统的安全性和稳定性。 |
Oops, something went wrong.