DYUE.TOP - 加密
type: channel
link: https://www.dyue.top/index.php/tag/加密/
items: 六种核心安全机制-加密、密钥、签名与证书
items: AES加密算法的详细介绍与实现

六种核心安全机制-加密、密钥、签名与证书
type: item
date: 2020-07-18T19:52:11+08:00
description: 安全要解决什么问题你都会的密码术安全机制之对称加密安全机制之非对称加密安全机制之密钥交换安全机制之消息摘要安全机制之电子签名安全机制之证书与PKI一、在典型的场景中，安全主要用于解决4类需求：1、保密（Security/Confidentiality）希望通信中的信息对外进行保密（不想任何第三方来窥探你的信息）例如：你是某个公司的高层领导，你有很多机密的文档。你可能放到了公司的保险箱或者家里的保险箱，只有你才有key（钥匙）才能打开看。2、鉴别/认证（Authentication）希望可以鉴别认证出与你通信的那个对端确实是所认为的那个对端。（例如跟你女朋友打电话，你怎么能确认和你打电话的那个人就是你女朋友）例如：你怎么能确认打电话的就是你朋友呢？不是仿冒的人在这里。通过你女朋友的声音可以鉴别出是女朋友本人。 例如：组织上安排重庆地下工作者与上海地下工作者接头在某个地点，并出示了相关接口口号，只有口号对头才能鉴别是要接头的人。例如：借钱的时候会写借条，写借条的技巧：用大小写，字体间隔非常小，防止篡改。3、完整性（Integrity）一旦某个信息产生了以后，你希望这个信息不能被谁来篡改；或者说它已经发生了篡改，你可以很方便的鉴别出它已经发生了篡改。4、不可否认性（non-repudiation）对于某一个信息，你可以很方便的确认这个信息是由谁产生的，并且一旦由某人产生了某个信息，将来在某一时刻他想否认都是不可以的。例如：犯人进行签字画押；皇帝传位需要写诏书和盖龙印。例如：电子文档签名。二、密码术：在日常场景中，其实你都在有意无意中利用密码术来完成特定的安全需求1、字母加密字母A用B代替，C用D代替，前面的一个字母用后面的一个字母替代。2、藏头诗诗里面藏了一些我要表达的含义。例如：毛氏今有才人出，晓文晓理难晓伊。冬去春来秋月夜，爱却江山爱美人。3、倒写文例如：把书信完整的倒过来写。4、任何规则都可以定义密码术5、为什么不自己发明和使用新的密码术呢？因为自己发明的密码术没有通过验证，没有黑客攻击过，很难考证它的安全强度。你有可能在密码术留下后门，将来用来盈利。6、算法和秘钥的分离算法公开，秘钥保密。算法公开的目的使用者的验证、专家的论证、黑客的尝试与破解。若干年后该密码术没有被黑客攻破或者专家破解，该密码术就会成为公开的算法。三、安全机制之对称加密1、典型的加密模型密钥：分为加密密钥和解密密钥。明文：没有进行加密，能够直接代表原文含义的信息。密文：经过加密处理之后，隐藏原文含义的信息。加密：将明文转换成密文的实施过程。解密：将密文转换成明文的实施过程。2、对称秘钥算法对称的含义（Symmetric）：加密端和解密端是用的同一个key置换加密，转置换加密和乘积密码（算法的模型）置换加密（顺序不变，原始的数据用其他数据替换，原始的字母用其他字母进行替换）例如：abcde ----> klmno转置换加密（原始数据的信息不变，是数据顺序打乱变化）例如：123456789 ----> 253698174乘积密码（置换密码和转置换密码的混合使用）例如：abcde ----> poklm ----> mlkpo3、DES（Data Encryption Standard）数据加密标准每取64bit （8byte）作为加密单元，经过19次的反复置换和转置换加密。秘钥其实是56bit。后面出现的3重DES，就是DES经过了三次转换。4、AES（Advanced Encryption Standard）高级加密标准运用了复杂的数学书法，内部构造还是沉积密码。它的输入是128bit，以128bit为单元加密。秘钥是可选的，可以以128bit长度加密单，也可以以192bit长度加密，也可以用256bit长度加密，比较灵活。四、安全机制之非对称加密非对称加密模型加密秘钥 K 称为公钥（public），解密秘钥 K ' 称为私钥（private）加密秘钥可以任何人知道，解密秘钥需要保密（解密者保管）。数学是科学基础，基础学科研究之物，虚虚实实，先虚后实。公开秘钥算法的最重要两大数学基础。1、建立在分解大数的困难度2、建立在以大素数为模来计算离散对数的困难度。RSA算法（非对称加密算法）建立在分解大数的困难度公钥/私钥长度 至少1024bit五、安全机制之密钥交换1、对称加密优缺点：高效（相对于非对称加密来说，传输速度快）秘钥交换问题（会话秘钥实时产生且周期性变化）不如RSA的加密安全程度高，但是当选择256bit的AES，仍然能胜任绝大多数的安全领域。2、非对称加密优缺点：安全性足够高没有秘钥交换的问题效率低，对于大数据加密很慢（加密算法复杂）3、其他秘钥交换方式：Diffie-Hellman 秘钥交换协议基于以大素数为模计算离散对数的困难度对方各自选定key…

