TLS
文章平均质量分 85
WythePlus
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
CSPRNG安全基石:熵源与nonce唯一性揭秘
随机数是密码安全的基石,其质量直接决定系统可靠性。CSPRNG依赖高质量熵源(如TRNG)播种,确保输出不可预测;而熵不足或种子泄露将导致密钥、nonce、ECDSA临时k等关键参数被破解。实践中应禁用rand(),统一使用RAND_bytes等安全接口。尤其注意GCM/CTR中nonce不可重复,同一密钥下复用nonce将导致机密性与完整性双重崩溃。对称密钥需全随机生成,非对称私钥亦须由CSPRNG驱动,优先在安全芯片内生成。系统级熵源(如Linux getrandom、Windows BCryptGen原创 2026-10-10 11:11:53 · 161 阅读 · 0 评论 -
TLS 双向认证全解析:证书、握手
mTLS双向认证中,服务器与客户端需预置对方信任的CA证书、自身证书及私钥。握手时双方验证证书链:从叶子证书逐级验签至信任根,校验主机名、有效期、用途(serverAuth/clientAuth)及签名。关键步骤包括证书链构建、签名验证、主机名匹配与私钥持有证明(CertificateVerify)。通过SSL_get_verify_result()获取验证结果,失败可定位至未知CA、证书不匹配或吊销等问题。使用verify_callback可审计每级证书,确保安全。证书与私钥必须配对,否则握手失败。原创 2026-10-08 14:49:27 · 177 阅读 · 0 评论 -
TLS1.3加密套件解析:命名拆解、协商流程与选套件策略
这也是你早期 SSL_CTX_set_cipher_list、128 个套件、ALPN 那类问题的系统化梳理。是 RSA 就要 RSA 证书。set_cipher_list 只管 1.2,TLS1.3 必须用 set_ciphersuites,混用导致"怎么配都不生效"。握手后可 SSL_get_current_cipher() 读实际协商结果、SSL_get_version() 读实际版本。应在握手后打印 SSL_get_version/current_cipher/peer_tmp_key?原创 2026-09-24 10:20:15 · 191 阅读 · 0 评论 -
TLS 1.3密钥派生揭秘:从ECDH到全链路加密
以 ECDH 共享为根,用 HKDF 结合"标签 + 握手转录"逐级、确定性地派生出彼此隔离的全部密钥。双方输入相同,独立算出完全一致的密钥树,无需再传输任何密钥。三个 Secret 层(Early / Handshake / Master)对应三个时代(epoch),每次 Extract 都是一次"密钥换层"。把分布可能不均匀的输入密钥材料 IKM,结合可选 salt,提炼成定长、伪随机的 PRK。它是密钥派生的 Context,保证密钥和"实际发生的握手过程"绑定。32 字节原始共享密钥。原创 2026-09-22 09:55:18 · 122 阅读 · 0 评论 -
X.509证书链全解析:从信任根到TLS握手
前面讲完非对称算法,本篇解决"凭什么相信对面发来的公钥"——证书就是把"公钥"和"身份"用 CA 签名绑定的凭证。DN(Distinguished Name)是一组键值对,代码里用 X509_NAME_add_entry_by_txt 添加 CN、O。服务器发证书链(叶子+中间)→ 客户端用本地根验链 → 校验 SAN 与访问主机名一致 → 用证书公钥验证服务器签名,确认身份。主体密钥标识、颁发者密钥标识,用于在多级、多密钥场景下快速对齐"这张证书由上级哪把公钥签发",是大型证书链的重要辅助。原创 2026-09-20 10:49:19 · 324 阅读 · 0 评论 -
X25519与前向安全:密钥协商
椭圆曲线离散对数只有平方根级攻击,P-256 就有 128 位强度,公钥仅 65 字节(未压缩)、共享 32 字节,运算快、功耗低,特别适合 POS/嵌入式。双方各自加入"私色",交换混合色后再各自加私色,最终得到相同的"共同色",窃听者只看到两次混合色却无法还原。,随后双方各自 HKDF 派生密钥。双方得到同一个 S,而窃听者只拿到 A、B、g、p,面对离散对数难题,算不出 a、b,也就算不出 S。逆向(难):给定 g、y、p,求 x = log_g(y) mod p —— 离散对数,极难。原创 2026-09-20 10:26:17 · 393 阅读 · 0 评论 -
ECC椭圆曲线密码学
取模 p 后,点变成离散的、有限的集合(约 p 个点),点与点之间没有几何连续性,只有代数运算关系,这正是它能用于密码的原因——离散、难逆推。在 POS/嵌入式上,这意味着密钥、签名、证书、运算量、功耗全部数量级地减小——这是 v7 明确选 P-256 的根本原因。+ G(d 次),实际用"倍点-加法"(double-and-add)在 O(log d) 步完成,类似模幂的快速幂。用 EC_POINT_mul(grp, Q, d, NULL,NULL,ctx) 手工算出 d·G,和密钥生成的公钥逐点相同。原创 2026-09-14 14:58:35 · 366 阅读 · 0 评论 -
ECIES加密原理:一行公式搞定安全通信
S = r × Q = r × (d × G) 代入 Q = d × G = (r × d) × G。解密方:S' = d × R = d × (r × G) = (d·r) × G。加密方:S = r × Q = r × (d × G) = (r·d) × G。所以:(r × d) × G = (d × r) × G 即:S = S'代入 R = r × G = (d × r) × G。所以 HKDF(S.x) = HKDF(S'.x)所以 S = S' 所以 S.x = S'.x。原创 2026-09-14 11:51:19 · 346 阅读 · 0 评论 -
OpenSSL RSA所有权陷阱:一文看懂set1/set0/get1/get0
OpenSSL 3.0 引入了 provider 架构,EVP_PKEY 内部不再直接持有 RSA *,而是通过 provider 管理。的,生命周期更短,建议优先用 EVP_PKEY_get1_RSA 或直接用 EVP_PKEY 层面的 API(如 EVP_PKEY_get_bits)。:OpenSSL 3.0 中 EVP_PKEY_get0_RSA 返回的指针可能是。不要RSA_free,pkey 不能提前释放。返回内部缓存的 RSA*(可能是临时构造)转移给 EVP_PKEY。不要RSA_free。原创 2026-09-11 16:23:43 · 358 阅读 · 0 评论 -
libcrypto RSA加密真相:从数学原理到使用安全陷阱
知道 n、e,要算出 d,必须先知道 φ(n),而求 φ(n) 等价于把 n 分解成 p、q(大整数分解难题)。防止"算法混淆攻击":签名里明确写"这是 SHA-256 的摘要",验签时防止攻击者把 SHA-256 摘要冒充成别的算法摘要。用 BN_mod_exp 分别算 m1、m2,再按公式组合,并和直接 c^d mod n 比较,结果完全相等。RSA 只解决"密钥安全送达",数据加密交给对称密码,各取所长。选 e、d 满足 e·d ≡ 1 (mod φ(n)),即 e·d = 1 + k·φ(n)。原创 2026-09-11 11:09:54 · 250 阅读 · 0 评论 -
libcrypto 别忽略这行代码,否则加密会失败
在RSA-OAEP加密中,显式设置oaep_md和mgf1_md为SHA-256至关重要。第二组代码仅设oaep_md,导致mgf1_md默认为SHA-1(尤其在OpenSSL 1.1.x中),引发跨平台解密失败、安全强度下降及PCI PTS合规风险。第一组代码通过显式设置两者,确保行为一致、兼容性强、安全达标。建议所有RSA-OAEP场景统一使用三行配置,避免隐蔽漏洞。原创 2026-09-11 10:29:48 · 291 阅读 · 0 评论 -
TLS SHA-256/384/512 与 HMAC/HKDF 详解
在原生 64 位 CPU(POS 的 ARM Cortex-A 就是)上,64 位运算一条指令完成,SHA-512 处理每字节的轮数反而更少,吞吐可能高于 SHA-256。HKDF 是哈希无关的框架,把内部 HMAC 换成 HMAC-SHA512 就成了 HKDF-SHA512(PRK/OKM 每块 64 字节,输出上限 255×64)。HMAC-SHA256 的 ipad/opad/key 阈值是 64,HMAC-SHA384/512 是 128。:哈希是公开的、确定性的,任何人都能计算。原创 2026-09-10 17:36:49 · 315 阅读 · 0 评论 -
TLS AES 加密模式详解
最经典的演示是 ECB 加密 Linux 企鹅(ECB Penguin):图片加密后,每 16 字节独立加密,相同颜色区域产生相同密文,企鹅轮廓依然清晰可见。P[i+1] = D(K, C[i+1]) XOR C[i],C[i] 出错会直接 XOR 进 P[i+1]。它们的密钥流只依赖 IV/计数器和密钥,不依赖密文,所以密文错误只影响当前块的 XOR 结果。P[i] 整块错误 + P[i+1] 对应 1 位错误,P[i+2] 恢复。,就像查密码本一样,每个明文块对应固定的密文块,所以叫"电子密码本"。原创 2026-09-10 14:24:32 · 168 阅读 · 0 评论 -
TLS DES / 3DES 调用 API 测试
要求:3DES 全部改用三个独立密钥 K1≠K2≠K3 实测(不再 K1=K2=K3 冒充);所有 IV 一律非零,CBC 首块用链接公式 C1 = E(K)(IV⊕P1) 验证,不再用全零 IV。首块分步复算 E(K3)[D(K2)[E(K1)(P1⊕IV)]] == ede3_cbc 输出 + 往返。:K1=K2=K3 时 3DES 输出和单 DES 完全一样(测试 [5][6] 就是验证这个)。:传 len=10,加解密"成功",但解密回来只剩前 8 字节,后 2 字节丢了,不报错。原创 2026-09-09 11:57:04 · 299 阅读 · 0 评论 -
TLS MD5 调用 API 测试
echo -n "abc" | openssl dgst -md5 # -n = 不输出换行 # 900150983cd24fb0d6963f7d28e17f72 printf "abc" | openssl dgst -md5 # printf 不会自动加换行 # 900150983cd24fb0d6963f7d28e17f72。:哈希是"流式"的——Update 只负责把数据攒进 data[],攒满 64 字节就丢给压缩函数处理一次,同时把长度累加进 Nl/Nh。原创 2026-09-09 10:29:43 · 256 阅读 · 0 评论 -
OpenSSL中d2i与i2d的理解
PEM_read_bio_X509 = base64解码 + d2i_X509;你之前 mtls 系列程序里 SSL_CTX_use_certificate_file(...SSL_FILETYPE_PEM) 走的就是路径 A。有:SSL_CTX_use_certificate_file等文件版 API,内部自动走完 ①②③④;DER buffer → d2i_* → X509*/EVP_PKEY*→ SSL_CTX_use_*(密钥),挂到 SSL_CTX 上后握手时库自动取用。原创 2026-09-08 10:22:41 · 632 阅读 · 0 评论 -
TLS中密钥容器核心数据结构
TLS中密钥容器的三个核心数据结构:所有大数运算(模幂 n^d mod m、乘、逆元)都在这个字数组上做,SSL 针对 x86-64/ARM 有汇编加速(bn_mul_mont 等)。:空壳——d=NULL,不能做任何运算,必须先 BN_bin2bn/BN_hex2bn/BN_set_word 填入数据。API语义引用计数之后谁 free接管所有权,不增引用不变只EVP_PKEY_free(pkey),绝不能再 RSA_free(rsa)拷贝引用(内部 RSA_up_ref)+1。原创 2026-09-07 14:57:40 · 438 阅读 · 0 评论 -
TLS公钥证书读取方法
用 PEM_read_bio_RSA_PUBKEY 去读 -----BEGIN RSA PUBLIC KEY----- 的文件会失败——它找的是 PUBLIC KEY 标签。反过来 PEM_read_bio_RSAPublicKey 读 PUBLIC KEY 标签的文件也会失败。:统一用 PEM_read_bio_PUBKEY(SPKI,自动识别算法),碰到 PKCS#1 裸公钥文件才用 PEM_read_bio_RSAPublicKey。名字像"RSA 公钥"但读 SPKI。(自动识别 RSA/EC)原创 2026-09-07 12:03:23 · 395 阅读 · 0 评论 -
密钥格式与存储
tbsCertificate 又含版本/序列号/颁发者/有效期/主体/公钥/扩展(源码x_x509.c ASN1_SEQUENCE_enc(X509_CINF))d2i_X509 PEM_write_bio_X509。PEM = -----BEGIN 标签----- + base64(DER) + -----END 标签-----。-----END CERTIFICATE-----结尾,中间是 base64 编码的 DER,每 64 字符换行。-----BEGIN CERTIFICATE-----开头、原创 2026-09-07 11:52:11 · 455 阅读 · 0 评论 -
TLS 1.2 vs TLS 1.3 对比
TLS 1.3 套件名 = TLS_<加密算法>_<模式>_<哈希>,不再包含密钥交换和认证算法——因为 1.3 只支持 ECDHE/DHE 密钥交换,认证由证书签名算法单独协商。TLS 1.2: 300+ 注册套件(其中大量已不安全) TLS 1.3: 5 个套件(全部安全,全部 AEAD,全部前向保密)rsa_pkcs1_sha1、rsa_pkcs1_md5_sha1、ecdsa_sha1 等弱哈希签名。多个子密钥(客户端写密钥/服务器写密钥/IV/MAC密钥)原创 2026-09-04 10:08:42 · 342 阅读 · 0 评论
分享