依附SPI的会谈加固透明传输工具

一.背景

 
随着计算机网络技术的日益发展和普及,远程网络数据传输的安全性显得越来越重要。—般地,运行的应用程序发送的数据包都以明文方式发送,接收方也将直接获得明文数据,但这样发出的数据很容易被截获并进行分析,从而进行网络攻击。只有少数应用会为自己发出数据进行加密。然后再在接收方进行解密操作。随着网络的日益普及,网络数据发送的安全也变得很重要。但是,只有较少的应用程序为网络收发数据进行了加密传输,仍然有大量的应用直接采用明文方式通讯。这些应用包括采用了一些特定协议进行通讯,也包含一些特殊用途的客户端程序,比如监控系统和内外网的客户端访问。如欲对这些应用的网络通讯内容进行加固来防止攻击者的监听和攻击,则需要对这一款应用程序进行升级,即增加加密和解密功能。如果一个系统中使用了多种应用结合的方式进行通信,则需要各应用生产商间进行协商。来确保系统中各应用的正常通信。

 
本工具利用Windows提供的SPI服务,在应用层对应用程序网络通信的数据进行加密,在接收方收到数据前进行解密。整个过程应用程序并未有任何更改。实现了通信数据的透明加密。

特点

  1. 由SCL时钟线和SDA数据线传输
  2. 有的IIC接口的设备,内部有固化地址,有的设备可通过芯片接线来确定设备地址,从设备地址为7bit,所以一条IIC总线上最多可以接2的7次方
    = 128个设备
  3. 多主机时钟同步和仲裁,标准模式下传输速率为100kbit/s,
    快速模式下传输速率为400kbit/s,高速模式下为3.4Mbit/s
  4. 采用IIC接口,IO必须被配置为开漏输出,这是为了实现线与,挂载多个设备,对总线进行独占,当总线上有一个设备输出低电平时,该线上就是低电平

一、SPI概述

SPI,是英语Serial Peripheral Interface的缩写,顾名思义就是串行外围设备接口。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议。

SPI是一个环形总线结构,由ss(cs)、sck、sdi、sdo构成,其时序其实很简单,主要是在sck的控制下,两个双向移位寄存器进行数据交换

                       图片 1

 SPI总线的系统

(1)MOSI:主器件数据输出,从器件数据输入
(2)MISO:主器件数据输入,从器件数据输出
(3)SCLK:时钟信号,由主器件产生
(4)/SS:从器件使能信号,由主器件控制

SPI总线有四种工作方式(SP0, SP1, SP2, SP3),其中使用的最为广泛的是SPI0和SPI3方式。

 

一、SPI介绍

一、SPI概述

SPI,是英语Serial Peripheral Interface的缩写,顾名思义就是串行外围设备接口。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议。

SPI是一个环形总线结构,由ss(cs)、sck、sdi、sdo构成,其时序其实很简单,主要是在sck的控制下,两个双向移位寄存器进行数据交换

                       图片 1

 SPI总线的系统

(1)MOSI:主器件数据输出,从器件数据输入
(2)MISO:主器件数据输入,从器件数据输出
(3)SCLK:时钟信号,由主器件产生
(4)/SS:从器件使能信号,由主器件控制

SPI总线有四种工作方式(SP0, SP1, SP2, SP3),其中使用的最为广泛的是SPI0和SPI3方式。

 

二.工具原理

传输

  • 起始信号:SCL保持高电平,SDA一个下降沿,表示一个起始信号
  • 停止信号:SCL保持高电平,SDA一个上升沿,表示一个停止信号
  • 数据传输:SDA上的数据必须在SCL为高电平时稳定,在SCL为低电平时改变。因为如果在SCL为高电平时SDA尚的电平信号改变,则会导致接收数据的设备认为这是一个起始信号或者停止信号
    数据传输从高位开始
  • ACK应答信号:处理器发送完8bit数据后,将SDA线配置为输入,因为IIC外接上拉电阻,所以这时候SDA上的电平就为高,当IIC设备接收到数据后,就在第9个周期将SDA拉低,处理器检测到SDA上的低电平就知道IIC设备接收到了数据,便可进行其他操作了。注意:为什么IIC总线要连接上拉电阻?
    1. 因为IIC标准规定,IIC设备在空闲时要保持为高电平,这样才能实现多主模式
    2. 加上拉能够确保主设备正确的拉低、拉高,便于从设备明确的区分高、低电平
    3. 电阻的大小跟功耗和传输速率有有关系

