IPv6应用层安全威胁犹在 物联网应用层的安全威胁

IPv6应用层安全威胁犹在 物联网应用层的安全威胁,第1张

尽管IPv4中常见的攻击方式将在IPv6网络中失效,使来自网络层的一些安全攻击得以抑制,但采用IPv6并不意味着关紧了安全的大门,来自应用层的威胁将以新的方式出现。 总有人误认为“网络改成IPv6,安全问题就全面解决了”。诚然,IPv4中常见的一些攻击方式将在IPv6网络中失效,例如网络侦察、报头攻击、碎片攻击、假冒地址及蠕虫病毒等,但IPv6不仅不可能彻底解决所有安全问题,反而还会产生新的安全问题。
虽然与IPv4相比,IPv6在网络保密性、完整性方面做了更好的改进,在可控性和抗否认性方面有了新的保证,但目前多数网络攻击和威胁来自应用层而非网络层。因此,保护网络安全与信息安全,只靠一两项技术并不能实现,还需配合多种手段,诸如认证体系、加密体系、密钥分发体系、可信计算体系等。

安全新问题如影随形

IPv6是新的协议,在其发展过程中必定会产生一些新的安全问题,主要包括:
● 针对IPv6的网管设备和网管软件都不太成熟。
IPv6的管理可借鉴IPv4。但对于一些网管技术,如SNMP(简单网络管理)等,不管是移植还是重建,其安全性都必须从本质上有所提高。由于目前针对IPv6的网管都不太成熟,因此缺乏对IPv6网络进行监测和管理的手段,对大范围的网络故障定位和性能分析的能力还有待提高。
● IPv6中同样需要防火墙、、IDS(入侵检测系统)、漏洞扫描、网络过滤、防病毒网关等网络安全设备。
事实上,IPv6环境下的病毒已经出现。例如,有研究人员在IPv6中发现了一处安全漏洞,可能导致用户遭受拒绝服务攻击。据悉,该漏洞存在于IPv6的type 0路由头(RH0)特征中。某些系统在处理IPv6 type 0路由头时存在拒绝服务漏洞。
● IPv6协议仍需在实践中完善。
IPv6组播功能仅仅规定了简单的认证功能,所以还难以实现严格的用户限制功能。移动IPv6(Mobile IPv6)也存在很多新的安全挑战,目前移动IPv6可能遭受的攻击主要包括拒绝服务攻击、重放攻击以及信息窃取攻击。另外,DHCP( Dynamic Host Configuration Protocol,动态主机配置协议)必须经过升级才可以支持IPv6地址,DHCPv6仍然处于研究、制订之中。
●向IPv6迁移过程中可能出现漏洞。
目前安全人员已经发现从IPv4向 IPv6转移时出现的一些安全漏洞,例如黑客可以非法访问采用了IPv4和IPv6两种协议的LAN网络资源,攻击者可以通过安装了双栈的IPv6主机建立由IPv6到IPv4的隧道,从而绕过防火墙对IPv4进行攻击。
IPv6协议在网络安全上的改进
● IP安全协议(IPSec)技术
IP安全协议(IPSec)是IPv4的一个可选扩展协议,而在IPv6中则是一个必备的组成部分。IPSec协议可以“无缝”地为IP提供安全特性,如提供访问控制、数据源的身份验证、数据完整性检查、机密性保证,以及抗重播(Replay)攻击等。
IPSec通过三种不同的形式来保护通过公有或私有IP网络来传送的私有数据。
(1)验证:通过认证可以确定所接受的数据与所发送的数据是否一致,同时可以确定申请发送者在实际上是真实发送者,而不是伪装的。
(2)数据完整验证:通过验证保证数据从原发地到目的地的传送过程中没有任何不可检测的数据丢失与改变。
(3)保密:使相应的接收者能获取发送的真正内容,而无关的接收者无法获知数据的真正内容。
需要指出的是,虽然IPSec能够防止多种攻击,但无法抵御Sniffer、DoS攻击、洪水(Flood)攻击和应用层攻击。IPSec作为一个网络层协议,只能负责其下层的网络安全,不能对其上层如Web、E-mail及FTP等应用的安全负责。
●灵活的扩展报头
一个完整的IPv6数据包包括多种扩展报头,例如逐个路程段选项报头、目的选项报头、路由报头、分段报头、身份认证报头、有效载荷安全封装报头、最终目的报头等。这些扩展报头不仅为IPv6扩展应用领域奠定了基础,同时也为安全性提供了保障。
比较IPv4和Ipv6的报头可以发现,IPv6报头采用基本报头+扩展报头链组成的形式,这种设计可以更方便地增添选项,以达到改善网络性能、增强安全性或添加新功能的目的。
IPv6基本报头被固定为40bit,使路由器可以加快对数据包的处理速度,网络转发效率得以提高,从而改善网络的整体吞吐量,使信息传输更加快速。
IPv6基本报头中去掉了IPv4报头中的部分字段,其中段偏移选项和填充字段被放到IPv6扩展报头中进行处理。
去掉报头校验(Header Checksum,中间路由器不再进行数据包校验)的原因有三: 一是因为大部分链路层已经对数据包进行了校验和纠错控制,链路层的可靠保证使得网络层不必再进行报头校验; 二是端到端的传输层协议也有校验功能以发现错包; 三是报头校验需随着TTL值的变化在每一跳重新进行计算,增加包传送的时延。
●地址分配与源地址检查
地址分配与源地址检查在IPv6的地址概念中,有了本地子网(Link-local)地址和本地网络(Site-local)地址的概念。从安全角度来说,这样的地址分配为网络管理员强化网络安全管理提供了方便。若某主机仅需要和一个子网内的其他主机建立联系,网络管理员可以只给该主机分配一个本地子网地址;若某服务器只为内部网用户提供访问服务,那么就可以只给这台服务器分配一个本地网络地址,而企业网外部的任何人都无法访问这些主机。
由于IPv6地址构造是可会聚的(aggregate-able)、层次化的地址结构,因此,IPv6接入路由器对用户进入时进行源地址检查,使得ISP可以验证其客户地址的合法性。
源路由检查出于安全性和多业务的考虑,允许核心路由器根据需要,开启反向路由检测功能,防止源路由篡改和攻击。
IPv6固有的对身份验证的支持,以及对数据完整性和数据机密性的支持和改进,使得IPv6增强了防止未授权访问的能力,更加适合于那些对敏感信息和资源有特别处理要求的应用。
通过端到端的安全保证,网络可以满足用户对安全性和移动性的要求。IPv6限制使用NAT(Network Address Translation,网络地址转换),允许所有的网络节点使用全球惟一的地址进行通信。每当建立一个IPv6的连接,系统都会在两端主机上对数据包进行 IPSec封装,中间路由器对有IPSec扩展头的IPv6数据包进行透明传输。通过对通信端的验证和对数据的加密保护,使得敏感数据可以在IPv6 网络上安全地传递,因此,无需针对特别的网络应用部署ALG(应用层网关),就可保证端到端的网络透明性,有利于提高网络服务速度。
●域名系统DNS
基于IPv6的DNS系统作为公共密钥基础设施(PKI)系统的基础,有助于抵御网上的身份伪装与偷窃。当采用可以提供认证和完整性安全特性的DNS安全扩展 (DNS Security Extensions)协议时,能进一步增强对DNS新的攻击方式的防护,例如网络钓鱼(Phishing)攻击、DNS中毒(DNS poisoning)攻击等,这些攻击会控制DNS服务器,将合法网站的IP地址篡改为假冒、恶意网站的IP地址。

