2021-01-30 AES加密算法笔记(一)

AES

异或对称加密

密钥

明文

密文

填充

原因

明文和秘文不等长没法执行异或运算

分组加密是:将明文分成多个等长的block模块,对每个模块分别加解密

最后一个明文block模块长度不足时,需要填充

分组加密方式

  • 位填充

    以bit位为单位填充

    |1011 1001 1001 0100 0010 0111 0000 0000

  • 字节填充

    • 补零
    • ASN| X9.23|DD DD DD DD DD DD DD DD|DD DD DD DD 00 00 00 04|最后一个字节告诉填了几个字节的0
    • ISO 10126|DD DD DD DD DD DD DD DD|DD DD DD DD 81 A6 23 04|完全填入随机字符,最后一位告诉填了几个随机字节
    • PKC57 (RFC5652) :... |DD DD DD DD DD DD DD DD|DD DD DD DD 04 04 04 04|需要填充的地方告诉填了几个字节,一共填了四个字节每个填充的字节都写04,04。

对称加密分组工作模式

  • 允许同一个密钥,多多组数据加密还能保证安全性
  • 直接将明文分解为多个块,对每个块独立加密
  • 问题 无法隐藏数据特征

ECB工作模式

  • 希望全是噪点没有数据特征
  • 第一组是密钥和明文做了一组异或,第二组就是第一组的密文和这个第二组的明文做了一组异或。密文就没啥数据特征了。
  • 缺点是只能串行化的操作,第三组数据必须等第二组数据做完异或,才能进行加密操作。没有多核cpu串行操作就会很慢。

CTR工作模式

  • 同时解决以上两个问题

    • 引入计数器
    • 对于每一个块,计数器的值都在增加
  • 通过递增一个加密技术器以产生连续密钥流

  • 问题不能提供密文消息完整性校验

完整性校验

hash函数

  • 不管输入多长可以输出定长的串,而且碰撞概率很低

  • MAC算法

  • 发消息者 把消息和MAC算法(密钥通过mac算法会生成一个摘要)

    接受者 他会重新用MAC算法和密钥生成摘要 然后判断生成的摘要和传过来的摘要是否相等。相等说明密文没有被篡改过。不想等说明密文被篡改过了。

GCM工作模式就是 CTR模式加上GMAC完整性校验

GCM = CTR + GMAC

AES加解密步骤

AES(Advanced Encription Standard)

常用的填充算法:PKC57

常用的分组工作模式: GCM

AES的分组长度只能是16字节128位

AES 密钥长度(32位比特) 分组长度(32位比特) 加密轮数
AES=128 4 4 10
AES=192 6 4 12
AES=256 8 4 14

AES总体加密步骤

  • 1把明文按照128bit(16个字节)拆成若干个明文块,每个明文块是4*4矩阵
  • 按照选择的填充方式来填充最后一个明文块
  • 每一个明文块利用AES加密和密钥,加密成密文块
  • 拼接所有的密文块,成为最终密文的结果。

AES加密10轮步骤

  • C = E(K,P), E为每一轮算法,每轮密钥皆为不同
  • 初始轮
    • AddRoudKey密钥加(明文密钥做异或操作)
  • 普通轮
    • AddRoudKey密钥加(明文密钥做异或操作)
    • SubBytes字节替代
    • ShiftRows行移位
    • MixColumns列混合
  • 最终轮
    • SubBytes字节代替
    • ShiftRows行移位
    • AddRoundKey轮密钥加(明文密钥做异或操作)

密钥扩展(不是直接用密钥)

  • 函数g的步骤

    • a字循环: 左移一个字节

    • b使用s盒字节代换

    • 同轮常量RC[J]J进行异或,其中j表示论数

    • 每一轮使用的密钥生成下一轮使用的新的密钥

    • K0 k4 k8 k12
      k1 K5 K9 k13
      K2 K6 K10 k14
      K3 K7 K11 K15

      ​ | | | |

      ​ v v v v

      g函数

      w1 w2 w3 w4

​ 异或

  • g函数过程

    w b0移到最后,自循环

    b0 b1 b2 b3
    B1 B2 B3 B0

    s盒 s盒 s盒 s盒

    b1' b2' b3' b0'

    与RC[j]异或

    得到新的W

AES关键把密钥安全的传递给对方

非对称密码

每个参与方都有一对密钥

  • 公钥

    • 想对方公开
  • 私钥

    • 自己使用

RSA过程

  • 早期用rsa传递密钥

  • 现在利用RSA生成CA证书

RSA算法共私钥的产生

1选择两个不同的质数p、q

  • p = 11 q = 29

2计算p、q的乘积n(明文小于n)

  • n = 319

3计算n的欧拉函数

  • v = (p-1)*(q-1) = 10cheng28 = 280

