下面主要的内容就是SNMPv3的加密和认证过程!

USM的定义为实现以下功能:

鉴别

数据加密

密钥管理

时钟同步化

避免延时和重播攻击

1、UsmSecurityParameters(安全参数)

安全参数存在于snmp消息中的msgSecurityParameters字段,以ASN.1语法定义如下:

UsmSecurityParameters ::=

SEQUENCE {

-- global User-based security parameters

msgAuthoritativeEngineID     OCTET STRING,

msgAuthoritativeEngineBoots  INTEGER (0..2147483647),

msgAuthoritativeEngineTime   INTEGER (0..2147483647),

msgUserName                  OCTET STRING (SIZE(0..32)),

-- authentication protocol specific parameters

msgAuthenticationParameters  OCTET STRING,

-- privacy protocol specific parameters

msgPrivacyParameters         OCTET STRING

}

msgAuthoritativeEngineID 权威引擎id。请求及inform消息中此值为接收方引擎id。Trap及应答消息中此值为发送方引擎id

msgAuthoritativeEngineBoots 权威引擎已重启次数

msgAuthoritativeEngineTime 权威引擎发送此消息时的时间

msgUserName  用户名

msgAuthenticationParameters 消息鉴别代码

msgPrivacyParameters 用于解密的salt值

2、鉴别和加密的实现

2.1  鉴别

使用MD5或SHA-1作为内嵌安全散列函数,通过HMAC进行鉴别。

从用户口令到鉴别密钥产生方法:

假设用户口令为password,不断重复串接password必要多的次数达到1048576字节长度。然后通过MD5或SHA-1散列函数得到一个16字节或20字节的密钥。

鉴别过程:

发送消息时用鉴别密钥产生一个消息鉴别代码,并将其填入msgAuthenticationParameters字段。收到一个消息时用发送此消息的用户对应的鉴别密钥对消息产生一个消息鉴别代码,与msgAuthenticationParameters字段中的值进行比较,若相等则认为通过鉴别。

2.2  加密解密

用和产生鉴别密钥相同的方法从用户口令生成加密密钥。

加密过程:

用16字节的加密密钥的最后8位用作预IV,该引擎的snmpEngineBoots 的当前值(4个字节)和由本地维护的一个4字节整数串连构成一个salt值。由本地维护的这个4字节整数在每次发送消息时应采用不同的值。Salt值和预IV按位异或生成IV,加密密钥和IV通过DES的CBC加密算法对ScopedPduData字段数据进行加密。并将salt值放入msgPrivacyParameters字段。

解密过程:

从收到的消息中取出msgPrivacyParameters字段内的salt值。用本地维护的16字节的密钥的最后8位用作预IV,将salt值与预IV按位异或生成IV用密钥和IV对已加密的数据进行解密。

 

参考

 

最新文章

  1. 常用 Git 命令
  2. Bootstrap系列 -- 33. 等分按钮
  3. 第二十五课:jQuery.event.trigger的源码解读
  4. poj 3225 线段树+位运算
  5. [GCJ]Password Attacker
  6. SRM 514 DIV1 500pt(DP)
  7. Scala学习笔记之:tuple、array、Map
  8. zTree实现访问到第一节点在相同水平当前所选节点数目
  9. SQL2008R2 无法读取此系统上以前注册的服务器的列表--网上方法不可行
  10. SpringMVC的@ModelAttribute注解简单使用(用户修改信息)
  11. 史上最全的css hack(ie6-9,firefox,chrome,opera,safari)
  12. Leetcode_252_Implement Stack using Queues
  13. hibernate出现QueryException: could not resolve property 查询异常
  14. calc属性
  15. 【ftp】主动模式和被动模式
  16. 『TensorFlow』分布式训练_其二_单机多GPU并行&GPU模式设定
  17. Android Studio - Unable to create Debug Bridge: Unable to start adb server: adb server version (32) doesn't match this client (40)
  18. 【转载】spring mvc 使用session
  19. jquery新版本旧版本之间的坑
  20. xaf 自定义登陆页

热门文章

  1. 【微信小程序】---线上环境搭建
  2. 浅谈SharePoint 2013 站点模板开发
  3. Python之shutil模块
  4. XTU 1264 - Partial Sum - [2017湘潭邀请赛E题(江苏省赛)]
  5. 七种RAID技术
  6. Fata7y Ya Warda! SPOJ - DRUIDEOI 单调栈
  7. PXE配置手记(Linux)
  8. 01 - nginx - 安装、配置文件、默认网站、虚拟主机
  9. 网站搜索引擎优化(SEO)的18条守则
  10. CF1053E Euler tour 构造