对称加密和非对称加密

一、对称加密算法

对称加密采用了对称密码编码技术,它的特点是文件加密和解密使用相同的密钥加密

也就是密钥也可以用作解密密钥,这种方法在密码学中叫做对称加密算法,对称加密算法使用起来简单快捷,密钥较短,且破译困难,除了数据加密标准(DES),另一个对称密钥加密系统是国际数据加密算法(IDEA),它比DES的加密性好,而且对计算机功能要求也没有那么高

对称加密算法在电子商务交易过程中存在几个问题:

  1、要求提供一条安全的渠道使通讯双方在首次通讯时协商一个共同的密钥。直接的面对面协商可能是不现实而且难于实施的,所以双方可能需要借助于邮件和电话等其它相对不够安全的手段来进行协商;

  2、密钥的数目难于管理。因为对于每一个合作者都需要使用不同的密钥,很难适应开放社会中大量的信息交流;

  3、对称加密算法一般不能提供信息完整性的鉴别。它无法验证发送者和接受者的身份;

  4、对称密钥的管理和分发工作是一件具有潜在危险的和烦琐的过程。对称加密是基于共同保守秘密来实现的,采用对称加密技术的贸易双方必须保证采用的是相同的密钥,保证彼此密钥的交换是安全可靠的,同时还要设定防止密钥泄密和更改密钥的程序。

  假设两个用户需要使用对称加密方法加密然后交换数据,则用户最少需要2个密钥并交换使用,如果企业内用户有n个,则整个企业共需要n×(n-1) 个密钥,密钥的生成和分发将成为企业信息部门的恶梦。

常见的对称加密算法有DES、3DES、Blowfish、IDEA、RC4、RC5、RC6和AES

常用算法介绍:

(1)DES(Data Encryption Standard,数据加密算法)
  
  DES是最基本的对称加密算法,也是使用频率最高的一种算法,加密密钥与解密密钥相同。DES出身比较好,出自IBM之手,后被美国军方采纳,之后便广泛流传,但是近些年使用越来越少,因为DES使用56位密钥,以现代计算能力,24小时内即可被破解。虽然如此,在某些简单应用中,我们还是可以使用DES加密算法。DES使用56位长度的密钥,有些提供商可能附加8位奇偶校验位。
  
  算法流程:
  
  发送者构建秘钥-->发送秘钥--> 接收者
  
  发送者明文-->DES算法+秘钥加密--> 密文--> 接收者
  
  接收者--> DES算法+秘钥解密--> 明文