4 随机选择一个整数k

  • k = 3

5计算k对于v的模反元素d

  • d = 187
  • 如果两个正整数a和n互质,那么一定可以找到整数b,使得 ab-1 被n整除,或者说ab被n除的余数是1。这时,b就叫做a的“模反元素
  • 3*187 - 1 = 561 -1 = 560 560能被 280整除

6 公钥(k,n)

  • (3, 319)

7私钥(d,n)

  • (187, 319)

RSA安全的原因

公钥是对外知道的

知道公钥就是知道(k,n) -> k就是一个随机数 n是两个质数p,q的乘积

​ ->v

​ ->v = (p-1)*(q-1),k 计算k对于v的模反元素d

​ ->(d,n)

难在n是一个大数,分解质因数n得到p,q会比较困难

安全性来源于对一个大数做因式分解特别困难。

RSA加密过程

  • ​ k

  • 加密 密文c = m(mod n)

  • ​ d

  • 解密 m = c(mod n)

  • 对明文123加密

    • 公钥(k,n) (3,319)加密

    • ​ 3

    • 123 mod319 = 140

    • 对140密文用私钥(187,319)解密

    • ​ 3

    • 140(mod319) ->123

  • 对明文123加密

  • 私钥(d,n) (187,319)加密

  • 187

  • 123 mod(319) = 161

  • 公钥解密(3,319)

  • 3

  • 161 mod319 ->123

  • 私钥加密公钥解密相当于做签名

opoen ssl 生成rsa公私钥

// 生成私钥
liuxiaoju@liuxiaojudeMBP EightLocks %
openssl genrsa -out private.pem
liuxiaoju@liuxiaojudeMBP EightLocks % cat /Users/liuxiaoju/Desktop/LagMonitor/EightLocks/EightLocks/private.pem
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAxH/E8JE00rifh0AI3eNlc52IMB8OfDts0ck3YsA+m3jKI3sG
M0lkQPvAHbTLlCetyc1BMt2x5RlhdBEt04BBC4TU2JAETJDZSxV3ovch1EnIEOPz
88WxXNvMLBvVwIjfFMyq0QE6MBClHAzc4U2v5oPLb2HwOwSpElimxghFT5IsVjL+
rRN1OxPhrn2mbmGySsvz7VLq0XijABXc6E05i3TnFI98hgK6RJuvpF7L6oVtgWkX
144hqrWI79UHFep8aO49VaaeMKYYzwdXHigyYTld9ehsAlvkdwGRRhp9I2XtAZrE
FHsqWHxQeydw1w+BaG/wRlhjoy/wyNC07GRSLwIDAQABAoIBAQC+ZQLhCgGB0Awb
E8vDm8s4XEKSRfVWIIpPN0WoNJg1MrPB7zlRxmISqRw8bGr5cfztVSlAbRkq4A3S
VbbugQ4FaD6IW/seaRdyrilOyWCI/riQzR8aa8pwLDTH5GyX8sccszcr7qF/4xDo
ffojgI/YrokWsnH/7YMY2Lc3mNn3vvp7t5lHcog6tP/Zj1hs9wVVFx4A5m71+O+l
ha4ul8wuM+7e1Uw/He02TntH/5quyOSThkz4fEUvxsmm8kY/8gCCdvCd85CkGkTW
V1MuIrbN7wpkZaytOZpb9f20rVwHrbR+IBKhrGIjpuhN9HSozo2t4DRt1dDwbvoK
AkwKf3L5AoGBAOtYKmR+v3uU3ZDufXjUy9uhvPrLbSafLKeqC4SCRElm9UliPaa6
qB6XprBU5GLad076fOAW17jszV1dxASFepi1HYoOhicCYLE2mwci1lvo0nXZVsw5
jNcwvKHj7qXJ2k/gdkc7fesTCXtWYW+VWNxtsSygTNATcT0+oHMVuMh7AoGBANW+
zu25Yo7lXh+jB7BRYWuujTBa2xqTix6dAiid71G4KEZUCz+bDoJr+cCE2tPSUMLr
SzZkGfuaShBRtHWqLT+AEeqdHM14iuUMDld3Wu3MMBgRWFZS9PDg+25rVqXsnPPJ
KYxRNu39SSXTRFTW3hcOIPb15RK3RgGjA0EMmcDdAoGAaPj6b7jZUBYmfe7iqHLC
O0T5NiRmm0OEd4SxfnlcXCFAZ2sadLPtKTgbcatr82veq6uu54VI04NMVsjsFdgz
xsmCU4IG9H9rAaCJpbU0R+qhdU9sF8vTtmhWux8f43MVnWtRVpSCpcfoAsuUymCj
Mi77SBx4JpeFevvkNXEK6uECgYEAnIHJXNHYc89I+xtRvu3nyoQWB6kPM8eDH1hR
w1HZcVnJy60wS1OK7T6IsknVPTKLRh4phVsIl20i/A4Hd/yygwOQmtyNwXmZIhuQ
yMSxRNu0/3p710GI7nOeRvy7hmTZi7vo+0BgWySSEes+5mwqVHFY+9uS7wBZd0tY
T6IdVtUCgYAlZdXIpVPX6l7mQfJk/swZrdKhqI1rr5ji5Tx2jyI8rE3bzz7LSJ3h
KGAxMGJnEAnH2PLW4w1xE9PnUw5U/bcyVMt7xHTUwUVsWDZaEE+Pr+4vFhKlVtsg
Ir2dkPM4OpRRVTj0D5bSQvIYBw9RKUMk1IjoafyeJepUh/V9lkCkZA==
-----END RSA PRIVATE KEY-----
// 生成对应私钥的公钥
openssl rsa -in private.pem -pubout -out public.pem
liuxiaoju@liuxiaojudeMBP EightLocks % cat public.pem

