下面主要的内容就是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对已加密的数据进行解密。

 

参考

 

SNMP学习笔记之SNMPv3报文认证和加密的更多相关文章

  1. SNMP学习笔记之SNMPv3的报文格式以及基于USM的认证和加密过程

    下面我们就主要讲解SNMPv3的报文格式以及基于USM的认证和加密过程! 1.SNMPv3的消息格式 如下图1: 图 1 其中,整个SNMPv3消息可以使用认证机制,并对EngineID.Contex ...

  2. SNMP学习笔记之SNMPv3的配置和认证以及TroubleShooting

    0x00 增加snmp v3用户 增加用户的时候,必须要停止SNMP服务. # service snmpd stop # net-snmp-config --create-snmpv3-user -r ...

  3. Django:学习笔记(9)——用户身份认证

    Django:学习笔记(9)——用户身份认证 User

  4. SNMP学习笔记之SNMP报文以及不同版本(SNMPv1、v2c、v3)的区别

    本篇文章将重点分析SNMP报文,并对不同版本(SNMPv1.v2c.v3)进行区别! 四.SNMP协议数据单元 在SNMP管理中,管理站(NMS)和代理(Agent)之间交换的管理信息构成了SNMP报 ...

  5. SNMP学习笔记之SNMP报文协议详解

    0x00 简介 简单网络管理协议(SNMP)是TCP/IP协议簇的一个应用层协议.在1988年被制定,并被Internet体系结构委员会(IAB)采纳作为一个短期的网络管理解决方案:由于SNMP的简单 ...

  6. SNMP学习笔记之SNMP介绍,OID及MIB库

    1.1.    SNMP概览 SNMP的基本知识介绍简单网络管理协议(SNMP-Simple Network Management Protocol)是一个与网络设备交互的简单方法.该规范是由IETF ...

  7. SNMP学习笔记之SNMP 原理与实战详解

    原文地址:http://freeloda.blog.51cto.com/2033581/1306743 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法 ...

  8. SNMP学习笔记之SNMP4J介绍(Java)

    0x00 SNMP4J介绍 SNMP4J是一个用Java来实现SNMP(简单网络管理协议)协议的开源项目.它支持以命令行的形式进行管理与响应.SNMP4J是纯面向对象设计与SNMP++(用C++实现S ...

  9. SNMP学习笔记之SNMP简单概述

    0x00 SNMP简单概述 0.1.什么是Snmp SNMP是英文"Simple Network Management Protocol"的缩写,中文意思是"简单网络管理 ...

随机推荐

  1. centos 安装laravel

    1.下载composer并全局安装 curl -sS https://getcomposer.org/installer | php 2.查看全局命令目录 echo $PATH 移动composer到 ...

  2. Centos清除IP

    要把配置好的ip清除掉,可以使用以下命令: ip addr flush dev eth0 如果系统中没有ip这个命令,可以使用更简单的: ifconfig eth0 0.0.0.0 可以用于PPTP拨 ...

  3. POJ-2777 Count Color(线段树,区间染色问题)

    Count Color Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 40510 Accepted: 12215 Descrip ...

  4. Django运算符表达式

    在html页面中,加入运算符表达式,进行逻辑判断.可参考手册.我用的Django是2.1版本 view.py中的代码: from django.shortcuts import render from ...

  5. PHP使用 zip 扩展压缩文件

    在公司遇到一个问题,是使用zip打包用户的上传文件,提供集体下载. -- 第一个想法就是使用exec在Linux进行打包.但是...exec方法吧,你懂得,我不太愿意使用这个函数. -- 于是上网查找 ...

  6. flask之表单验证 2018.12.23

    #flask的消息闪现依赖于flash库,用户发送的请求方式存储在request模块中 #跳转依赖于redirect模块,还可以通过url_for方法来进行方法上的寻址 from flask impo ...

  7. 【Python】【Web.py】详细解读Python的web.py框架下的application.py模块

    详细解读Python的web.py框架下的application.py模块   这篇文章主要介绍了Python的web.py框架下的application.py模块,作者深入分析了web.py的源码, ...

  8. xpath教程 1 - 什么是XPath

    xpath教程 1 什么是XPath? XPath (XML Path Language) 是一门在 XML 文档中查找信息的语言,可用来在 XML 文档中对元素和属性进行遍历. W3School官方 ...

  9. 图片放大_css3

    .flash_little_img{position:relative;}.flash_little_img{width:500px;height:333px;border:none; margin: ...

  10. SQL Server 登录名、服务器角色、用户名和数据库角色 --- 解释

    一.基本解释 登录名:登录服务器的用户账号: 服务器角色:登录名对该服务器具有的权限,角色分多种的,一个角色可以有多个登录名,如操作系统的系统用户可以有多个. SQL服务器角色  sysadmin   ...