GPON中的AES算法介绍及样例

算法介绍

        AES加密主要分为四个基本步骤:字节替代,行位移,列混淆,轮密钥加,AES的明文是放在4*4矩阵中的,一个矩阵经过上面四步为一轮,加解密的刚开始都需要进行轮密钥加步骤,之后按顺序执行上面四个步骤,在最后一轮中不执行列混淆操作,因为最后一轮加列混淆并不会加大AES算法的安全性,只会降低算法效率。在每一轮中都会参一点密钥,每一轮的密钥都是由初始密钥扩展得到。密钥长度可选128位(10轮),192位(12轮),256位(14轮),由此可知循环轮数越多,秘钥长度越长,信息加密也就会越安全。

        GPON中AES使用计数器(CTR)模式。密码算法产生一个16字节的伪随机码块流,伪随机码块与输入的明文进行异或运算后产生密文输出。密文与同样的伪随机码进行异或运算后可以重产生明文。密钥长度是固定128bit。CTR模式中,OLT和所有ONU使用公共的经过同步的密码计数器。密码计数器的结构,计数器宽度为46比特,低16比特为帧内计数器,高30比特是帧间计数器。帧内计数器在下行帧开始时置为0,第1个字节是PCBd,每4字节递增。在1.244Gb/s下行速率系统中,计数器的运行范围是0到4859。帧间计数器与在PCBd的Ident域中传递的复帧计数器保持一致。ONU实现一个经过同步的本地计数器因此可以修复这个域的错误。随机密码块与数据包净荷的起始位置对齐。只对GEM帧/分片的净荷进行加密,GEM帧头不进行加密。由于GEM分片不一定是一个完整的编码块,所以尾数据块(长度为1到16字节)与尾AES密码块(长度为16字节)的MSB进行异或运算。尾密码块的其余部分将会被丢弃。

        密码计数器与GTC下行帧对齐,但是AES密码块与数据净荷对齐。这两个序列的关系如图所示。当数据包在OLT上发送或者在ONU上接收时帧头第一个字节的位置被标注。该字节位置的密码计数器值用作数据包的密码块计数器的开始值。对于数据包中接下来的密码块计数器对每个块递增1。这种方法可以保证计数器的同一值不会被重复使用。

46比特长的块计数器值按照如下方式推导出AES算法的128比特输入46比特复制3次后变成一个138比特的序列,高位10比特会被丢弃。剩余的128比特按照AES算法加密生成128比特随机密码,然后于用户净荷数据进行异或操作。

GPON协议中AES加密的流程如下:

  1. 确定AES-128的密钥
  2. 取出帧内计数器和帧间计数器,帧内计数器作为低16bit,帧间计数器作为高30bit,组装成46bit的密码块
  3. 密码块复制3次去掉最高10bit,得到128bit明文,对该明文进行AES-128加密,得到伪随机密文
  4. 将得到的伪随机密文和128bit数据块进行异或(数据不足128bit时从最高位依次异或至末位),得到加密内容

解密流程类似,得到伪随机密文后将其与加密数据异或,得到真实数据。

样例

样例1:

密钥:0x112233445566778899AABBCCDDEEFF00

帧内计数器:0x0027

帧间计数器:0x3DCAE120

待加密数据序列:0x000102030405060708090A0B0C0D0E0F

46比特密码块序列:1111011100101011100001001000000000000000100111

加密后数据序列:0x3AFB97EEFCBCC16B6C571AA4FF7AC3AD

样例2:

密钥:0x112233445566778899AABBCCDDEEFF00

帧内计数器:0x0028

帧间计数器:0x3DCAE120

待加密数据序列:0x101112131415161718191A1B1C1D1E1F202122

46bit密码块序列:1111011100101011100001001000000000000000101000

加密后数据序列:0x6C85285A57F89E7A3607CA8ACE450A97

样例3:

密钥:0x112233445566778899AABBCCDDEEFF00

帧内计数器:0x0031

帧间计数器:0x3DCAE120

待加密数据序列:0xAABBCCDDEEFF

46bit密码块序列:1111011100101011100001001000000000000000110001

加密后数据序列:0x8B5F94E48F34

样例4:

密钥:0x112233445566778899AABBCCDDEEFF00

帧内计数器:0x0034

帧间计数器:0x3DCAE120

待加密数据序列:0x112233445566778899AABBCCDDEEFF

46bit密码块序列:1111011100101011100001001000000000000000110100

加密后数据序列:0x9DF4F415F6A43CD0300FF69288EE54

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

巨石阵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值