本实验采用W25Q64芯片

W25Q64是华邦公司推出的大容量SPI

FLASH产品,其容量为64Mb。该25Q系列的器件在灵活性和性能方面远远超过普通的串行闪存器件。W25Q64将8M字节的容量分为128个块,每个块大小为64K字节,每个块又分为16个扇区,每个扇区4K个字节。W25Q64的最小擦除单位为一个扇区,也就是每次必须擦除4K个字节。所以,这需要给W25Q64开辟一个至少4K的缓存区,这样必须要求芯片有4K以上的SRAM才能有很好的 *** 作。

W25Q64的擦写周期多达10W次,可将数据保存达20年之久,支持27~36V的电压,支持标准的SPI,还支持双输出/四输出的SPI,最大SPI时钟可达80Mhz。

一。SPI接口原理

(一)概述
高速,全双工,同步的通信总线。

全双工:可以同时发送和接收,需要2条引脚

同步: 需要时钟引脚

片选引脚:方便一个SPI接口上可以挂多个设备。

总共四根引脚。

(二)SPI内部结构简明图
MISO: 做主机的时候输入,做从机的时候输出

MOSI:做主机的时候输出,做从机的时候输入

主机和从机都有一个移位寄存器,在同一个时钟的控制下主机的最高位移到从机的最高位,同时从机的最高位往前移一位,移到主机的最低位。在一个时钟的控制下主机和从机进行了一个位的交换,那么在8个时钟的控制下就交换了8位,最后的结果就是两个移位寄存器的数据完全交换。

在8个时钟的控制下,主机和从机的两个字节进行了交换,也就是说主机给从机发送一个字节8个位的同时,从机也给主机传回来了8个位,也就是一个字节。