-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxH/E8JE00rifh0AI3eNl
c52IMB8OfDts0ck3YsA+m3jKI3sGM0lkQPvAHbTLlCetyc1BMt2x5RlhdBEt04BB
C4TU2JAETJDZSxV3ovch1EnIEOPz88WxXNvMLBvVwIjfFMyq0QE6MBClHAzc4U2v
5oPLb2HwOwSpElimxghFT5IsVjL+rRN1OxPhrn2mbmGySsvz7VLq0XijABXc6E05
i3TnFI98hgK6RJuvpF7L6oVtgWkX144hqrWI79UHFep8aO49VaaeMKYYzwdXHigy
YTld9ehsAlvkdwGRRhp9I2XtAZrEFHsqWHxQeydw1w+BaG/wRlhjoy/wyNC07GRS
LwIDAQAB
-----END PUBLIC KEY-----

私钥的编码格式

ASN.1

解码查看

openssl asn1parse -dump -in private.pem
    0:d=0  hl=4 l=1188 cons: SEQUENCE          
    4:d=1  hl=2 l=   1 prim: INTEGER           :00
    7:d=1  hl=4 l= 257 prim: INTEGER           :C47FC4F09134D2B89F874008DDE365739D88301F0E7C3B6CD1C93762C03E9B78CA237B0633496440FBC01DB4CB9427ADC9CD4132DDB1E5196174112DD380410B84D4D890044C90D94B1577A2F721D449C810E3F3F3C5B15CDBCC2C1BD5C088DF14CCAAD1013A3010A51C0CDCE14DAFE683CB6F61F03B04A91258A6C608454F922C5632FEAD13753B13E1AE7DA66E61B24ACBF3ED52EAD178A30015DCE84D398B74E7148F7C8602BA449BAFA45ECBEA856D816917D78E21AAB588EFD50715EA7C68EE3D55A69E30A618CF07571E283261395DF5E86C025BE4770191461A7D2365ED019AC4147B2A587C507B2770D70F81686FF0465863A32FF0C8D0B4EC64522F
  268:d=1  hl=2 l=   3 prim: INTEGER           :010001 
  273:d=1  hl=4 l= 257 prim: INTEGER           :BE6502E10A0181D00C1B13CBC39BCB385C429245F556208A4F3745A834983532B3C1EF3951C66212A91C3C6C6AF971FCED5529406D192AE00DD255B6EE810E05683E885BFB1E691772AE294EC96088FEB890CD1F1A6BCA702C34C7E46C97F2C71CB3372BEEA17FE310E87DFA23808FD8AE8916B271FFED8318D8B73798D9F7BEFA7BB7994772883AB4FFD98F586CF70555171E00E66EF5F8EFA585AE2E97CC2E33EEDED54C3F1DED364E7B47FF9AAEC8E493864CF87C452FC6C9A6F2463FF2008276F09DF390A41A44D657532E22B6CDEF0A6465ACAD399A5BF5FDB4AD5C07ADB47E2012A1AC6223A6E84DF474A8CE8DADE0346DD5D0F06EFA0A024C0A7F72F9
  534:d=1  hl=3 l= 129 prim: INTEGER           :EB582A647EBF7B94DD90EE7D78D4CBDBA1BCFACB6D269F2CA7AA0B8482444966F549623DA6BAA81E97A6B054E462DA774EFA7CE016D7B8ECCD5D5DC404857A98B51D8A0E86270260B1369B0722D65BE8D275D956CC398CD730BCA1E3EEA5C9DA4FE076473B7DEB13097B56616F9558DC6DB12CA04CD013713D3EA07315B8C87B
  666:d=1  hl=3 l= 129 prim: INTEGER           :D5BECEEDB9628EE55E1FA307B051616BAE8D305ADB1A938B1E9D02289DEF51B82846540B3F9B0E826BF9C084DAD3D250C2EB4B366419FB9A4A1051B475AA2D3F8011EA9D1CCD788AE50C0E57775AEDCC301811585652F4F0E0FB6E6B56A5EC9CF3C9298C5136EDFD4925D34454D6DE170E20F6F5E512B74601A303410C99C0DD
  798:d=1  hl=3 l= 128 prim: INTEGER           :68F8FA6FB8D95016267DEEE2A872C23B44F93624669B43847784B17E795C5C2140676B1A74B3ED29381B71AB6BF36BDEABABAEE78548D3834C56C8EC15D833C6C982538206F47F6B01A089A5B53447EAA1754F6C17CBD3B66856BB1F1FE373159D6B51569482A5C7E802CB94CA60A3322EFB481C782697857AFBE435710AEAE1
  929:d=1  hl=3 l= 129 prim: INTEGER           :9C81C95CD1D873CF48FB1B51BEEDE7CA841607A90F33C7831F5851C351D97159C9CBAD304B538AED3E88B249D53D328B461E29855B08976D22FC0E0777FCB28303909ADC8DC17999221B90C8C4B144DBB4FF7A7BD74188EE739E46FCBB8664D98BBBE8FB40605B249211EB3EE66C2A547158FBDB92EF0059774B584FA21D56D5
 1061:d=1  hl=3 l= 128 prim: INTEGER           :2565D5C8A553D7EA5EE641F264FECC19ADD2A1A88D6BAF98E2E53C768F223CAC4DDBCF3ECB489DE12860313062671009C7D8F2D6E30D7113D3E7530E54FDB73254CB7BC474D4C1456C58365A104F8FAFEE2F1612A556DB2022BD9D90F3383A94515538F40F96D242F218070F51294324D488E869FC9E25EA5487F57D9640A464
