P1 签名 (PKCS#1) vs 裸签 (Raw Signature)

一、名词定义

  1. P1 签名:PKCS#1 v1.5 签名(RSASSA-PKCS1-v1_5) 标准:RFC3447,RSA 标准签名格式 签名流程: 原始报文 → Hash 摘要 → EMSA-PKCS1-v1_5 填充 → ASN.1 封装(内置哈希算法 OID)→ RSA 私钥运算

补充:ECDSA 标准 DER 签名,逻辑上可以类比 P1,属于带封装标准签名。

  1. 裸签 Raw Signature 无填充、无 ASN.1 标签、不携带任何算法标识,只输出原始数值二进制。 分为两类:
  • RSA 裸签:直接使用摘要运算,存在伪造漏洞,禁止商用
  • ECDSA/SM2 裸签:r、s 直接拼接 r||s(secp256r1 固定 64 字节),物联网、车联网常用

⚠️ 行业误区提醒: 部分厂商文档把 PKCS#1 俗称 "裸签",这只是口头叫法,不等于密码学标准 Raw 裸签,对接以接口字段说明为准。

二、核心对比

表格

| 对比维度 | P1 签名(PKCS#1) | Raw 裸签 |
|----------|----------------------------|------------------------------|---|--------|
| 封装结构 | 包含 PKCS1 填充 + ASN.1 结构 | 无填充、无 ASN.1 封装头 |
| 算法信息 | 内置哈希 OID,可自动识别哈希算法 | 无算法标识,收发双方提前约定哈希算法 |
| 数据内容 | 填充块 + 哈希 OID + 消息摘要 | RSA:原始哈希摘要;ECC:r 值 + s 值直接拼接 |
| 长度特征 | RSA 密钥定长(2048 密钥 = 256 字节) | ECC P256 固定 64 字节 |
| 框架支持 | 通用标准,JDK、BC、OpenSSL 原生支持 | 属于自定义二进制格式,跨平台极易不兼容 |
| 安全特性 | 标准规范,安全可靠 | RSA 裸签高危;ECC 裸签数学安全,仅编码易不匹配 |
| 常见编码 | Base64 (PKCS1 二进制) | Base64(r | | s)原始字节 |

三、ECC 开发重点(高频考点)

  1. SHA256withECDSA 默认输出:DER 格式签名(标准封装,对标 RSA 的 P1)
  2. ECDSA 裸签:剥离 DER 标签,直接拼接 r、s 二进制
  3. 重要结论:DER 签名 ≠ Raw 裸签,二者无法直接互验,必须格式转换

四、速记口诀

P1 签名:带填充、带 OID,标准通用; Raw 裸签:纯原始数值,无封装,算法靠约定。

五、工程避坑要点

  1. RSA 业务一律使用 PKCS#1,禁止使用 Raw 裸签;
  2. ECDSA 对接第三方,优先确认签名格式:DER 还是 64 字节 r+s 裸签;
  3. 裸签没有内置算法信息,验签代码必须显式指定哈希算法;
  4. 区分文档俗称与标准术语,联调优先索要样例报文验证。
相关推荐
今天早睡2 小时前
调用真实模型,用 Pydantic 校验后再路由
后端
智驭未来掌门人2 小时前
CLion 创建并运行 Qt 项目指南
后端
数据库小学妹2 小时前
OLAP数据库怎么选、怎么优化?路线、提速与边界
运维·数据库·后端
加洛斯2 小时前
万字推演Elasticsearch修炼方法,从炼气到元婴
后端·elasticsearch·面试
当时只道是寻常_2 小时前
WorkBuddy中调用本地ComfyUi工作流免费生图
后端
用户394995084632 小时前
Python 导入机制实战:改了代码为什么不生效
后端
房西杭2 小时前
GM指令:add_exp 增加经验
后端
武子康2 小时前
HunyuanVideo-1.5 首帧视频怎么做提示词对照?先查清 rewrite 是否生效
人工智能·后端·agent
今天早睡2 小时前
用 Command 同时更新 State 与控制路由
后端