加密算法科普

前言

首先,欢迎你来阅读这些未知领域的知识,在前后端开发过程中,数字签名、信息加密、等需要经常使用,以保障信息的安全性。一般都包括了用户登录、信息通讯、交易、oauth 等不同应用场景,不同场景下也需要不同的加密算法,有些还会使用不同的数字签名算法。

接下来,我将为你们进一步解释,提醒:过程中可能很枯燥,做好准备。

常用术语

明文(Plaintext):加密前的文字(或者字符串)

密文(Ciphertext):加了密的的文字(或者字符串)

加密(Encryption):将明文转换为密文的过程

解密(Decryption):将密文转换为明文的过程

数字签名(Digital Signature):只有信息的发送者才能产生的别人无法伪造的一段数字串

对称加密(Symmetrical Encryption):同一个密钥可以同时用作信息的加密和解密

非对称加密(Asymmetric Encryption):需要两个密钥(公钥和私钥)来进行加密和解密

常见的签名加密算法

MD5算法

SHA1算法

HMAC算法

DES算法

3DES算法

AES算法

RSA算法

ECC算法

明文 (Plaintext)

在通信系统中它可能是比特流,如文本、位图、数字化的语音或者数字化的视频图像等。一般可以简单地认为明文是有意义的字符或比特集,或通过某种公开的编码标准就能获得的消息。经过某个加密算法进行作用,将作用后的文字称为密文。对密文来说,若想得到明文,就应通过与加密算法对应的解密算法进行解密,恢复出明文。

密文 (Ciphertext)

密文是加了密的的文字,明文是加密之前的文字。对明文施加某种伪装或变换后的输出。也可理解为不可直接理解的字符或比特集。但可通过算法还原的被打乱的消息,与明文相对。

密文是由密码系统产生的报文和信号。 如果不经过码文接收者指示进行码文变换,即解密,他人无法理解,其目的是保证所发信息的机密性。但随着科学技术的发展,当人们对加密步数、加密操作和加密过程进行分析,对上述三个方面清楚之后,就可以在不知道密钥的情况下,仍可将密文转换成明文。

加密 (Encryption)

是以某种特殊的算法改变原有的信息数据,使得未授权的用户即使获得了已加密的信息,但因不知解密的方法,仍然无法了解信息的内容。

加密之所以安全,绝非因不知道加密解密算法方法,而是加密的密钥是绝对的隐藏,流行的RSA和AES加密算法都是完全公开的,一方取得已加密的数据,就算知道加密算法也好,若没有加密的密钥,也不能打开被加密保护的信息。单单隐蔽加密算法以保护信息,在学界和业界已有相当讨论,一般认为是不够安全的。公开的加密算法是给黑客和加密家长年累月攻击测试,对比隐蔽的加密算法要安全得多。

在密码学中,加密是将明文信息隐匿起来,使之在缺少特殊信息时不可读。虽然加密作为通信保密的手段已经存在了几个世纪,但是,只有那些对安全要求特别高的组织和个人才会使用它。在20世纪70年代中期,强加密(Strong Encryption) 的使用开始从政府保密机构延伸至公共领域, 并且目 前已经成为保护许多广泛使用系统的方法,比如因特网电子商务、手机网络和银行自动取款机等。

加密可以用于保证安全性, 但是其它一些技术在保障通信安全方面仍然是必须的,尤其是关于数据完整性和信息验证;例如,信息验证码(MAC)或者数字签名。另一方面的考虑是为了应付流量分析。

加密或软件编码隐匿(Code Obfuscation)同时也在软件版权保护中用于对付反向工程,未授权的程序分析,破解和软件盗版及数位内容的数位版权管理 (DRM)等。

尽管加密或为了安全目的对信息解码这个概念十分简单,但在这里仍需对其进行解释。数据加密的基本过程包括对称为明文的原来可读信息进行翻译,译成称为密文或密码的代码形式。该过程的逆过程为解密,即将该编码信息转化为其原来的形式的过程。

解密 (Decryption)

出于信息保密的目的,在信息传输或存储中,采用密码技术对需要保密的信息进行处理,使得处理后的信息不能被非受权者(含非法者)读懂或解读,这一过程称为加密。在加密处理过程中,需要保密的信息称为“明文”,经加密处理后的信息称为“密文”。加密即是将“明文”变为“密文”的过程;与此类似,将“密文”变为“明文”的过程被称为解密。

数字签名(Digital Signature)

主要功能为保证信息传输的完整性、发送者的身份认证、防止交易中的抵赖发生。

数字签名,简单来说就是通过提供可鉴别的数字信息验证自身身份的一种方式。一套数字签名通常定义两种互补的运算,一个用于签名,另一个用于验证。分别由发送者持有能够代表自己身份的私钥(私钥不可泄露),由接受者持有与私钥对应的公钥 ,能够在接收到来自发送者信息时用于验证其身份。

数字签名的文件的完整性是很容易验证的(不需要骑缝章,骑缝签名,也不需要笔迹专家),而且数字签名具有不可抵赖性(不可否认性)。