AES加密算法的详细介绍与实现
type: item
date: 2017-02-19T08:53:54+08:00
description: AES简介高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的)。对称加密算法也就是加密和解密用相同的密钥，具体的加密流程如下： 下面简单介绍下各个部分的作用与意义：明文P没有经过加密的数据。密钥K用来加密明文的密码，[AES加密算法的详细介绍与实现]对称加密算法中，加密与解密的密钥是相同的。密钥为接收方与发送方协商产生，但不可以直接[AES加密算法的详细介绍与实现]网络上传输，否则会导致密钥泄漏，通常是通过非对称加密算法加密密钥，然后再通过网络传输给对方，或者直接面对面商量密钥。密钥是绝对不可以泄漏的，否则会被攻击者还原密文，窃取机密数据。AES加密函数设AES加密函数为E，则 C = E(K, P),其中P为明文，K为密钥，C为密文。也就是说，把明文P和密钥K作为加密函数的参数输[AES加密算法的详细介绍与实现]，则加密函数E会输出密文C。密文C经加密函数处理后的数据AES解密函数设AES解密函数为D，则 P = D(K, C),其中C为密文，K为密钥，P为明文。也就是说，把密文C和密钥K作为解密函数的参数输[AES加密算法的详细介绍与实现]，则解密函数会输出明文P。AES加密算法的详细介绍与实现[AES加密算法的详细介绍与实现]简单介绍下对称加密算法与非对称加密算法的区别。对称加密算法加密和解密用到的密钥是相同的，[AES加密算法的详细介绍与实现]种加密方式加密速度非常快，适合经常发送数据的场合。缺点是密钥的传输比较麻烦。非对称加密算法加密和解密用的密钥是不同的，[AES加密算法的详细介绍与实现]种加密方式是用数学上的难解问题构造的，通常加密解密的速度比较慢，适合偶尔发送数据的场合。优点是密钥传输方便。常见的非对称加密算法为RSA、ECC和EIGamal。实际中，一般是通过RSA加密AES的密钥，传输到接收方，接收方解密得到AES密钥，然后发送方和接收方用AES密钥来通信。本文下面AES原理的介绍参考自《现代密码学教程》，AES的实现[AES加密算法的详细介绍与实现]介绍完原理后开始。AES的基本结构AES为分组密码，分组密码也就是把明文分成一组一组的，每组长度相等，每次加密一组数据，直到加密完整个明文。[AES加密算法的详细介绍与实现]AES标准规范中，分组长度只能是128位，也就是说，每个分组为16个字节（每个字节8位）。密钥的长度可以使用128位、192位或256位。密钥的长度不同，推荐加密轮数也不同，如下表所示：AES密钥长度（32位比特字)分组长度(32位比特字)加密轮数AES-1284410AES-1926412AES-2568414轮数[AES加密算法的详细介绍与实现]下面介绍，AES加密算法的详细介绍与实现实现的是AES-128，也就是密钥的长度为128位，加密轮数为10轮。 上面说到，AES的加密公式为C = E(K,P)，[AES加密算法的详细介绍与实现]加密函数E中，会执行一个轮函数，并且执行10次[AES加密算法的详细介绍与实现]个轮函数，[AES加密算法的详细介绍与实现]个轮函数的前9次执行的操作是一样的，只有第10次有所不同。也就是说，一个明文分组会被加密10轮。AES的核心就是实现一轮中的所有操作。AES的处理单位是字节，128位的输[AES加密算法的详细介绍与实现]明文分组P和输[AES加密算法的详细介绍与实现]密钥K都被分成16个字节，分别记为P = P0 P1 … P15 和 K = K0 K1 … K15。如，明文分组为P = abcdefghijklmnop,其中的字符a对应P0，p对应P15。一般地，明文分组用字节为单位的正方形矩阵AES加密算法的详细介绍与实现，称为状态矩阵。[AES加密算法的详细介绍与实现]算法的每一轮中，状态矩阵的内容不断发生变化，最后的结果作为密文输出。该矩阵中字节的排列顺序为从上到下、从左至右依次排列，如下[AES加密算法的详细介绍与实现]所示： 现[AES加密算法的详细介绍与实现]假设明文分组P为"abcdefghijklmnop"，则对应上面生成的状态矩阵[AES加密算法的详细介绍与实现]如下： 上[AES加密算法的详细介绍与实现]中，0x61为字符a的十六进制表示。可以看到，明文经过AES加密后，已经面目全非。类似地，128位密钥也是用字节为单位的矩阵表示，矩阵的每一列被称为1个32位比特字。通过密钥编排函数该密钥矩阵被扩展成一个44个字组成的序列W[0],W[1], … ,W[43],该序列的前4个元素W[0],W[1],W[2],W[3]是原始密钥，用于加密运算中的初始密钥加（下面介绍）;后面40个字分为10组，每组4个字（128比特）分别用于10轮加密运…