图片 3Paste_Image.png图片 4图片 5图片 6图片 7

 二、传输过程

上升沿发送、下降沿接收、高位先发送。

 

SPI,是英语Serial Peripheral Interface的缩写,顾名思义就是串行外围设备接口。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议。

上升沿到来的时候,sdo上的电平将被发送到从设备的寄存器中。

下降沿到来的时候,sdi上的电平将被接收到主设备的寄存器中。

 

假设主机和从机初始化就绪:并且主机的sbuff=0xaa
(10101010),从机的sbuff=0x55 (01010101),下面将分步对spi的8个时钟周期的数据情况演示一遍(假设上升沿发送数据)。


脉冲       主机sbuff   从机sbuff   sdi

1.1技术性能:

采用主从模式,一般仅支持单Master–多Slave。时钟由Master控制,在时钟移位脉冲下,数据按位传输,高位在前–底位在后(MSB
first)。接口有两条单向数据线,为全双工通信。

图片 8

  各半导体公司推出了大量的带有SPI接口的具有各种各样功能的芯片,如RAM,EEPROM,FlashROM,A/D转换器、D/A转换器、LED/LED显示驱动器、I/O接口芯片、实时时钟、UART收发器

 二、传输过程

上升沿发送、下降沿接收、高位先发送。

 

SPI,是英语Serial Peripheral Interface的缩写,顾名思义就是串行外围设备接口。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议。

上升沿到来的时候,sdo上的电平将被发送到从设备的寄存器中。

下降沿到来的时候,sdi上的电平将被接收到主设备的寄存器中。

 

假设主机和从机初始化就绪:并且主机的sbuff=0xaa
(10101010),从机的sbuff=0x55 (01010101),下面将分步对spi的8个时钟周期的数据情况演示一遍(假设上升沿发送数据)。


脉冲       主机sbuff   从机sbuff   sdi

1. Winsock 2 SPI简介

 
Winsock是为上层应用程序提供的一种标准网络接口。上层应用程序不用关心Winsock实现的细节,它为上层应用程序提供透明的服务。Winsock
2引入的一个新功能就是打破服务提供者的透明,让开发者可以编写自己的服务提供者接口(Service
Provider Interface,SPI)程序,即SPI程序。Winsock 2
SPI除了有完成网络传输的传输服务提供者,还提供了友好名字服务的名字空间服务提供者。其中,传输服务提供者能够提供建立通信、传输数据、流量控制和错误控制等服务。Winsock
2提供的服务其结构如图1所示。

图片 9

图1 Winsock 2 SPI结构

 
SPI以动态链接库的形式出现,工作在TCP/IP协议的应用层,为上层API调用提供接口函数。由于SPI工作在TCP/IP协议的应用层,因此对基于应用层的数包SPI都可以截获。

写数据

写数据主要包括几个步骤:起始信号→7bit从设备地址+0→ACK应答→要写入数据的8bit存储地址→ACK应答→要写入的数据+ACK+停止信号

  sdo

1.2接口定义:

 SPI接口共有4根信号线,分别是:设备选择线、时钟线、串行输出数据线、串行输入数据线。

 

图片 10

  • MOSI :主设备数据输入,从设备数据输出
  • MOSO :主设备数据输出,从设备数据输入
  • SCLK:时钟信号,由主设备产生
  • CSS:从设备使能信号,有主设备控制

  sdo

2.传输模型

 
基于SPI的文件加密传输系统的工作模型如图2所示。在发送方,用户层通信程序发送的网络封包被自定义的SPI程序所截获,SPI程序将数据包的IP地址、端口等信息提取出来,经过规则判断函数判断之后,如果需要加密,则调用加密函数完成加密工作,并在封包中设置加密标志。数据接收方在Windows核心层将接收的网络封包上传给用户层接收程序之前,自定义的SPI程序又将此数据封包截获,规则判断函数首先检查网络封包中的加密标志,若数据包是加密的数据包,则调用解密函数进行解密,最终将解密后的数据包向上传送给用户层的接收程序。

图片 11

