接上两篇:
【先楫HPM5361EVK开发板试用体验】1上手HPM5361 - 先楫半导体HPMicro
【先楫HPM5361EVK开发板试用体验】2手把手实战密钥管理器 KEYM
亲爱的工程师、学生和爱好者们,我来啦!今天我要给大家带来的实战项目是安全数据处理器!
安全数据处理器 SDP,真是个魔法小王子!他的特性和功能让我感觉像是在翻开一本魔法书,每一页都充满了神秘和惊喜。
一,SDP 支持各种魔法般的加密技术,包括 AES-128/256 和 SM4。这就像是有了哈利·波特的隐身斗篷,让你的数据瞬间消失在空气中,只有信任的人才可以看到。
AES-128/256和SM4,这两个密码学术语,对于不懂行的人来说,听起来就像是某种神秘的魔法咒语。但是,别担心,我将为你详细讲解它们。
首先,让我们了解一下AES-128和AES-256。AES,全称Advanced Encryption Standard,是高级加密标准的意思。128和256是指密钥的长度,也就是用于加密和解密数据的“钥匙”的长度。简单来说,密钥长度越长,安全性就越高。所以,AES-256的安全性要比AES-128高。
想象一下,AES-128就像是一把有128个牙齿的锁,而AES-256则像是拥有256个牙齿的超级锁。想要打开这把锁,你需要一把钥匙。但是,如果你只有一把只有128个牙齿的钥匙(也就是AES-128的密钥),那么你只能打开那把有128个牙齿的锁(也就是AES-128的加密数据)。但是如果你有一把有256个牙齿的钥匙(也就是AES-256的密钥),你就能打开那把有256个牙齿的超级锁(也就是AES-256的加密数据)。
那么SM4是什么呢?SM4是一种对称加密算法,也就是加密和解密使用的是同一把“钥匙”。它是在中国自主研发的一种加密算法,被广泛应用于各种领域,包括通信、金融等。
想象一下,SM4就像是一个魔法盒子。这个盒子有两面,一面是输入,一面是输出。你输入一些信息(也就是你要加密的数据),然后转动魔法盒子的把手(也就是使用密钥进行加密),盒子的另一面就会输出一些乱码(也就是加密后的数据)。然后你可以用同样的方式把乱码转回原来的信息。
所以,简单来说,AES-128/256和SM4都是用来保护你的信息安全的“魔法”。AES-128/256是用来加密你的信息的“魔法”,而SM4则是用来让你在不知道原始信息的情况下,也能把它转回原来的样子的“魔法”。
二,SDP 还有 SHA-1/256 和 CRC-32 这些魔法护卫。它们就像是数据的守护神,保护数据的完整性和真实性。如果你想确认你的数据是否被篡改,或者想留下数据的“指纹”,这些魔法护卫就能帮你做到。让我们来详细讲解一下SHA-1/256和CRC-32。
首先,让我们来了解一下SHA-1/256。SHA,全称Secure Hash Algorithm,是一种安全哈希算法。1和256是指输出数据的长度,也就是经过哈希计算后得到的结果的长度。SHA-1的输出长度为160位,而SHA-256的输出长度为256位。
那么,什么是哈希呢?哈希就像是一个大熔炉,你把任何数据放进去,它都会给你吐出一串独一无二的字符。就像你妈妈给你洗衣服,不管你穿什么颜色的衣服,她都会给你洗出白色的衣服一样(这个比喻可能不太准确,但你明白我的意思就行)。
那么,为什么我们需要哈希呢?因为有时候我们想要验证数据的完整性,但又不想暴露数据的具体内容。比如,你下载了一个文件,但你不确定文件是否被篡改过。这时候,你可以用哈希算法计算文件的哈希值,然后再和原始文件的哈希值进行比较。如果两者相同,那么文件就是完整的。
接下来,让我们来了解一下CRC-32。CRC,全称Cyclic Redundancy Check,是一种校验码算法。32是指校验码的长度,也就是经过计算后得到的结果的长度。
那么,什么是校验码呢?校验码就像是一个小警察,它会在数据后面跟着巡逻,确保数据在传输过程中没有被篡改。如果数据被篡改了,小警察就会发现并告诉你。
那么,为什么我们需要校验码呢?因为有时候数据在传输过程中可能会被损坏或被篡改。比如,你给朋友发送了一条信息,但你的朋友告诉你他没有收到。这时候,你可以用校验码来检查信息是否被篡改或损坏。如果校验码不匹配,那么信息就是有问题的。
所以,简单来说,SHA-1/256和CRC-32都是用来保护你的数据完整性和安全性的“魔法”。SHA-1/256是用来验证数据完整性的“魔法”,而CRC-32则是用来确保数据在传输过程中没有被篡改的“魔法”。
三,SDP 还有 DMA 这个魔法助手,它可以帮助你快速移动数据。这就像是有了一个自动传送门,你可以瞬间从一个地方传送到另一个地方,省去了走路的时间。让我们详细讲解一下DMA。
DMA,全称Direct Memory Access,是一种直接内存访问技术。它可以让计算机的硬件直接访问系统的内存,而不需要经过CPU的干预。听起来很高大上,但是如果你把它想象成一群人在抢红包,那就更容易理解了。
想象一下,你的手机里有很多应用在同时运行,它们都在争抢CPU的时间来处理数据。这就好像一群人在抢红包,每个人都想抢到更多的红包,但是CPU只有一个,所以它只能一个个地处理。这就像一群人在抢一个红包,每个人都要等别人抢完了才能抢到。
但是,DMA技术就像是一个超级红包助手。它可以让你的手机硬件直接访问内存,而不需要经过CPU的干预。这就好像一群人都在抢红包,但是有一个助手在旁边帮助每个人更快地抢到红包。这样,每个人都可以更快地抢到红包,而不需要等别人抢完。
所以,DMA技术就像是一个超级红包助手,它可以让你的手机硬件更快地访问内存,从而提高了系统的整体性能。这就像一群人都在抢红包,但是有一个助手在旁边帮助每个人更快地抢到红包,让整个过程更加顺畅和高效。
如果还是很懵!也可以想象一下,你正在和你的朋友聊天,你的朋友突然说:“嘿,你知道吗?我最近发现了一种新的食物,叫做‘DMA’!”你可能会好奇地问:“DMA是什么?”然后你的朋友会告诉你:“DMA就是直接从内存中获取数据的方法,就像我从冰箱里拿出一瓶饮料一样简单!”
那么,为什么我们需要DMA呢?因为有时候某些硬件设备需要大量数据来进行处理,如果每次都通过CPU来读取数据,那么就会大大降低设备的效率。而DMA可以直接从内存中读取数据,就像你的朋友直接从冰箱里拿出饮料一样快。
所以,DMA就像是一个聪明的快递员,他可以直接从你的家里把包裹送到你的朋友家里,而不需要先送到快递公司再由快递公司送过去。这样不仅可以节省时间,还可以提高效率。
四,如何使用SDP的AES加解密引擎,包括如何配置密钥长度、选择加密或解密操作、设置工作模式以及如何安全地管理和载入密钥。SDP(安全数据处理器)和其AES加解密引擎的详细讲解:
-
SDP与AES加解密引擎: SDP可以处理各种数据安全任务,其中之一是AES加解密。AES是Advanced Encryption Standard的简称,由美国国家标准与技术研究院(NIST)发布。
-
AES密钥长度与配置:
- SDP支持AES-128和AES-256,分别对应128位和256位的密钥长度。
- 用户可以通过MODCTRL[AESALG]位来选择密钥长度。
-
AES加密与解密操作:
- AES引擎既可以加密也可以解密数据。
- 通过MODCTRL[AESDIR]位,用户可以选择AES引擎执行加密还是解密操作。
-
AES工作模式:
- AES引擎支持ECB(电子密码本模式)和CBC(密码分组链接模式)。
- 使用MODCTRL[AESMOD]位,用户可以选择所需的工作模式。
- 在使用AES-CBC模式时,用户需要为第一个命令描述符设置PKTCTL[6],CIPHIV位,并初始化相关的初始化向量(Initial Vector)。
-
AES密钥的安全性:
- AES算法的安全性依赖于密钥的安全性。
- SDP的AES引擎设计了一系列保护措施,确保密钥不被泄露。
-
密钥载入选项:
- 密钥可以从SDP的内部存储器KEYRAM载入,也可以从密钥管理器KEYM的专用密钥通路载入。
- KEYRAM是一个只写不可读的存储器,容量为256字节,可以存储多个AES密钥。
- 用户可以通过KEYADDR和KEYDAT寄存器来初始化KEYRAM。
五,SDP 数据处理器的原理:
寄存器指定命令描述符的地址。SDP 从内存中自主读取命令描述符,按照描述符的配置执行任务,并反馈结果。在实际应用中,SDP 数据处理器可以应用于各种需要数据安全处理的场景。例如,在金融领域中,SDP 可以用于加密敏感数据和验证交易数据的完整性;在物联网领域中,SDP 可以用于保护传感器数据的隐私和防止篡改;在医疗领域中,SDP 可以用于保护患者隐私和确保医疗记录的安全性。除了数据拷贝、数据充填和数据重排序功能外,SDP(Secure Data Platform)还具备许多其他的功能。这些功能包括:
- 加解密引擎:SDP支持多种加密算法,如SM4分组密码算法,用于对数据进行加密和解密操作,确保数据的安全性和机密性。
- HASH模块:SDP的HASH模块支持多种哈希算法,如SHA-1、SHA-256和SM3。HASH模块是一种重要的安全功能,它用于通过将输入数据转换为其哈希值来验证数据的完整性和一致性。哈希函数是一种将任意长度的数据映射到固定长度哈希值的算法,这个哈希值也被称为摘要或散列值。 在SDP中,HASH模块支持多种哈希算法,包括SHA-1、SHA-256和SM3。
- SHA-1:Secure Hash Algorithm 1,由美国国家安全局设计,用于长度不超过 (2^64 - 1) 位的输入数据,生成 160 位(20 字节)的哈希值。
- SHA-256:SHA-2的算法之一,支持长度不超过 (2^64 - 1) 位的输入数据,生成 256 位(32 字节)的哈希值。
- SM3:中国国家密码管理局发布的商用密码杂凑算法标准,适用于商用密码应用中的数字签名和验证。
用户可以通过设置SDPCR[HASHEN]位置1来打开HASH模块,并通过MODCTRL[HASALG]位选择要使用的哈希算法。使用HASH模块时,用户必须根据需要配置命令描述符的PKTCTL字。如果命令描述符处理的数据包括哈希算法输入数据的结尾,需要将PKTCTL[5],HASFNL置1;如果处理的数据包括哈希算法输入数据的起始,需要将PKTCTL[4],HASINI置1;如果对一段内存内连续的数据执行哈希算法,可以将PKTCTL[5]和PKTCTL[4]都置1。
3. 密钥管理:SDP提供密钥管理功能,包括密钥的生成、存储、更新和销毁等操作。这些功能确保密钥的安全性和可用性。
4. 数据压缩和解压缩:SDP支持数据压缩和解压缩功能,以减少数据传输和存储的开销。
5. 数据校验和纠错:SDP支持数据校验和纠错功能,用于检测数据传输和存储过程中的错误,并进行相应的纠正。
6. 数据格式化:SDP支持数据的格式化功能,将数据按照特定的格式进行排列和组织,以适应不同系统的要求。
7. 安全传输协议:SDP支持安全传输协议,如SSL/TLS等,以确保数据传输过程中的安全性和机密性。
8. 访问控制和权限管理:SDP提供访问控制和权限管理功能,用于控制用户对数据的访问和操作权限,确保数据的安全性和完整性。
9. 日志记录和审计:SDP支持日志记录和审计功能,记录用户对数据的操作和行为,以便进行后续的安全分析和审计。
10. 可扩展性和可配置性:SDP具备可扩展性和可配置性,可以根据用户的需求进行定制和扩展,以满足不同应用场景的要求。
总之,SDP作为一个安全的数据平台,提供了丰富的功能和特性,以确保数据的安全性、机密性、完整性和可用性。
六, 命令描述符的配置
命令描述符的格式包括多个字段,如 NXTCMD、PKTCTL、PKTSRC、PKTDST、BUFSIZE 等。其中,NXTCMD 是指向下一条命令描述符的指针,如果 PKTCTL[3],CHAIN 位置 1,SDP 在执行完当前命令后,将继续执行 NXTCMD 指向的命令描述符。
PKTCTL 是命令描述符的控制字,用于配置 SDP 的任务。其中,PKTCTL[31:24] 是数据包标签,用户可以为每个数据包打上不同的标签;PKTCTL[6] 是 CIPHIV,当使用 AES-CBC 模式时置 1,提示 AES 载入初始向量(Initial Vector);PKTCTL[5] 是 HASFNL,置 1 提示 HASH 引擎,这是待处理数据的结尾;PKTCTL[4] 是 HASINI,置 1 提示 HASH 引擎,这是待处理数据的起始;PKTCTL[3] 是 CHAIN,置 1 提示 SDP 在执行完当前命令后,从 NXTCMD 取下一条命令描述符;PKTCTL[2] 是 DCRSEMA,置 1 提示 SDP 在执行完当前命令后,将 PKTCNT [CNTVAL] 减 1, 当 PKTCNT [CNTVAL] = 0 时,SDP 会停止工作;PKTCTL[1] 是 PKTINT,置 1 时,SDP 在执行完当前命令后,会生成中断请求。
七,手把手
SDP(安全数据处理器)的寄存器列表和其中一些寄存器的详细说明:
- SDPCR(0x0): SDP 控制寄存器,用于控制SDP模块的复位、时钟门控、加解密和哈希功能的使能与禁止。
- MODCTRL(0x4): 模式控制寄存器,用于配置输入、输出和密钥数据的重排序方式。
- PKTCNT(0x8): 数据包计数寄存器,用于记录当前处理的数据包数量。
- STA(0xC): 状态寄存器,用于指示SDP模块的状态信息,如数据包处理完成标志等。
- KEYADDR(0x10): 密钥地址寄存器,用于存储密钥数据的内存地址。
- KEYDAT(0x14): 密钥数据寄存器,用于存储密钥数据。
- CIPHIV(0x18-0x24): 密码初始化向量寄存器,用于存储加解密算法的初始化向量。
- HASWRD(0x28-0x38): 哈希数据字寄存器,用于存储哈希算法的输入数据。
- CMDPTR(0x40): 命令字指针,用于指向当前执行的命令字在内存中的地址。
- NPKTPTR(0x44): 下一个数据包地址指针,用于指向下一个待处理的数据包在内存中的地址。
- PKTCTL(0x48): 数据包控制寄存器,用于控制数据包的处理方式和操作。
- PKTSRC(0x50): 数据包在内存中源地址,用于指定数据包的源地址。
- PKTDST(0x58): 数据包处理完后内存中的目标地址,用于指定数据包处理完后存储的目标地址。
- PKTBUF(0x5C): 数据包在内存中的大小,用于记录数据包的大小。
根据您提供的信息,SDP的寄存器列表和详细说明如下:
SDP的寄存器列表:
- SDPCR (0x0)
- MODCTRL (0x4)
- PKTCNT (0x8)
- STA (0xC)
- KEYADDR (0x10)
- KEYDAT (0x14)
- CIPHIV[CIPHIV0] (0x18)
- CIPHIV[CIPHIV1] (0x1C)
- CIPHIV[CIPHIV2] (0x20)
- CIPHIV[CIPHIV3] (0x24)
- HASWRD[HASWRD0] (0x28)
- HASWRD[HASWRD1] (0x2C)
- HASWRD[HASWRD2] (0x30)
- HASWRD[HASWRD3] (0x34)
- HASWRD[HASWRD4] (0x38)
- HASWRD[HASWRD5] (0x3C)
- HASWRD[HASWRD6] (0x40)
- HASWRD[HASWRD7] (0x44)
- CMDPTR (0x48)
- NPKTPTR (0x4C)
- PKTCTL (0x50)
- PKTSRC (0x54)
- PKTDST (0x58)
- PKTBUF (0x5C)
SDP的寄存器详细说明如下:
SDPCR (0x0):
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 SFTRST CLKGAT CIPDIS HASDIS RSVD CIPHEN HASHEN MCPEN CONFEN DCRPDI RSVD TSTPKT0IRQ RSVD RDSCEN RSVD INTEN RWRWRORON/A RWRWRWRWRWN/A RWN/A RWN/A RW
位域:31-0。
其中:
31. SFTRST:软复位控制位。此寄存器位写“1”,然后再写“0”,来软复位SDP模块。
30. CLKGAT:SDP的主要电路的门控时钟控制位。此为寄存器写“1”,会关闭SDP内部绝大部分逻辑电路的时钟。
29. CIPDIS:加解密硬件禁止位,此位为只读寄存器位;此位为“1”时,加解密的功能不可用;此位为“0”时,加解密的功能可用。
28. HASDIS:哈希硬件禁止位,此位为只读寄存器位;此位为“1”时,哈希的功能不可用;此位为“0”时,哈希的功能可用。
23. CIPHEN:加解密使能位。此位置“1”时,加解密的功能可用;此位置“0”时,加解密的功能不可用。
22. HASHEN:哈希软件使能位。此位置“1”时,哈希的功能可用;此位置“0”时,哈希的功能不可用。
21. MCPEN:内存数据拷贝功能使能位;此位置“1”时,内存拷贝的功能可用;此位置“0”时,内存拷贝的功能不可用。
SDP的加解密过程通常包括以下几个步骤:
- 密钥生成:在使用SM4算法之前,需要生成一个密钥。密钥可以是随机生成的,也可以是通过其他方式生成的。
- 数据封装:将要加密的数据封装在一个SDP数据包中,同时将SDP数据包使用SM4算法进行加密。
- 数据传输:加密后的SDP数据包可以通过网络或其他方式传输给接收者。
- 数据解封装:接收者收到加密的SDP数据包后,可以使用相应的密钥对其进行解密,从而获取原始数据。
需要注意的是,SDP支持SM4算法的具体实现方式可能因不同的软件或硬件实现而有所不同。因此,在使用SDP进行加解密时,需要参考相应的文档或规范来了解具体的实现细节。
八,实战
在了解了 SDP 的基本工作原理后,我开始深入学习 SDP 的命令描述符的格式和功能。命令描述符包括多个字段,如 NXTCMD、PKTCTL、PKTSRC、PKTDST、BUFSIZE 等。其中,NXTCMD 是下一条命令描述符的指针,如果 PKTCTL[3] 的 CHAIN 位被设置为 1,SDP 在执行完当前命令后将继续执行 NXTCMD 指向的命令描述符。
在学习了 SDP 的命令描述符后,我开始尝试编写命令描述符并使用 SDP 进行数据安全处理。在使用 SDP 之前,需要按照需求配置 SDPCR 和 MODCTRL 寄存器。然后,需要编写命令描述符,并注意以下几点:
- PKTCTL[2] 的 DCRSEMA 位需要设置为 1,以提示命令执行完成后 PKTCNT [CNTVAL] - 1。
- 如果希望执行多条命令,最后一条命令外的命令描述符 PKTCTL[3] 的 CHAIN 位需要设置为 1,并把 NXTCMD 填入下一条命令的地址。
- 如果希望命令执行完成后生成中断请求,需要把命令描述符 PKTCTL[1] 的 PKTINT 位设置为 1。
在编写完命令描述符后,需要在 CMDPTR 寄存器写入命令描述符的地址,并对 PKTCNT [CNTINCR] 写入需要执行的命令描述符数量。写入 PKTCNT [CNTINCR] 会更新 PKTCNT [CNTVAL] = PKTCNT [CNTVAL] + PKTCNT [CNTINCR],其中 PKTCNT [CNTVAL] 代表了需要执行的命令数量。
通过 KEYDAT,写入密钥,KEYDAT 为 32 位寄存器:
● 第 1 次写 KEYDAT,写入密钥 [0:31]
● 第 2 次写 KEYDAT,写入密钥 [32:63]
● 第 3 次写 KEYDAT,写入密钥 [64:95]
● 第 4 次写 KEYDAT,写入密钥 [96:127]
● 第 5 次写 KEYDAT,写入密钥 [128:159]
● 第 6 次写 KEYDAT,写入密钥 [160:191]
● 第 7 次写 KEYDAT,写入密钥 [192:223]
● 第 8 次写 KEYDAT,写入密钥 [224:255]
用户也可以通过密钥管理器 KEYM 的专用密钥通路载入密钥,具体步骤如下:
● 通过 MODCTRL[KEYMSEL] 位配置 KEYM 密钥选择器:
– MODCTRL[KEYMSEL] = 1’b0,使用 SDP 的内部存储器 KEYRAM 存储密钥
– MODCTRL[KEYMSEL] = 1’b1,使用 KEYM 的专用密钥通路 MK, SK0 ∼ SK3 存储密钥
● 当 MODCTRL[KEYMSEL] = 1’b1 时,用户通过 SDP 的 SDP_KEYMC 寄存器向 KEYM 的 MK 寄存器载入密
钥。
注意:在 SDPCR[AESEN] 位置 1 前,MODCTRL[KEYMSEL] 不能被修改。
在实际使用 SDP 进行数据安全处理的过程中,我深刻体会到了 SDP 的强大功能和灵活性。通过配置不同的命令描述符和控制字,可以实现各种复杂的数据安全处理任务。同时,SDP 还提供了中断请求功能,使得用户可以方便地响应和处理数据安全事件。
通过这次实战,我不仅深入了解了 SDP 的工作原理和应用,还掌握了一些实用的技能和工具。我相信这些知识和技能将对我未来的工作和学习产生积极的影响。
希望上面的心得能对您有所帮助!
谢谢!
还没吃饭
2023年12月18日