密码学:密钥管理、数字签名、散列函数与证书

密码学的主要用途

密码学的主要用途有:

  1. 确保消息的机密性:只有得到授权的用户才能阅读消息。
  2. 确保消息的完整性:在解密时消息没有被篡改过。
  3. 确保消息来源的真实性:消息应该来自声明发送了消息的人,且他以后也不能否认曾经发送过的消息。

四种攻击手段

在消息中添加完整层和认证层,并对密钥进行安全有效的管理,有助于抵御如下四种类型的攻击:

  • 操纵:攻击者截获并篡改消息
  • 伪装:攻击者伪装为通信者。
  • 重放:记录消息并在未来重新发送消息。
  • 否认:通信者否认曾经发出的消息。

密钥交换(Diffie-Hellman)

算法描述

Alice与Bob共享一个素数p以及该素数的本原根g(均可以公开)

客户端Alice选一个随机数PrivateA作为私钥( 1 ⩽ PrivateA ⩽ p−1 )
通过计算得到一个公钥PublicA = g^PrivateA mod p

服务器Bob选一个随机数PrivateB作为私钥( 1 ⩽ PrivateB ⩽ p−1 )
通过计算得到一个公钥PublicB = g^PrivateB mod p

双方通过公网交换公钥

此时Alice知道的信息有

自己的私钥:PrivateA
自己的公钥:PublicA
Bob的公钥:PublicB

Bob同理

Alice计算共享密钥KeyA : KeyA = (PublicB) ^ PrivateA mod p
Bob计算共享密钥KeyB: KeyB = (PublicA) ^ PrivateB mod p
可证得:KeyA = KeyB 统一用key表示
这样双方就得到了同一个共享密钥key

Eve能得到p, g,以及双方的公钥,但是求解 k 的方法只能通过计算双方的私钥得到,这个问题等价于离散对数难题。

缺陷

上述版本无法防止中间人攻击,Eve可以通过分别与Alice、Bob建立一次密钥交换来进行中间人攻击。
在这里插入图片描述
为了抵御这种攻击,又引入了一层公钥体制:
Alice有一个私钥 A 和一个公钥 g^A
Bob有一个私钥 B 和一个公钥 g^B
首先双方可以计算一个认证值 K = g ^ (A*B),这个认证值是第三方无法计算的,
然后上述过程的 PublicA = g ^ (privateA * K),B同理。

数字签名(如RSA)

Alice生成一个随机数random
用自己的私钥 PrivateArandom生成签名 RSA(PrivateA, random)
然后把签名和随机数random给Bob发过去
Bob收到后用Alice的公钥 PublicA 对签名进行验签得到签名中的random
如果签名中的random与一同发送来的随机数random一样
则证明消息是Alice发过来的

散列函数

六个要求

  1. 能够接受任何长度的消息作为输入。
  2. 能够给生成较短的定长输出。
  3. 对任何输入都能够快速容易地计算输出。
  4. 应该是一个单向函数,难以逆推。
  5. 能抵抗弱冲突(两个不同的输入产生相同的输出)。
  6. 能抵抗强冲突(找到两个有意义的消息使得其散列值相同)

MD5

MD5算法以512位分组来处理输入的任意长度的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。

SHA

接受任何长度的输入消息,并生成160位的消息摘要,与MD5相似,这个算法操作划分为32位字的512位长度的块。

由于SHA-1生成的消息摘要比MD5的要长32位,因此抵抗强冲突的能力稍强一些。

PKI与证书

PKI(公钥基础设施)由几部分组成:

  • 数字证书认证中心CA:可信的运营PKI的第三方,负责发型证书,跟踪过期的或无效的证书。
  • 数字证书注册审批机构RA:为CA验证证书的内容。
  • 存储库:用户可用的证书数据库。
  • 归档库:证书的状态信息归档库。

遵循X.509国际标准的证书内容:

  • 证书格式版本号
  • 证书唯一序列号
  • 签名算法域:用于指示CA使用的签名算法和公钥加密算法。
  • 证书发行机构名
  • 有效期
  • 用户名称
  • 用户的公钥内容和公钥算法

猜你喜欢

转载自blog.csdn.net/weixin_43249758/article/details/123818527
今日推荐