NipGeihou's blog NipGeihou's blog
  • Java

    • 开发规范
    • 进阶笔记
    • 微服务
    • 快速开始
    • 设计模式
  • 其他

    • Golang
    • Python
    • Drat
  • Redis
  • MongoDB
  • 数据结构与算法
  • 计算机网络
  • 应用

    • Grafana
    • Prometheus
  • 容器与编排

    • KubeSphere
    • Kubernetes
    • Docker Compose
    • Docker
  • 组网

    • TailScale
    • WireGuard
  • 密码生成器
  • 英文单词生成器
🍳烹饪
🧑‍💻关于
  • 分类
  • 标签
  • 归档

NipGeihou

我见青山多妩媚,料青山见我应如是
  • Java

    • 开发规范
    • 进阶笔记
    • 微服务
    • 快速开始
    • 设计模式
  • 其他

    • Golang
    • Python
    • Drat
  • Redis
  • MongoDB
  • 数据结构与算法
  • 计算机网络
  • 应用

    • Grafana
    • Prometheus
  • 容器与编排

    • KubeSphere
    • Kubernetes
    • Docker Compose
    • Docker
  • 组网

    • TailScale
    • WireGuard
  • 密码生成器
  • 英文单词生成器
🍳烹饪
🧑‍💻关于
  • 分类
  • 标签
  • 归档
  • 数据结构与算法

    • 树
    • 图
    • 查找
    • 排序
    • 安全算法
      • 摘要算法
        • MD5
        • SHA1
        • 国密SM3
      • 对称加密算法
        • DES
        • IDEA
        • 国密SM1
        • 国密SM4
      • 非对称加密算法
        • RSA
        • 国密SM2
      • 参考资料
  • 操作系统

  • 计算机网络

  • 软件工程

  • 现代密码学

  • 电路原理

  • 计算机科学与技术
  • 数据结构与算法
NipGeihou
2022-08-08
目录

安全算法

# 摘要算法

  • 加密过程不需要密钥,并且经过加密的数据无法被解密
  • 无论输入的消息有多长,计算出来的消息摘要的长度总是固定的
  • 相同的信息求摘要结果相同

# MD5

简介

MD5 的作用是让大容量信息在用数字签名软件签署私人密钥前被 "压缩" 成一种保密的格式 (也就是把一个任意长度的字节串变换成一定长的十六进制数字串)。

特点

  1. 压缩性:任意长度的数据,算出的 MD5 值长度都是固定的。
  2. 容易计算:从原数据计算出 MD5 值很容易。
  3. 抗修改性:对原数据进行任何改动,哪怕只修改 1 个字节,所得到的 MD5 值都有很大区别。
  4. 强抗碰撞:已知原数据和其 MD5 值,想找到一个具有相同 MD5 值的数据 (即伪造数据) 是非常困难的。

# SHA1

简介

对于长度小于 2^64 位的消息,SHA1 会产生一个 160 位 (40 个字符) 的消息摘要。当接收到消息的时候,这个消息摘要可以用来验证数据的完整性。在传输的过程中,数据很可能会发生变化,那么这时候就会产生不同的消息摘要。

特点

  1. 不可以从消息摘要中复原信息;

  2. 两个不同的消息不会产生同样的消息摘要,(但会有 1x10 ^ 48 分之一的机率出现相同的消息摘要,一般使用时忽略)。

# 国密 SM3

可以用 MD5 作为对比理解。该算法已公开。校验结果为 256 位。

数字签名

数字签名主要用到了非对称密钥加密技术与数字摘要技术。

数字签名技术是将摘要信息用发送者的私钥加密,与原文一起传送给接收者。接收者只有用发送者的公钥才能解密被加密的摘要信息,然后用 HASH 函数对收到的原文产生一个摘要信息,与解密的摘要信息对比。 如果相同,则说明收到的信息是完整的,在传输过程中没有被修改,否则说明信息被修改过.

因此数字签名能够验证信息的完整性。 数字签名是个加密的过程,数字签名验证是个解密的过程。

# 对称加密算法

加密密钥和解密密钥相同的加密算法

# DES (opens new window)

DES 全称为 Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法,现在已经过时。

DES 加密算法出自 IBM 的研究,后来被美国政府正式采用,之后开始广泛流传,但是近些年使用越来越少,因为 DES 使用 56 位密钥,以现代计算能力,24 小时内即可被破解。虽然如此,在某些简单应用中,我们还是可以使用 DES 加密算法,注意: DES 加密和解密过程中,密钥长度都必须是 8 的倍数。

# IDEA (opens new window)

这种算法是在 DES 算法的基础上发展出来的,类似于三重 DES。

发展 IDEA 也是因为感到 DES 具有密钥太短等缺点。

IDEA 的密钥为 128 位,这么长的密钥在今后若干年内应该是安全的。

在实际项目中用到的很少,了解即可。

# 国密 SM1

加密强度与 AES 相当。该算法不公开,调用该算法时,需要通过加密芯片的接口进行调用。

# 国密 SM4

Hutool 国密算法工具 - SmUtil (opens new window) 使用 SM4 作为国密对称加密算法

此算法是一个分组算法,用于无线局域网产品。该算法的分组长度为 128 比特,密钥长度为 128 比特。加密算法与密钥扩展算法都采用 32 轮非线性迭代结构。解密算法与加密算法的结构相同,只是轮密钥的使用顺序相反,解密轮密钥是加密轮密钥的逆序。

# 非对称加密算法

与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥 (publickey) 和私有密钥 (privatekey)。

公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;

如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。

因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。

# RSA

RSA 是目前最有影响力和最常用的公钥加密算法。它能够抵抗到目前为止已知的绝大多数密码攻击,已被 ISO 推荐为公钥数据加密标准。

# 国密 SM2

基于 ECC。该算法已公开。由于该算法基于 ECC,故其签名速度与秘钥生成速度都快于 RSA。ECC 256 位(SM2 采用的就是 ECC 256 位的一种)安全强度比 RSA 2048 位高,但运算速度快于 RSA。

SM2 椭圆曲线公钥密码算法是我国自主设计的公钥密码算法,包括 SM2-1 椭圆曲线数字签名算法,SM2-2 椭圆曲线密钥交换协议,SM2-3 椭圆曲线公钥加密算法,分别用于实现数字签名密钥协商和数据加密等功能。SM2 算法与 RSA 算法不同的是,SM2 算法是基于椭圆曲线上点群离散对数难题,相对于 RSA 算法,256 位的 SM2 密码强度已经比 2048 位的 RSA 密码强度要高。

SM2 公钥加密算法比 RSA 相对复杂,加密结果由 3 个部分组成,SM2 加密过程中使用了随机数,因此同样的明文数据每一次加密结果都不一样。但是这并不能防御重放攻击,如果要防御重放攻击,需要服务端提供加密因子,通过 SM2SM4 混合算法来抵御重放攻击。

# 参考资料

  1. 安全算法 - 摘要算法 | Java 全栈知识体系 (opens new window)
上次更新: 2022/10/17, 00:29:57
排序
操作系统的概念

← 排序 操作系统的概念→

最近更新
01
iSCSI服务搭建
05-10
02
磁盘管理与文件系统
05-02
03
网络测试 - iperf3
05-02
更多文章>
Theme by Vdoing | Copyright © 2018-2025 NipGeihou | 友情链接
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式