密码学学习笔记(二十):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中确认证书是否已经被吊销。

相关推荐
学编程的闹钟5 小时前
PHP变量类型转换机制全解析
学习
日更嵌入式的打工仔8 小时前
LAN9253中文注释第三章
笔记
AI360labs_atyun9 小时前
字节AI双王炸来了!Seedance 2.0 + Seedream 5.0
人工智能·科技·学习·百度·ai
玩c#的小杜同学9 小时前
源代码保卫战:给C# 程序(混淆、加壳与反逆向实战)
开发语言·笔记·c#
不用89k9 小时前
SpringBoot学习新手项初识请求
java·spring boot·学习
Yeh2020589 小时前
2月7日笔记
笔记
汐汐咯9 小时前
CNN学习
深度学习·学习·cnn
shadow fish10 小时前
react学习记录(三)
javascript·学习·react.js
Aliex_git10 小时前
浏览器 API 兼容性解决方案
前端·笔记·学习
四谎真好看11 小时前
SSM学习笔记(Spring篇 Day02)
笔记·学习·学习笔记·ssm