对称密钥加密
对称密钥加密 Symmetric Key Algorithm 又称为对称加密、私钥加密、共享密钥加密:这类算法在加密和解密时使用相同的密钥,或是使用两个可以简单的相互推算的密钥,对称加密的速度一般都很快。
分组密码
分组密码 Block Cipher 又称为“分块加密”或“块加密”,将明文分成多个等长的模块,使用确定的算法和对称密钥对每组分别加密解密。这也就意味着分组密码的一个优点在于可以实现同步加密,因为各分组间可以相对独立。
与此相对应的是流密码:利用密钥由密钥流发生器产生密钥流,对明文串进行加密。与分组密码的不同之处在于加密输出的结果不仅与单独明文相关,而是与一组明文相关。
DES、3DES
数据加密标准 DES Data Encryption Standard 是由IBM在美国国家安全局NSA授权下研制的一种使用56位密钥的分组密码算法,并于1977年被美国国家标准局NBS公布成为美国商用加密标准。但是因为DES固定的密钥长度,渐渐不再符合在开放式网络中的安全要求,已经于1998年被移出商用加密标准,被更安全的AES标准替代。
DES使用的Feistel Network网络属于对称的密码结构,对信息的加密和解密的过程极为相似或趋同,使得相应的编码量和线路传输的要求也减半。
DES是块加密算法,将消息分成64位,即16个十六进制数为一组进行加密,加密后返回相同大小的密码块,这样,从数学上来说,64位0或1组合,就有2^64种可能排列。DES密钥的长度同样为64位,但在加密算法中,每逢第8位,相应位会被用于奇偶校验而被算法丢弃,所以DES的密钥强度实为56位。
3DES Triple DES,使用不同Key重复三次DES加密,加密强度更高,当然速度也就相应的降低。
AES
高级加密标准 AES Advanced Encryption Standard 为新一代数据加密标准,速度快,安全级别高。由美国国家标准技术研究所NIST选取Rijndael于2000年成为新一代的数据加密标准。
AES的区块长度固定为128位,密钥长度可以是128位、192位或256位。AES算法基于Substitution Permutation Network代换置列网络,将明文块和密钥块作为输入,并通过交错的若干轮代换"Substitution"和置换"Permutation"操作产生密文块。
AES加密过程是在一个4*4的字节矩阵(或称为体State)上运作,初始值为一个明文区块,其中一个元素大小就是明文区块中的一个Byte,加密时,基本上各轮加密循环均包含这四个步骤:
ECC
ECC即 Elliptic Curve Cryptography 椭圆曲线密码学,是基于椭圆曲线数学建立公开密钥加密的算法。ECC的主要优势是在提供相当的安全等级情况下,密钥长度更小。
ECC的原理是根据有限域上的椭圆曲线上的点群中的离散对数问题ECDLP,而ECDLP是比因式分解问题更难的问题,是指数级的难度。而ECDLP定义为:给定素数p和椭圆曲线E,对Q=kP,在已知P,Q 的情况下求出小于p的正整数k。可以证明由k和P计算Q比较容易,而由Q和P计算k则比较困难。
数字签名
数字签名 Digital Signature 又称公钥数字签名是一种用来确保数字消息或文档真实性的数学方案。一个有效的数字签名需要给接收者充足的理由来信任消息的可靠来源,而发送者也无法否认这个签名,并且这个消息在传输过程中确保没有发生变动。
数字签名的原理在于利用公钥加密技术,签名者将消息用私钥加密,然后公布公钥,验证者就使用这个公钥将加密信息解密并对比消息。一般而言,会使用消息的散列值来作为签名对象。
2. 常见密码技术简介
##
密码技术在网络传输安全上的应用
随着互联网电子商务和网络支付的飞速发展,互联网安全已经是当前最重要的因素之一。作为一名合格的软件开发工程师,有必要了解整个互联网是如何来保证数据的安全传输的,本篇文章对网络传输安全体系以及涉及到的算法知识做了一个简要的介绍,希望大家能够有一个初步的了解。
###密码技术定义
简单的理解,密码技术就是编制密码和破译密码的一门技术,也即是我们常说的加密和解密。常见的结构如图:
其中涉及到的专业术语:
1.秘钥:分为加密秘钥和解密秘钥,两者相同的加密算法称为对称加密,不同的称为非对称加密;
2.明文:未加密过的原文信息,不可以被泄露;
3.密文:经过加密处理后的信息,无法从中获取有效的明文信息;
4.加密:明文转成密文的过程,密文的长度根据不同的加密算法也会有不同的增量;
5.解密:密文转成明文的过程;
6.加密/解密算法:密码系统使用的加密方法和解密方法;
7.攻击:通过截获数据流、钓鱼、木马、穷举等方式最终获取秘钥和明文的手段。
###密码技术和我们的工作生活息息相关
在我们的日常生活和工作中,密码技术的应用随处可见,尤其是在互联网系统上。下面列举几张比较有代表性的图片,所涉及到的知识点后面都会一一讲解到。
1.12306旧版网站每次访问时,浏览器一般会提示一个警告,是什么原因导致的? 这样有什么风险呢?
2.360浏览器浏览HTTPS网站时,点开地址栏的小锁图标会显示加密的详细信息,比如网络的话会显示```AES_128_GCM、ECDHE_RSA```,这些是什么意思?
3.在Mac系统的钥匙串里有很多的系统根证书,展开后有非常多的信息,这些是做什么用的?
4.去银行开通网上支付都会附赠一个U盾,那U盾有什么用呢?
##如何确保网络数据的传输安全
接下来我们从实际场景出发,以最常见的客户端Client和服务端Server传输文件为例来一步步了解整个安全体系。
####1. 保密性
首先客户端要把文件送到服务端,不能以明文形式发送,否则被黑客截获了数据流很容易就获取到了整个文件。也就是文件必须要确保保密性,这就需要用到对称加密算法。
** 对称加密: **加密和解密所使用的秘钥相同称为对称加密。其特点是速度快、效率高,适用于对较大量的数据进行加密。常见的对称加密算法有DES、3DES、AES、TDEA、RC5等,让我们了解下最常见的3DES和AES算法:
** DES(Data Encryption Standard): **1972年由美国IBM研制,数学原理是将明文以8字节分组(不足8位可以有不同模式的填充补位),通过数学置换和逆置换得到加密结果,密文和明文长度基本相同。秘钥长度为8个字节,后有了更安全的一个变形,使用3条秘钥进行三次加密,也就是3DES加密。
**3DES:**可以理解为对明文进行了三次DES加密,增强了安全程度。
** AES(Advanced Encryption Standard): **2001年由美国发布,2002年成为有效标准,2006年成为最流行的对称加密算法之一。由于安全程度更高,正在逐步替代3DES算法。其明文分组长度为16字节,秘钥长度可以为16、24、32(128、192、256位)字节,根据秘钥长度,算法被称为AES-128、AES-192和AES-256。
对称加密算法的入参基本类似,都是明文、秘钥和模式三个参数。可以通过网站进行模拟测试:[http://tool.chacuo.net/crypt3des]()。其中的模式我们主要了解下ECB和CBC两种简单模式,其它有兴趣可自行查阅。
** ECB模式(Electronic Codebook Book): **这种模式是将明文分成若干小段,然后对每一段进行单独的加密,每一段之间不受影响,可以单独的对某几段密文进行解密。
** CBC模式(Cipher Block Chaining): **这种模式是将明文分成若干小段,然后每一段都会和初始向量(上图的iv偏移量)或者上一段的密文进行异或运算后再进行加密,不可以单独解密某一断密文。
** 填充补位: **常用为PKCS5Padding,规则为缺几位就在后面补几位的所缺位数。,比如明文数据为```/x01/x01/x01/x01/x01/x01```6个字节,缺2位补```/x02```,补完位```/x01/x01/x01/x01/x01/x01/x02/x02```。解密后也会按照这个规则进行逆处理。需要注意的是:明文为8位时也需要在后面补充8个```/x08```。
####2. 真实性
客户端有了对称秘钥,就需要考虑如何将秘钥送到服务端,问题跟上面一样:不能以明文形式直接传输,否则还是会被黑客截获到。这里就需要用到非对称加密算法。
** 非对称加密: **加密和解密秘钥不同,分别称为公开秘钥(publicKey)和私有秘钥(privateKey)。两者成对出现,公钥加密只能用私钥解密,而私钥加密也只能用公钥加密。两者不同的是:公钥是公开的,可以随意提供给任何人,而私钥必须保密。特点是保密性好,但是加密速度慢。常见的非对称加密算法有RSA、ECC等;我们了解下常见的RSA算法:
** RSA(Ron Rivest、Adi Shamir、Leonard Adleman): **1977年由麻省理工学院三人提出,RSA就是他们三个人的姓氏开头字母拼在一起组成的。数学原理是基于大数分解。类似于```100=20x5```,如果只知道100的话,需要多次计算才可以试出20和5两个因子。如果100改为极大的一个数,就非常难去试出真正的结果了。下面是随机生成的一对公私钥:
这是使用公钥加密后结果:
RSA的这种特性就可以保证私钥持有者的真实性,客户端使用公钥加密文件后,黑客就算截获到数据因为没有私钥也是无法解密的。
** Tips: **
+** 不使用对称加密,直接用RSA公私钥进行加密和解密可以吗? **
答案:不可以,第一是因为RSA加密速度比对称加密要慢几十倍甚至几百倍以上,第二是因为RSA加密后的数据量会变大很多。
+** 由服务端生成对称秘钥,然后用私钥加密,客户端用公钥解密这样来保证对称秘钥安全可行吗? **
答案:不可行,因为公钥是公开的,任何一个人都可以拿到公钥解密获取对称秘钥。
####3. 完整性
当客户端向服务端发送对称秘钥加密后的文件时,如果被黑客截获,虽然无法解密得到对称秘钥。但是黑客可以用服务端公钥加密一个假的对称秘钥,并用假的对称秘钥加密一份假文件发给服务端,这样服务端会仍然认为是真的客户端发送来的,而并不知道阅读的文件都已经是掉包的了。
这个问题就需要用到散列算法,也可以译为Hash。常见的比如MD4、MD5、SHA-1、SHA-2等。
** 散列算法(哈希算法): **简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。而且该过程是不可逆的,无法通过摘要获得原文。
** SHA-1(Secure Hash Algorithm 1): **由美国提出,可以生成一个20字节长度的消息摘要。05年被发现了针对SHA-1的有效攻击方法,已经不再安全。2010年以后建议使用SHA-2和SHA-3替代SHA-1。
** SHA-2(Secure Hash Algorithm 2): **其下又分为六个不同算法标准:SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA512/256。其后面数字为摘要结果的长度,越长的话碰撞几率越小。SHA-224的使用如下图:
客户端通过上面的散列算法可以获取文件的摘要消息,然后用客户端私钥加密后连同加密的文件发给服务端。黑客截获到数据后,他没有服务端私钥无法获取到对称秘钥,也没有客户端私钥无法伪造摘要消息。如果再像上面一样去掉包文件,服务端收到解密得到摘要消息一对比就可以知道文件已经被掉包篡改过了。
这种用私钥对摘要消息进行加密的过程称之为数字签名,它就解决了文件是否被篡改问题,也同时可以确定发送者身份。通常这么定义:
** 加密: **用公钥加密数据时称为加密。
** 签名: **用私钥加密数据时称为签名。
####4. 信任性
我们通过对称加密算法加密文件,通过非对称加密传输对称秘钥,再通过散列算法保证文件没被篡改过和发送者身份。这样就安全了吗?
答案是否定的,因为公钥是要通过网络送到对方的。在这期间如果出现问题会导致客户端收到的公钥并不一定是服务端的真实公钥。常见的** 中间人攻击 **就是例子:
** 中间人攻击MITM(Man-in-the-MiddleAttack): **攻击者伪装成代理服务器,在服务端发送公钥证书时,篡改成攻击者的。然后收到客户端数据后使用攻击者私钥解密,再篡改后使用攻击者私钥签名并且将攻击者的公钥证书发送给服务器。这样攻击者就可以同时欺骗双方获取到明文。
这个风险就需要通过CA机构对公钥证书进行数字签名绑定公钥和公钥所属人,也就是PKI体系。
** PKI(Privilege Management Infrastructure): **支持公钥管理并能支持认证、加密、完整性和可追究性的基础设施。可以说整个互联网数据传输都是通过PKI体系进行安全保证的。
** CA(Certificate Authority): **CA机构就是负责颁发证书的,是一个比较公认的权威的证书发布机构。CA有一个管理标准:WebTrust。只有通过WebTrust国际安全审计认证,根证书才能预装到主流的浏览器而成为一个全球可信的认证机构。比如美国的GlobalSign、VeriSign、DigiCert,加拿大的Entrust。我国的CA金融方面由中国人民银行管理CFCA,非金融CA方面最初由中国电信负责建设。
CA证书申请流程:公司提交相应材料后,CA机构会提供给公司一张证书和其私钥。会把Issuer,Public key,Subject,Valid from,Valid to等信息以明文的形式写到证书里面,然后用一个指纹算法计算出这些数字证书内容的一个指纹,并把指纹和指纹算法用自己的私钥进行加密。由于浏览器基本都内置了CA机构的根证书,所以可以正确的验证公司证书指纹(验签),就不会有安全警告了。
但是:所有的公司其实都可以发布证书,甚至我们个人都可以随意的去发布证书。但是由于浏览器没有内置我们的根证书,当客户端浏览器收到我们个人发布的证书后,找不到根证书进行验签,浏览器就会直接警告提示,这就是之前12306打开会有警告的原因。这种个人发布的证书,其实可以通过系统设置为受信任的证书去消除这个警告。但是由于这种证书机构的权威性和安全性难以信任,大家最好不要这么做。
我们看一下网络HTTPS的证书信息:
其中比较重要的信息:
签发机构:GlobalSign Root CA;
有效日期:2018-04-03到2019-05-26之间可用;
公钥信息:RSA加密,2048位;
数字签名:带 RSA 加密的 SHA-256 ( 1.2.840.113549.1.1.11 )
绑定域名:再进行HTTPS验证时,如果当前域名和证书绑定域名不一致,也会出现警告;
URI:在线管理地址。如果当前私钥出现了风险,CA机构可以在线吊销该证书。
####5. 不可抵赖性
看起来整个过程都很安全了,但是仍存在一种风险:服务端签名后拒不承认,归咎于故障不履行合同怎么办。
解决方法是采用数字时间戳服务:DTS。
** DTS(digital time-stamp): **作用就是对于成功的电子商务应用,要求参与交易各方不能否认其行为。一般来说,数字时间戳产生的过程为:用户首先将需要加时间戳的文件用Hash算法运算形成摘要,然后将该摘要发送到DTS。DTS在加入了收到文件摘要的日期和事件信息后再对该文件进行数字签名,然后送达用户。
####6. 再次认证
我们有了数字证书保证了身份的真实性,又有了DTS提供的不可抵赖性。但是还是不能百分百确定使用私钥的就是合法持有者。有可能出现被别人盗用私钥进行交易的风险。
解决这个就需要用到强口令、认证令牌OTP、智能卡、U盾或生物特征等技术对使用私钥的当前用户进行认证,已确定其合法性。我们简单了解下很常见的U盾。
** USB Key(U盾): **刚出现时外形比较像U盘,安全性能像一面盾牌,取名U盾。其内部有一个只可写不可读的区域存储着用户的私钥(也有公钥证书),银行同样也拥有一份。当进行交易时,所有涉及到私钥的运算都在U盾内部进行,私钥不会泄露。当交易确认时,交易的详细数据会显示到U盾屏幕上,确认无误后通过物理按键确认就可以成功交易了。就算出现问题黑客也是无法控制U盾的物理按键的,用户可以及时取消避免损失。有的U盾里面还有多份证书,来支持国密算法。
** 国密算法: **国家密码局针对各种算法制定了一些列国产密码算法。具体包括:SM1对称加密算法、SM2公钥算法、SM3摘要算法、SM4对称加密算法、ZUC祖冲之算法等。这样可以对国产固件安全和数据安全进行进一步的安全控制。
## HTTPS分析
有了上面的知识,我们可以尝试去分析下HTTPS的整个过程,用Wireshark截取一次HTTPS报文:
Client Hello: 客户端发送Hello到服务端443端口,里面包含了随机数、客户端支持的加密算法、客户端的TLS版本号等;
Server Hello: 服务端回应Hello到客户端,里面包含了服务端选择的加密套件、随机数等;
Certificate: 服务端向客户端发送证书
服务端计算对称秘钥:通过ECDH算法得到对称秘钥
客户端计算对称秘钥:通过ECDH算法得到对称秘钥
开始用对称秘钥进行加密传输数据
其中我们又遇到了新的算法:DH算法
** DH(Diffie-Hellman): **1976年由Whitefield与Martin Hellman提出的一个奇妙的秘钥交换协议。这个机制的巧妙在于可以通过安全的方式使双方获得一个相同的秘钥。数学原理是基于原根的性质,如图:
*** DH算法的用处不是为了加密或解密消息,而是用于通信双方安全的交换一个相同的秘钥。 ***
** ECDH: **基于ECC(椭圆曲线密码体制)的DH秘钥交换算法,数学原理是基于椭圆曲线上的离散对数问题。
** ECDHE: **字面少了一个E,E代表了临时。在握手流程中,作为服务器端,ECDH使用证书公钥代替Pb,使用自身私钥代替Xb。这个算法时服务器不发送server key exchange报文,因为发送certificate报文时,证书本身就包含了Pb信息。
##总结
| 算法名称 | 特点 | 用处 | 常用算法名 |
| --- | :--- | :---: | ---: |
| 对称加密 | 速度快,效率高| 用于直接加密文件 | 3DES、AES、RC4 |
| 非对称加密 | 速度相对慢,但是确保安全 | 构建CA体系 | RSA、ECC |
| 散列算法 | 算出的摘要长度固定,不可逆 | 防止文件篡改 | SHA-1、SHA-2 |
| DH算法 | 安全的推导出对称秘钥 | 交换对称秘钥 | ECDH |
----
3. 密码分为哪三种
密码大体上分为三类,涉及的知识点主要是信息论和数论
第一类:公开密钥算法:RSA
第二类:对称算法:AES,DES。Hitag2
第三类:单项序列算法:MD5
而对称算法又可以分为分组加密和序列加密两种
分组加密:AES,DES
序列加密:Hitag2,Keeloq
序列加密通常是硬件实现,因为每次加密1bit,对于硬件来说用移位寄存器来实现是很容易的,但对于最小存储单位是1Byte(8bit)的上位机来说,频繁的位操作并不方便。
加密算法的理论基础基本上来自于数论,数论主要是讨论整形,基本上就是关于素数的研究,RSA的加密难度依据就是,两个大素数的因式分解,但目前无法证明是否有方法能快速的因式分解两个超大素数,所以也无法证明此算法绝对安全,但同理无法证明它不安全。目前2048位的RSA公认是安全的。
信息论在本质上基本和密码学等价,信息熵也影响一组加密数据其安全性,和其被攻破的难度。所以如何降低冗余,隐藏明文也是密码学必须考虑的问题。
4. 数据在网络上传输为什么要加密现在常用的数据加密算法主要有哪些
数据传输加密技术的目的是对传输中的数据流加密,通常有线路加密与端—端加密两种。线路加密侧重在线路上而不考虑信源与信宿,是对保密信息通过各线路采用不同的加密密钥提供安全保护。
端—端加密指信息由发送端自动加密,并且由TCP/IP进行数据包封装,然后作为不可阅读和不可识别的数据穿过互联网,当这些信息到达目的地,将被自动重组、解密,而成为可读的数据。
数据存储加密技术的目的是防止在存储环节上的数据失密,数据存储加密技术可分为密文存储和存取控制两种。前者一般是通过加密算法转换、附加密码、加密模块等方法实现;后者则是对用户资格、权限加以审查和限制,防止非法用户存取数据或合法用户越权存取数据。
常见加密算法
1、DES(Data Encryption Standard):对称算法,数据加密标准,速度较快,适用于加密大量数据的场合;
2、3DES(Triple DES):是基于DES的对称算法,对一块数据用三个不同的密钥进行三次加密,强度更高;
3、RC2和RC4:对称算法,用变长密钥对大量数据进行加密,比 DES 快;
4、IDEA(International Data Encryption Algorithm)国际数据加密算法,使用 128 位密钥提供非常强的安全性;
5、RSA:由 RSA 公司发明,是一个支持变长密钥的公共密钥算法,需要加密的文件块的长度也是可变的,非对称算法; 算法如下:
首先, 找出三个数,p,q,r,其中 p,q 是两个不相同的质数,r 是与 (p-1)(q-1) 互为质数的数。
p,q,r这三个数便是 private key。接着,找出 m,使得 rm == 1 mod (p-1)(q-1).....这个 m 一定存在,因为 r 与 (p-1)(q-1) 互质,用辗转相除法就可以得到了。再来,计算 n = pq.......m,n 这两个数便是 public key。
6、DSA(Digital Signature Algorithm):数字签名算法,是一种标准的 DSS(数字签名标准),严格来说不算加密算法;
7、AES(Advanced Encryption Standard):高级加密标准,对称算法,是下一代的加密算法标准,速度快,安全级别高,在21世纪AES 标准的一个实现是 Rijndael 算法。
8、BLOWFISH,它使用变长的密钥,长度可达448位,运行速度很快;
9、MD5:严格来说不算加密算法,只能说是摘要算法;
对MD5算法简要的叙述可以为:MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。
(4)常见的流密码算法有几种扩展阅读
数据加密标准
传统加密方法有两种,替换和置换。上面的例子采用的就是替换的方法:使用密钥将明文中的每一个字符转换为密文中的一个字符。而置换仅将明文的字符按不同的顺序重新排列。单独使用这两种方法的任意一种都是不够安全的,但是将这两种方法结合起来就能提供相当高的安全程度。
数据加密标准(Data Encryption Standard,简称DES)就采用了这种结合算法,它由IBM制定,并在1977年成为美国官方加密标准。
DES的工作原理为:将明文分割成许多64位大小的块,每个块用64位密钥进行加密,实际上,密钥由56位数据位和8位奇偶校验位组成,因此只有56个可能的密码而不是64个。
每块先用初始置换方法进行加密,再连续进行16次复杂的替换,最后再对其施用初始置换的逆。第i步的替换并不是直接利用原始的密钥K,而是由K与i计算出的密钥Ki。
DES具有这样的特性,其解密算法与加密算法相同,除了密钥Ki的施加顺序相反以外。
参考资料来源:网络-加密算法
参考资料来源:网络-数据加密
5. 密码技术的流密码
流密码,相对于区块加密,制造一段任意长的钥匙原料,与明文依位元或字符结合,有点类似一次垫(one-time pad)。输出的串流根据加密时的内部状态而定。在一些流密码上由钥匙控制状态的变化。RC4是相当有名的流密码。
密码杂凑函数(有时称作消息摘要函数,杂凑函数又称散列函数或哈希函数)不一定使用到钥匙,但和许多重要的密码算法相关。它将输入资料(通常是一整份文件)输出成较短的固定长度杂凑值,这个过程是单向的,逆向操作难以完成,而且碰撞(两个不同的输入产生相同的杂凑值)发生的机率非常小。
信息认证码或押码(Message authentication codes, MACs)很类似密码杂凑函数,除了接收方额外使用秘密钥匙来认证杂凑值。
6. 什么是对称密码和非对密码,分析这两种密码体系的特点和应用领域
一、对称密码
1、定义:采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。
2、特点:算法公开、计算量小、加密速度快、加密效率高。
3、应用领域:由于其速度快,对称性加密通常在消息发送方需要加密大量数据时使用。
二、非对密码
1、定义:非对称密码指的是非对称密码体制中使用的密码。
2、特点:
(1)是加密密钥和解密密钥不同 ,并且难以互推 。
(2)是有一个密钥是公开的 ,即公钥 ,而另一个密钥是保密的 ,即私钥。
3、应用领域:很好的解决了密钥的分发和管理的问题 ,并且它还能够实现数字签名。
(6)常见的流密码算法有几种扩展阅读
对称加密算法特征
1、加密方和解密方使用同一个密钥;
2、加密解密的速度比较快,适合数据比较长时的使用;
3、密钥传输的过程不安全,且容易被破解,密钥管理也比较麻烦
7. 什么是流加密
现代的文本加密主要还是对称加密。非对称加密太慢,而且也不适合对全文本加密,所以一般只是用在小数据加密上,比如加密文本对称加密密钥再传给对方。然后文本本身还是用对称加密。非对称加密还有一个用处就是核实发件人身份。
现代主要有两种对称加密,数据流加密和数据块加密。数据流加密就是用算法和密钥一起产生一个随机码流,再和数据流XOR一起产生加密后的数据流。解密方只要产生同样的随机码流就可以了。数据块加密把原数据分成固定大小的数据块(比如64位),加密器使用密钥对数据块进行处理。一般来说数据流加密更快,但块加密更安全一些。常见的加密法里,des和3des是使用最多的数据块加密,aes是更新一些的块加密法,rc4是数据流加密,等等。
二战以后,大家一般都放弃了保护加密算法的做法,因为太难了。而且数学上很强的算法就这么几种。所以现在都是公开算法。这些算法特性都不错,如果一个密钥长度不够强了,只要加长密钥长度就可以了。当然这种改变涉及改变加密硬软件,在使用中有些不便,不过一般认为算法本身还是够强不必改变。
8. 十大常见密码加密方式
一、密钥散列
采用MD5或者SHA1等散列算法,对明文进行加密。严格来说,MD5不算一种加密算法,而是一种摘要算法。无论多长的输入,MD5都会输出一个128位(16字节)的散列值。而SHA1也是流行的消息摘要算法,它可以生成一个被称为消息摘要的160位(20字节)散列值。MD5相对SHA1来说,安全性较低,但是速度快;SHA1和MD5相比安全性高,但是速度慢。
二、对称加密
采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密。对称加密算法中常用的算法有:DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK等。
三、非对称加密
非对称加密算法是一种密钥的保密方法,它需要两个密钥来进行加密和解密,这两个密钥是公开密钥和私有密钥。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密。非对称加密算法有:RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)。
四、数字签名
数字签名(又称公钥数字签名)是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。它是一种类似写在纸上的普通的物理签名,但是在使用了公钥加密领域的技术来实现的,用于鉴别数字信息的方法。
五、直接明文保存
早期很多这样的做法,比如用户设置的密码是“123”,直接就将“123”保存到数据库中,这种是最简单的保存方式,也是最不安全的方式。但实际上不少互联网公司,都可能采取的是这种方式。
六、使用MD5、SHA1等单向HASH算法保护密码
使用这些算法后,无法通过计算还原出原始密码,而且实现比较简单,因此很多互联网公司都采用这种方式保存用户密码,曾经这种方式也是比较安全的方式,但随着彩虹表技术的兴起,可以建立彩虹表进行查表破解,目前这种方式已经很不安全了。
七、特殊的单向HASH算法
由于单向HASH算法在保护密码方面不再安全,于是有些公司在单向HASH算法基础上进行了加盐、多次HASH等扩展,这些方式可以在一定程度上增加破解难度,对于加了“固定盐”的HASH算法,需要保护“盐”不能泄露,这就会遇到“保护对称密钥”一样的问题,一旦“盐”泄露,根据“盐”重新建立彩虹表可以进行破解,对于多次HASH,也只是增加了破解的时间,并没有本质上的提升。
八、PBKDF2
该算法原理大致相当于在HASH算法基础上增加随机盐,并进行多次HASH运算,随机盐使得彩虹表的建表难度大幅增加,而多次HASH也使得建表和破解的难度都大幅增加。
九、BCrypt
BCrypt 在1999年就产生了,并且在对抗 GPU/ASIC 方面要优于 PBKDF2,但是我还是不建议你在新系统中使用它,因为它在离线破解的威胁模型分析中表现并不突出。
十、SCrypt
SCrypt 在如今是一个更好的选择:比 BCrypt设计得更好(尤其是关于内存方面)并且已经在该领域工作了 10 年。另一方面,它也被用于许多加密货币,并且我们有一些硬件(包括 FPGA 和 ASIC)能实现它。 尽管它们专门用于采矿,也可以将其重新用于破解。
9. 目前常用的加密解密算法有哪些
加密算法
加密技术是对信息进行编码和解码的技术,编码是把原来可读信息(又称明文)译成代码形式(又称密文),其逆过程就是解码(解密)。加密技术的要点是加密算法,加密算法可以分为对称加密、不对称加密和不可逆加密三类算法。
对称加密算法 对称加密算法是应用较早的加密算法,技术成熟。在对称加密算法中,数据发信方将明文(原始数据)和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。收信方收到密文后,若想解读原文,则需要使用加密用过的密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。在对称加密算法中,使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密,这就要求解密方事先必须知道加密密钥。对称加密算法的特点是算法公开、计算量小、加密速度快、加密效率高。不足之处是,交易双方都使用同样钥匙,安全性得不到保证。此外,每对用户每次使用对称加密算法时,都需要使用其他人不知道的惟一钥匙,这会使得发收信双方所拥有的钥匙数量成几何级数增长,密钥管理成为用户的负担。对称加密算法在分布式网络系统上使用较为困难,主要是因为密钥管理困难,使用成本较高。在计算机专网系统中广泛使用的对称加密算法有DES和IDEA等。美国国家标准局倡导的AES即将作为新标准取代DES。
不对称加密算法不对称加密算法使用两把完全不同但又是完全匹配的一对钥匙—公钥和私钥。在使用不对称加密算法加密文件时,只有使用匹配的一对公钥和私钥,才能完成对明文的加密和解密过程。加密明文时采用公钥加密,解密密文时使用私钥才能完成,而且发信方(加密者)知道收信方的公钥,只有收信方(解密者)才是唯一知道自己私钥的人。不对称加密算法的基本原理是,如果发信方想发送只有收信方才能解读的加密信息,发信方必须首先知道收信方的公钥,然后利用收信方的公钥来加密原文;收信方收到加密密文后,使用自己的私钥才能解密密文。显然,采用不对称加密算法,收发信双方在通信之前,收信方必须将自己早已随机生成的公钥送给发信方,而自己保留私钥。由于不对称算法拥有两个密钥,因而特别适用于分布式系统中的数据加密。广泛应用的不对称加密算法有RSA算法和美国国家标准局提出的DSA。以不对称加密算法为基础的加密技术应用非常广泛。
不可逆加密算法 不可逆加密算法的特征是加密过程中不需要使用密钥,输入明文后由系统直接经过加密算法处理成密文,这种加密后的数据是无法被解密的,只有重新输入明文,并再次经过同样不可逆的加密算法处理,得到相同的加密密文并被系统重新识别后,才能真正解密。显然,在这类加密过程中,加密是自己,解密还得是自己,而所谓解密,实际上就是重新加一次密,所应用的“密码”也就是输入的明文。不可逆加密算法不存在密钥保管和分发问题,非常适合在分布式网络系统上使用,但因加密计算复杂,工作量相当繁重,通常只在数据量有限的情形下使用,如广泛应用在计算机系统中的口令加密,利用的就是不可逆加密算法。近年来,随着计算机系统性能的不断提高,不可逆加密的应用领域正在逐渐增大。在计算机网络中应用较多不可逆加密算法的有RSA公司发明的MD5算法和由美国国家标准局建议的不可逆加密标准SHS(Secure Hash Standard:安全杂乱信息标准)等。
加密技术
加密算法是加密技术的基础,任何一种成熟的加密技术都是建立多种加密算法组合,或者加密算法和其他应用软件有机结合的基础之上的。下面我们介绍几种在计算机网络应用领域广泛应用的加密技术。
非否认(Non-repudiation)技术 该技术的核心是不对称加密算法的公钥技术,通过产生一个与用户认证数据有关的数字签名来完成。当用户执行某一交易时,这种签名能够保证用户今后无法否认该交易发生的事实。由于非否认技术的操作过程简单,而且直接包含在用户的某类正常的电子交易中,因而成为当前用户进行电子商务、取得商务信任的重要保证。
PGP(Pretty Good Privacy)技术 PGP技术是一个基于不对称加密算法RSA公钥体系的邮件加密技术,也是一种操作简单、使用方便、普及程度较高的加密软件。PGP技术不但可以对电子邮件加密,防止非授权者阅读信件;还能对电子邮件附加数字签名,使收信人能明确了解发信人的真实身份;也可以在不需要通过任何保密渠道传递密钥的情况下,使人们安全地进行保密通信。PGP技术创造性地把RSA不对称加密算法的方便性和传统加密体系结合起来,在数字签名和密钥认证管理机制方面采用了无缝结合的巧妙设计,使其几乎成为最为流行的公钥加密软件包。
数字签名(Digital Signature)技术 数字签名技术是不对称加密算法的典型应用。数字签名的应用过程是,数据源发送方使用自己的私钥对数据校验和或其他与数据内容有关的变量进行加密处理,完成对数据的合法“签名”,数据接收方则利用对方的公钥来解读收到的“数字签名”,并将解读结果用于对数据完整性的检验,以确认签名的合法性。数字签名技术是在网络系统虚拟环境中确认身份的重要技术,完全可以代替现实过程中的“亲笔签字”,在技术和法律上有保证。在公钥与私钥管理方面,数字签名应用与加密邮件PGP技术正好相反。在数字签名应用中,发送者的公钥可以很方便地得到,但他的私钥则需要严格保密。
PKI(Public Key Infrastructure)技术 PKI技术是一种以不对称加密技术为核心、可以为网络提供安全服务的公钥基础设施。PKI技术最初主要应用在Internet环境中,为复杂的互联网系统提供统一的身份认证、数据加密和完整性保障机制。由于PKI技术在网络安全领域所表现出的巨大优势,因而受到银行、证券、政府等核心应用系统的青睐。PKI技术既是信息安全技术的核心,也是电子商务的关键和基础技术。由于通过网络进行的电子商务、电子政务等活动缺少物理接触,因而使得利用电子方式验证信任关系变得至关重要,PKI技术恰好能够有效解决电子商务应用中的机密性、真实性、完整性、不可否认性和存取控制等安全问题。一个实用的PKI体系还必须充分考虑互操作性和可扩展性。PKI体系所包含的认证中心(CA)、注册中心(RA)、策略管理、密钥与证书管理、密钥备份与恢复、撤销系统等功能模块应该有机地结合在一起。
加密的未来趋势
尽管双钥密码体制比单钥密码体制更为可靠,但由于计算过于复杂,双钥密码体制在进行大信息量通信时,加密速率仅为单钥体制的1/100,甚至是 1/1000。正是由于不同体制的加密算法各有所长,所以在今后相当长的一段时期内,各类加密体制将会共同发展。而在由IBM等公司于1996年联合推出的用于电子商务的协议标准SET(Secure Electronic Transaction)中和1992年由多国联合开发的PGP技术中,均采用了包含单钥密码、双钥密码、单向杂凑算法和随机数生成算法在内的混合密码系统的动向来看,这似乎从一个侧面展示了今后密码技术应用的未来。
在单钥密码领域,一次一密被认为是最为可靠的机制,但是由于流密码体制中的密钥流生成器在算法上未能突破有限循环,故一直未被广泛应用。如果找到一个在算法上接近无限循环的密钥流生成器,该体制将会有一个质的飞跃。近年来,混沌学理论的研究给在这一方向产生突破带来了曙光。此外,充满生气的量子密码被认为是一个潜在的发展方向,因为它是基于光学和量子力学理论的。该理论对于在光纤通信中加强信息安全、对付拥有量子计算能力的破译无疑是一种理想的解决方法。
由于电子商务等民用系统的应用需求,认证加密算法也将有较大发展。此外,在传统密码体制中,还将会产生类似于IDEA这样的新成员,新成员的一个主要特征就是在算法上有创新和突破,而不仅仅是对传统算法进行修正或改进。密码学是一个正在不断发展的年轻学科,任何未被认识的加/解密机制都有可能在其中占有一席之地。
目前,对信息系统或电子邮件的安全问题,还没有一个非常有效的解决方案,其主要原因是由于互联网固有的异构性,没有一个单一的信任机构可以满足互联网全程异构性的所有需要,也没有一个单一的协议能够适用于互联网全程异构性的所有情况。解决的办法只有依靠软件代理了,即采用软件代理来自动管理用户所持有的证书(即用户所属的信任结构)以及用户所有的行为。每当用户要发送一则消息或一封电子邮件时,代理就会自动与对方的代理协商,找出一个共同信任的机构或一个通用协议来进行通信。在互联网环境中,下一代的安全信息系统会自动为用户发送加密邮件,同样当用户要向某人发送电子邮件时,用户的本地代理首先将与对方的代理交互,协商一个适合双方的认证机构。当然,电子邮件也需要不同的技术支持,因为电子邮件不是端到端的通信,而是通过多个中间机构把电子邮件分程传递到各自的通信机器上,最后到达目的地。