安全密码系统的目的是基于密钥将明文数据转换为无法理解的密文,这样在不知道正确密钥的情况下很难(在计算上不可行)将密文转换回其相应的明文。在对称密码系统中,相同的密钥用于加密和解密相同的数据。Oracle Advanced Security 提供了高级加密标准 (AES)和 3DES 对称密码系统 ,用于保护 Oracle 网络服务流量的机密性。
高级加密标准 (AES):Oracle Advanced Security 支持联邦信息处理标准 (FIPS) 加密算法高级加密标准 (AES)。所有美国政府组织和企业都可以使用 AES 来保护网络上的敏感数据。该加密算法定义了三种标准密钥长度,分别为 128 位、192 位和 256 位。所有版本都在外部密码块链接 (CBC :Cipher Block Chaining )模式下运行。
Oracle Advanced Security 支持3DES 加密 (3DES),它使用 DES 算法的加密三遍消息数据。3DES 提供了高度的消息安全性,但会降低性能。性能损失的大小取决于执行加密的处理器的速度。与标准 DES 算法相比,3DES 通常需要三倍的时间来加密一个数据块。3DES 有两密钥和三密钥版本,有效密钥长度分别为 112 位和 168 位。两个版本都在外部密码块链接 (CBC :Cipher Block Chaining )模式下运行。
安全密钥 在多用户环境中分发是困难的。Oracle Advanced Security 使用众所周知的Diffie-Hellman 密钥协商算法来执行加密和数据完整性的安全密钥分发。
当使用加密来保护加密数据的安全性时,必须经常更改密钥以尽量减少密钥泄露的影响。因此,Oracle Advanced Security 密钥管理功能会随着每个会话更改会话密钥。
认证密钥折叠
Authentication Key Fold-in 的目的是在 Diffie-Hellman 密钥协商中击败可能的第三方攻击(历史上称为中间人攻击)。它通过将只有客户端和服务器知道的共享秘密与由 Diffie-Hellman 协商的原始会话密钥相结合,显著增强了会话密钥。
客户端和服务器开始使用 Diffie-Hellman 生成的会话密钥进行通信。当客户端向服务器进行身份验证时,他们会建立一个只有双方知道的共享秘密。Oracle Advanced Security 将共享密钥和 Diffie-Hellman 会话密钥相结合,生成更强大的会话密钥,旨在抵御中间人攻击。
注:身份验证密钥折叠功能是 Oracle Advanced Security 的一个嵌入式特性,不需要系统或网络管理员进行配置。
网络或安全管理员设置加密和完整性配置参数。使用数据加密和完整性的客户端和服务器系统上的配置文件(sqlnet.ora文件)必须包含本节中列出的部分或全部参数。
在任何网络连接中,客户端和服务器都可能支持一种以上的加密算法和一种以上的完整性算法。建立连接后,服务器会从sqlnet.ora文件中指定的算法中选择要使用的算法(如果有)。
服务器搜索客户端和服务器上可用算法,并选择第一个同时在服务器端、也在客户端的算法。如果连接的一侧没有指定算法列表,则安装在该侧的所有算法都可以接受。如果任一方指定了未安装的算法,连接失败并显示错误消息ORA-12650 。
加密和完整性参数是通过修改客户端和服务器上的sqlnet.ora文件来定义。
您可以选择配置任何或所有可用的 Oracle Advanced Security 加密算法(下表 )和可用的完整性算法 (SHA-1)。每个连接会话仅使用一种加密算法和一种完整性算法。
注释:Oracle Advanced Security 选择在客户端和服务器上启用的第一个加密算法和第一个完整性算法。Oracle 建议您按照您喜欢协商的顺序选择算法和密钥长度,首先选择最强的密钥长度。
Algorithm Name | Legal Value |
---|---|
RC4 256-bit key | RC4_256 |
RC4 128-bit key | RC4_128 |
RC4 56-bit key | RC4_56 |
RC4 40-bit key | RC4_40 |
AES 256-bit key | AES256 |
AES 192-bit key | AES192 |
AES 128-bit key | AES128 |
3-key 3DES | 3DES168 |
2-key 3DES | 3DES112 |
DES 56-bit key | DES |
DES 40-bit key | DES40 |
DES: Data Encryption Standard (an old 56 bit encryption method)
3DES168: triple DES with a three-key (168 bit) option
AES128: Advanced Encryption Standard with 128-bit key (currently the most use for data encryption)
AES256: Advanced Encryption Standard with 256-bit key (currently the most secure)
RC4_128: RC4 with 128-bit key (RC4 is the international standard for high-speed data encryption)
RC4_256: RC4 with 256-bit key
要协商是否打开加密或完整性, 通过Oracle Advanced Security 加密和完整性配置参数指定四个可能的值。这四个值按安全性增加的顺序列出。该值REJECTED提供客户端和服务器通信之间的最小安全量,该值REQUIRED提供最大网络安全量:
REJECTED | ACCEPTED | REQUESTED | REQUIRED |
---|---|---|---|
拒绝 | 接受 | 请求 | 要求 |
无论如何也不会启用安全服务 | 如果对方需要或请求,选择此值以启用安全服务,否则不启用安全服务 | 如果对方允许,选择此值以启用安全服务,如果对方拒绝则关闭安全服务 | 选择此值以启用安全服务或阻止连接 |
开启加密或完整性配置参数默认值:ACCEPTED
Client Setting | Server Setting | Encryption and Data Negotiation |
---|---|---|
REJECTED | REJECTED | OFF |
ACCEPTED | REJECTED | OFF |
REQUESTED | REJECTED | OFF |
REQUIRED | REJECTED | Connection fails:连接终止错误信息ORA-12650 |
REJECTED | ACCEPTED | OFF |
ACCEPTED | ACCEPTED | OFF 该配置为默认配置 |
REQUESTED | ACCEPTED | ON |
REQUIRED | ACCEPTED | ON |
REJECTED | REQUESTED | OFF |
ACCEPTED | REQUESTED | ON |
REQUESTED | REQUESTED | ON |
REQUIRED | REQUESTED | ON |
REJECTED | REQUIRED | Connection fails:连接终止错误信息ORA-12650 |
ACCEPTED | REQUIRED | ON |
REQUESTED | REQUIRED | ON |
REQUIRED | REQUIRED | ON |
下面的矩阵表格更加直观:ORA-12660、ORA-12650
Rejected | Accepted | Requested | Required | |
---|---|---|---|---|
Rejected | OFF | OFF | OFF | ORA-12660 |
Accepted | OFF | OFF | ON | ON |
Requested | OFF | ON | ON | ON |
Required | ORA-12660 | ON | ON | ON |
On the server:
vi sqlnet.ora
## 配置加密
SQLNET.CRYPTO_CHECKSUM_SERVER = required
SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER= (SHA1)
#(可选)在加密种子字段中,输入 10 到 70 个随机字符。客户端的加密种子不应与服务器的相同。
SQLNET.CRYPTO_SEED = 'fajoidaidnoiyukasdfmds.kmkmkd'
sqlnet.crypto_seed = <10_to_70_random_characters>
#Default: qwertyuiopasdfghjkl;zxcvbnm,.s1
## 配置完整性
SQLNET.ENCRYPTION_SERVER = required
SQLNET.ENCRYPTION_TYPES_SERVER= (AES256, AES192, AES128)
On the client:
SQLNET.ENCRYPTION_CLIENT = [accepted | rejected | requested | required]
SQLNET.ENCRYPTION_TYPES_CLIENT = (valid_encryption_algorithm [,valid_encryption_algorithm])
SQLNET.CRYPTO_CHECKSUM_CLIENT = [accepted | rejected | requested | required]
SQLNET.CRYPTO_CHECKSUM_TYPES_CLIENT = (valid_crypto_checksum_algorithm [,valid_crypto_checksum_algorithm])
加密后数据包会变大,性能也会下降:(Markdown自带表格不能合并单元格,只能使用HTML了):
性能损耗排序:3DES > DES > AES > RC4
Algorithm | None | MD5 | SHA-1 | |||
Time | %None | Time | %None | Time | %None | |
None | 79.6 s | 80.5 s | 101% | 82.4 s | 104% | |
---|---|---|---|---|---|---|
DES | 104.7 s | 132% | 107.1 s | 135% | 108.2 s | 136% |
3DES168 | 151.8 s | 191% | 153.9 s | 193% | 155.6 s | 196% |
AES128 | 88.8 s | 112% | 90.5 s | 114% | 92.1 s | 116% |
AES256 | 91.8 s | 115% | 93.5 s | 117% | 94.2 s | 118% |
RC4_128 | 81.6 s | 103% | 82.5 s | 104% | 85.0 s | 107% |
RC4_256 | 81.7 s | 103% | 82.8 s | 104% | 85.0 s | 107% |