(2)3DES(Triple Data Encryption Algorithm,三重数据加密算法)
  
  3DES(或称为Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称。它相当于是对每个数据块应用三次DES加密算法。由于计算机运算能力的增强,原版DES密码的密钥长度变得容易被暴力破解;3DES即是设计用来提供一种相对简单的方法,即通过增加DES的密钥长度来避免类似的攻击,而不是设计一种全新的块密码算法。 
  DES被很多密码学机构质疑,因为算法是半公开的,因此违反柯克霍夫原则,所以在这个基础上,延伸了3重DES.
  
  算法流程:
  
  发送者构建秘钥-->发送秘钥--> 接收者
  
  发送者明文-->3DES算法+秘钥加密--> 密文--> 接收者
  
  接收者--> 3DES算法+秘钥解密--> 明文

(3)AES(Advanced Encryption Standard,高级加密标准,又称Rijndael加密法)
  
  高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。 
  
  AES是目前使用最多的对称加密算法之一,AES至今尚未听说有被破解的案例。
  
  AES通常用于移动通信系统加密以及基于SSH协议的软件,如SSH Client,secureCRT
  
  AES是用来替代DES的,因为DES有很多被破解,而3DES效率又比较慢
  
  AES加密算法的默认密钥长度为128,还可以选择192、256.
  
  注意:JDK实现AES算法,使用256位密钥长度时要获得无政策限制权限文件,BC不会存在该问题。无政策限制权限是指某些国家的进口管制限制,java发布的运行环境包中中的加解密有一定限制。
  
   算法流程:
  
  发送者构建秘钥-->发送秘钥--> 接收者
  
  发送者明文-->AES算法+秘钥加密--> 密文--> 接收者
  
  接收者--> AES算法+秘钥解密--> 明文

 

二、 非对称加密算法

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

公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。

非对称加密算法实现机密信息交换的基本过程是:甲方生成一对密钥并将其中的一把作为公用密钥向其它方公开;得到该公用密钥的乙方使用该密钥对机密信息进行加密后再发送给甲方;甲方再用自己保存的另一把专用密钥对加密后的信息进行解密。甲方只能用其专用密钥解密由其公用密钥加密后的任何信息。

 非对称加密的典型应用是数字签名。

   常见的非对称加密算法有:RSA、ECC(移动设备用)、Diffie-Hellman、El Gamal、DSA(数字签名用)

常用算法介绍如下:

(1)RSA加密签名特性:

RSA是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的。

在RSA加密算法,由于PADDING的不一致,会导致加密结果每次不一致;使用PKCS1Padding加密结果不一致;使用NoPadding加密结果一致;签名结果每次是一致的。

RSA算法的安全性:

在理论上,rsa 的安全性取决于模n分解的困难性,但数学上至今还未证明分解模就是攻击rsa的最佳办法。

人们完全可以设想有另外的途径破译rsa,如求解密指数d或找到(p-1)(q-1)等。但这些途径都不比分解n来的容易。

已公开的或已知的攻击方法:

1,针对RSA最流行的攻击一般是基于大数因数分解。

1999年,RSA-155 (512 bits)被成功分解,花了五个月时间(约8000 MIPS年)和224 CPU hours在一台有3.2G中央内存的Cray C916计算机上完成。

ECC 160bit算法等级,相当于RSA 1024bit密钥提供的保密强度,210bit与RSA2048算法强度相当,计算量则更小,处理速度更快,存储空间和传输带宽占用较少

2,秀尔算法

量子计算里的秀尔算法能使穷举的效率大大的提高。由于RSA算法是基于大数分解(无法抵抗穷举攻击),因此在未来量子计算能对RSA算法构成较大的威胁。一个拥有N量子比特的量子计算机,每次可进行2^N次运算,理论上讲,密钥为1024位长的RSA算法,用一台512量子比特位的量子计算机在1秒内即可破解。

(2)非对称密钥算法-ECC:(ECC-椭圆曲线加密 Ellipse Curve Cryptography)

基于椭圆曲线理论的公钥加密技术(1985)与传统的基于大质数因子分解困难性的加密方法不同,ECC通过椭圆曲线方程式的性质产生密钥

(3)DSA(Digital Signature Algorithm):数字签名算法,是一种标准的 DSS(数字签名标准),严格来说不算加密算法;

ECDSA签名算法:

(1)选择一条椭圆曲线Ep(a,b),和基点G;

(2)选择私有密钥k(k<n,n为G的阶),利用基点G计算公开密钥K=kG;

(3)产生一个随机整数r(r<n),计算点R=rG;

(4)将原数据和点R的坐标值x,y作为参数,计算SHA1做为hash,即Hash=SHA1(原数据,x,y);

(5)计算s≡r - Hash * k (mod n)

(6)r和s做为签名值,如果r和s其中一个为0,重新从第3步开始执行

ECDSA验证:

(1)接受方在收到消息(m)和签名值(r,s)后,进行以下运算

(2)计算:sG+H(m)P=(x1,y1), r1≡ x1 mod p。

(3)验证等式:r1 ≡ r mod p。

(4)如果等式成立,接受签名,否则签名无效。

各取所长:对称密码和非对称密码结合;使用对称密码加密数据;协商对称密钥算法;非对称密码加密密钥;公钥加密密钥;私钥解密;数字证书解决了数据完整性和不可否认性

3.HASH算法:

特点:输入长度不定,输出长度为定值;不可逆;碰撞几率大

常见算法:

MD5     128Bit

Sha-1   160Bit

SHA-224, SHA-256, SHA-384 和SHA-512

HASH算法主要应用于:散列算法最重要的用途在于给证书、文档、密码等高安全系数的内容添加加密保护。这一方面的用途主要是得益于散列算法的不可逆性,这种不可逆性体现在,你不仅不可能根据一段通过散列算法得到的指纹来获得原有的文件,也不可能简单地创造一个文件并让它的指纹与一段目标指纹相一致。

在密码学中,hash算法的作用主要是用于消息摘要和签名

一个优秀的 hash 算法,将能实现:

(1)正向快速:给定明文和 hash 算法,在有限时间和有限资源内能计算出 hash 值。

(2)逆向困难:给定(若干) hash 值,在有限时间内很难(基本不可能)逆推出明文。

(3)输入敏感:原始输入信息修改一点信息,产生的 hash 值看起来应该都有很大不同。

(4)冲突避免:很难找到两段内容不同的明文,使得它们的 hash 值一致(发生冲突)。即对于任意两个不同的数据块,其hash值相同的可能性极小;对于一个给定的数据块,找到和它hash值相同的数据块极为困难。

(ECDSA每次签名信息是否一样:不一样,因为ECDSA签名算法的第(3)步产生一个随机整数r(r<n),计算点R=rG;导致最终的签名信息不一样。)

Sha-1   160Bit

    安全哈希加密技术,是当今世界最先近的加密算法。主要用于文件身份识别、数字签名和口令加密等。
    对于明文信息A,通过SHA1算法,生成一条160位长的识别码B。且明文信息A和识别码B之间同时满足以下条件:
     1、对于任意两条不同的明文信息A1、A2,其识别码B1、B2都不相同。
     2、无法通过逆向算法由识别码B倒推出明文信息A。
MOONCRM的用户密码采用SHA1加密存储,即服务器上存储的只是由用户密码生成的识别码,而用户密码本身并没有存储在服务器上。用户输入登陆口令时,系统会根据输入口令生成相应识别码并与系统中所存储的识别码进行比较,如二者一致,则认为口令正确。系统中没有存储用户原始的口令值,即使有人获得口令文件,也无法破解用户登陆密码,确保用户密码绝对安全。

MD5     128Bit

  Message-Digest泛指字节串(Message)的Hash变换,就是把一个任意长度的字节串变换成一定长的大整数。请注意是“字节串”而不是“字符串”这个词,是因为这种变换只与字节的值有关,与字符集或编码方式无关。
  MD5将任意长度的“字节串”变换成一个128bit的大整数,并且它是一个不可逆的字符串变换算法,换句话说就是,即使你看到源程序和算法描述,也无法将一个MD5的值变换回原始的字符串,从数学原理上说,是因为原始的字符串有无穷多个,这有点象不存在反函数的数学函数
   MD5的典型应用是对一段Message(字节串)产生fingerprint(指纹),以防止被“篡改”。举个例子,你将一段话写在一个叫 readme.txt文件中,并对这个readme.txt产生一个MD5的值并记录在案,然后你可以传播这个文件给别人,别人如果修改了文件中的任何内容,你对这个文件重新计算MD5时就会发现(两个MD5值不相同)。如果再有一个第三方的认证机构,用MD5还可以防止文件作者的“抵赖”,这就是所谓的数字签名应用。 

       MD5是一种不可逆的加密算法 安全性很高 一般在网上用作判断文件完整性
如果一个文件被修改或不完整 算出来的MD5码是和原来不一样的 所以当你害怕下的东西有病毒或木马或不完整 可以用MD5计算器算一下 再和网站上提供的值对比关于软件很多地方有下的 软件就一个作用 把软件拖进去 然后算出MD5码 。
这个基本上是软件内部利用MD5加密导致,本身几乎无效验方法,因为MD5不可以反编译,方法写个过程,或下载MD5文件 调用MD5(PASSWORD)
MD5中的MD代表Message Digest,就是信息摘要的意思,不过这个信息摘要不是信息内容的缩写,而是根据公开的MD5算法对原信息进行数学变换后得到的一个128位(bit)的特征码。
       这个特征码有如下特性,首先它不可逆,例如我有一段秘密的文字如:"My Secret Words",经算法变换后得到MD5码(b9944e9367d2e40dd1f0c4040d4daaf7),把这个码告诉其他人,他们根据这个MD5码是没有系统的方法可以知道你原来的文字是什么的。其次,这个码具有高度的离散性,也就是说,原信息的一点点变化就会导致MD5的巨大变化,例如"ABC" MD5(902fbdd2b1df0c4f70b4a5d23525e932)和"ABC "(多了一空格)MD5(12c774468f981a9487c30773d8093561)差别非常大,而且之间没有任何关系,也就是说产生的MD5码是不可预测的。最后由于这个码有128位那么长,所以任意信息之间具有相同MD5码的可能性非常之低,通常被认为是不可能的。 所以一般认为MD5码可以唯一地代表原信息的特征,通常用于密码的加密存储,数字签名,文件完整性验证等。2004年,已经被山东大学王小云教授破解了。比如:2345 两个相加的和再相乘 2+3=5 4+5=9 5*9=45

原文地址:https://www.cnblogs.com/liu-xiaolong/p/14184083.html