// 解析公钥

PKI体系和CA结构

数字签名

  • 基于私钥加密,只能使用公钥解密:起到身份认证的作用
    • 公钥大家都持有,就是知道消息是我发出来的
  • 公钥的管理PKI(public key infrastructure)公钥基础设施
  • 由Certificat Authority(CA)数字认证机构将用户个人身份与公开密钥关联在一起
  • 公钥数字证书组成
    • CA信息,公钥用户信息,公钥,权威机构的签字,有效期
    • PKI用户
      • 向CA注册公钥的用户
      • 希望使用已注册公钥的用户(浏览器使用者)

为什么有证书就安全了,签名验签流程

  • 验签

    • BOB生成公私钥,把它的个人身份+公钥 ——>发给CA登记机构

    • CA登记机构去验证登记人BOB的身份

      • 看证书对应的域名是不是BOB的
      • 是不是指向他所在的服务器
      • 通过后生成CSR发给CA机构,CA用私钥加密传递给证书订阅人BOB
      • BOB在服务器上部署证书
      • 用户建立好连接进行TLS握手
      • 用户握手后先请求证书
      • 服务器把证书发给信赖方(例如浏览器)
      • (根证书都是内置在浏览器内的或者说所有的操作系统中的)比照判断证书是否是可信的,看证书是否是过期的。公钥证书有个有效期。
      • CA机构对证书有效期的判断,CA是又个CRL服务器。
      • 信赖方可以到CRL服务器检查证书是否在有效期。过期了证书就不信了。采用链表的方式,性能很差。
      • CA又搞出来一个OCSP响应程序更快判断证书是否在有效期。
  • 证书信任链,中间人

    • 抓包发现,服务器传证书
    • 点击浏览器的锁可以看见证书
  • 证书类型
    • dv证书免费的 域名证书 (domain validated)
    • 组织正式OV证书(organization validated) 更贵
    • 扩展证书(extended validated) ev证书 最贵金融证书

TLS握手过程 DH密钥交换协议

前向保密性

迫于美国政府压力,server端把私钥给了美国政府

美国政府作为中间人拦截客户端发的消息,公钥发的消息。

然后就用拿到的私钥解密,所有信息都可以看到。

DH密钥交换协议

  • 可以让双方在完全没有任何预先信息的条件下,通过不安全通道创建一个密钥。
  • client -> server 发一个hello
  • sever自己生成公私钥,其中私钥server自己保存,把公钥发给client。
  • client基于server的public key利用一种算法,生成了一对公钥私钥,把自己的公钥发给server

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,843评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,538评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,187评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,264评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,289评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,231评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,116评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,945评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,367评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,581评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,754评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,458评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,068评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,692评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,842评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,797评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,654评论 2 354

推荐阅读更多精彩内容