一些非对称加密中基本概念
本文的主要内容是介绍一些密码学中非对称加密中的基础概念。
2023-11-26
非对称加密是密码学中的一个重要概念,与之相对的是对称加密 - 即通过一个密钥对明文进行加和解密。与对称加密不同,非对称加密采用一对密钥(公钥和私钥)用于加密和解密信息,其中公钥是公开的,私钥则必须保密。发送方在发送消息时,使用接收方的公钥对信息进行加密,接收方在接收到密文后,再使用自己的私钥进行解密。一般情况下,由于非对称加密的加密效率相对于对称加密而言显得十分低下,因此对于较长的信息并不适合使用非对称加密进行加密,通常是结合使用对称加密对信息进行加密,使用非对称加密对对称加密使用的密钥进行加密。
除了用于加解密外,非对称加密还有一个很重要的用途 - 数字签名:发送方使用自己的私钥对一段信息进行数字签名,接收方可以使用发送方的公钥验证接收到的消息和签名是否匹配。从效率方面考虑,对于较长的信息,首先获取这段信息的哈希值,然后对哈希值进行签名是更有效率的一种做法。
RSA(Rivest-Shamir-Adleman)算法是非对称加密中最经典和广泛使用的一种,其原理基于大素数分解的困难性。RSA 算法被广泛应用于数字签名、密钥交换等场景,是当前许多加密协议和安全通信中的核心算法。但是需要注意的是,使用 RSA 算法应当确保密钥长度至少为 [2048 bits]https://www.keylength.com/en/4/),否则无法保证其安全性。
椭圆曲线算法(ECC)是一种基于椭圆曲线的非对称加密算法,其原理基于椭圆曲线
y^2 = x^3 + ax + b
相较于 RSA 算法,ECC 能够使用更短的密钥(224 bits)达到和 RSA 相同的安全性,因此其性能较 RSA 算法会高上许多。
ECDSA(Elliptic Curve Digital Signature Algorithm)是建立在 ECC 基础上的数字签名算法。ECDSA 在保证了数字签名的安全性的同时,能够提供相对较短的签名长度,适用于对带宽和存储要求较高的场景。
secp256k1、secp256r1、ed25519、sm2p256v1 是什么?
如上所述,ECC 是建立在椭圆曲线之上的,而 secp256k1、secp256r1、ed25519、sm2p256v1(国密 SM2 标准)这些词汇表示的是不同取值下的椭圆曲线,例如 secp256k1 的具体参数值为:
p = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE FFFFFC2F
a = 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
b = 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000007
G = 02 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798
n = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141
h = 01
除了 p、a、b、G 、n 外,h 表示的是椭圆曲线上所有点的个数。
PKCS(Public Key Cryptography Standards)是一系列公钥密码学标准,涵盖了非对称加密、数字签名、证书请求等方面的规范。现行的 PKCS 标准有以下几个:
PKCS 标准 | 用途 |
---|---|
PKCS#1 | 定义了RSA的数理基础、公/私钥格式,以及加/解密、签/验章的流程。 |
PKCS#3 | 规范以DH密钥协议为基础的密钥协议标准。 |
PKCS#5 | 即 PBKDF2 密钥派生函数 |
PKCS#7 | 加密和签名的消息语法 |
PKCS#8 | Apache 读取证书私钥的标准。主要用来存储私钥。私钥首先会使用 PKCS#5 的标准进行加密,然后 Base64 编码,转换成为 PEM 格式存储。 |
PKCS#9 | 定义PKCS#7、8、10的选择属性格式。 |
PKCS#10 | 规范了向证书中心申请证书 CSR(certificate signing request)的格式。 |
PKCS#11 | 定义了密码设备的应用程序接口(API)之规格。 |
PKCS#12 | 定义了包含私钥与公钥证书(public key certificate)的文件格式。私钥采密码(password)保护。文件的扩展名是 .p12 或者 .pfx。PKCS12 可以看做是 PKCS7 的扩展,PKCS12 可以额外存储私钥。 |
PKCS#15 | 定义了密码设备内部数据的组织结构。 |
ASN.1 数据编码 和 X.509 公钥证书格式标准
ASN.1(Abstract Syntax Notation One)是一种用于描述数据结构的标记语言,通过使用抽象的语法来描述数据结构让不同的系统之间能够共享和理解数据。基于 ASN.1 数据编码标准将结构化的数据转化为二进制编码,以便能够在网络中传输和存储。
X.509 是基于 ASN.1 的一种定义了公钥证书的格式和内容标准,这一标准规定了公钥证书的结构和内容,包括证书的版本、序列号、颁发者信息、有效期、公钥信息等,常被用于验证数字签名和建立安全通信,是公共密钥基础设施(PKI)中的关键组成部分。
5. DER 编码和 PEM 格式
在非对称加密中,DER(Distinguished Encoding Rules)编码是一种二进制编码方式,用于将 ASN.1 数据结构编码为字节流,常用于 X.509 协议中。
PEM(Privacy Enhanced Mail)格式是一种基于文本的编码格式,通常用于存储和传输密钥和证书。常使用 ASCII 字符集,支持密钥、证书等数据的可读性展示,并且可以方便地嵌入到文本文档中。PEM 格式的可读性使其在实际应用中更为便利,常见于 SSL 证书、SSH 密钥等场景。