(三)SPI接口框图
上面左边部分就是在时钟控制下怎么传输数据,右边是控制单元,还包括左下的波特率发生器。

(四)SPI工作原理总结
(五)SPI的特征
(六)从选择(NSS)脚管理
两个SPI通信首先有2个数据线,一个时钟线,还有一个片选线,只有把片选拉低,SPI芯片才工作,片选引脚可以是SPI规定的片选引脚,还可以通过软件的方式选择任意一个IO口作为片选引脚,这样做的好处是:比如一个SPI接口上挂多个设备,比如挂了4个设备,第二个用PA2,第三个用PA3,第四个用PA4作为片选,我们

跟第二个设备进行通信的时候,只需要把第二个片选选中,比如拉低,其他设备的片选都拉高,这样就实现了一个SPI接口可以连接个SPI设备,战舰开发板上就是通过这种方法来实现的。

(七)时钟信号的相位和极性
时钟信号的相位和极性是通过CR寄存器的 CPOL 和 CPHA两个位确定的。

CPOL:时钟极性,设置在没有数据传输时时钟的空闲状态电平。CPOL置0,SCK引脚在空闲时为低电平,CPOL置1,SCK引脚在空闲时保持高电平。

CPHA:时钟相位 设置时钟信号在第几个边沿数据被采集

CPHA=1时:在时钟信号的第二个边沿
CPOL=1,CPHA=1,

CPOL=1表示时钟信号在没有数据传输时即空闲时的状态为高电平。如果CPHA=1,那么数据就在时钟信号的第二个边沿即上升沿的时候被采集。

CPOL= 0,CPHA=1, CPOL=0表示时钟信号在没有数据传输时即空闲时的状态为低电平。

如果CPHA=1,那么数据就在时钟信号的第二个边沿即下降沿的时候被采集。

CPHA=0时:在时钟信号的第一个边沿
CPOL=1,CPHA=0,

CPOL=1表示时钟信号在没有数据传输时即空闲时的状态为高电平。如果CPHA=1,那么数据就在时钟信号的第一个边沿即下降沿的时候被采集。

CPOL= 0,CPHA=0, CPOL=0表示时钟信号在没有数据传输时即空闲时的状态为低电平。

如果CPHA=1,那么数据就在时钟信号的第一个边沿即上升沿的时候被采集。

为什么要配置这两个参数

因为SPI外设的从机的时钟相位和极性都是有严格要求的。所以我们要根据选择的外设的时钟相位和极性来配置主机的相位和极性。必须要与从机匹配。

(八)数据帧的格式和状态标志
数据帧格式:根据CR1寄存器的LSBFIRST位的设置,数据可以MSB在前也可以LSB在前。

根据CR1寄存器的DEF位,每个数据帧可以是8位或16位。

(九)SPI中断
(十)SPI引脚配置 (3个SPI)
引脚的工作模式设置
引脚必须要按照这个表格配置。

二。SPI寄存器库函数配置

(一)常用寄存器
(二)SPI相关库函数
STM32的SPI接口可以配置为支持SPI协议或者支持I2S音频协议。默认是SPI模式,可以通过软件切换到I2S方式。

常用的函数:

1 void SPI_Init(SPI_TypeDef SPIx, SPI_InitTypeDef

SPI_InitStruct);//SPI的初始化

2 void SPI_Cmd(SPI_TypeDef SPIx, FunctionalState NewState); //SPI使能

3 void SPI_I2S_ITConfig(SPI_TypeDef SPIx, uint8_t SPI_I2S_IT,

FunctionalState NewState); //开启中断

4 void SPI_I2S_DMACmd(SPI_TypeDef SPIx, uint16_t SPI_I2S_DMAReq,

FunctionalState NewState);//通 过DMA传输数据

5 void SPI_I2S_SendData(SPI_TypeDef SPIx, uint16_t Data); //发送数据

6 uint16_t SPI_I2S_ReceiveData(SPI_TypeDef SPIx); //接收数据

7 void SPI_DataSizeConfig(SPI_TypeDef SPIx, uint16_t SPI_DataSize);

//设置数据是8位还是16位

8 其他几个状态函数

void SPI_Init(SPI_TypeDef SPIx, SPI_InitTypeDef

SPI_InitStruct);//SPI的初始化
结构体成员变量比较多,这里我们挑取几个重要的成员变量讲解一下:

第一个参数 SPI_Direction 是用来设置 SPI 的通信方式,可以选择为半双工,全双工,以及串行发和串行收方式,这里我们选择全双工模式

