精华内容
下载资源
问答
  • 信息安全原理与技术-第三章对称加密技术 信息安全原理与技术-第三章对称加密技术 信息安全原理与技术-第三章对称加密技术
  • 对称加密技术,在现在网络中,有非常广泛应用。加密技术更是数字货币的基础。...通过本文的分析,可以更好的理解非对称加密原理,可以让我们更好的使用非对称加密技术。题外话: 并博客一直有打算写一系列文章通俗的

    最新内容会更新在主站深入浅出区块链社区
    原文链接:比特币所有权及隐私问题-非对称加密应用

    非对称加密技术,在现在网络中,有非常广泛应用。加密技术更是数字货币的基础。

    所谓非对称,就是指该算法需要一对密钥,使用其中一个(公钥)加密,则需要用另一个(私钥)才能解密。
    但是对于其原理大部分同学应该都是一知半解,今天就来分析下经典的非对称加密算法 - RSA算法。
    通过本文的分析,可以更好的理解非对称加密原理,可以让我们更好的使用非对称加密技术。

    题外话:
    并博客一直有打算写一系列文章通俗的密码学,昨天给站点上https, 因其中使用了RSA算法,就查了一下,发现现在网上介绍RSA算法的文章都写的太难理解了,反正也准备写密码学,就先写RSA算法吧,下面开始正文。

    RSA算法原理

    RSA算法的基于这样的数学事实:两个大质数相乘得到的大数难以被因式分解。
    如:有很大质数p跟q,很容易算出N,使得 N = p * q,
    但给出N, 比较难找p q(没有很好的方式, 只有不停的尝试)

    这其实也是单向函数的概念

    下面来看看数学演算过程

    1. 选取两个大质数p,q,计算N = p * q 及 φ ( N ) = φ § * φ (q) = (p-1) * (q-1)

    三个数学概念:
    质数(prime numbe):又称素数,为在大于1的自然数中,除了1和它本身以外不再有其他因数。
    互质关系:如果两个正整数,除了1以外,没有其他公因子,我们就称这两个数是互质关系(coprime)。
    φ(N):叫做欧拉函数,是指任意给定正整数N,在小于等于N的正整数之中,有多少个与N构成互质关系。

    如果n是质数,则 φ(n)=n-1。
    如果n可以分解成两个互质的整数之积, φ(n) = φ(p1p2) = φ(p1)φ(p2)。即积的欧拉函数等于各个因子的欧拉函数之积。

    1. 选择一个大于1 小于φ(N)的数e,使得 e 和 φ(N)互质

    e其实是1和φ(N)之前的一个质数

    1. 计算d,使得d*e=1 mod φ(N) 等价于方程式 ed-1 = k * φ(N) 求一组解。

    d 称为e的模反元素,e 和 φ(N)互质就肯定存在d。

    模反元素是指如果两个正整数a和n互质,那么一定可以找到整数b,使得ab被n除的余数是1,则b称为a的模反元素。
    可根据欧拉定理证明模反元素存在,欧拉定理是指若n,a互质,则:
    a^φ(n) ≡ 1(mod n) 及 a^φ(n) = a * a^(φ(n) - 1), 可得a的 φ(n)-1 次方,就是a的模反元素。

    1. (N, e)封装成公钥,(N, d)封装成私钥。
      假设m为明文,加密就是算出密文c:
      m^e mod N = c (明文m用公钥e加密并和随机数N取余得到密文c)
      解密则是:
      c^d mod N = m (密文c用密钥解密并和随机数N取余得到明文m)

      私钥解密这个是可以证明的,这里不展开了。

    加解密步骤

    具体还是来看看步骤,举个例子,假设Alice和Bob又要相互通信。

    1. Alice 随机取大质数P1=53,P2=59,那N=53*59=3127,φ(N)=3016
    2. 取一个e=3,计算出d=2011。
    3. 只将N=3127,e=3 作为公钥传给Bob(公钥公开)
    4. 假设Bob需要加密的明文m=89,c = 89^3 mod 3127=1394,于是Bob传回c=1394。 (公钥加密过程)
    5. Alice使用c^d mod N = 1394^2011 mod 3127,就能得到明文m=89。 (私钥解密过程)

    假如攻击者能截取到公钥n=3127,e=3及密文c=1394,是仍然无法不通过d来进行密文解密的。

    安全性分析

    那么,有无可能在已知n和e的情况下,推导出d?

      1. ed≡1 (mod φ(n))。只有知道e和φ(n),才能算出d。
      2. φ(n)=(p-1)(q-1)。只有知道p和q,才能算出φ(n)。
      3. n=pq。只有将n因数分解,才能算出p和q。
    

    如果n可以被因数分解,d就可以算出,因此RSA安全性建立在N的因式分解上。大整数的因数分解,是一件非常困难的事情。
    只要密钥长度足够长,用RSA加密的信息实际上是不能被解破的。

    补充模运算规则

    1. 模运算加减法:
      (a + b) mod p = (a mod p + b mod p) mod p
      (a - b) mod p = (a mod p - b mod p) mod p
    2. 模运算乘法:
      (a * b) mod p = (a mod p * b mod p) mod p
    3. 模运算幂
      a ^ b mod p = ((a mod p)^b) mod p

    深入浅出区块链 - 系统学习区块链,打造最好的区块链技术博客

    展开全文
  • 对称加密和非对称加密原理

    千次阅读 2019-02-22 19:14:47
    对称加密和不对称加密原理 **私钥加密(对称加密 symmetric cryptography):**私钥加密算法使用单个私钥来加密和解密数据。由于具有密钥的任意一方都可以使用该密钥解密数据,因此必须保护密钥不被未经授权的代理...

    对称加密和非对称加密原理

    私钥加密(对称加密 symmetric cryptography):私钥加密算法使用单个私钥来加密和解密数据。由于具有密钥的任意一方都可以使用该密钥解密数据,因此必须保护密钥不被未经授权的代理得到。私钥加密又称为对称加密 ,因为同一密钥既用于加密又用于解密。私钥加密算法非常快(与公钥算法相比),特别适用于对较大的数据流执行加密转换。Well-known secret key cryptographic algorithms include the Data Encryption Standard (DES), triple-strength DES (3DES), Rivest Cipher 2 (RC2), and Rivest Cipher 4 (RC4).

    通常,私钥算法(称为块密码)用于一次加密一个数据块。块密码(如 RC2、DES、TripleDES 和 Rijndael)通过加密将 n 字节的输入块转换为加密字节的输出块。如果要加密或解密字节序列,必须逐块进行。由于 n 很小(对于 RC2、DES 和 TripleDES,n = 8 字节;n = 16 [默认值];n = 24;对于 Rijndael,n = 32),因此必须对大于 n 的数据值一次加密一个块。
    基类库中提供的块密码类使用称作密码块链 (CBC) 的链模式,它使用一个密钥和一个初始化向量 (IV) 对数据执行加密转换。对于给定的私钥k,一个不使用初始化向量的简单块密码将把相同的明文输入块加密为同样的密文输出块。如果在明文流中有重复的块,那么在密文流中将存在重复的块。如果未经授权的用户知道有关明文块的结构的任何信息,就可以使用这些信息解密已知的密文块并有可能发现您的密钥。若要克服这个问题,可将上一个块中的信息混合到加密下一个块的过程中。这样,两个相同的明文块的输出就会不同。由于该技术使用上一个块加密下一个块,因此使用了一个 IV 来加密数据的第一个块。使用该系统,未经授权的用户有可能知道的公共消息标头将无法用于对密钥进行反向工程。

    可以危及用此类型密码加密的数据的一个方法是,对每个可能的密钥执行穷举搜索。根据用于执行加密的密钥大小,即使使用最快的计算机执行这种搜索,也极其耗时,因此难以实施。使用较大的密钥大小将使解密更加困难。虽然从理论上说加密不会使对手无法检索加密的数据,但这确实极大增加了这样做的成本。如果执行彻底搜索来检索只在几天内有意义的数据需要花费三个月的时间,那么穷举搜索的方法是不实用的。
    私钥加密的缺点是它假定双方已就密钥和 IV 达成协议,并且互相传达了密钥和 IV 的值。并且,密钥必须对未经授权的用户保密。由于存在这些问题,私钥加密通常与公钥加密一起使用,来秘密地传达密钥和 IV 的值。

    最早、最著名的保密密钥或对称密钥加密算法DES(Data Encryption Standard)/DESede是由IBM公司在70年代发展起来的,并经政府的加密标准筛选后,于1976年11月被美国政府采用,DES随后被美国国家标准局和美国国家标准协会(American National Standard Institute,ANSI)承认。DES使用56位密钥对64位的数据块进行加密,并对64位的数据块进行16轮编码。与每轮编码时,一个48位的"每轮"密钥值由56位的完整密钥得出来。

    .NET 提供以下实现类以提供对称的密钥加密算法:
    • DESCryptoServiceProvider

    • RC2CryptoServiceProvider

    • RijndaelManaged

    • TripleDESCryptoServiceProvider

    公钥加密(不对称加密, RSA, DSA, DH asymmetric cryptography ):公钥加密使用一个必须对未经授权的用户保密的私钥和一个可以对任何人公开的公钥。公钥和私钥都在数学上相关联;用公钥加密的数据只能用私钥解密,而用私钥签名的数据只能用公钥验证。公钥可以提供给任何人;公钥用于对要发送到私钥持有者的数据进行加密。两个密钥对于通信会话都是唯一的。公钥加密算法也称为不对称算法,原因是需要用一个密钥加密数据而需要用另一个密钥来解密数据。对称算法的根本原理就是单向函数,f(a)=b,但是用b很难得到a。
    公钥加密算法使用固定的缓冲区大小,而私钥加密算法使用长度可变的缓冲区。公钥算法无法像私钥算法那样将数据链接起来成为流,原因是它只可以加密少量数据。因此,不对称操作不使用与对称操作相同的流模型。

    双方(小红和小明)可以按照下列方式使用公钥加密。首先,小红生成一个公钥/私钥对。如果小明想要给小红发送一条加密的消息,他将向她索要她的公钥。小红通过不安全的网络将她的公钥发送给小明,小明接着使用该密钥加密消息。(如果小明在不安全的信道如公共网络上收到小红的密钥,则小明必须同小红验证他具有她的公钥的正确副本。)小明将加密的消息发送给小红,而小红使用她的私钥解密该消息。
    但是,在传输小红的公钥期间,未经授权的代理可能截获该密钥。而且,同一代理可能截获来自小明的加密消息。但是,该代理无法用公钥解密该消息。该消息只能用小红的私钥解密,而该私钥没有被传输。小红不使用她的私钥加密给小明的答复消息,原因是任何具有公钥的人都可以解密该消息。如果小红想要将消息发送回小明,她将向小明索要他的公钥并使用该公钥加密她的消息。然后,小明使用与他相关联的私钥来解密该消息。

    在一个实际方案中,小红和小明使用公钥(不对称)加密来传输私(对称)钥,而对他们的会话的其余部分使用私钥加密(由于对称加密快捷,用于实际的数据加密,而利用不对称加密的方式解决对称加密中私钥传递的不安全性,此为对称和不对称加密结合的加密方式)。
    公钥加密具有更大的密钥空间(或密钥的可能值范围),因此不大容易受到对每个可能密钥都进行尝试的穷举攻击。由于不必保护公钥,因此它易于分发。公钥算法可用于创建数字签名以验证数据发送方的身份。但是,公钥算法非常慢(与私钥算法相比),不适合用来加密大量数据。公钥算法仅对传输很少量的数据有用。公钥加密通常用于加密一个私钥算法将要使用的密钥和 IV。传输密钥和 IV 后,会话的其余部分将使用私钥加密。

    RSA系统是诸多此类算法中最著名、最多使用的一种。RSA公开密钥密码系统是由R.Rivest、A.Shamir和L.Adleman俊教授于1977年提出的。RSA的取名就是来自于这三位发明者的姓的第一个字母RSA(Rivest-Shamir-Adleman)算法是基于大数不可能被质因数分解假设的公钥体系。简单地说就是找两个很大的质数。一个对外公开的为“公钥”(Prblic key) ,另一个不告诉任何人,称为"私钥”(Private key)。这两个密钥是互补的,也就是说用公钥加密的密文可以用私钥解密,反过来也一样。

    公钥的传输:要启动安全通讯,通信两端必须首先得到相同的共享密钥(主密钥),但共享密钥不能通过网络相互发送,因为这种做法极易泄密。Diffie-Hellman算法是用于密钥交换的最早最安全的算法之一。

    RSA算法:RSA算法是基于大数难于分解的原理。不但可以用于认证,也可以用于密钥传输,例子可以参考RSAUtil.java文件。那么用户A和B如何利用RSA算法来传输密钥呢?

    1:A产生一个密钥K,用B的公钥加密K,然后将得到的密文发送给B。

    2:B用自己的私钥解密收到的密钥,就可以得到密钥。

    DH算法:DH算法的出现就是用来进行密钥传输的。DH算法是基于离散对数实现的。DH算法的基本工作原理是:通信双方公开或半公开交换一些准备用来生成密钥的"材料数据",在彼此交换过密钥生成"材料"后,两端可以各自生成出完全一样的共享密钥。在任何时候,双方都绝不交换真正的密钥。通信双方交换的密钥生成"材料",长度不等,"材料"长度越长,所生成的密钥强度也就越高,密钥破译就越困难。除进行密钥交换外,IPSec还使用DH算法生成所有其他加密密钥。

    在通信前,用户A和B双方约定2个大整数n和g,其中1<g<n,这两个整数可以公开

    1. A随机产生一个大整数a,然后计算Ka=ga mod n(a需要保密)

    2. B随机产生一个大整数b,然后计算Kb=gb mod n(b需要保密)

    3. A把Ka发送给B,B把Kb发送给A

    4. A计算K=Kba mod n

    5. B计算K=Kab mod n

    由于Kba mod n= (gb mod n)a mod n= (ga mod n)b mod n,因此可以保证双方得到的K是相同的,K即是共享的密钥。可以参考JCE文档中的DH 3 party的例子。

    实际的一个用DH算法传递DES私钥的JAVA例子参看“JAVA上加密算法的实现用例”一文中的末一个例子,过程如下:假设A和B通信(JCE中只支持DH算法作为传递私钥的算法)

    A利用KeyPairGenerator类生成一个钥对类KeyPair并可通过generatePublic方法产生公钥PublicKey(puA)和getPrivate方法私钥PrivateKey(prA)。A把puA发给B。B用类X509EncodedKeySpec解码,然后利用KeyFactory类生成puA,转换成DHPublicKey类利用其getParams方法取得参数类DHParameterSpec,B再利用此参数类,通过KeyPairGenerator类的initialize方法生成KeyPairGenerator实例从而用generateKeyPair方法生成B的KeyPair。进而B生成puB和prB,B把puB发给A。A利用puB和prA作为参数,分别调用KeyAgreement类的init和doPhase方法初始化,然后用generateSecret方法生成各自的DES的密钥SecretKey,此密钥是相同的,即可用Cipher类进行加解密了。

    .NET 通过抽象基类 (System.Security.Crytography.AsymmetricAlgorithm) 提供下列非对称(公钥/私钥)加密算法:
    • DSACryptoServiceProvider

    • RSACryptoServiceProvider

    数字签名
    公钥算法还可用于构成数字签名。数字签名验证发送方的身份(如果您信任发送方的公钥)并帮助保护数据的完整性。

    为了使用公钥加密对消息进行数字签名,小红首先将哈希算法应用于该消息以创建消息摘要。该消息摘要是数据的紧凑且唯一的表示形式。然后,小红用她的私钥加密该消息摘要以创建她的个人签名。在收到消息和签名时,小明使用小红的公钥解密签名以恢复消息摘要,并使用与小红所使用的相同的哈希算法来散列消息。如果小明计算的消息摘要与从小红那里收到的消息摘要完全一致,小明就可以确定该消息来自私钥的持有人,并且数据未被修改过。如果小明相信小红是私钥的持有人,则他知道该消息来自小红。

    请注意,由于发送方的公钥为大家所周知,并且它通常包含在数字签名格式中,因此任何人都可以验证签名。此方法不保守消息的机密;若要使消息保密,还必须对消息进行加密。

    .NET Framework 提供以下实现数字签名算法的类:

    DSACryptoServiceProvider
    RSACryptoServiceProvider

    CA证书 Public Key Certificates(参考这里)

    A public key certificate provides a safe way for an entity to pass on its public key to be used in asymmetric cryptography. The public key certificate avoids the following situation: if Charlie creates his own public key and private key, he can claim that he is Alice and send his public key to Bob. Bob will be able to communicate with Charlie, but Bob will think that he is sending his data to Alice.

    A public key certificate can be thought of as the digital equivalent of a passport. It is issued by a trusted organization and provides identification for the bearer. A trusted organization that issues public key certificates is known as a certificate authority (CA). The CA can be likened to a notary public. To obtain a certificate from a CA, one must provide proof of identity. Once the CA is confident that the applicant represents the organization it says it represents, the CA signs the certificate attesting to the validity of the information contained within the certificate.

    A public key certificate contains several fields, including:

    Issuer - The issuer is the CA that issued the certificate. If a user trusts the CA that issues a certificate, and if the certificate is valid, the user can trust the certificate.

    Period of validity - A certificate has an expiration date, and this date is one piece of information that should be checked when verifying the validity of a certificate.

    Subject - The subject field includes information about the entity that the certificate represents.

    Subject’s public key - The primary piece of information that the certificate provides is the subject’s public key. All the other fields are provided to ensure the validity of this key.

    Signature - The certificate is digitally signed by the CA that issued the certificate. The signature is created using the CA’s private key and ensures the validity of the certificate. Because only the certificate is signed, not the data sent in the SSL transaction, SSL does not provide for non-repudiation.
    If Bob only accepts Alice’s public key as valid when she sends it in a public key certificate, Bob will not be fooled into sending secret information to Charlie when Charlie masquerades as Alice.

    Multiple certificates may be linked in a certificate chain. When a certificate chain is used, the first certificate is always that of the sender. The next is the certificate of the entity that issued the sender’s certificate. If there are more certificates in the chain, each is that of the authority that issued the previous certificate. The final certificate in the chain is the certificate for a root CA. A root CA is a public certificate authority that is widely trusted. Information for several root CAs is typically stored in the client’s Internet browser. This information includes the CA’s public key. Well-known CAs include VeriSign, Entrust, and GTE CyberTrust.

    哈希值
    哈希算法将任意长度的二进制值映射为固定长度的较小二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。如果散列一段明文而且哪怕只更改该段落的一个字母,随后的哈希计算都将产生不同的值。要找到散列为同一个值的两个不同的输入,在计算上是不可能的。

    消息身份验证代码 (MAC) 哈希函数通常与数字签名一起用于对数据进行签名,而消息检测代码 (MDC) 哈希函数则用于数据完整性。

    双方(小红和小明)可按下面的方式使用哈希函数来确保数据的完整性。如果小红对小明编写一条消息并创建该消息的哈希,则小明可以在稍后散列该消息并将他的哈希与原始哈希进行比较。如果两个哈希值相同,则该消息没有被更改;如果值不相同,则该消息在小红编写它之后已被更改。为了使此系统发挥作用,小红必须对除小明外的所有人保密原始的哈希值。

    When sending encrypted data, SSL typically uses a cryptographic hash function to ensure data integrity. The hash function prevents Charlie from tampering with data that Alice sends to Bob.

    A cryptographic hash function is similar to a checksum. The main difference is that while a checksum is designed to detect accidental alterations in data, a cryptographic hash function is designed to detect deliberate alterations. When data is processed by a cryptographic hash function, a small string of bits, known as a hash, is generated. The slightest change to the message typically makes a large change in the resulting hash. A cryptographic hash function does not require a cryptographic key. Two hash functions often used with SSL are Message Digest 5 (MD5) and Secure Hash Algorithm (SHA). SHA was proposed by the US National Institute of Science and Technology (NIST).

    Message Authentication Code: A message authentication code (MAC) is similar to a cryptographic hash, except that it is based on a secret key. When secret key information is included with the data that is processed by a cryptographic hash function, the resulting hash is known as an HMAC.
    If Alice wants to be sure that Charlie does not tamper with her message to Bob, she can calculate an HMAC for her message and append the HMAC to her original message. She can then encrypt the message plus the HMAC using a secret key she shares with Bob. When Bob decrypts the message and calculates the HMAC, he will be able to tell if the message was modified in transit. With SSL, an HMAC is used with the transmission of secure data.

    .NET Framework 提供以下实现数字签名算法的类:

    HMACSHA1
    MACTripleDES
    MD5CryptoServiceProvider
    SHA1Managed
    SHA256Managed
    SHA384Managed
    SHA512Managed

    摘要函数(MD2、MD4和MD5,还有SHA1等算法(产生一个20字节的二进制数组))
    摘要是一种防止改动的方法,其中用到的函数叫摘要函数。这些函数的输入可以是任意大小的消息,而输出是一个固定长度的摘要。摘要有这样一个性质,如果改变了输入消息中的任何东西,甚至只有一位,输出的摘要将会发生不可预测的改变,也就是说输入消息的每一位对输出摘要都有影响。总之,摘要算法从给定的文本块中产生一个数字签名(fingerprint或message digest),数字签名可以用于防止有人从一个签名上获取文本信息或改变文本信息内容。摘要算法的数字签名原理在很多加密算法中都被使用,如S/KEY和PGP(pretty good privacy)。

    现在流行的摘要函数有MD4和MD5。MD2摘要算法的设计是出于下面的考虑:利用32位RISC结构来最大其吞吐量,而不需要大量的替换表(substitution table)。MD4算法将消息的给予对长度作为输入,产生一个128位的"指纹"或"消息化"。要产生两个具有相同消息化的文字块或者产生任何具有预先给定"指纹"的消息,都被认为在计算上是不可能的。MD5摘要算法是个数据认证标准。MD5的设计思想是要找出速度更快但更不安全的MD4中潜在的不安全,MD5的设计者通过使MD5在计算上慢下来,以及对这些计算做了一些基础性的改动来解决这个问题。MD5在RFC1321中给出文档描述,是MD4算法的一个扩展。美国国家标准技术研究所的SHA1和麻省理工学院Ronald Rivest提出的MD5是为代表。HMAC-MD5算法(消息摘要5)基于RFC1321。MD5对MD4做了改进,计算速度比MD4稍慢,但安全性能得到了进一步改善。MD5在计算中使用了64个32位常数,最终生成一个128位的完整性检查和。

    HMAC-SHA算法:安全Hash算法定义在NIST FIPS 180-1,其算法以MD5为原型。SHA在计算中使用了79个32位常数,最终产生一个160位完整性检查和。SHA检查和长度比MD5更长,因此安全性也更高。

    随机数生成
    随机数生成是许多加密操作不可分割的组成部分。例如,加密密钥需要尽可能地随机,以便使生成的密钥很难再现。加密随机数生成器必须生成无法以计算方法推算出(低于 p < .05 的概率)的输出;即,任何推算下一个输出位的方法不得比随机猜测具有更高的成功概率。.NET Framework 中的类使用随机数生成器生成加密密钥。

    在商务领域的应用

    许多人都知道NETSCAPE公司是Internet商业中领先技术的提供者,该公司提供了一种基于RSA和保密密钥的应用于因特网的技术,被称为安全插座层(Secure Sockets Layer,SSL)。

    也许很多人知道Socket,它是一个编程界面,并不提供任何安全措施,而SSL不但提供编程界面,而且向上提供一种安全的服务,SSL3.0现在已经应用到了服务器和浏览器上,SSL2.0则只能应用于服务器端。

    SSL3.0用一种电子证书(electric certificate)来实行身份进行验证后,双方就可以用保密密钥进行安全的会话了。它同时使用“对称”和“非对称”加密方法,在客户与电子商务的服务器进行沟通的过程中,客户会产生一个Session Key,然后客户用服务器端的公钥将Session Key进行加密,再传给服务器端,在双方都知道Session Key后,传输的数据都是以Session Key进行加密与解密的,但服务器端发给用户的公钥必需先向有关发证机关申请,以得到公证。

    基于SSL3.0提供的安全保障,用户就可以自由订购商品并且给出信用卡号了,也可以在网上和合作伙伴交流商业信息并且让供应商把订单和收货单从网上发过来,这样可以节省大量的纸张,为公司节省大量的电话、传真费用。在过去,电子信息交换(Electric Data Interchange,EDI)、信息交易(information transaction)和金融交易(financial transaction)都是在专用网络上完成的,使用专用网的费用大大高于互联网。正是这样巨大的诱惑,才使人们开始发展因特网上的电子商务,但不要忘记数据加密。

    SSL(Secure Sockets Layer) or TSL (Transport Layer Security)

    Secure Sockets Layer (SSL) is the most widely used protocol for implementing cryptography on the Web. SSL uses a combination of cryptographic processes to provide secure communication over a network. This section provides an introduction to SSL and the cryptographic processes it uses.

    SSL provides a secure enhancement to the standard TCP/IP sockets protocol used for Internet communications. As shown in the “TCP/IP Protocol Stack With SSL” figure below, the secure sockets layer is added between the transport layer and the application layer in the standard TCP/IP protocol stack. The application most commonly used with SSL is Hypertext Transfer Protocol (HTTP), the protocol for Internet Web pages.

    SSL was developed by Netscape in 1994, and with input from the Internet community, has evolved to become a standard. It is now under the control of the international standards organization, the Internet Engineering Task Force (IETF). The IETF has renamed SSL to Transport Layer Security (TLS), and released the first specification, version 1.0, in January 1999. TLS 1.0 is a modest upgrade to the most recent version of SSL, version 3.0. The differences between SSL 3.0 and TLS 1.0 are minor.

    One of the reasons SSL is effective is that it uses several different cryptographic processes. SSL uses public key cryptography to provide authentication, and secret key cryptography and digital signatures to provide for privacy and data integrity. Before you can understand SSL, it is helpful to understand these cryptographic processes.

    常用算法比较

    数据加密标准(DES)是一个古老的对称密钥加密算法,目前已经不再使用。它不是一个很安全的算法。

    三重DES(Triple-DES)仍然是很安全的,但是也只是在别无他法的情况下的一个较好的选择。显然高级加密标准(AES)是一个更好的加密算法,NIST用AES代替Triple-DES作为他们的标准(下面有更详细的讨论)。其他较好的算法包括另外两个AES的变种算法Twofish和Serpent-也称为CAST-128,它是效率和安全的完美结合。这几个算法不仅比DES更安全,而且也比DES的速度更快。为什么要使用一些又慢又不安全的算法呢

    SHA1是一个哈希函数,而不是一个加密函数。作为一个哈希函数,SHA1还是相当优秀的,但是还需要几年的发展才能用作加密算法。如果你正在设计一个新系统,那么谨记你可能会在若干年后用SHA1代替目前的算法。我再重复一遍:只是可能。

    RSA是一个公开密钥加密算法。RSA的密钥长度一般为2048-4096位。如果你现在的系统使用的是1024位的公开密钥,也没有必要担心,但是你可以加长密钥长度来达到更好的加密效果。

    高级加密标准(AES)是一个用来代替数据加密标准(DES)的算法。目前使用的一般为128,196和256位密钥,这三种密钥都是相当安全的。而且美国政府也是这样认为的。他们批准将128位密钥的AES算法用于一般数据加密,196位和256位密钥的AES算法用于秘密数据和绝密数据的加密。

    DESX是DES的一个改进版本。DESX的原理是利用一个随机的二进制数与加密前的数据以及解密后的数据异或。虽然也有人批评这种算法,但是与DES相比DESX确实更安全,不过DESX在许多情况下并不适用。我曾经处理过一个硬件支持DES的系统,由于有些环节不能容忍三重DES的慢速,我们在这些地方使用了DESX来代替DES。然而,这是一个非常特殊的情况。如果你需要使用DESX,理由显而易见(可能和我不得不使用DESX的原因类似)。但我建议你使用AES或者上面我提到的一些算法。

    RC4是一种常用于SSL连接的数据流加密算法。它已经出现很多年了,而且有很多已知和可能的缺陷,因此在一些新的工程中不要使用它。如果你目前正在使用它而且可以轻易的卸载它,那么情况也不是很坏。不过,我怀疑如果你现在正在使用它,你不可能轻易的卸载它。如果不能将它从系统中轻易的卸载,那么你还是考虑今后怎样升级它,但是不要感到很惊慌。我不会拒绝在一个使用RC4算法来加密SSL连接的网站购买东西,但是如果我现在要新建一个系统,那么我会考虑使用其他的算法,例如:AES。

    对于下面两个算法MD5-RSA和SHA1-DSA,他们是用于数字签名的。但是不要使用MD5,因为它有很多缺陷。很多年前大家就知道MD5中存在漏洞,不过直到今年夏天才破解出来。我们可以将SHA1和RSA或DSA配合在一起使用,目前DSA的密钥位数高达1024位,这个密钥位数已经足够长了,因此不需要担心安全问题。然而,如果NIST实现了更长的密钥位数当然更好。

    X.509证书是一个数据结构,常用于规定比特和字节的顺序,它本身不是一个密码系统。它通常包含一个RSA密钥,也可能包含一个DSA密钥。但是X.509证书内部以及证书本身并不是加密技术。对称加密和不对称加密原理
    私钥加密(对称加密 symmetric cryptography):私钥加密算法使用单个私钥来加密和解密数据。由于具有密钥的任意一方都可以使用该密钥解密数据,因此必须保护密钥不被未经授权的代理得到。私钥加密又称为对称加密,因为同一密钥既用于加密又用于解密。私钥加密算法非常快(与公钥算法相比),特别适用于对较大的数据流执行加密转换。Well-known secret key cryptographic algorithms include the Data Encryption Standard (DES), triple-strength DES (3DES), Rivest Cipher 2 (RC2), and Rivest Cipher 4 (RC4).

    通常,私钥算法(称为块密码)用于一次加密一个数据块。块密码(如 RC2、DES、TripleDES 和 Rijndael)通过加密将 n 字节的输入块转换为加密字节的输出块。如果要加密或解密字节序列,必须逐块进行。由于 n 很小(对于 RC2、DES 和 TripleDES,n = 8 字节;n = 16 [默认值];n = 24;对于 Rijndael,n = 32),因此必须对大于 n 的数据值一次加密一个块。
    基类库中提供的块密码类使用称作密码块链 (CBC) 的链模式,它使用一个密钥和一个初始化向量 (IV) 对数据执行加密转换。对于给定的私钥k,一个不使用初始化向量的简单块密码将把相同的明文输入块加密为同样的密文输出块。如果在明文流中有重复的块,那么在密文流中将存在重复的块。如果未经授权的用户知道有关明文块的结构的任何信息,就可以使用这些信息解密已知的密文块并有可能发现您的密钥。若要克服这个问题,可将上一个块中的信息混合到加密下一个块的过程中。这样,两个相同的明文块的输出就会不同。由于该技术使用上一个块加密下一个块,因此使用了一个 IV 来加密数据的第一个块。使用该系统,未经授权的用户有可能知道的公共消息标头将无法用于对密钥进行反向工程。

    可以危及用此类型密码加密的数据的一个方法是,对每个可能的密钥执行穷举搜索。根据用于执行加密的密钥大小,即使使用最快的计算机执行这种搜索,也极其耗时,因此难以实施。使用较大的密钥大小将使解密更加困难。虽然从理论上说加密不会使对手无法检索加密的数据,但这确实极大增加了这样做的成本。如果执行彻底搜索来检索只在几天内有意义的数据需要花费三个月的时间,那么穷举搜索的方法是不实用的。
    私钥加密的缺点是它假定双方已就密钥和 IV 达成协议,并且互相传达了密钥和 IV 的值。并且,密钥必须对未经授权的用户保密。由于存在这些问题,私钥加密通常与公钥加密一起使用,来秘密地传达密钥和 IV 的值。

    最早、最著名的保密密钥或对称密钥加密算法DES(Data Encryption Standard)/DESede是由IBM公司在70年代发展起来的,并经政府的加密标准筛选后,于1976年11月被美国政府采用,DES随后被美国国家标准局和美国国家标准协会(American National Standard Institute,ANSI)承认。DES使用56位密钥对64位的数据块进行加密,并对64位的数据块进行16轮编码。与每轮编码时,一个48位的"每轮"密钥值由56位的完整密钥得出来。

    .NET 提供以下实现类以提供对称的密钥加密算法:
    • DESCryptoServiceProvider

    • RC2CryptoServiceProvider

    • RijndaelManaged

    • TripleDESCryptoServiceProvider

    公钥加密(不对称加密, RSA, DSA, DH asymmetric cryptography ):公钥加密使用一个必须对未经授权的用户保密的私钥和一个可以对任何人公开的公钥。公钥和私钥都在数学上相关联;用公钥加密的数据只能用私钥解密,而用私钥签名的数据只能用公钥验证。公钥可以提供给任何人;公钥用于对要发送到私钥持有者的数据进行加密。两个密钥对于通信会话都是唯一的。公钥加密算法也称为不对称算法,原因是需要用一个密钥加密数据而需要用另一个密钥来解密数据。对称算法的根本原理就是单向函数,f(a)=b,但是用b很难得到a。
    公钥加密算法使用固定的缓冲区大小,而私钥加密算法使用长度可变的缓冲区。公钥算法无法像私钥算法那样将数据链接起来成为流,原因是它只可以加密少量数据。因此,不对称操作不使用与对称操作相同的流模型。

    双方(小红和小明)可以按照下列方式使用公钥加密。首先,小红生成一个公钥/私钥对。如果小明想要给小红发送一条加密的消息,他将向她索要她的公钥。小红通过不安全的网络将她的公钥发送给小明,小明接着使用该密钥加密消息。(如果小明在不安全的信道如公共网络上收到小红的密钥,则小明必须同小红验证他具有她的公钥的正确副本。)小明将加密的消息发送给小红,而小红使用她的私钥解密该消息。
    但是,在传输小红的公钥期间,未经授权的代理可能截获该密钥。而且,同一代理可能截获来自小明的加密消息。但是,该代理无法用公钥解密该消息。该消息只能用小红的私钥解密,而该私钥没有被传输。小红不使用她的私钥加密给小明的答复消息,原因是任何具有公钥的人都可以解密该消息。如果小红想要将消息发送回小明,她将向小明索要他的公钥并使用该公钥加密她的消息。然后,小明使用与他相关联的私钥来解密该消息。

    在一个实际方案中,小红和小明使用公钥(不对称)加密来传输私(对称)钥,而对他们的会话的其余部分使用私钥加密(由于对称加密快捷,用于实际的数据加密,而利用不对称加密的方式解决对称加密中私钥传递的不安全性,此为对称和不对称加密结合的加密方式)。
    公钥加密具有更大的密钥空间(或密钥的可能值范围),因此不大容易受到对每个可能密钥都进行尝试的穷举攻击。由于不必保护公钥,因此它易于分发。公钥算法可用于创建数字签名以验证数据发送方的身份。但是,公钥算法非常慢(与私钥算法相比),不适合用来加密大量数据。公钥算法仅对传输很少量的数据有用。公钥加密通常用于加密一个私钥算法将要使用的密钥和 IV。传输密钥和 IV 后,会话的其余部分将使用私钥加密。

    RSA系统是诸多此类算法中最著名、最多使用的一种。RSA公开密钥密码系统是由R.Rivest、A.Shamir和L.Adleman俊教授于1977年提出的。RSA的取名就是来自于这三位发明者的姓的第一个字母RSA(Rivest-Shamir-Adleman)算法是基于大数不可能被质因数分解假设的公钥体系。简单地说就是找两个很大的质数。一个对外公开的为“公钥”(Prblic key) ,另一个不告诉任何人,称为"私钥”(Private key)。这两个密钥是互补的,也就是说用公钥加密的密文可以用私钥解密,反过来也一样。

    公钥的传输:要启动安全通讯,通信两端必须首先得到相同的共享密钥(主密钥),但共享密钥不能通过网络相互发送,因为这种做法极易泄密。Diffie-Hellman算法是用于密钥交换的最早最安全的算法之一。

    RSA算法:RSA算法是基于大数难于分解的原理。不但可以用于认证,也可以用于密钥传输,例子可以参考RSAUtil.java文件。那么用户A和B如何利用RSA算法来传输密钥呢?

    1:A产生一个密钥K,用B的公钥加密K,然后将得到的密文发送给B。

    2:B用自己的私钥解密收到的密钥,就可以得到密钥。

    DH算法:DH算法的出现就是用来进行密钥传输的。DH算法是基于离散对数实现的。DH算法的基本工作原理是:通信双方公开或半公开交换一些准备用来生成密钥的"材料数据",在彼此交换过密钥生成"材料"后,两端可以各自生成出完全一样的共享密钥。在任何时候,双方都绝不交换真正的密钥。通信双方交换的密钥生成"材料",长度不等,"材料"长度越长,所生成的密钥强度也就越高,密钥破译就越困难。除进行密钥交换外,IPSec还使用DH算法生成所有其他加密密钥。

    在通信前,用户A和B双方约定2个大整数n和g,其中1<g<n,这两个整数可以公开

    1. A随机产生一个大整数a,然后计算Ka=ga mod n(a需要保密)

    2. B随机产生一个大整数b,然后计算Kb=gb mod n(b需要保密)

    3. A把Ka发送给B,B把Kb发送给A

    4. A计算K=Kba mod n

    5. B计算K=Kab mod n

    由于Kba mod n= (gb mod n)a mod n= (ga mod n)b mod n,因此可以保证双方得到的K是相同的,K即是共享的密钥。可以参考JCE文档中的DH 3 party的例子。

    实际的一个用DH算法传递DES私钥的JAVA例子参看“JAVA上加密算法的实现用例”一文中的末一个例子,过程如下:假设A和B通信(JCE中只支持DH算法作为传递私钥的算法)

    A利用KeyPairGenerator类生成一个钥对类KeyPair并可通过generatePublic方法产生公钥PublicKey(puA)和getPrivate方法私钥PrivateKey(prA)。A把puA发给B。B用类X509EncodedKeySpec解码,然后利用KeyFactory类生成puA,转换成DHPublicKey类利用其getParams方法取得参数类DHParameterSpec,B再利用此参数类,通过KeyPairGenerator类的initialize方法生成KeyPairGenerator实例从而用generateKeyPair方法生成B的KeyPair。进而B生成puB和prB,B把puB发给A。A利用puB和prA作为参数,分别调用KeyAgreement类的init和doPhase方法初始化,然后用generateSecret方法生成各自的DES的密钥SecretKey,此密钥是相同的,即可用Cipher类进行加解密了。

    .NET 通过抽象基类 (System.Security.Crytography.AsymmetricAlgorithm) 提供下列非对称(公钥/私钥)加密算法:
    • DSACryptoServiceProvider

    • RSACryptoServiceProvider

    数字签名
    公钥算法还可用于构成数字签名。数字签名验证发送方的身份(如果您信任发送方的公钥)并帮助保护数据的完整性。

    为了使用公钥加密对消息进行数字签名,小红首先将哈希算法应用于该消息以创建消息摘要。该消息摘要是数据的紧凑且唯一的表示形式。然后,小红用她的私钥加密该消息摘要以创建她的个人签名。在收到消息和签名时,小明使用小红的公钥解密签名以恢复消息摘要,并使用与小红所使用的相同的哈希算法来散列消息。如果小明计算的消息摘要与从小红那里收到的消息摘要完全一致,小明就可以确定该消息来自私钥的持有人,并且数据未被修改过。如果小明相信小红是私钥的持有人,则他知道该消息来自小红。

    请注意,由于发送方的公钥为大家所周知,并且它通常包含在数字签名格式中,因此任何人都可以验证签名。此方法不保守消息的机密;若要使消息保密,还必须对消息进行加密。

    .NET Framework 提供以下实现数字签名算法的类:

    DSACryptoServiceProvider
    RSACryptoServiceProvider

    CA证书 Public Key Certificates(参考这里)

    A public key certificate provides a safe way for an entity to pass on its public key to be used in asymmetric cryptography. The public key certificate avoids the following situation: if Charlie creates his own public key and private key, he can claim that he is Alice and send his public key to Bob. Bob will be able to communicate with Charlie, but Bob will think that he is sending his data to Alice.

    A public key certificate can be thought of as the digital equivalent of a passport. It is issued by a trusted organization and provides identification for the bearer. A trusted organization that issues public key certificates is known as a certificate authority (CA). The CA can be likened to a notary public. To obtain a certificate from a CA, one must provide proof of identity. Once the CA is confident that the applicant represents the organization it says it represents, the CA signs the certificate attesting to the validity of the information contained within the certificate.

    A public key certificate contains several fields, including:

    Issuer - The issuer is the CA that issued the certificate. If a user trusts the CA that issues a certificate, and if the certificate is valid, the user can trust the certificate.

    Period of validity - A certificate has an expiration date, and this date is one piece of information that should be checked when verifying the validity of a certificate.

    Subject - The subject field includes information about the entity that the certificate represents.

    Subject’s public key - The primary piece of information that the certificate provides is the subject’s public key. All the other fields are provided to ensure the validity of this key.

    Signature - The certificate is digitally signed by the CA that issued the certificate. The signature is created using the CA’s private key and ensures the validity of the certificate. Because only the certificate is signed, not the data sent in the SSL transaction, SSL does not provide for non-repudiation.
    If Bob only accepts Alice’s public key as valid when she sends it in a public key certificate, Bob will not be fooled into sending secret information to Charlie when Charlie masquerades as Alice.

    Multiple certificates may be linked in a certificate chain. When a certificate chain is used, the first certificate is always that of the sender. The next is the certificate of the entity that issued the sender’s certificate. If there are more certificates in the chain, each is that of the authority that issued the previous certificate. The final certificate in the chain is the certificate for a root CA. A root CA is a public certificate authority that is widely trusted. Information for several root CAs is typically stored in the client’s Internet browser. This information includes the CA’s public key. Well-known CAs include VeriSign, Entrust, and GTE CyberTrust.

    哈希值
    哈希算法将任意长度的二进制值映射为固定长度的较小二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。如果散列一段明文而且哪怕只更改该段落的一个字母,随后的哈希计算都将产生不同的值。要找到散列为同一个值的两个不同的输入,在计算上是不可能的。

    消息身份验证代码 (MAC) 哈希函数通常与数字签名一起用于对数据进行签名,而消息检测代码 (MDC) 哈希函数则用于数据完整性。

    双方(小红和小明)可按下面的方式使用哈希函数来确保数据的完整性。如果小红对小明编写一条消息并创建该消息的哈希,则小明可以在稍后散列该消息并将他的哈希与原始哈希进行比较。如果两个哈希值相同,则该消息没有被更改;如果值不相同,则该消息在小红编写它之后已被更改。为了使此系统发挥作用,小红必须对除小明外的所有人保密原始的哈希值。

    When sending encrypted data, SSL typically uses a cryptographic hash function to ensure data integrity. The hash function prevents Charlie from tampering with data that Alice sends to Bob.

    A cryptographic hash function is similar to a checksum. The main difference is that while a checksum is designed to detect accidental alterations in data, a cryptographic hash function is designed to detect deliberate alterations. When data is processed by a cryptographic hash function, a small string of bits, known as a hash, is generated. The slightest change to the message typically makes a large change in the resulting hash. A cryptographic hash function does not require a cryptographic key. Two hash functions often used with SSL are Message Digest 5 (MD5) and Secure Hash Algorithm (SHA). SHA was proposed by the US National Institute of Science and Technology (NIST).

    Message Authentication Code: A message authentication code (MAC) is similar to a cryptographic hash, except that it is based on a secret key. When secret key information is included with the data that is processed by a cryptographic hash function, the resulting hash is known as an HMAC.
    If Alice wants to be sure that Charlie does not tamper with her message to Bob, she can calculate an HMAC for her message and append the HMAC to her original message. She can then encrypt the message plus the HMAC using a secret key she shares with Bob. When Bob decrypts the message and calculates the HMAC, he will be able to tell if the message was modified in transit. With SSL, an HMAC is used with the transmission of secure data.

    .NET Framework 提供以下实现数字签名算法的类:

    HMACSHA1
    MACTripleDES
    MD5CryptoServiceProvider
    SHA1Managed
    SHA256Managed
    SHA384Managed
    SHA512Managed

    摘要函数(MD2、MD4和MD5,还有SHA1等算法(产生一个20字节的二进制数组))
    摘要是一种防止改动的方法,其中用到的函数叫摘要函数。这些函数的输入可以是任意大小的消息,而输出是一个固定长度的摘要。摘要有这样一个性质,如果改变了输入消息中的任何东西,甚至只有一位,输出的摘要将会发生不可预测的改变,也就是说输入消息的每一位对输出摘要都有影响。总之,摘要算法从给定的文本块中产生一个数字签名(fingerprint或message digest),数字签名可以用于防止有人从一个签名上获取文本信息或改变文本信息内容。摘要算法的数字签名原理在很多加密算法中都被使用,如S/KEY和PGP(pretty good privacy)。

    现在流行的摘要函数有MD4和MD5。MD2摘要算法的设计是出于下面的考虑:利用32位RISC结构来最大其吞吐量,而不需要大量的替换表(substitution table)。MD4算法将消息的给予对长度作为输入,产生一个128位的"指纹"或"消息化"。要产生两个具有相同消息化的文字块或者产生任何具有预先给定"指纹"的消息,都被认为在计算上是不可能的。MD5摘要算法是个数据认证标准。MD5的设计思想是要找出速度更快但更不安全的MD4中潜在的不安全,MD5的设计者通过使MD5在计算上慢下来,以及对这些计算做了一些基础性的改动来解决这个问题。MD5在RFC1321中给出文档描述,是MD4算法的一个扩展。美国国家标准技术研究所的SHA1和麻省理工学院Ronald Rivest提出的MD5是为代表。HMAC-MD5算法(消息摘要5)基于RFC1321。MD5对MD4做了改进,计算速度比MD4稍慢,但安全性能得到了进一步改善。MD5在计算中使用了64个32位常数,最终生成一个128位的完整性检查和。

    HMAC-SHA算法:安全Hash算法定义在NIST FIPS 180-1,其算法以MD5为原型。SHA在计算中使用了79个32位常数,最终产生一个160位完整性检查和。SHA检查和长度比MD5更长,因此安全性也更高。

    随机数生成
    随机数生成是许多加密操作不可分割的组成部分。例如,加密密钥需要尽可能地随机,以便使生成的密钥很难再现。加密随机数生成器必须生成无法以计算方法推算出(低于 p < .05 的概率)的输出;即,任何推算下一个输出位的方法不得比随机猜测具有更高的成功概率。.NET Framework 中的类使用随机数生成器生成加密密钥。

    在商务领域的应用

    许多人都知道NETSCAPE公司是Internet商业中领先技术的提供者,该公司提供了一种基于RSA和保密密钥的应用于因特网的技术,被称为安全插座层(Secure Sockets Layer,SSL)。

    也许很多人知道Socket,它是一个编程界面,并不提供任何安全措施,而SSL不但提供编程界面,而且向上提供一种安全的服务,SSL3.0现在已经应用到了服务器和浏览器上,SSL2.0则只能应用于服务器端。

    SSL3.0用一种电子证书(electric certificate)来实行身份进行验证后,双方就可以用保密密钥进行安全的会话了。它同时使用“对称”和“非对称”加密方法,在客户与电子商务的服务器进行沟通的过程中,客户会产生一个Session Key,然后客户用服务器端的公钥将Session Key进行加密,再传给服务器端,在双方都知道Session Key后,传输的数据都是以Session Key进行加密与解密的,但服务器端发给用户的公钥必需先向有关发证机关申请,以得到公证。

    基于SSL3.0提供的安全保障,用户就可以自由订购商品并且给出信用卡号了,也可以在网上和合作伙伴交流商业信息并且让供应商把订单和收货单从网上发过来,这样可以节省大量的纸张,为公司节省大量的电话、传真费用。在过去,电子信息交换(Electric Data Interchange,EDI)、信息交易(information transaction)和金融交易(financial transaction)都是在专用网络上完成的,使用专用网的费用大大高于互联网。正是这样巨大的诱惑,才使人们开始发展因特网上的电子商务,但不要忘记数据加密。

    SSL(Secure Sockets Layer) or TSL (Transport Layer Security)

    Secure Sockets Layer (SSL) is the most widely used protocol for implementing cryptography on the Web. SSL uses a combination of cryptographic processes to provide secure communication over a network. This section provides an introduction to SSL and the cryptographic processes it uses.

    SSL provides a secure enhancement to the standard TCP/IP sockets protocol used for Internet communications. As shown in the “TCP/IP Protocol Stack With SSL” figure below, the secure sockets layer is added between the transport layer and the application layer in the standard TCP/IP protocol stack. The application most commonly used with SSL is Hypertext Transfer Protocol (HTTP), the protocol for Internet Web pages.

    SSL was developed by Netscape in 1994, and with input from the Internet community, has evolved to become a standard. It is now under the control of the international standards organization, the Internet Engineering Task Force (IETF). The IETF has renamed SSL to Transport Layer Security (TLS), and released the first specification, version 1.0, in January 1999. TLS 1.0 is a modest upgrade to the most recent version of SSL, version 3.0. The differences between SSL 3.0 and TLS 1.0 are minor.

    One of the reasons SSL is effective is that it uses several different cryptographic processes. SSL uses public key cryptography to provide authentication, and secret key cryptography and digital signatures to provide for privacy and data integrity. Before you can understand SSL, it is helpful to understand these cryptographic processes.

    常用算法比较

    数据加密标准(DES)是一个古老的对称密钥加密算法,目前已经不再使用。它不是一个很安全的算法。

    三重DES(Triple-DES)仍然是很安全的,但是也只是在别无他法的情况下的一个较好的选择。显然高级加密标准(AES)是一个更好的加密算法,NIST用AES代替Triple-DES作为他们的标准(下面有更详细的讨论)。其他较好的算法包括另外两个AES的变种算法Twofish和Serpent-也称为CAST-128,它是效率和安全的完美结合。这几个算法不仅比DES更安全,而且也比DES的速度更快。为什么要使用一些又慢又不安全的算法呢

    SHA1是一个哈希函数,而不是一个加密函数。作为一个哈希函数,SHA1还是相当优秀的,但是还需要几年的发展才能用作加密算法。如果你正在设计一个新系统,那么谨记你可能会在若干年后用SHA1代替目前的算法。我再重复一遍:只是可能。

    RSA是一个公开密钥加密算法。RSA的密钥长度一般为2048-4096位。如果你现在的系统使用的是1024位的公开密钥,也没有必要担心,但是你可以加长密钥长度来达到更好的加密效果。

    高级加密标准(AES)是一个用来代替数据加密标准(DES)的算法。目前使用的一般为128,196和256位密钥,这三种密钥都是相当安全的。而且美国政府也是这样认为的。他们批准将128位密钥的AES算法用于一般数据加密,196位和256位密钥的AES算法用于秘密数据和绝密数据的加密。

    DESX是DES的一个改进版本。DESX的原理是利用一个随机的二进制数与加密前的数据以及解密后的数据异或。虽然也有人批评这种算法,但是与DES相比DESX确实更安全,不过DESX在许多情况下并不适用。我曾经处理过一个硬件支持DES的系统,由于有些环节不能容忍三重DES的慢速,我们在这些地方使用了DESX来代替DES。然而,这是一个非常特殊的情况。如果你需要使用DESX,理由显而易见(可能和我不得不使用DESX的原因类似)。但我建议你使用AES或者上面我提到的一些算法。

    RC4是一种常用于SSL连接的数据流加密算法。它已经出现很多年了,而且有很多已知和可能的缺陷,因此在一些新的工程中不要使用它。如果你目前正在使用它而且可以轻易的卸载它,那么情况也不是很坏。不过,我怀疑如果你现在正在使用它,你不可能轻易的卸载它。如果不能将它从系统中轻易的卸载,那么你还是考虑今后怎样升级它,但是不要感到很惊慌。我不会拒绝在一个使用RC4算法来加密SSL连接的网站购买东西,但是如果我现在要新建一个系统,那么我会考虑使用其他的算法,例如:AES。

    对于下面两个算法MD5-RSA和SHA1-DSA,他们是用于数字签名的。但是不要使用MD5,因为它有很多缺陷。很多年前大家就知道MD5中存在漏洞,不过直到今年夏天才破解出来。我们可以将SHA1和RSA或DSA配合在一起使用,目前DSA的密钥位数高达1024位,这个密钥位数已经足够长了,因此不需要担心安全问题。然而,如果NIST实现了更长的密钥位数当然更好。

    X.509证书是一个数据结构,常用于规定比特和字节的顺序,它本身不是一个密码系统。它通常包含一个RSA密钥,也可能包含一个DSA密钥。但是X.509证书内部以及证书本身并不是加密技术。

    转自:https://www.cnblogs.com/lvdongjie/p/4241107.html

    展开全文
  • 对称加密(1)对称加密基本原理 对称加密是计算机加密领域最古老也是最经典的加密标准。虽然对称加密被认为不再是安全的加密方式,但是直到现在,我们还看不到它被淘汰的迹象。在很多非网络化的加密环境中,对称加密...

    对称加密(1) 对称加密基本原理

    对称加密是计算机加密领域最古老也是最经典的加密标准。虽然对称加密被认为不再是安全的加密方式,但是直到现在,我们还看不到它被淘汰的迹象。在很多非网络化的加密环境中,对称加密足以满足人们的需要。

    对称加密采用单密钥加密方式,不论是加密还是解密都是用同一个密钥,即“一把钥匙开一把锁”。对称加密的好处在于操作简单、管理方便、速度快。它的缺点在于密钥在网络传输中容易被窃听,每个密钥只能应用一次,对密钥管理造成了困难。对称加密的实现形式和加密算法的公开性使它依赖于密钥的安全性,而不是算法的安全性。

    一个对称加密系统由五个部分组成,可以表述为

    S={MCKED}

    各字母的含义如下:

    M:明文空间,所有明文的集合。

    C:密文空间,全体密文的集合。

    K:密钥空间,全体密钥的集合。

    E:加密算法。

    D:解密算法。

    对称加密和解密一般会遵循如图1-1所示的流程。

    1-1  对称加密解密流程

    现在对图6-1做简要的分析,数据的发送方现在想要把数据安全地发送给接收方,但是没有办法阻止攻击者在发送方和接收方之间监听网络,只能采用加密数据的方式。首先,发送方对使用加密算法E利用密钥K对要发送的明文M加密,得到密文C,这个过程可以简单的表示为:

    C=EKM

    发送方将密文C通过网络传输给接收方。在传输过程中,如果攻击者截获了发送的信息,看到的只是密文,不采取破解手段是无法获得明文内容的。接收方在接收了发送方发来的密文之后,也同样没有办法获取明文,发送方必须通过特殊的途径将密钥发送给接收方。接收方利用密钥K使用解密算法获取明文,这个过程可表示为:

    M=DKC

    从这个流程中可以体会到,密钥K的传递成为了最关键的一步,如果攻击者获取了K,那么就会轻而易举地破解密文,因为加密算法是公开的。

     


    本文转自悬魂博客园博客,原文链接:http://www.cnblogs.com/xuanhun/archive/2012/06/23/2559492.html,如需转载请自行联系原作者

    展开全文
  • 信息安全原理与技术ch03(1)-对称加密技术;第3章 对称加密技术(1;密码技术主要分为对称密码技术和非对称密码技术 对称密码技术中加密密钥和解密密钥相同或者一个密钥可以从另一个导出 非对称密码技术则使用两个密钥, ...
  • 对称加密算法原理简介

    千次阅读 2020-03-15 16:41:41
    对称加密算法使用相同的密钥进行加密和解密,它的计算量小,速度快,是最常用的加密方式,也是密码学和各种安全技术应用的基础。本文主要介绍对称加密算法的基本概念、设计思想和原理。 为什么学习密码学 我原来对...

    对称加密算法原理简介

    对称加密算法使用相同的密钥进行加密和解密,它的计算量小,速度快,是最常用的加密方式,也是密码学和各种安全技术应用的基础。本文主要介绍对称加密算法的基本概念、设计思想和原理。

    为什么学习密码学

    我原来对加密算法的了解仅限于基本的使用,对密码学更没什么认识,也没有什么兴趣,觉得无非就是加密、解密,或者是公钥加密、私钥解密、私钥签名、公钥校验,还有哈希和其它一些派生算法等等。不过学习区块链之后,我才发现密码学的内容很丰富,也很有意思,有很多花样可以玩。

    区块链

    区块链是重度依赖密码学的技术,虽然主要使用公钥算法,但衍生出的技术和应用很多,例如比特币的基于哈希碰撞的工作量证明,基于脚本的转账方式,以太坊的智能合约,门罗币的环签名,Zcash的零知识证明和IPFS里的各种存储证明等。未来区块链的应用落地也依赖于密码学技术的创新和突破。

    信息安全

    信息安全不只是重要,而且是越来越重要。从社会发展趋势来说,我们的生活逐步数字化、电子化、网络化、自动化、智能化,越来越多的个人数据在网上传输和存储,人们对数据和隐私的泄露也越来越担心,信息安全也会更加受到重视。

    技术的发展也反映了这种趋势。早期的TCP/IP协议是明文传输的,但后来逐渐增加了各种安全机制,例如https已经在逐步取代http,还有像google的QUIC传输协议就直接内嵌了TLS。新的应用也更倾向于采用加密通信方式,例如比特币的协议是明文的,而新的ipfs、libra都直接使用加密协议传输。

    数学

    最近两年我开始系统学习数学,这也让我对算法的底层原理有了兴趣,不再只是把加密算法当成一个黑盒,而是想了解它们内部的实现机制和设计思想。而且数学理论比较抽象,难以理解,密码学作为数学的一种应用,正好可以当成理论学习的切入点。这样,理论和应用相结合,学习效果上可以相互强化。

    古典密码

    在现代密码学理论出现之前,加密主要依靠一些编码方面的技巧,没有系统化的理论基础和方法体系,所以加密操作比较简单。一般既需要保护密钥,也需要保护密码算法。具体来说是通过对明文进行各种变换处理,达到混淆和加密的效果。虽然古典密码有一定的限制,但它的基本操作仍然是现代密码的核心组成部分。

    古典密码可以简单分为置换和替代两类,具体包括以下几种

    移位密码(Shift Cipher)

    又称凯撒算法,是历史上最早使用的密码之一,据说是凯撒发明并用来传递军令的。移位密码非常简单,就是对明文做相同的偏移并取模,即E(x)=x+b(mod m)。所以移位密码的密钥空间很小,一般用暴力破解方式就可以找到密钥。

    由于移位密码过于简单,现实中很少使用。行李箱上的密码锁用的可以算作是移位密码,虽然它的密钥是3位数,但只要找到转轮上的缺口,调整转轮让3个缺口对准相同的方向,密码就是当前读数的某个偏移,每次把3个数字都同时调整1位,最多只要尝试10次就能找到密码。

    移位密码示例:
    选择密钥k,0<k<26
    k=23
    E(x)=x+23(mod 26)
    Plain:    ABCDEFGHIJKLMNOPQRSTUVWXYZ
    Cipher:   XYZABCDEFGHIJKLMNOPQRSTUVW
    
    Plaintext:  THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG
    Ciphertext: QEB NRFZH YOLTK CLU GRJMP LSBO QEB IXWV ALD
    

    仿射密码(Affine Cipher)

    可以认为是移位密码的改进版,加密函数变成E(x)=ax+b(mod m),多了一个参数,密钥空间虽略有提升,但还是容易被破解。

    置换密码(Permutation Cipher)

    通过对明文进行置换操作(重新排序)来达到加密的目的。不过由于密文和明文位于相同的空间,所以不太适合单独使用,但可以作为加密算法的中间步骤用来强化加密效果。

    简单置换密码的示例:
    明文为:Hello everyone!
    密文为:Hoene reley!lvo
    
    列置换密码示例:
    6 3 2 4 1 5 
    W E A R E D 
    I S C O V E 
    R E D F L E 
    E A T O N C 
    E Q K J E U 
    从上面的表中,按照列的序号逐列输出,就得到列置换的编码:
    EVLNE ACDTK ESEAQ ROFOJ DEECU WIREE
    

    替代密码(Substitution Cipher)

    预先建立好一张替换表,然后通过查表,将明文逐一替换为相应的密文,从而实现加密的目的,而这张替换表就是密钥。

    按照使用的替换表的数量,替代密码可以分为单表替代密码和多表替代密码。单张替换表会使得明文和明文有相同的分布规律,因此容易被破解。使用多张替换表可以隐藏这种规律,使得破解密码更加困难。Vigenere密码和Hill密码等都是多表替代密码。

    替代密码的灵活度比较高,广义的说,前面的几种密码都可以归为(单表)替代密码。虽然替代密码中明文和密文的对应关系导致它容易被破解,但由于其非线性的特点,一般被用来实现现代加密算法中最核心的S-Box。非线性是指密文不是明文和密钥的简单线性组合,而是自由度更高的进行变换。这种特性对于抵抗密码分析非常重要。

    替换表:
    明文字母表: ABCDEFGHIJKLMNOPQRSTUVWXYZ
    密文字母表: ZEBRASCDFGHIJKLMNOPQTUVWXY
    
    明文消息: flee at once. we are discovered!
    密文消息: SIAA ZQ LKBA. VA ZOA RFPBLUAOAR!
    

    流密码(Stream Cipher)

    在前面的密码中,每个明文字符都是用的相同的密钥来进行加密。实际应用时我们会使用相同的密钥对一组固定大小的连续明文进行加密,这就是分组密码。

    流密码是根据密钥产生一个密钥流,然后跟明文进行一对一的异或运算,达到加密的效果。由于明文只是跟密钥流进行简单的异或运算,所以加密强度完全取决于密钥流的随机性。

    曾经被用的比较多的RC4就是一种流密码,在Wi-Fi Protected Access(WPA)中使用,后来被发现有漏洞,WPA被使用AES的WPA2代替。现在使用较多的流密码是ChaCha20,是Libra里用到的noise protocol framework的默认加密方式,也是WireGuard VPN使用的加密算法。

    密码分析

    密码分析专门研究破解信息系统漏洞、获取秘密信息的方法,简单的说,就是研究如何破解加密算法和密钥。下面先简单介绍一下相关的基本术语。

    攻击模型

    按照攻击者所拥有信息的差别,密码分析可以分为以下几种类别:

    唯密文攻击(Ciphertext Only Attack)

    攻击者只能获取到一些密文,通过分析密文的规律,进而推测加密算法和密钥的规律。这是最常见的情况,也是攻击难度最高的情况。

    已知明文攻击(Known Plaintext Attack)

    攻击者能截获到部分明文和使用相同密钥加密得到的密文。这种情况下,攻击者可以根据明文和密文之间的联系,来分析算法和密钥的可能性。

    选择明文攻击(Chosen Plaintext Attack)

    攻击者能够选择或构造特定的明文,并获取相应的密文,也就是说攻击者能访问加密机。这种情况下,攻击者可以更方便的操纵和分析加密过程,也就更容易破解算法或密钥。

    即使攻击者不能直接访问加密机,如果攻击者能够收集足够多的明文和明文对,并从中筛选出符合要求的明文,也能达到选择明文攻击的效果。

    选择密文攻击(Chosen Ciphertext Attack)

    攻击者能够选择或构造特定的密文,并获取相应的明文,也就是说攻击者能访问解密机。这种情况下,攻击者还可以操纵和分析解密过程,以视图获取解密密钥。

    传统密码分析

    暴力破解

    破解密码的最原始方法是暴力破解,也就是尝试所有可能的密钥。不过这种方式效率很低,只适合密钥空间很小的情况,例如前面讲到的移位密码和仿射密码。

    频率分析

    对一般的密码,需要分析密文的规律和明文跟密文的关联。这时可以用频率分析之类的统计分析方法。例如,在简单的置换密码和替代密码中,明文字符和密文字符是一一对应的,所以明文的分布规律(英文里不同字母和字母组合出现的概率是不一样的)也会传导给密文,只要分析密文的分布规律,就可以反推得到明文,从而破解密码。

    英文字母频率:
    E .127
    T .091
    A .082
    O .075
    I .070
    N .067
    S .063
    H .061
    R .060
    ...
    
    最常见的两字母组合:
    TH,HE,IN,ER,AN,RE,ED,ON,ES,ST,
    EN,AT,TO,NT,HA,ND,OU,EA,NG,AS,
    OR,TI,IS,ET,IT,AR,TE,SE,HI,OF.
    
    最常见的三字母组合:
    THE, ING, AND, HER, ERE, ENT,
    THA, NTH, WAS, ETH, FOR, DTH.
    

    频率分析的过程一般是这样,先找到频率最高的密文字母,如果它的频率显著高于其他字母,就可以假定它对应的明文字母是E,然后继续分析剩余字母。对不确定的情况,可以结合两个或三个字母的组合的频率来进行分析。

    信息论

    对于更复杂的密码,需要对明文和密文的规律做更深入的分析,这就需要更强有力的分析工具,信息论和香农(第一)定理开始派上用场了。信息论的核心是把不确定性作为度量信息的基础,使得“信息”这个原本比较抽象的概念变成可以定量分析的因素。通过分析加密过程中信息量的变化,我们可以在更本质的层次上去理解加密算法所做的各种变换,从而对密码分析和算法设计提供思想和方法上的指导。

    现代分析方法

    用信息论的话来说,只要密文有任何的规律,就相当于存在一些信息没有被隐藏好,留下了破解的入口。要想提高破解的难度,就需要尽可能的隐藏信息,减少密文的规律,也就是提高密文的随机程度。所以,好的加密算法需要在满足其它条件的前提下,使密文尽可能显得随机。而密码分析就是要从看上去随机的密文中寻找不够随机的规律和因素,现代分析方法更多的是使用相应的数学工具来分析密文分布的偏差。

    在算法层面上最重要的有两种:差分分析和线性分析。

    差分分析(Differential Cryptanalysis)

    Differential在数学里是指微分,在这里一般翻译成"差分",不过意思都差不多,是指对明文做小的变化(用XOR来衡量),然后分析密文变化和明文变化的关联规律,从而计算密钥每一位的概率分布,逐步缩小范围,直到最终找到密钥。例如,如果明文中的一个字节发生变化,只会影响到密文的一个字节,那就能用频率分析来破解密码。

    差分分析属于选择明文攻击,但如果能收集充分多的明文,可以从中选择满足差分分析要求的明文,这时也适用于已知明文攻击。

    差分分析是上世纪80年代提出的,论文作者发现DES算法能够有效抵抗差分分析,而算法经过细微调整后就容易分析得多,说明DES算法在设计时很可能就已经考虑到差分分析。后来IBM公司原DES团队的成员发表论文称IBM早在1974就发现了差分分析,抵抗差分分析也是DES的设计目标之一,不过美国政府为了保持密码分析方面的技术优势,要求IBM对外保密,所以一直没有公开。

    线性分析(Linear Cryptanalysis)

    线性分析的原理跟线性回归有点像。线性回归是利用统计方法从一堆数据找出两个或多个变量可能存在的线性关系,对两个变量的情况来说,就是用一条平面上的直线去拟合给定的数据集,找到拟合度最理想的线性系数。线性分析则是根据加密算法的实现,选择中间一些步骤的输入位和输出位来定义一个随机变量,然后从收集到的明文和密文数据中来分析这个随机变量的分布,看是否存在统计学意义上的偏差。存在偏差,则说明算法在某些步骤上存在线性因素,从中就可以逐步推测密钥的各个位的值。

    另一方面,线性分析跟差分分析本质上差不多,只是分别从宏观和微观的角度入手去解决问题。

    对密码设计的影响

    从前面差分分析和DES算法的关联可以看出,密码分析跟密码设计就是矛和盾、一体两面的关系。密码分析会针对密码设计中的特点,而密码设计也必须考虑到已知的密码分析方法。例如DES在设计时就考虑到了要抵抗住差分分析。简单的说,新设计的密码算法,必须至少能抵抗足够强度的差分分析和线性分析。

    现代加密算法

    基本设计思想:混淆(Confusion)、扩散(Diffusion)、随机

    从前面的各种密码分析方法可以看出,要想抵抗住分析,从宏观上,密文必须体现出随机性,从微观上,明文的一处微小的局部变化必须体现为密文的全局变化,否则明文和密文就存在一对一的线性关系,容易被破解。也就是说,要把明文打散混淆,不仅屏蔽密文跟明文的关联,还要将变化尽可能扩散。扩散的结果就是达到高耦合的目的,打破加密算法中的线性关系。

    所以,加密算法的设计思想跟软件开发的原则正好相反。软件开发强调模块化,模块之间低耦合,模块内部高内聚,模块和代码结构清晰。而加密则是要把各个部分混为一体,使它们高度耦合,牵一发而动全身,让破解者找不到线索。

    流密码则是通过生成随机密钥流的方式来达到同样的目的。

    柯克霍夫原则(Kerckhoffs’s Principle)

    就算被所有人知道系统的运作步骤,密码系统应该仍然是安全的。

    简单的说,就是加密算法应该公开,让大家充分的去研究和分析。如果全世界的密码学专家花了很长时间都找不到漏洞,那么这个算法基本上可以被认为是安全的。

    这个规则是从实践经验中总结出来的。由于对称加密算法的安全性并不能用数学的方式证明,只能看实际应用中是否能抵抗各种分析和破解,所以对算法保密虽然可以提高破解的难度,但也降低了算法漏洞的透明度,导致漏洞被发现和利用后自己还不知道,后果更严重。

    现在不只是算法会公开,而且基本上已经形成了公开选拔密码算法的机制,例如AES/RSA/SHA-3。未来的抗量子计算的加密算法也正在进行公开选拔。

    SPN(Substitution-Permutation-Network)

    SPN是一种特殊的迭代密码。迭代密码是通过多轮的迭代加密操作来提高混淆和扩散的程度,从而提高加密的强度。SPN中每一轮迭代操作都包括多个Substituion操作(S-Box)和一次Permutation操作(P-Box)。S-Box主要负责实现数据的混淆,它的非线性特性是加密算法的关键,是抵抗线性分析等方法的核心要素。P-Box主要负责变化的扩散,将局部的变化扩散到整个分组,提高抵抗破解的能力。每一轮迭代使用不同的轮密钥,轮密钥都是从加密操作的主密钥衍生得到的。

    DES

    DES算法是IBM设计的,然后被美国政府选为标准加密算法。它采用的是一种叫做Feistel的迭代分组密码结构,特点是每一轮的迭代操作是相同的,都是将数据块按位重新组合,然后分为左右两部分,计算后将左右两部分交换,作为下一轮计算的输入。

    DES的缺点是密钥较短,只有56位,抵抗破解的能力较弱,因此有了3DES,可以使用更长的密钥。不过3DES的计算量较大,效率较低。而且在密钥长度、迭代次数等方面难以扩展,所以有了AES。

    AES

    AES是美国国家标准与技术研究院(NIST)通过公开选拔挑选出作为国家标准的加密算法。AES的优点有:

    1. 足够安全,能很好的抵抗差分分析和线性分析
    2. 运算速度快,易于实现,而且适合用硬件电路实现
    3. 对内存要求低
    4. 密码长度和迭代次数可以扩展

    加密模式

    加密模式在分组加密中用来对每个分组的数据进行调整,包括填充以提高数据整体的安全性,常用的模式有以下一些:

    Electronic Codebook Mode(ECB)

    ECB是最简单和最基本的模式,对每个分组使用相同的方式加密,相同的明文数据块会被加密成相同的密文,降低了破解的难度,所以实际应用中很少使用。

    Cipher Block Chaining Mode(CBC)

    CBC模式中,每个数据块加密时直接使用明文跟上个数据块加密后产生的密文或初始向量进行异或,再与密钥进行加密,得到密文。它的缺点是不利于并行、传递误差、需要初始化向量。

    Output Feedback Mode(OFB)

    每个数据块加密过程中的中间输出会反馈到下个数据块的加密过程中。缺点跟CBC类似。

    Cipher Feedback Mode(CFB)

    每个数据块加密产生的密文会反馈到下个数据块的加密过程中。缺点跟CBC类似。

    Counter Mode(CTR)

    用密钥对输入的计数器加密,然后跟明文异或得到密文。优点是可以并行,避免误差传递问题。缺点是可以针对单个数据块进行攻击。

    Counter with CBC-MAC Mode(CCM)

    CCM是在CBC和CTR的基础上增加CMAC算法校验,主要是通过MAC校验来解决CTR容易被攻击的问题。

    Galois/Counter Mode(GCM)

    GCM是在CCM的基础上改用GMAC算法代替CMAC算法,增加了并行化设计,可以提高加密性能,降低时延。

    小结

    虽然加密模式有很多种,但现在有实用价值的还是CCM和GCM两种。这两种也是TLS 1.3唯二使用的AES加密算法。

    总结

    对称加密算法的细节很多,这里难以逐一深入讲解,只能介绍一些基础的知识点。感兴趣的同学可以阅读相关的密码学书籍和网上的专题文章。

    展开全文
  • 对称加密原理

    2020-09-20 16:09:08
    对称加密 采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。 示例 我们现在有一个原文3要发送给B 设置密钥为108, 3 * 108 = 324, 将324作为...
  • 根据密钥类型不同可以将现代密码技术分为两类:对称加密算法(私钥密码体系)和非对称加密算法(公钥密码体系)。 1对称加密算法 原理 对称加密算法中,数据加密和解密采用的都是同一个密钥,因而其安全性依赖于所...
  • 对称加密和不对称加密原理

    千次阅读 2012-04-05 11:30:23
    私钥加密(对称加密 symmetric cryptography):私钥加密算法使用单个私钥来加密和解密数据。由于具有密钥的任意一方都可以使用该密钥解密数据,因此必须保护密钥不被未经授权的代理得到。私钥加密又称为对称加密,...
  • 对称加密基本原理

    千次阅读 2018-03-17 00:52:24
    如果只是单方面采用非对称加密算法,其实有两种方式。 这里我们设定A和B两方。 A和B都拥有自己的一对公钥私钥以及对方发送给自己的公钥。 第一种是签名: A使用自己的私钥加密,B接收到后用A的公钥解密。...
  • 先介绍对称加密 通信的双方,使用同一个secretKey,可以对密文进行解密,得到明文。 问题:在开放的internet如何交换secretKey,这本身就是个问题。这个交换的过程也是需要加密的。这就套娃了无解了。 再介绍非对称...
  • 【安全加密技术对称加密

    千次阅读 2015-07-09 22:28:36
     上篇了解了《非对称加密》后 今天我来继续了解下加密技术对称加密。  对称加密  对称加密是最传统的加密方式,比上非对称加密,缺少安全性,但是它依旧是用的比较多的加密方法。  对称加密采用单密钥加密...
  • 对称加密算法AES 原理

    千次阅读 2019-05-07 20:29:22
    高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的)。对称加密算法也就是加密和解密用相同的密钥,具体的加密流程如下图: 下面简单介绍下各个部分的...
  • 一、对称加密 对称加密简介对称加密算法所用到的基本的方法是:代换 和 置换。简单来说:(以早期的加密方式举例)代换:是将明文字母替换成其他字母、数字或符号的方法对于明文中的每一个字母,用字母表中k个字母来...
  • 对称加密原理解析

    万次阅读 2013-06-03 17:16:16
    一、加密算法种类 ...这世上存在两种加密算法:对称加密(symmetric cryptography)和非对称加密(asymmetric cryptography)。 也就是说,你想进行加解密操作的时候需要具备两样东西:秘钥和加解密算法。 2.1、对称加
  • AES对称加密算法原理

    万次阅读 热门讨论 2007-09-19 15:18:00
    加密它:用新的高级加密标准(AES)保持你的数据安全原著:James McCaffrey 翻译:小刀人 原文出处:MSDN Magazine November 2003 (Encrypt It)本文的代码下载:msdnmag200311AES.exe (143KB)本文假设你熟悉
  • 文章目录1 有状态登录2 无状态登陆3 如何实现无状态4 JWT4.1 数据格式4.2 JWT交互流程5 RSA加密5.1 加密技术5.1没有RSA加密时5.2 结合RSA的鉴权 目前我们创建了若干个微服务,假如我们在用户中心做了登陆,接下来要...
  • 对称加密与非对称加密,以及RSA的原理

    万次阅读 多人点赞 2017-03-10 06:22:32
    例如,最古老的斯巴达加密棒,广泛应用于公元前7世纪的古希腊。16世纪意大利数学家卡尔达诺发明的栅格密码,基于单表代换的凯撒密码、猪圈密码,基于多表代换的维吉尼亚密码,二战中德军广泛使用的恩格玛加密机….但...
  • 对称加密的加密和解密过程使用同一个密钥,在消息传递中,密钥也会被传来穿去,万一密钥被截获,那就完蛋了。非对称加密过程中的密钥被分为私钥和公钥: 公钥被用在加密阶段 私钥被用在解密阶段 主要有两个应用场景...
  • 对称加密原理概述

    千次阅读 2018-07-22 17:49:23
    对称加密原理 一个对称加密方案由5部分组成 : 1. 明文(plaintext):原始消息,作为算法的输入; 2. 加密算法(encryption algorithm):对明文进行各种替换和转换; 3. 密钥(secret key):密钥也是...
  • 常见对称加密原理以及应用

    千次阅读 2020-07-25 16:36:03
    所谓对称加密算法,通过密钥将明文加密成密文,并且再通过同一个密钥将密文解密成明文,相对于非对称加密算法速度快效率高,对于明文文本越长效率优势越大。 常见的对称加密算法有AES、DES、3DES等,其中DES由于密钥...
  • 对称加密算法--RSA加密原理

    万次阅读 多人点赞 2018-12-24 00:33:58
    密码学是在编码与破译的斗争实践中逐步发展起来的,并随着先进科学技术的应用,已成为一门综合性的尖端技术科学。 密码学发展史 在说RSA加密算法之前, 先说下密码学的发展史。其实密码学的诞生,就是为了运用在战场...
  • 对称加密算法不同,非对称加密算法需要两个密钥:公钥(publickey)和私钥(privatekey)。公钥与私钥是一对,如果用...非对称加密原理  非对称加密本身并不难理解,结合图6-14对非对称加密的流程做简要的分析。 
  • 006 DES加密算法 DES加密算法,为对称加密算法中的一种。...两者区别在于,对称加密在加密和解密时使用同一密钥,而非对称加密在加密和解密时使用不同的密钥,即公钥和私钥。常见的DES、3DES、AE...
  • 对称加密概述

    万次阅读 多人点赞 2018-07-29 16:16:15
    因此,我用了几天时间学习了密码学基础知识,尤其是非对称加密技术原理。这里加以整理总结,本文只求通俗,必需涉及数学公式才能解释的部分只给出优质教程的链接,根据需求选择学习就好。 本文以一个一脸懵逼的...
  • 对称加密和非对称加密解密技术

    千次阅读 2015-01-26 23:38:06
    数据安全加密技术  百度百科解释:所谓数据加密(Data Encryption)技术是指将一个信息(或称明文,plain text)经过加密钥匙(Encryption key)及加密函数转换,变成无意义的密文(cipher text),而接收方则将此...
  • A 和 B 要把他们的通信内容加密, 如果A/B使用相同的加密解密key,那这就是 对称加密对称加密最大的问题就是A和B之间的加密/解密key必须是唯一的。也就是如果A和C 要加密通信,同时还不想让C知道A/B之间的通信...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 24,441
精华内容 9,776
关键字:

对称加密技术的原理