【算法】加解密算法概要

关于网络通信、设备交互等计算机通信场景中的常用加解密算法概要。

加密算法类型

对称加密

加密、解密用的是同样的密钥,通常密钥较小256bit。

最快速、最简单的一种加密方式。

效率高,被广泛使用在很多加密协议的核心中。

在对称加密算法中常用的算法有:DES、TDEA /3DES、AES、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK等。

非对称加密

为数据的加密、解密提供了一对密钥,公钥(PK)、私钥(SK)。

在加密过程中,发送方利用接收方的公钥进行加密,接收方利用自己的私钥进行解密;

在认证过程中,发送方利用自己的私钥进行签名,接收方利用发送方的公钥进行验签。

在非对称加密算法中常用的算法有:RSA、ECC(椭圆曲线加密算法)、Elgamal、背包算法、Rabin、D-H。

具体算法

常见的对称加密算法

DES

DES是Data Encryption Standard(数据加密标准)。

分组加密算法,典型的DES以64位为分组对数据加密,加密和解密用的是同一个算法;

密钥长64位,实际上56位参与DES运算(第8、16、24、32、40、48、56、64位是校验位,使得每个密钥都有奇数个1);

分组后的明文组 和 56位的密钥 按位替换或交换的方法形成密文组。

TDES/3DES

Triple DES的缩语(即三重数据加密标准)。

TDES/3DES是DES加密算法的一种模式,它使用3条64位的密钥对数据进行三次加密。

AES

高级加密标准(英语:Advanced Encryption Standard,缩写:AES),2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。

AES的基本要求是,采用对称分组密码体制,密钥的长度最少支持为128、192、256,分组长度128位,算法应易于各种硬件和软件实现。

AES加密数据块分组长度必须为128bit,密钥长度可以是128bit、192bit、256bit中的任意一个(如果数据块及密钥长度不足时,会补齐)。

AES加密有很多轮的重复和变换。大致步骤如下:

  1. 密钥扩展(KeyExpansion),

  2. 初始轮(Initial Round),

  3. 重复轮(Rounds),每一轮又包括:SubBytes、ShiftRows、MixColumns、AddRoundKey,

  4. 最终轮(Final Round),最终轮没有MixColumns。

RC4

RC4(Rivest Cipher 4)是一种流加密算法,对字节流进行加解密,它的密钥长度范围在[1,255]可变。

其算法的核心是“随机数生成器”+“异或运算”组组成。初始化密钥时,给定一个密钥后,伪随机数生成器接受密钥并构造生成出S盒;在加解密时,利用S-Box对明文数据进行逐字节加密。

常见的非对称加密算法

RSA算法

RSA是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的,因此命名RSA。

公钥加密算法,通常是先生成一对RSA密钥,公钥(PK)、私钥(SK),SK取决于PK,

  1. 模数N 和 PK用于对数据进行加密,加密算法E;

  2. 模数N 和 SK用于对数据进行解密,解密算法D;

通信双方各自秘密保留各自的私钥,并且得到对方的公钥就可以进行通信。

加密通信中,PK加密,SK解密

签名交易中,SK签名,PK验签。

ECC(椭圆曲线加密算法)

ECC是Elliptic curve cryptography(椭圆曲线加密算法)。

Elgamal

ElGamal算法,是一种较为常见的加密算法,它是基于1985年提出的公钥密码体制和椭圆曲线加密体系。既能用于数据加密也能用于数字签名,其安全性依赖于计算有限域上离散对数这一难题。

在加密过程中,生成的密文长度是明文的两倍,且每次加密后都会在密文中生成一个随机数K,在密码中主要应用离散对数问题的几个性质:求解离散对数(可能)是困难的,而其逆运算指数运算可以应用平方-乘的方法有效地计算。

背包算法

这是一个非对称算法,即可生成多个不同的公钥,分发给其他人,然后其他人用各自的公钥加密文件,而算法只生成一个私钥(自己保存),这私钥可解密不同公钥加密的文件。在不知道私钥的前提下,破解文件是一个NP难问题。


杂凑/摘要的基本定义

Hash

散列算法,把任意长度的输入,变换成固定长度(128bit,即16Byte)的输出,该输出就是散列值。并且不可逆向解析原本输入的内容。

Hash就是找到一种数据内容和数据存放地址之间的映射关系。

SHA

安全散列算法(英语:Secure Hash Algorithm,缩写为SHA)是一个密码散列函数家族,是FIPS所认证的安全散列算法。能计算出一个数字消息所对应到的,长度固定的字符串(又称消息摘要)的算法。

且若输入的消息不同,它们对应到不同字符串的机率很高。

SHA家族的五个算法,分别是SHA-1、SHA-224、SHA-256、SHA-384,和SHA-512。

杂凑/摘要的实际算法

HASH的实际算法

MD4(HASH算法)

是一种用来测试信息完整性的密码散列函数的实行。其摘要长度为128位,一般128位长的MD4散列被表示为32位的十六进制数字。

MD5(HASH算法)

对输入以512位分组,输出是4个32位字的级联,与MD4相同。

不可逆的加密算法,最牢靠之一,对任何字符串都可以加密成一段唯一的固定长度的代码。

一般认为MD5码可以唯一地代表原信息的特征,通常用于密码的加密存储、数字签名、文件完整性验证。

MAC算法

MAC算法 (Message Authentication Codes) 带秘密密钥的Hash函数:消息的散列值由只有通信双方知道的秘密密钥K来控制。此时Hash值称作MAC。

MAC算法原理(以直联银联pos和POS中心通讯为例):

  1.  将欲发送给POS中心的消息中,从消息类型(MTI)到63域之间的部分构成MAC ELEMEMENT BLOCK (MAB)。

  2. 对MAB,按每8个字节做异或(不管信息中的字符格式),如果最后不满8个字节,则添加“0X00”。

SHA的实际算法

SHA

安全哈希算法,可以对任意长度的数据运算生成一个160位的数值;

SHA-1

生成20Byte的哈希结果。

在SHA1算法中,我们必须把原始消息(字符串,文件等)转换成位字符串。SHA1算法只接受位作为输入。

SHA-256

生成32Byte的哈希结果。


总结

所有算法的研究和设计,离不开数学的知识。

欲善其事,先利其器!对于普通开发者,了解相关的算法介绍、使用场景、使用的业务逻辑,若要深入研究算法的设计,仍需要下大工夫!

更多技术干货分享,敬请关注微信公众号:DigCore

或者扫码关注公众号

猜你喜欢

转载自blog.csdn.net/DigCore/article/details/82818407