密码学学习笔记(二十):DSA签名与X.509证书

数字签名

下图是一个制作以及使用数字签名过程的通用模型。

假设Bob发送一条消息给Alice,尽管消息并不重要,也不需要保密,但他想让Alice知道消息确实是他本人发的。出于这个目的,Bob利用一个安全的散列函数,比如SHA-512,产生消息的散列值然后将这个散列值用他的私钥加密,从而创建了数字签名。当Alice接收到带有签名的消息后,她要做的是:

  • 计算该消息的散列值
  • 利用Bob的公钥对签名解密
  • 将计算出的散列值和解密出的散列值做比较

如果这两个散列值相等,Alice就能确认所收到的消息是由Bob签名过的。因为其他人没有Bob的私钥,所以他们不能创建能用Bob的公钥解密的密文。另外,没有Bob的私钥也不可能对消息做修改。

数字签名并不提供机密性,发送消息不会被篡改但有可能被窃听。

公钥证书

公钥证书由公钥加上公钥所有者的用户ID以及可信第三方签名的整个数据块组成。

  1. 用户软件(客户端)创建一对密钥:一个公钥和一个私钥
  2. 客户端准备一个包含用户ID和公钥的未签名的证书。
  3. 用户通过某种安全手段将未签名的证书提交给Certificate Authority - CA(认证中心)。这种手段可能是面对面的会谈,也可能是使用已注册的电子邮件,或提交一个电子邮件认证的Web表单。
  4. CA以如下方式产生一个签名:(1) CA利用某个散列函数计算出未签名证书的散列码。该散列函数比如SHA,将一个可变长度的数据分组或消息映射到一个固定长度散列码。
  5. CA将签名附属在未签名的证书后,以此创建一个签名证书。
  6. CA将签名证书交还给客户端。
  7. 客户端可以将该签名证书提交给其他用户。
  8. 该签名证书的任何接收者可以通过(1)接收者计算证书的散列码(不包括签名),(2)接收者使用CA的公钥和签名认证算法来证实数字签名。这个算法返回值显示签名是否有效。

X.509标准已经被广泛接受,用来格式化公钥证书。

X.509

X.509 ITU-T标准在RFC 5280有详细的描述,是最为广泛接受的公钥证书格式。

RFC 5280: Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile (rfc-editor.org)

X.509证书被用于大多数网络安全应用,包括IP安全、SSL、TLS、SET、S/MINE,以及电子商务应用。

X.509证书主要元素包括具有X.500主体名称的密钥和公钥信息、有效期、CA发放者名称,以及将这些信息绑定在一起的这些信息的签名。

X.509标准定义了一个证书吊销列表(CRL),是由颁发者签名的。 每一个被吊销的证书都包含了证书的序列号和证书吊销日期。CA颁发的证书序列号是唯一的,足以识别证书。当一个应用接收了一个证书,X.509标准声明应用应该在签发证书的CA的当前的CRL中确认证书是否已经被吊销。

相关推荐
yuxb7316 分钟前
Zabbix企业级分布式监控系统(上)
笔记·学习·zabbix
现在,此刻20 分钟前
李沐深度学习笔记D1-什么是深度学习
人工智能·笔记·深度学习
猿来是你_L2 小时前
UGUI笔记——3D坐标转换成UGUI坐标
笔记·3d
崎岖Qiu7 小时前
【设计模式笔记17】:单例模式1-模式分析
java·笔记·单例模式·设计模式
Chloeis Syntax8 小时前
MySQL初阶学习日记(1)--- 数据库的基本操作
数据库·学习·mysql
lkbhua莱克瓦248 小时前
Java练习-正则表达式 1
java·笔记·正则表达式·github
musenh8 小时前
css样式学习
css·学习·css3
Larry_Yanan9 小时前
QML学习笔记(五十)QML与C++交互:QML中单例C++对象
开发语言·c++·笔记·qt·学习·ui·交互
im_AMBER9 小时前
算法笔记 09
c语言·数据结构·c++·笔记·学习·算法·排序算法
Nan_Shu_61410 小时前
学习:JavaScript(5)
开发语言·javascript·学习