图2 基于SPI的网络数据加密传输模型

读数据

读数据包括几个步骤:起始信号→7bit从设备地址+0→ACK应答→要读出数据的8bit存储地址→ACK应答→起始信号→7bit从设备地址+1+ACK+读出的数据+NO_ACK无应答+停止信号

0 00-0   10101010  01010101   0    0

1 0–1   0101010x  10101011    
0    1

1.3时钟极性和时钟相位

0 00-0   10101010  01010101   0    0

1 0–1   0101010x  10101011    
0    1

三.功能介绍

特点

  1. 4线制传输,包括CS,CLK,MISO,MOSI
  2. 全双工串行总线,主从模式,支持单主机多从机,按位传输,高位在前,低位在后,上升沿发送数据,
    下降沿接收数据,主机发送一个上升沿时,主机缓冲区的第7位数据发送出去MOSI,同时从设备缓冲区的第7位数据发送出去MISO,然后主机发送一个下降沿,MISO上的数据(也就是从设备在上升沿发送到MISO上的数据)就被读取到主机中,MOSI上的数据(也就是主设备在上升沿发送到MOSI上的数据)被读取到从设备上。
  3. 4种工作模式:spi四种模式SPI的相位和极性分别可以为0或1,对应的4种组合构成了SPI的4种模式Mode
    0 CPOL=0, CPHA=0Mode 1 CPOL=0, CPHA=1Mode 2 CPOL=1, CPHA=0Mode 3
    CPOL=1, CPHA=1时钟极性CPOL:
    即SPI空闲时,时钟信号SCLK的电平(1:空闲时高电平;
    0:空闲时低电平)时钟相位CPHA:
    即SPI在SCLK第几个边沿开始采样(0:第一个边沿开始;
    1:第二个边沿开始)sd卡的spi常用的是mode 0 和mode
    3,这两种模式的相同的地方是都在时钟上升沿采样传输数据,区别这两种方式的简单方法就是看空闲时,时钟的电平状态,低电平为mode
    0 ,高电平为mode 3。例如这个波形图

    图片 12

    如果CPOL=0, CPHA=0 ,则miso数据是0x83如果CPOL=0, CPHA=1
    ,则miso数据是0x07

  1. iic总线不是全双工,2根线SCL SDA。spi总线实现全双工,4根线SCK CS MOSI
    MISO
  2. iic总线是多主机总线,通过SDA上的地址信息来锁定从设备。spi总线只有一个主设备,主设备通过CS片选来确定从设备
  3. I2C总线传输速度在100kbps-4Mbps。spi总线传输速度更快,可以达到30MHZ以上。
  4. iic总线空闲状态下SDA SCL都是高电平。spi总线空闲状态MOSI MISO也都是
    SCK是有CPOL决定的
  5. iic总线scl高电平时sda下降沿标志传输开始,上升沿标志传输结束。spi总线cs拉低标志传输开始,cs拉高标志传输结束
  6. iic总线是SCL高电平采样。spi总线因为是全双工,因此是沿采样,具体要根据CPHA决定。一般情况下master
    device是SCK的上升沿发送,下降沿采集
  7. iic总线和spi总线数据传输都是MSB在前,LSB在后
  8. iic总线和spi总线时钟都是由主设备产生,并且只在数据传输时发出时钟
  9. iic总线读写时序比较固定统一,设备驱动编写方便。spi总线不同从设备读写时序差别比较大,因此必须根据具体的设备datasheet来实现读写,相对复杂一些。

1 1–0   01010100  10101011     0    1

2 0–1   1010100x  01010110     1    0

1.3.1时钟极性和时钟相位的基本介绍  

在SPI操作中,最重要的两项设置就是时钟极性CPOL或UCCKPL)和时钟相位CPHA或UCCKPH)。

时钟极性设置时钟空闲时的电平,时钟相位设置读取数据和发送数据的时钟沿。时钟极性(CPOL)对传输协议没有重大的影响,时钟相位(CPHA)能够配置用于选择两种不同的传输协议之一进行数据传输。

  CPOL=0,串行同步时钟的空闲状态为低电平;CPOL=1,串行同步时钟的空闲状态为高电平。

  CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。 

1 1–0   01010100  10101011     0    1

2 0–1   1010100x  01010110     1    0