SPI_Direction_2Lines_FullDuplex。

第二个参数 SPI_Mode 用来设置 SPI 的主从模式,这里我们设置为主机模式 SPI_Mode_Master,当然有需要你也可以选择为从机模式

SPI_Mode_Slave。

第三个参数 SPI_DataSiz 为 8 位还是 16 位帧格式选择项,这里我们是 8 位传输,选择SPI_DataSize_8b。

第四个参数 SPI_CPOL 用来设置时钟极性,我们设置串行同步时钟的空闲状态为高电平所以我们选择 SPI_CPOL_High。

第五个参数 SPI_CPHA

用来设置时钟相位,也就是选择在串行同步时钟的第几个跳变沿(上升或下降)数据被采样,可以为第一个或者第二个条边沿采集,这里我们选择第二个跳变沿,所以选择

SPI_CPHA_2Edge

第六个参数 SPI_NSS 设置 NSS 信号由硬件(NSS 管脚)还是软件控制,这里我们通过软件控

制 NSS 关键,而不是硬件自动控制,所以选择 SPI_NSS_Soft。

第七个参数 SPI_BaudRatePrescaler 很关键,就是设置 SPI 波特率预分频值也就是决定 SPI 的时

钟的参数 , 从不分频道 256 分频 8 个可选值,初始化的时候我们选择 256 分频值

SPI_BaudRatePrescaler_256, 传输速度为 36M/256=140625KHz。

第八个参数 SPI_FirstBit 设置数据传输顺序是 MSB 位在前还是 LSB 位在前, ,这里我们选择

SPI_FirstBit_MSB 高位在前。

第九个参数 SPI_CRCPolynomial 是用来设置 CRC 校验多项式,提高通信可靠性,大于 1 即可。

设置好上面 9 个参数,我们就可以初始化 SPI 外设了。

初始化的范例格式为:

SPI_InitTypeDef SPI_InitStructure;

SPI_InitStructureSPI_Direction = SPI_Direction_2Lines_FullDuplex;

//双线双向全双工

SPI_InitStructureSPI_Mode = SPI_Mode_Master; //主 SPI

SPI_InitStructureSPI_DataSize = SPI_DataSize_8b; // SPI 发送接收 8 位帧结构

SPI_InitStructureSPI_CPOL = SPI_CPOL_High;//串行同步时钟的空闲状态为高电平

371

SPI_InitStructureSPI_CPHA = SPI_CPHA_2Edge;//第二个跳变沿数据被采样

SPI_InitStructureSPI_NSS = SPI_NSS_Soft; //NSS 信号由软件控制

SPI_InitStructureSPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256; //预分频

256

SPI_InitStructureSPI_FirstBit = SPI_FirstBit_MSB; //数据传输从 MSB 位开始

SPI_InitStructureSPI_CRCPolynomial = 7; //CRC 值计算的多项式

SPI_Init(SPI2, &SPI_InitStructure); //根据指定的参数初始化外设 SPIx 寄存器

(三)程序配置步骤
三。W25Qxx配置讲解

(一)电路图
片选用的PB12

W25Q64 是华邦公司推出的大容量SPI FLASH 产品,W25Q64 的容量为 64Mb,该系列还有 W25Q80/16/32

等。ALIENTEK 所选择的 W25Q64 容量为 64Mb,也就是 8M 字节。(1M=1024K)

W25Q64 将 8M 的容量分为 128 个块(Block),每个块大小为 64K 字节,每个块又分为 16个扇区(Sector),每个扇区 4K

个字节。W25Q64 的最少擦除单位为一个扇区,也就是每次必须擦除 4K 个字节。这样我们需要给 W25Q64 开辟一个至少 4K 的缓存区,这样对 SRAM

要求比较高,要求芯片必须有 4K 以上 SRAM 才能很好的 *** 作。

W25Q64 的擦写周期多达 10W 次,具有 20 年的数据保存期限,支持电压为 27~36V,W25Q64 支持标准的

SPI,还支持双输出/四输出的 SPI,最大 SPI 时钟可以到 80Mhz(双输出时相当于 160Mhz,四输出时相当于 320M),更多的 W25Q64

的介绍,请参考 W25Q64 的DATASHEET。

在往一个地址写数据之前,要先把这个扇区的数据全部读出来保存在缓存里,然后再把这个扇区擦除,然后在缓存中修改要写的数据,然后再把整个缓存中的数据再重新写入刚才擦除的扇区中。

便于学习和参考再给大家分享些spi 的资料

stm32之SPI通信

>

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/dianzi/10836243.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-11
下一篇 2023-05-11

发表评论

登录后才能评论

评论列表(0条)

保存