简单地说,所谓数字签名就是附加在数据单元上的一些数据,或是对数据单元所作的密码变换。这种数据或变换允许数据单元的接收者用以确认数据单元的来源和数据单元的完整性并保护数据,防止被人(例如接收者)进行伪造。它是对电子形式的消息进行签名的一种方法,一个签名消息能在一个通信网络中传输。基于公钥密码体制和私钥密码体制都可以获得数字签名,主要是基于公钥密码体制的数字签名。包括普通数字签名和特殊数字签名。普通数字签名算法有RSA、ElGamal、Fiat-Shamir、Guillou- Quisquarter、Schnorr、Ong-Schnorr-Shamir数字签名算法、Des/DSA,椭圆曲线数字签名算法和有限自动机数字签名算法等。特殊数字签名有盲签名、代理签名、群签名、不可否认签名、公平盲签名、门限签名、具有消息恢复功能的签名等,它与具体应用环境密切相关。显然,数字签名的应用涉及到法律问题,美国联邦政府基于有限域上的离散对数问题制定了自己的数字签名标准(DSS)。

对称加密 (Symmetrical Encryption)

对称加密算法是应用较早的加密算法,又称为共享密钥加密算法。在对称加密算法中,使用的密钥只有一个,发送和接收双方都使用这个密钥对数据进行加密和解密。这就要求加密和解密方事先都必须知道加密的密钥。

数据加密过程:在对称加密算法中,数据发送方将明文(原始数据)和加密密钥一起经过特殊加密处理,生成复杂的加密密文进行发送。

数据解密过程:数据接收方收到密文后,若想读取原数据,则需要使用加密使用的密钥及相同算法的逆算法对加密的密文进行解密,才能使其恢复成可读明文。

所谓对称,就是采用这种加密方法的双方使用方式用同样的密钥进行加密和解密。密钥是控制加密及解密过程的指令。算法是一组规则,规定如何进行加密和解密。

因此加密的安全性不仅取决于加密算法本身,密钥管理的安全性更是重要。因为加密和解密都使用同一个密钥,如何把密钥安全地传递到解密者手上就成了必须要解决的问题。

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

非对称加密 (Asymmetric Encryption)

非对称加密算法,又称为公开密钥加密算法。它需要两个密钥,一个称为公开密钥(publickey),即公钥,另一个称为私有密钥(privatekey),即私钥

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

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

非对称加密算法的特点是算法强度复杂,其安全性依赖于算法与密钥。由于其算法复杂,而使得加密解密的速度远远低于对称加密算法,因此不适用于数据量较大的情况。由于非对称加密算法有两种密钥,其中一个是公开的,所以在密钥传输上不存在安全性问题,使得其在传输加密数据的安全性上又高于对称加密算法。

举例:如果使用公钥对数据进行加密,只有用对应的私钥才能进行解密。如果使用私钥对数据进行加密,只有用对应的公钥才能进行解密。

加密算法分类

加密算法分为对称加密算法和非对称加密算法。

对称加密算法(Symmetric Cipher):也称为单钥密码算法私钥密码算法,指加密密钥和解密密钥相同,即加密过程与解密过程使用同一套密钥。常见的DES、AES算法都是对称密码算法的典范。

非对称加密算法(Asymmetric Cipher):也称为双钥密码算法公钥密码算法,指加密密钥与解密密钥不同,密钥分为公钥与私钥,公钥对外公开,私钥对外保密。比如RSA算法。

MD5算法

MD5用的是哈希函数,它的典型应用是对一段信息产生信息摘要,以防止被篡改。严格来说,MD5不是一种加密算法而是摘要算法。无论是多长的输入,MD5都会输出长度为128bits的一个串(通常用16进制表示为32个字符)。

SHA1算法

SHA1是和MD5一样流行的消息摘要算法,然而SHA1比MD5的安全性更强。对于长度小于2^64位的消息,SHA1会产生一个160位的消息摘要。基于MD5、SHA1的信息摘要特性以及不可逆(一般而言),可以被应用在检查文件完整性以及数字签名等场景。

HMAC算法

HMAC是密钥相关的哈希运算消息认证码(Hash-basedMessageAuthenticationCode),HMAC运算利用哈希算法(MD5、SHA1等),以一个密钥和一个消息为输入,生成一个消息摘要作为输出。

HMAC发送方和接收方都有的key进行计算,而没有这把key的第三方,则是无法计算出正确的散列值的,这样就可以防止数据被篡改。

AES/DES/3DES算法

AES、DES、3DES都是对称的块加密算法,加解密的过程是可逆的。常用的有AES128、AES192、AES256

DES算法

DES加密算法是一种分组密码,以64位为分组对数据加密,它的密钥长度是56位,加密解密用同一算法。

DES加密算法是对密钥进行保密,而公开算法,包括加密和解密算法。这样,只有掌握了和发送方相同密钥的人才能解读由DES加密算法加密的密文数据。因此,破译DES加密算法实际上就是搜索密钥的编码。对于56位长度的密钥来说,如果用穷举法来进行搜索的话,其运算次数为2^56次。

3DES算法

是基于DES的对称算法,对一块数据用三个不同的密钥进行三次加密,强度更高。

AES算法

AES加密算法是密码学中的高级加密标准,该加密算法采用对称分组密码体制,密钥长度的最少支持为128位、192位、256位,分组长度128位,算法应易于各种硬件和软件实现。这种加密算法是美国联邦政府采用的区块加密标准。

AES本身就是为了取代DES的,AES具有更好的安全性、效率和灵活性。

RSA算法

RSA加密算法是目前最有影响力的公钥加密算法,并且被普遍认为是目前最优秀的公钥方案之一。RSA是第一个能同时用于加密和数字签名的算法,它能够抵抗到目前为止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准。

RSA加密算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。

ECC算法

ECC也是一种非对称加密算法,主要优势是在某些情况下,它比其他的方法使用更小的密钥,比如RSA加密算法,提供相当的或更高等级的安全级别。不过一个缺点是加密和解密操作的实现比其他机制时间长(相比RSA算法,该算法对CPU消耗严重)。

END