非对称加密和混合密码系统

简介

非对称加密算法的特点是,密钥分为加密密钥和解密密钥,并且这两个密钥是不一样的(非对称)。发送者用加密密钥对消息进行加密,接受者用解密密钥对密文进行解密。

一般情况下:

  • 加密密钥是公开的,称为公钥
  • 解密密钥是私有的,称为私钥

一次使用非对称加密通信的流程

假设A是发送者,B是接收者。

  1. B生成一个密钥对(公钥+私钥)。私钥由B自行妥善保管
  2. B将自己的公钥发送给A。公钥是公开的,无需保密
  3. A用B的公钥对消息进行加密。加密后的消息只有B的私钥能解密。
  4. A将密文发送给B。
  5. B用自己的私钥对密文进行解密。

RSA

  • RSA是目前最常用的非对称加密算法。在RSA中,明文、密钥和密文都是数字(很大的数字)。下面对RSA进行简单介绍,跟多原理和细节请自行网上搜索参考。
  • RSA的密文是对代表明文的数字的E次方求mod N的结果:密文=明文^E mod N
  • RSA解密就是密文的数字D次方求mod N就可以得到明文:明文=密文^D mode N
  • E和N是RSA加密的密钥,E和N的组合就是公钥
  • D和N是RSA解密的密钥,D和N的组合就是密钥
  • 生成RSA算法的密钥对(E、D、N):
  1. 求N
    • 准备两个很大(比如512比特)的质数p和q
    • N = p * q
  2. 求L(L是个中间数值)
    • L是p-1和q-1的最小公倍数
  3. 求E
    • 1 < E < L
    • E与L的最大公约数为1
  4. 求D
    • 1 < D < L
    • E * D mod L = 1

非对称加密存在的问题

  • 中间人攻击,公钥是公开的,怎么确定密文来自所期望的对象。
  • 计算速度慢,只有对称加密算法的几百分之一。

下面介绍混合加密系统,用于解决计算速度慢的问题。

混合密码系统

混合密码系统结合了非对称加密算法和对称加密算法的优势:

  • 利用非对称加密算法的“非对称性”,解决对称密钥的传递问题。
  • 利用对称加密算法的加解密速度,解决非对称加解密的速度问题。

混合密码系统的加密

混合加密

  1. 发送者利用一个随机数生成器生成一个对称加密算法的会话密钥。
  2. 使用会话密钥加密会话消息,得到会话消息密文(对称加密)。
  3. 使用接受者的公钥加密会话密钥,得到会话密钥密文(非对称加密)。 4.组合会话密钥密文和会话消息密文。

混合密码系统的解密

混合解密

  1. 分离密文,等到会话密钥密文和会话消息密文。
  2. 用私钥解密会话密钥密文,得到会话密钥(非对称加密)。
  3. 用会话密钥解密会话消息密文,得到会话消息(对称加密)。

参考

  • 维基百科
  • 《图解密码学》

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏区块链

解惑数据加解密

身份认证可以让接收方确认收到的数据来自正确的发送方,但数据在经过中间节点的时候(或者在无线信道下并不需要经过中间节点,只要能够收到信号)可能会被偷听者收到,由于...

20610
来自专栏技术博文

经典加密解密函数

<?php /** * 加密解密函数 * @param string $string 明文 或 密文 * @param string $oper...

29610
来自专栏喵了个咪的博客空间

[Golang软件推荐] RSA公私钥加解密(解决Golang私钥加密公钥解密问题)

安全是软件开始中很重要的一个环节,在金融场景以及设计资产的场景下更是如此,在加密算法中主要使用较多加密方式分别是对称加密和非对称加密,对称加密中的代表是AES,...

6574
来自专栏白驹过隙

OpenSSL - 网络安全之数据加密和数字证书

38014
来自专栏技术碎碎念

HTTPS握手

作用 内容加密 建立一个信息安全通道,来保证数据传输的安全; 身份认证 确认网站的真实性 数据完整性 防止内容被第三方冒充或者篡改 https的采用了对称加密和...

3307
来自专栏Python疯子

iOS加密方式:RSA DES MD5

DES:对称加密(服务器和客户端公用同一个秘钥),缺点:一旦被抓包破解了秘钥,就能破解所有的传递信息

1242
来自专栏PHP在线

收藏一个简洁的PHP可逆加密函数

很多时候我们需要对数据进行加密解密,比如有些数据需要保存到cookie中,但又不能被用户轻易得到这些数据,这时我们就需要加密这些数据保存到cookie中,等我们...

3804
来自专栏Java架构师历程

pad block corrupted

Security.addProvider(new com.sun.crypto.provider.SunJCE()); ...

8771
来自专栏草根专栏

ASP.NET Core Web API 与 SSL

1693
来自专栏iOS 开发杂谈

HTTPS 之原理

HTTPS 在传输数据之前需要客户端与服务端之间进行一次握手,在握手过程中将确立双方加密传输数据的密码信息。TLS/SSL 协议是一套加密传输的协议,使用了非对...

2316

扫码关注云+社区

领取腾讯云代金券