1.加密规则和加解密方案

 
是否对应用层的某一应用程序的网络数据包进行加密传输取决于加密规则。加密规则包括应用程序的名称、IP地址和端口号。

 
SPI程序会依靠通信双方建立连接时获得的对方IP地址、端口号和本应用程序的名称来决定是否对本次建立的Socket连接进行加密通讯。SPI程序一旦判断本次回话需要加密传输则本次建立的通信双方都会采用加密方式进行通信。

 
加解密方案则采用128位的AES对称加密作为加密方式。加解密的秘钥分为主密钥和会话秘钥。主密钥由使用者进行设定,会话秘钥则在通信双方建立会话时动态分配。并且,会话秘钥由主密钥生成。

 
AES加密算法是对称加密算法的一种,其最短秘钥为128比特,就目前的计算机处理速度而言,即使是128位的秘钥,要想通过暴力破解方式获得秘钥是不可能的。因此采用AES对消息进行加密。

  本工具对应用层发送的原始数据进行加密传输的过程如图3所示。

图片 13

图3 消息加密过程

 
在加密过程中,SPI程序首先获得待发送的明文消息,然后对其添加时间戳、消息特征和特征码,将原始消息进行重组。然后对时间戳和原始数据部分进行AES加密。最后将重组后的消息发送。接收方应用程序收到消息后,接收方的SPI程序将对收到的消息进行解密并校验,然后将解密出的原始数据转交给接收程序。

2 1–0   10101001  01010110       1    0

3 0–1   0101001x 10101101    0     1

1.3.2时序详解 

 图片 14

 

  我们来关注SCK的第一个时钟周期,在时钟的前沿采样数据(上升沿,第一个时钟沿),在时钟的后沿输出数据(下降沿,第二个时钟沿)。首先来看主器件,主器件的输出口(MOSI)输出的数据bit1,在时钟的前沿被从器件采样,那主器件是在何时刻输出bit1的呢?bit1的输出时刻实际上在SCK信号有效以前,比SCK的上升沿还要早半个时钟周期。bit1的输出时刻与SSEL信号没有关系。再来看从器件,主器件的输入口MISO同样是在时钟的前沿采样从器件输出的bit1的,那从器件又是在何时刻输出bit1的呢。从器件是在SSEL信号有效后,立即输出bit1,尽管此时SCK信号还没有起效。

  所以说,主机和从机的发送数据是同时完成的,两者的接收数据也是同时完成的。所以为了保证主从机正确通信,应使得它们的SPI具有相同的时钟极性和时钟相位。

  SPI接口时钟配置心得:在主设备这边配置SPI接口时钟的时候一定要弄清楚从设备的时钟要求,因为主设备这边的时钟极性和相位都是以从设备为基准的。因此在时钟极性的配置上一定要搞清楚从设备是在时钟的上升沿还是下降沿接收数据,是在时钟的下降沿还是上升沿输出数据。

2 1–0   10101001  01010110       1    0

3 0–1   0101001x 10101101    0     1

2.防止重放攻击

 
在每次通信双方建立通信连接后,通信双方将进行时间同步,一同开始计时。在建立连接的双方收发数据期间,工具将在重组的消息中添加时间戳,该时间戳也会被加密,加密完成后将被接收方的SPI程序进行解密。从中获得时间戳内容,并判断消息的时间是否在允许的时间误差内,如果超出误差则认为受到了重放攻击。否则,将被判定为合法数据,将数据发送给上层的接收方应用程序。

 
另外,为了抵御会话长时间通信导致的时间溢出情况,程序将设定定时自动更新会话秘钥的方法来解决这种功能可能带来的潜在问题。

3 1–0   01010010 10101101    0     1

4 0–1   1010010x 01011010    1       0

 1.4单片机软件模拟SPI接口

参考一下网址: 

 

3 1–0   01010010 10101101    0     1

4 0–1   1010010x 01011010    1       0

3.日志和权限管理

 
日志模块将根据程序运行中的运行状况分等级记录运行中的各种状态,比如收发的数据包,建立通信会话的信息,数据包错误,攻击等信息。

 
权限管理可以给不同设备之间通信加以限制,该功能需根据具体的应用层协议进行定制。该模块可具有以下功能:限制一些功能码的使用、限制指定节点的指定内存地址不可访问等权限限制。

