精华内容
下载资源
问答
  • 对称加密算法AES 原理

    千次阅读 2019-05-07 20:29:22
    高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的)。对称加密算法也就是加密和解密用相同的密钥,具体的加密流程如下图: 下面简单介绍下各个部分的...

    原文:https://blog.csdn.net/qq_28205153/article/details/55798628

     

    AES简介

    高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的)。对称加密算法也就是加密和解密用相同的密钥,具体的加密流程如下图: 
    加密流程图
    下面简单介绍下各个部分的作用与意义:

    • 明文P

      没有经过加密的数据。

    • 密钥K

      用来加密明文的密码,在对称加密算法中,加密与解密的密钥是相同的。密钥为接收方与发送方协商产生,但不可以直接在网络上传输,否则会导致密钥泄漏,通常是通过非对称加密算法加密密钥,然后再通过网络传输给对方,或者直接面对面商量密钥。密钥是绝对不可以泄漏的,否则会被攻击者还原密文,窃取机密数据。

    • AES加密函数

      设AES加密函数为E,则 C = E(K, P),其中P为明文,K为密钥,C为密文。也就是说,把明文P和密钥K作为加密函数的参数输入,则加密函数E会输出密文C。

    • 密文C

      经加密函数处理后的数据

    • AES解密函数

      设AES解密函数为D,则 P = D(K, C),其中C为密文,K为密钥,P为明文。也就是说,把密文C和密钥K作为解密函数的参数输入,则解密函数会输出明文P。

    在这里简单介绍下对称加密算法与非对称加密算法的区别。

    • 对称加密算法

      加密和解密用到的密钥是相同的,这种加密方式加密速度非常快,适合经常发送数据的场合。缺点是密钥的传输比较麻烦。

    • 非对称加密算法

      加密和解密用的密钥是不同的,这种加密方式是用数学上的难解问题构造的,通常加密解密的速度比较慢,适合偶尔发送数据的场合。优点是密钥传输方便。常见的非对称加密算法为RSA、ECC和EIGamal。

    实际中,一般是通过RSA加密AES的密钥,传输到接收方,接收方解密得到AES密钥,然后发送方和接收方用AES密钥来通信。

    本文下面AES原理的介绍参考自《现代密码学教程》,AES的实现在介绍完原理后开始。

    AES的基本结构

    AES为分组密码,分组密码也就是把明文分成一组一组的,每组长度相等,每次加密一组数据,直到加密完整个明文。在AES标准规范中,分组长度只能是128位,也就是说,每个分组为16个字节(每个字节8位)。密钥的长度可以使用128位、192位或256位。密钥的长度不同,推荐加密轮数也不同,如下表所示:

    AES密钥长度(32位比特字)分组长度(32位比特字)加密轮数
    AES-1284410
    AES-1926412
    AES-2568414

    轮数在下面介绍,这里实现的是AES-128,也就是密钥的长度为128位,加密轮数为10轮。 

     

    。。。

    展开全文
  • 对称加密算法DES原理及实现

    千次阅读 2018-06-26 19:40:13
    006 DES加密算法 ...对称加密算法,是相对于非对称加密算法而言的。两者区别在于,对称加密在加密和解密时使用同一密钥,而非对称加密在加密和解密时使用不同的密钥,即公钥和私钥。常见的DES、3DES、AE...

    006 DES加密算法

    DES加密算法,为对称加密算法中的一种。70年代初由IBM研发,后1977年被美国国家标准局采纳为数据加密标准,即DES全称的由来:Data Encryption Standard。对称加密算法,是相对于非对称加密算法而言的。两者区别在于,对称加密在加密和解密时使用同一密钥,而非对称加密在加密和解密时使用不同的密钥,即公钥和私钥。常见的DES、3DES、AES均为对称加密算法,而RSA、椭圆曲线加密算法,均为非对称加密算法。

      DES是以64比特的明文为一个单位来进行加密的,超过64比特的数据,要求按固定的64比特的大小分组,分组有很多模式,后续单独总结,暂时先介绍DES加密算法。DES使用的密钥长度为64比特,但由于每隔7个比特设置一个奇偶校验位,因此其密钥长度实际为56比特。奇偶校验为最简单的错误检测码,即根据一组二进制代码中1的个数是奇数或偶数来检测错误。

    Feistel网络

    DES的基本结构,由IBM公司的Horst Feistel设计,因此称Feistel网络。在Feistel网络中,加密的每个步骤称为轮,经过初始置换后的64位明文,进行了16轮Feistel轮的加密过程,最后经过终结置换后形成最终的64位密文。如下为Feistel网络的示意图:

    971366-e5b0806d00c6c23f.jpg
    image

    64位明文被分为左、右两部分处理,右侧数据和子密钥经过轮函数f生成用于加密左侧数据的比特序列,与左侧数据异或运算,运算结果输出为加密后的左侧,右侧数据则直接输出为右侧。
      其中子密钥为本轮加密使用的密钥,每次Feistel均使用不同的子密钥。子密钥的计算,以及轮函数的细节,稍后下文介绍。由于一次Feistel轮并不会加密右侧,因此需要将上一轮输出后的左右两侧对调后,重复Feistel轮的过程,DES算法共计进行16次Feistel轮,最后一轮输出后左右两侧无需对调。

    DES加密和解密的过程一致,均使用Feistel网络实现,区别仅在于解密时,密文作为输入,并逆序使用子密钥。

    DES 加密算法的使用

    在使用DES加密前,需要自己实现对明文的补码和去码操作

    补码

    //实现PKCS5Padding补码
    func PKCS5Padding(cipherTxt [] byte, blockSize int) []byte {
        //计算准备添加的数字
        padding := blockSize - len(cipherTxt)%blockSize
    
        //得到补码
        padTxt := bytes.Repeat([]byte{byte(padding)}, padding)
    
        //拼接原文与补码
        var byteTxt = append(cipherTxt, padTxt...)
    
        return byteTxt
    
    }
    

    去码

    //PKCS5Unpadding 去码
    func PKCS5UnPadding(cipherTxt []byte) []byte {
        var l = len(cipherTxt)
        var txt = int(cipherTxt[l-1])
        res := cipherTxt[:l-txt]
        return res
    }
    

    DES加密

    // key 必须为8位
    func EnDESEncrypt (origData []byte, key []byte) []byte {
    
        //校验密钥
        block, _ := des.NewCipher(key)
        //设置补码
        origData = MyDES.PKCS5Padding(origData, block.BlockSize())
        //设置CBC加密模式
        blockMode := cipher.NewCBCEncrypter(block, key)
    
        //加密明文
        crypted := make([]byte, len(origData))
    
        blockMode.CryptBlocks(crypted, origData)
    
        return crypted
    
    }
    

    DES解密

    func DeDESCriypt(cript []byte, key []byte) []byte  {
        //校验key的有效性
        block,_:=des.NewCipher(key)
        //通过CBC模式解密
        blockMode:=cipher.NewCBCDecrypter(block,key)
    
        //实现解密
        origData:=make([]byte,len(cript))
        blockMode.CryptBlocks(origData,cript)
    
        //去码
        origData = MyDES.PKCS5UnPadding(origData)
        return origData
    }
    

    使用

    func main()  {
    
        key := []byte("aswedrfg")
        var data =[]byte("hello world")
        var cipherTxt = EnDESEncrypt(data,key)
        fmt.Println("加密的结果:",hex.EncodeToString( cipherTxt))
    
        var origData=DeDESCriypt(cipherTxt,key)
        fmt.Println("解密后的结果为:",string(origData))
    }
    

    输出结果

    加密的结果: 935ae7ca3229f6c707bb9de9db9693c7
    解密后的结果为: hello world
    

    根据DES原理自己实现加密解密过程

    加密

    func EnCrypt(key string, data []byte) []byte {
    
        var sum = 0
        for i := 0; i < len(key); i++ {
            sum += int(key[i])
        }
        // 对明文进行补码
        var pad = PKCS5Padding(data, len(key))
        //通过加法,实现简单加密
        for i := 0;i<len(pad);i++{
            pad[i] = pad[i]+byte(sum)
        }
        return pad
    }
    

    解密

    func Decrypt(cipherTxt []byte,key string) []byte {
    
        fmt.Println("???",cipherTxt)
        //计算key的总和
        var sum =0
        for i:=0;i<len(key);i++ {
            sum += int(key[i])
        }
    
        //减法运算
        for i:=0;i<len(cipherTxt);i++{
            cipherTxt[i]=cipherTxt[i]-byte(sum)
        }
        fmt.Println("???",cipherTxt)
        //去码
        var p = PKCS5UnPadding(cipherTxt)
        return p
    }
    

    3DES

    3DES加密

    DES是一个经典的对称加密算法,但也缺陷明显,即56位的密钥安全性不足,已被证实可以在短时间内破解。为解决此问题,出现了3DES,也称Triple DES,3DES为DES向AES过渡的加密算法,它使用3条56位的密钥对数据进行三次加密。为了兼容普通的DES,3DES并没有直接使用 加密->加密->加密 的方式,而是采用了加密->解密->加密 的方式。

    971366-7c759b674b006b4d.jpg
    image

    当三重密钥均相同时,前两步相互抵消,相当于仅实现了一次加密,因此可实现对普通DES加密算法的兼容。

    971366-9bcfe416854d6c9a.jpg
    image

    3DES解密

    3DES解密过程,与加密过程相反,即逆序使用密钥。是以密钥3、密钥2、密钥1的顺序执行 解密->加密->解密

    971366-59e7616630614502.png
    image

    相比DES,3DES因密钥长度变长,安全性有所提高,但其处理速度不高。因此又出现了AES加密算法,AES较于3DES速度更快、安全性更高。

    展开全文
  • 对称加密算法原理简介

    千次阅读 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加密算法。

    总结

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

    展开全文
  • 本文主要介绍对称加密算法(symmetric encryption algorithm)和非对称加密算法(asymmetric cryptographic algorithm)的相关知识。 1 对称加密算法 1.1 概述 对称加密算法是应用较早的加密算法,技术成熟。 在...

    本文主要介绍对称加密算法(symmetric encryption algorithm)和非对称加密算法(asymmetric cryptographic algorithm)的相关知识。

    1 对称加密算法

    1.1 概述

    对称加密算法是应用较早的加密算法,技术成熟。

    在对称加密算法中,数据发送方利用加密密钥、通过指定的加密算法将明文(原始数据)加密处理后,使明文加密为密文,然后发送出去。数据接收方在收到密文后,需要使用加密时使用的密钥、以及加密算法的逆算法对该密文进行解密,才能对应的明文。

    在对称加密算法中,消息发送方和接收方都使用同一个密钥对数据进行加密和解密,所以,使用对称加密时,要求解密方必须事先知道消息的加密密钥。

    1.2 示例及隐患

    对称加密的一方(比如小红)用密钥 K 给文本 M 加密,另一方(比如小明)用同一个密钥 K 解密。

    在此过程中,加解密的模型如下:

    小红:C = E(M, K)

    小明:M = D(C, K)

    根据对称加密原理,通信一方(如小明)必须要事先知道密钥 K,才能够对通信另一方(如小红)发送过来的消息进行解密,双方的加解密过程,如下图所示:

    不过,上图中存在这样一个问题:当一方(如小红)生成了密钥 K 之后,把 K 分享给另一方(小明)的过程中,有可能被人窃听到了密钥 K ,那么此时这个窃听者就可以假扮双方中的任何一方与另一方进行通信。这叫中间人攻击 mim(Man-in-the-middle_attack)。此过程如下图所示:

    2 非对称加密算法

    2.1 概述

    非对称加密算法需要两个密钥(密钥对),即公钥(public key)和私钥(private key)。公钥和私钥是成对出现的,如果用公钥对数据进行加密,只有用对应的私钥才能解密;如果用私钥对数据进行加密,那么只有用对应的公钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种加密算法叫作非对称加密算法。

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

    说明:非对称加密算法的一般应用场景是“公钥加密、私钥解密”。

    2.2 示例及隐患

    现有用于非对称加密的密钥对:K1 和 K2。小红用其中一个密钥加密文本,小明可以用另一个密钥解密文本。比如,小红用 K1 加密,小明用 K2 解密。

    上述加解密过程的模型如下:

    小红:C = E(M, K1)

    小明:M = D(C, K2)

    根据上述模型,双方中的一方(比如小红)可以生成 K1 和 K2,然后把其中一个密钥(比如 K1)私藏,称为私钥;另一个密钥(比如 K2)公开,称为公钥。当另一方(比如小明)得到小红公开的公钥之后,双方就可以通信了。双方的加解密过程,如下图所示:

    不过,上图中依然存在一个问题:中间人 mim 还是可能截获小红公开的公钥 K2,然后自己弄一对密钥(K1, K2),然后欺骗小明说 K2 是小红的公钥,这样中间人 mim 每次都可以用截获的 K2 解密小红发给小明的文本(然后窃取甚至篡改文本),再用自己制造的 K1 加密了发给小明,小明收到消息后,用中间人 mim 制造的 K2 解密文本。此过程如下图所示:

    为了避免上述问题的出现,帮助小明确定得到的公钥确实是小红公开的公钥 K2(而不是中间人 mim 伪造的 K2),数字签名(digital signature)技术应运而生。

    关于数字签名技术的相关知识,请点击此处

    展开全文
  • 对称加密算法原理与常用实现

    千次阅读 2020-05-03 18:05:06
    对于加密秘钥和解密秘钥是相同的算法,就叫对称加密算法。 常用的对称加密算法 DES Data Encryption Standard 初代对称加密算法 从98年开始不断被破解,到现在已经完全不具备安全性了。 现在基本没人用了,但很值得...
  • 对称加密算法基本概念

    千次阅读 2015-05-03 11:42:16
    只知道这个密钥对是用来做认证用的,但对为何要生成密钥对,密钥对是怎么生成的,密钥对如何使用等一些问题理解的比较模糊,密钥对的背后其实就是非对称加密算法,因此只要搞清楚非对称加密算法基本概念就能解答...
  • 对称加密算法与非对称加密算法的区别 对称加密算法 对称加密算法是应用较早的加密算法,技术成熟。在对称加密算法中,数据发信方将明文(原始数据)和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文...
  • 高级加密标准 (AES,Advanced Encryption Standard),AES 加密算法涉及 4 种操作: 字节替代(SubBytes)、行移位(ShiftRows)、列混淆(MixColumns)和轮密钥加(AddRoundKey)。 下图给出了 AES 加解密的流程: ...
  • 对称加密算法是应用较早的加密算法,技术成熟。在对称加密算法中,数据发信方将明文(原始数据)和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。收信方收到密文后,若想解读原文,则需要...
  • 密码学安全算法--对称加密算法

    千次阅读 2017-06-04 21:45:50
    对称加密算法基本原理 先上图,对称加密工作过程 在整个工作过程中涉及到以下几个概念 - 明文:也就是原始信息或者说原始数据。也就是上图中的A。 - 加密算法:对明文进行各种替换或转换操作的一...
  • 文章目录一、HTTPS原理以及解析二、对称加密与非对称加密三、总结 一、HTTPS原理以及解析 HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版...
  • 对称加密算法--RSA加密原理

    万次阅读 多人点赞 2018-12-24 00:33:58
    密码学是在编码与破译的斗争实践中逐步发展起来的,并随着...在中国历史上最早的加密算法的记载出自于周朝兵书《六韬.龙韬》中的《阴符》和《阴书》。在遥远的西方,在希罗多德(Herodotus)的《历史》中记载了公元前...
  • 常用加密算法之非对称加密算法

    万次阅读 2018-03-16 21:44:45
    对称加密算法 非对称加密算法是一种密钥的保密方法。非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有...
  • 对称加密算法,非对称加密算法(转)

    千次阅读 2009-05-31 10:49:00
    对称加密算法是应用较早的加密算法,技术成熟。在对称加密算法中,数据发信方将明文(原始数据)和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。收信方收到密文后,若想解读原文,则需要...
  • AES 加密算法原理详解

    万次阅读 多人点赞 2018-07-23 22:18:49
    高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的)。对称加密算法也就是加密和解密用相同的密钥,具体的加密流程如下图: 下面简单介绍下各个部分的....
  • 常用的对称加密算法:AES,RC4,3DES 传输的示意图如下所示: 第二 、非对称加密: 非对称加密算法实现机密信息交换的基本过程是: 甲方生成一对密钥并将其中的一把作为公用密钥向其它方公开; 得到该公用密钥的...
  • 对称加密 RSA加密算法原理简述

    千次阅读 2016-10-24 08:54:20
    对称加密是与对称加密完全相反的概念,对称加密指的是加密解密使用的是同样的密钥Key,如流加密,块加密,一次性密码本之类的。而非对称加密,使用加密Key叫公钥,解密用的是私钥。 至于为什么要这样做呢?因为...
  • l 对称加密算法 对称加密算法是应用较早的加密算法,技术成熟。在对称加密算法中,数据发信方将明文(原始数据)和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。收信方收到密文后,若想...
  • 对称加密算法

    2016-11-22 18:50:25
    对称加密算法是应用较早的加密算法,技术成熟。在对称加密算法中,数据发信方将明文(原始数据)和加密密钥(mi yao)一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。收信方收到密文后,若想解读...
  • AES对称加密算法原理

    万次阅读 热门讨论 2007-09-19 15:18:00
    加密它:用新的高级加密标准(AES)保持你的数据安全原著:James McCaffrey 翻译:小刀人 原文出处:MSDN Magazine November 2003 (Encrypt It)本文的代码下载:msdnmag200311AES.exe (143KB)本文假设你熟悉
  • PKI - 对称加密算法

    2020-09-22 14:10:03
    PKI - 对称加密算法数据加密标准(DES - Data Encryption Standard) 1977 DES 1998 AES 数据加密标准(DES - Data Encryption Standard)
  • 本文从对称加密基本原理来了解这个算法基本原理 混淆与扩散 混淆(confusion)与扩散(diffusion)是设计密码学算法的两种主要方法。最早出现在克劳德·香农1945年的论文《密码学的数学理论》当中。 混淆...
  • 对称加密算法

    千次阅读 2012-02-19 09:52:23
    对称加密算法对称加密算法(asymmetric cryptographic algorithm)又名“公开密钥加密算法”,非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。 算法介绍  ...
  • 网络专*-* * * 2010-11-12 网络安全实验指导书 对称加密算法 一实验目的 熟悉和掌握对称加密算法原理及其一般过程 掌握对称加密算法基本方法替代(substitute)与置换(transposition) 掌握使用一定的编码开发工具...
  • 对称加密算法是实现安全通信的基本过程,是信息安全不可或缺的部分,它可以帮助客户安全地以比光速还快的速度对数据进行加密。 什么是对称算法及其工作原理? 对称算法是对称密钥加密的核心加密功能。它是计算机执行...
  • 一文详解非对称加密算法之RSA算法

    千次阅读 2020-06-20 21:57:30
    这篇文章我们来介绍另外一个重要的加密算法:非对称加密算法 (Asymmetric Cryptography), 也称为公开密钥加密算法 (Public Key Cryptography). 具体包括公开密钥算法概要,RSA算法原理,公私钥的生成,加解密的过程...
  • 然而密码技术认为,「保密」信息总有一天会被扒出来,所以加密算法不应该依靠「保密」来保证机密性,而应该做到:即便知道了加密算法,依然无计可施。说的魔幻一点就是,告诉你我的密码,你依然不知道我的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 21,391
精华内容 8,556
关键字:

对称加密算法的基本原理