4 1–0   10100101 01011010      1     0

5 0–1   0100101x 10110101    0      1

 二、SPI与IIC

 Philips(for IIC)和Motorola(for SPI)
出于不同背景和市场需求制定了这两种标准通信协议。

参考以下网址:

 

4 1–0   10100101 01011010      1     0

5 0–1   0100101x 10110101    0      1

四.安装和环境

5 1–0   01001010 10110101      0    1

6 0–1   1001010x 01101010    1    0

5 1–0   01001010 10110101      0    1

6 0–1   1001010x 01101010    1    0

1.安装

  将工具复制到Windows的指定目录下后,通过安装程序可进行一键安装。

6 1–0   10010101 01101010    1    0

7 0–1   0010101x 
11010101     0     1

6 1–0   10010101 01101010    1    0

7 0–1   0010101x 
11010101     0     1

2.环境

  工具需安装在Windows
XP版本及以上的Windows操作系统之上,对于64位系统则需额外安装64位版本。

7 1–0   00101010  11010101      0     1

8 0–1   0101010x  10101010    1    0

7 1–0   00101010  11010101      0     1

8 0–1   0101010x  10101010    1    0

五.优势

  本工具具有以下优势:

  1. 安装简单:一键安装。
  2. 管理简单:只需通过加密管理程序即可进行设置主密钥、IP加密规则、端口加密规则、进程加密规则。
  3. 加密效率高,强度高:采用AES加密算法,暴力破解几乎不可能。
  4. 透明加密传输网络数据:SPI工作在应用层的下层,与应用程序通信丝毫不会影响应用程序的工作。
  5. 解决工作系统的整体加密传输问题:在一个采用了多种软件相协调工作的系统而言,要想加密网路数据,则需要对每一个软件进行升级,而使用本工具,则无需对每一款软件升级,即可完成整个系统的数据加密传输升级。

8 1–0   01010101  10101010    1    0

 

这样就完成了两个寄存器8位的交换,上面的0–1表示上升沿、1–0表示下降沿,sdi、 sdo相对于主机而言的。根据以上分析,一个完整的传送周期是16位,即两个字节,因为,首先主机要发送命令过去,然后从机根据主机的名准备数据,主机在下一个8位时钟周期才把数据读回来。 

  

SPI主要特点有:可以同时发出和接收串行数据;可以当作主机或从机工作;提供频率可编程时钟;发送结束中断标志;写冲突保护;总线竞争保护等。

8 1–0   01010101  10101010    1    0

 

这样就完成了两个寄存器8位的交换,上面的0–1表示上升沿、1–0表示下降沿,sdi、 sdo相对于主机而言的。根据以上分析,一个完整的传送周期是16位,即两个字节,因为,首先主机要发送命令过去,然后从机根据主机的名准备数据,主机在下一个8位时钟周期才把数据读回来。 

  

SPI主要特点有:可以同时发出和接收串行数据;可以当作主机或从机工作;提供频率可编程时钟;发送结束中断标志;写冲突保护;总线竞争保护等。

六.源代码获取

 点击此处打开github仓库

三、内部结构

图片 15

三、内部结构

图片 15

四、传输时序

SPI接口在内部硬件实际上是两个简单的移位寄存器,传输的数据为8位,在主器件产生的从器件使能信号和移位脉冲下,按位传输,高位在前,低位在后。如下图所示,在SCLK的下降沿上数据改变,上升沿一位数据被存入移位寄存器。

图片 17

SPI接口没有指定的流控制,没有应答机制确认是否接收到数据。

 

已知的有的器件SPI已达到50Mbps。具体到产品中SPI的速率主要看主从器件SPI控制器的性能限制。

四、传输时序

SPI接口在内部硬件实际上是两个简单的移位寄存器,传输的数据为8位,在主器件产生的从器件使能信号和移位脉冲下,按位传输,高位在前,低位在后。如下图所示,在SCLK的下降沿上数据改变,上升沿一位数据被存入移位寄存器。

图片 17

SPI接口没有指定的流控制,没有应答机制确认是否接收到数据。

 

已知的有的器件SPI已达到50Mbps。具体到产品中SPI的速率主要看主从器件SPI控制器的性能限制。

相关文章