电路和设备的制作方法

文档序号:20056802发布日期:2020-03-06 06:31阅读:165来源:国知局
电路和设备的制作方法

本说明书总体上涉及密码技术,并且更具体地涉及用于快速加密存储在存储器中的数据以供微控制器使用的加密引擎。



背景技术:

微控制器(例如,stm32微控制器)(通过stmicroelectronics组的公司可获取)最近引入了越来越多的安全特征。这种安全特征可以涉及存储在外部存储器中的数据(例如,可执行代码)的加密以供微控制器使用。存储在外部存储器中的数据可以由微控制器检索,例如,通过高性能总线,例如高级可扩展接口(axi)总线。

一方面,由微控制器执行的这种经加密数据的基本解密处理可能引入与高性能总线操作几乎不兼容的时延,其中“在运行中”解密可以表示期望特征。

另一方面,要存储在外部存储器中的数据的基本加密处理(例如,用于在微控制器中执行的可执行代码)可能很慢和/或涉及专用处理核。



技术实现要素:

为了解决以上问题,本实用新型提供一种电路和设备。

根据一个方面,提供了一种电路。该电路包括:输入节点,被配置为通过通信总线接收对存储器位置的访问请求,存储器位置经由通信总线可访问,其中访问请求包括从相应起始地址开始访问存储器位置的相应组的突发请求,突发请求传送相应起始地址;输出节点,被配置为通过通信总线传输输出数据;以及处理电路系统,被耦合到输入节点和输出节点并且被配置为:根据起始地址,基于密码密钥计算加密/解密密码掩码;接收用于加密的明文数据或存储在存储器位置中的经加密数据;根据安全模式信号的值,应用密码掩码来加密明文数据以从中获取经加密数据,或者解密存储在存储器位置中的经加密数据以从中获取经解密数据;以及将经加密数据或经解密数据包括在输出节点上提供的输出数据中以便通过通信总线进行传输。

在一些实施例中,处理电路还被配置为:通过通信总线传输输出数据,并且从相应起始地址开始将经加密数据存储在存储器位置中。

在一些实施例中,处理电路系统还被配置为:从相应起始地址开始经由通信总线从存储器位置读取存储的经加密数据,并且将密码掩码应用于所读取的存储的经加密数据以从所读取的存储的经加密数据生成经解密数据,并且处理电路系统还被配置为将经解密数据包括到输出数据中以便通过通信总线进行传输。

根据一个方面,提供了一种设备。该设备包括:存储器位置,被配置为存储经加密数据,存储器位置具有相应地址;通信总线,被耦合到存储器位置并且被配置为将访问请求传送到存储器位置,其中访问请求包括从相应起始地址开始访问存储器位置的相应组的突发请求,突发请求传送相应起始地址;以及电路,被耦合到通信总线并且具有输入节点,输入节点被配置为通过通信总线接收对存储器位置的访问请求,其中访问请求包括从相应起始地址开始访问存储器位置的相应组的突发请求,突发请求传送相应起始地址,并且电路具有被配置为通过通信总线传输输出数据的输出节点,并且电路还被配置为根据起始地址基于密码密钥计算加密/解密密码掩码,并且接收用于加密的明文数据或被存储在存储器位置中的经加密数据,并且根据安全模式信号的值应用密码掩码来加密明文数据以从中获取经加密数据,或者解密被存储在存储器位置中的经加密数据以从中获取经解密数据,并且将经加密数据或经解密数据包括在输出节点上被提供的输出数据中。

在一些实施例中,还包括被耦合到通信总线的处理单元,电路还被配置为通过通信向处理单元传输输出数据。

在一些实施例中,电路被配置为根据高级加密标准基于密码密钥来计算密码掩码。

本实用新型可以实现有益的技术效果,例如可以解决明文数据的快速加密问题以便存储在存储器中以供微控制器连续使用。

附图说明

现在将参考附图仅通过示例的方式描述一个或多个实施例,在附图中:

图1是本公开的实施例中的可能的加密/解密引擎的示例性框图;

图2是根据本公开的实施例的加密引擎的示例性框图;

图3是本公开的实施例的使用的可能上下文的示例性框图;

图4是本公开的实施例的实现细节的示例性框图;以及

图5是本公开的实施例的实现细节的示例性框图。

具体实施方式

在随后的描述中,示出了一个或多个具体细节,旨在提供对本说明书的实施例的示例的深入理解。实施例可以在没有一个或多个具体细节的情况下或者利用其他方法、组件、材料等来获取。在其他情况下,未详细示出或描述已知结构、材料或操作,使得实施例的某些方面将不被遮挡。

在本说明书的框架中对“实施例”或“一个实施例”的引用旨在表示关于该实施例描述的特定配置、结构或特性被包括在至少一个实施例中。因此,可以存在于本说明书的一个或多个点中的诸如“在实施例中”或“在一个实施例中”等短语不一定指代同一实施例。此外,在一个或多个实施例中,可以以任何适当的方式组合特定构造、结构或特性。

本文中使用的参考仅仅是为了方便而提供的,因此不限定保护的范围或实施例的范围。

作为对示例性实施例的详细描述的介绍,可以首先参考图1。

图1表示用于数据加密/解密的所谓的“ip核”的顶级架构,其中箭头示出了数据加密/解密过程的时间和逻辑流程以及对应的流水线。

如本领域中已知的,名称ip(知识产权)核应用于逻辑或数据块,其可以用于例如提供用于电子产品的专用集成电路或asic或可编程门阵列或fgpa,从而促进设计重用。

在下文中,根据“先进先出”方法操作的寄存器简称为fifo寄存器。这种寄存器的可能实现对于本领域技术人员来说是公知的,因此本文中不再进一步说明。

在提供解密/加密电路100的高级示例性表示的图1的图中,例示以下元件:

在解密/加密电路100外部的处理单元mcu,例如微控制器单元;

在解密/加密电路100外部并且适于与存储(经加密)数据的外部存储器(图1中不可见)协作的存储器控制器mc,

用于将微控制器单元mcu耦合到存储器控制器mc的第一(双向)数据总线(例如,axi总线),第一数据总线包括地址读取通道10和数据读取通道20,

解密/加密电路100到数据总线的地址读取通道10和数据读取通道20的接入点,

突发管理器电路模块30,

ahb寄存器电路模块40,

加密/解密未完成fifo电路模块50,

解密/加密管理器电路模块60,

密钥流生成器电路模块70,

解密/加密控制器电路模块80,以及

解密/加密电路100到第二数据总线90(例如,高级高性能总线(ahb)通信总线)的接入点。

应当理解,上面作为不同实体的电路模块的表示仅仅是为了清楚和简单。在一个或多个实施例中,那些电路模块中的一个或多个可以以多功能电路的形式集成。类似地,在一个或多个实施例中,本文所示的一个或多个电路模块可以分成对应的子模块组。

因此,如图1所示的上述电路模块又可以包括各种子模块,如下所述。

例如:

突发管理器电路模块30可以包括数据流控制模块32、地址解码模块34、突发fifo寄存器36和突发fifo控制器模块38;

ahb寄存器电路模块40可以包括密钥寄存器42和地址区域寄存器44,

加密/解密未完成fifo电路模块50可以包括加密/解密fifo寄存器52;

解密管理器电路模块60可以包括地址生成模块62和有限状态机(fsm)模块64;

密钥流生成器电路模块70可以包括解密处理模块72;

解密控制器电路模块80可以包括突发信息fifo寄存器82、掩码fifo寄存器84、多路复用器(mux)模块86(例如,64位多路复用器)、数据流控制模块88和异或逻辑模块89。

应当注意,上面作为不同实体的电路子模块的表示仅仅是为了清楚和简单。在一个或多个实施例中,这些电路子模块中的一个或多个可以以多功能模块的形式集成。

在如图1所示的电路中,可以通过使用到第二数据总线90的接入点来编程和/或配置地址区域寄存器44和密钥寄存器42。

以示例性实施例的详细描述的介绍的方式,将首先描述响应于数据解密请求的如图1所示的电路100的操作。

实际上,如图1所示的电路100可以用于在来自微控制器单元mcu的数据访问请求时解密存储在外部存储器中的经加密数据。

如图1所示的电路100适于插在数据总线10、20上以用于与存储器控制器mc协作,数据总线以所谓的“突发模式”操作,即来自微控制器mcu的数据事务请求是突发请求。

突发是一种数据事务,其中基于单个数据地址来传送(例如,从外部存储器通过总线数据读取通道20、通过存储器控制器mc向微控制器mcu)多个数据项(或数据单元)。

在单个突发中传送的每个数据单元被称为节拍,并且相同的措辞适用于本说明书。由于每个突发与单个数据起始地址相关联,因此突发中的节拍的地址被计算为对应突发数据起始地址和事务类型(或等效突发类型)的函数,例如,固定、增量或包裹(wrap)。对外部存储器中的单个数据单元(即,单个节拍)的访问请求也被定义为突发请求,即请求传输单个节拍的突发。

作为突发到达的结果,在总线地址读取通道10上发出数据访问请求(和可能的数据解密请求)。由微控制器单元mcu在总线地址读取通道10上发出的突发请求指示微控制器从某个数据起始地址开始请求访问存储在外部存储器中的数据单元。

突发携带的信息包括:

要在外部存储器中检索的对应数据单元的起始地址(例如,单个32位地址),

数据事务的长度(即,响应数据传输中的数据节拍数,也称为突发长度),

数据单元的大小(即,由总线数据读取通道20中检索的数据单元占用的有效位数,也称为突发大小),

突发类型(或事务类型),例如固定、增量或包裹,

在包裹突发的情况下,包裹的突发长度,以及

有关安全性、可缓存性等的其他可能的信息。

在如图1所示的电路100中,数据流控制模块32可以被配置为监测解密处理流水线的状态,并且如果处理流水线未满,则可以准许处理传入数据解密请求。

如果准许处理传入请求,则将突发转发(不重新定时)到外部存储器控制器mc以便在外部存储器中检索可以加密或不加密的对应数据。

在如图1所示的电路100中,地址解码模块34可以被配置为解码由传入数据突发携带的数据起始地址和其他边带安全信息。可以将数据起始地址与地址区域寄存器44中的地址区域进行比较,并且可以将安全信息与密钥寄存器42中编程的安全性进行比较。作为这种比较的结果,地址解码模块34可以操作关于与传入突发相对应的数据是否需要解密过程的决定。实际上,外部存储器可以存储经加密和非经加密数据,其中某些地址对应于经加密数据单元,而其他地址对应于非经加密数据单元。

在如图1所示的电路100中,地址解码模块34可以“在运行中”工作,即,不引入任何延迟周期。在与传入突发相对应的数据需要解密过程的情况下,数据流控制模块32可以被配置为如果地址生成模块62可用于处理当前突发,则将突发信息转发到地址生成模块62,或者如果地址生成模块62不可用于处理当前突发(例如,因为它正在处理先前突发的信息),则将突发信息存储在突发fifo寄存器36中。

数据流控制模块32可以知道突发fifo寄存器36已满。在这种情况下,传入突发可以保持未完成(即,对应的数据访问请求可以不被传播),直到处理了至少一个先前接收的突发,从而提供将传入突发的信息存储在突发fifo寄存器36中的可能性。

在如图1所示的电路100中,并行处理可以允许与地址生成模块62的操作并行地填充加密/解密fifo寄存器52。例如,如果决定要解密与传入突发相对应的数据,则值“1”存储在加密/解密fifo寄存器52中,否则,尽管在突发fifo36中没有存储信息,但值“0”存储在加密/解密fifo寄存器52内部。

基于fifo寄存器的工作原理,存储在加密/解密fifo寄存器52中的二进制序列从解密控制器电路模块80读取,例如作为从外部存储器检索响应数据序列的结果。读取存储在加密/解密fifo寄存器52中的值将有助于决定使用可用掩码来解密对应数据,如下所述(如果“1”存储在加密/解密fifo寄存器52中),或者直接将响应数据转发到微控制器单元mcu而不应用解密处理(如果“0”存储在加密/解密fifo寄存器52中)。在后一种情况下,对应于对非经加密数据单元的突发请求,因此可以不在突发fifo36中写入关于对非经加密数据单元的这种突发请求的信息。

应当理解,分别参考“1”和“0”值仅仅是作为示例:在如图1所示的电路100中可以采用互补选择(例如,分别为“0”和“1”值)或这些信息的任何其他合适的布尔编码。

在如图1所示的电路100中,如果决定解密检索的数据,则可以并行执行多个处理活动,例如由突发触发被转发到解密管理器模块60,处理活动包括掩码计算和/或地址生成和/或掩码头部计算。

通常,在高时钟频率(例如,大于300mhz)时,可能需要若干时钟周期来生成一个解密掩码,例如一个128位掩码。

例如,aes计数器算法可能需要例如11个时钟周期来生成一个128位解密掩码。可以替代aes计数器算法来使用的其他加密/解密算法也可能需要几个时钟周期来生成一个解密掩码。

应当理解,在本说明书的上下文中,术语掩码和密钥流被无差别地使用。实际上,密钥流是在aes过程的上下文中使用以用于指示用于经加密数据的解密过程的掩码的技术名称。

在如图1所示的电路100中,解密处理可以包括aes过程,例如aes计数器过程。aes计数器过程可以有助于根据突发起始地址和由对应突发携带的其他信息来计算解密掩码。

通过向解密处理模块72提供输入数据,可以触发解密过程以生成用于解密特定突发的数据单元的掩码。例如,到解密处理模块72的这种输入数据可以包括秘密密钥(例如,128位密钥)和初始化向量(例如,128位初始化向量)。

在如图1所示的电路100中,可以从密钥寄存器42中检索秘密密钥。

在如图1所示的电路100中,初始化向量可以由解密管理器电路模块60根据数据起始地址和由对应突发携带的其他信息来计算,如前所述。

应当注意,aes计数器过程可以有助于根据突发起始地址和对应突发携带的其他信息来计算解密掩码。

在如图1所示的电路100中,可以提取与突发类型(例如,固定、增量或包裹)、突发起始地址、数据单元大小、突发长度、包裹长度等有关的简明信息,并且将其与每个突发相关联,并且作为“掩码头部”保存到突发信息fifo寄存器82中。

生成的掩码可以存储在掩码fifo寄存器84中,并且计算出的掩码头部可以存储在突发信息fifo寄存器82中。例如,多个掩码可以对应于单个掩码头部(并且因此对应于单个突发请求),例如,由于突发的大长度(即,由于响应数据传输中的大量数据单元或数据节拍)。

在如图1所示的电路100中,如果从外部存储器检索响应数据并且通过总线数据读取通道20将其发送到解密模块并且解密掩码可用,则解密控制器电路模块80可以开始读取存储在突发信息fifo寄存器82和掩码fifo寄存器84中的数据,即,从fifo寄存器“弹出”这样的数据,开始将响应数据传输中的每个数据节拍与对应掩码相关联,或者在数据单元的大小小于掩码的情况下(例如,如果数据单元是64位长并且掩码是128位长),可能与对应的掩码部分相关联。例如,这种计算可以与响应地址生成并行地执行。

在如图1所示的电路100中,如果检索的数据单元被加密,则可以停止响应数据流,因此需要解密,并且掩码不可用。

在如图1所示的电路100中,由异或逻辑模块89对所应用的解密过程执行的解密处理可以包括对经加密数据(即,所谓的密文)和所计算的掩码进行逐位异或。该异或操作返回经解密数据,即所谓的明文。

突发“未完成”能力对于解密过程可能是至关重要的。它可以影响应用程序的性能,例如代码的执行或图像处理。

如图1所示的电路100可以能够管理多达n个未完成突发,n还取决于所实现的fifo寄存器的大小(或深度),例如突发fifo寄存器36、加密/解密fifo寄存器52、突发信息fifo寄存器82和掩码fifo寄存器84。管理多达n个未完成突发的这种可能性来自不同阶段的解密处理流水线的划分和并行处理的利用。

在如图1所示的电路100中,当突发请求等待对应的响应时,可以连续触发解密过程以生成所需要的掩码,从而有助于提高核的性能和/或利用高速缓存重新填充。

如前所述,例如,本文所示的解密方法的可能应用是由处理核mcu执行例如存储在外部存储器中的加密代码。例如,可以应用高速缓存来预期命令的执行并且改善处理核mcu的性能。作为处理核mcu执行某个指令的结果,高速缓存可以推测要由处理核mcu执行的连续指令,并且可以尝试从外部存储器检索这样的指令以便在连续处理中使用。

因此,在如图1所示的电路100中,接收存储在外部存储器中的经加密数据单元的突发请求,例如,与由处理核mcu执行的某些代码指令相对应的经加密数据单元可以触发在连续地址处存储在外部存储器中的经加密数据单元的突发请求的推测预测。

在如图1所示的电路100中,触发用于掩码生成的解密过程可以由fsm模块64管理。例如,当密钥流生成器电路模块70空闲时,fsm模块64可以触生成成掩码以用于解密这种推测的连续突发。

在如图1所示的电路100中,地址生成可以包括两个阶段,第一阶段是生成传入突发所需要的所有掩码地址,第二阶段是后续掩码地址的生成,例如通过执行掩码生成的推测性触发。

在如图1所示的电路100中,在开始对可能的后续掩码地址的任何推测之前,优选地完成与所接收的并且可能存储到fifo寄存器中的突发相对应的地址的生成。单个突发确实可以覆盖(由于潜在的大突发长度,即响应数据传输中的大量数据节拍)大的存储区域,可能涉及多个掩码(例如,多于一个128位掩码)。

在如图1所示的电路100中,基于突发起始地址、突发长度、突发大小和突发类型(例如,固定、包裹或增量)的地址生成过程可能很复杂,具体取决于突发长度。

例如,由于需要计算长数(例如,128位数)之间的和和乘积,地址生成过程可能是复杂的。

因此,在如图1所示的电路100中,地址生成过程优选地由fsm模块64逐步寻址,并且可以与掩码计算并行进行。

由于地址生成过程完成(即,已经计算了传入突发所需要的所有掩码地址)并且密钥流生成器电路模块70再次空闲,所以可以执行关于可以在总线地址读取通道10上接收的下一传入突发的推测。

应当理解,先前使用的术语也必须以“智能”方式解释,这表示在包裹地址突发的情况下,要预测的地址可能不链接到突发的起始地址,但是链接到由fsm模块64计算的最终的最后地址,因为可能核的操作将从那一点开始。

在如图1所示的电路100中,fsm模块64可以被配置为作为具有以下示例性描述的行为的有限状态机操作。

有限状态机可以具有“空闲”状态、“掩码地址生成”状态,“预取”状态和“预取完成”状态。

仅作为重置整个解密电路的结果或作为接收“ip_enable”信号的结果,可以实现idle状态。由于fsm处于idle状态,解密处理模块72是空闲的(即,解密过程没有运行)并且没有要解密的突发。接收指示在地址读取通道10上接收的有效传入突发的“burst_valid”信号可以触发解密流,从而引起fsm转移到掩码地址生成状态。

作为fsm处于掩码地址生成状态的结果,可以激活解密处理模块72。可能需要不止一个时钟周期(例如,11个时钟周期)来完成掩码生成。同时,下一掩码地址的计算可能正在进行。在没有地址读取通道10上可用的任何后续突发的情况下到达掩码地址生成过程的结束可以触发预取阶段,从而引起fsm转换到预取状态。

在一个或多个实施例中,解密处理模块72可以由于fsm转换到预取状态而被激活,其中至少一个掩码地址被预取。

可以在任何时刻中止预取处理,例如在触发burst_valid信号的传入突发具有与已经推测的地址不同的地址的情况下。在这种情况下,标准解密流程被激活。在任何情况下,burst_valid信号将引起fsm转换到掩码地址生成状态。在没有burst_valid信号的情况下到达掩码地址预取过程的结束可以引起fsm转换到预取完成状态。

由于fsm处于预取完成状态,成功预取的掩码被临时存储在掩码fifo寄存器84中,等待新的突发。解密处理模块72可以继续保持。作为接收burst_valid信号的结果,可以再次激活标准流程。

在如图1所示的电路100中,解密控制器电路模块80可以负责响应数据单元与对应解密掩码之间的异或操作。

如前所述,可以通过fsm模块64从突发中为每个传入突发提取重要和简明的信息,并且将其作为掩码头部存储在突发信息fifo寄存器82中以管理响应数据流。在如图1所示的电路100中,该简明信息可以包括:

“burst_type”字段,例如以2比特编码,提供关于对应突发类型的信息,例如固定、增量或包裹;

“start_address”字段,例如以5比特编码,提供要检索的突发数据的起始地址,例如,在外部存储器中;

“size”字段,例如以3比特编码,提供关于对应突发中的数据单元的大小的信息;

“length_for_wrapping”字段,例如以2比特编码,提供关于被突发覆盖并且在包裹突发的情况下由解密控制器电路模块80探索的地址范围的信息。

例如,在2比特值编码的情况下,length_for_wrapping字段的可能编码可以如下:

00:2个字节之后包裹,

01:4个字节之后包裹,

10:8个字节之后包裹,以及

11:16个字节之后包裹。

如上所例示的,正确解密检索的数据单元所需要的信息可以存储在每个传入突发的单个头部中,每个头部的大小为例如12比特。因此,如图1所示的电路100可以通过改进掩码/数据选择和关联过程来促进电路面积的减小。

在如图1所示的电路100中,解密控制器电路模块80可以根据下面描述的算法计算需要解密处理的突发中的数据节拍的当前数据地址(偏移)。

<sh>

在某个突发的解密过程开始时,起始地址的位大小可能取决于数据总线的位大小,例如在64位数据总线的情况下以5位编码,起始地址可以相应地初始化为存储在突发信息fifo寄存器82中的对应数据条目中的突发起始地址。

由于从外部存储器检索数据节拍并且在数据读取通道20上可用以在解密控制器模块80中进行处理,因此“rvalid”信号可以由存储器控制器mc触发(例如,设置为“1”),“rvalid”信号可以由解密控制器电路模块80读取。

在如图1所示的电路100中,因此可以根据对应突发的类型以不同的方式计算当前数据地址。

如果突发是固定类型,则不增加起始地址,并且对于同一突发中包括的所有数据节拍使用单个掩码。

如果突发是增量类型,则通过在每次出现rvalid信号时将突发起始地址递增数据节拍的大小(例如,4个字节)来计算当前数据地址。

如果突发是包裹类型,则通过在每次出现rvalid信号时将突发起始地址递增数据节拍的大小(例如,4个字节)来计算当前数据地址,以在length_for_wrapping*size处包裹(例如,返回初始起始地址)。

在如图1所示的电路100中,如果需要,异或操作由异或逻辑模块89在整个数据总线上执行。

在如图1所示的电路100中,当前数据地址的一位(例如,最右第四位)可以用作选择器以决定在异或操作中应当使用掩码的哪个部分(例如,掩码的前半部分或后半部分)。例如,在128位掩码和64位数据总线的情况下,如果选择器比特的值等于“0”,则可以使用掩码的前半部分(即,由比特63:0标识的掩码部分),而如果选择器比特的值等于“1”,则可以使用掩码的后半部分(即,由比特127:64标识的掩码部分)。

应当理解,同样在这种情况下,分别参考“1”和“0”值仅仅是作为示例:如图1所示的电路100实际上可以采用互补选择(例如,分别为“0”和“1”值)或这种信息的任何其他合适的布尔编码。

在如图1所示的电路100中,当前数据地址的一位(例如,最右第五位)可以用作掩码改变的触发。例如,从“0”到“1”或从“1”到“0”的这种“掩码改变触发”位的值的改变可以触发从掩码fifo寄存器84中“弹出”解密掩码。

作为与特定突发请求相对应的最后数据节拍从外部存储器检索,并且在数据读取通道20上可用于在解密控制器模块80中处理的结果,可以触发“rlast”信号(例如,设置为“1”),由解密控制器电路模块80可读取。这样的rlast信号等于“1”可以向解密控制器电路模块80通知已经到达与特定突发请求相对应的响应数据流的结束。

否则将理解,在不脱离保护范围的情况下,上述大小(例如,数据总线大小、掩码大小、fifo寄存器深度、掩码头部大小、起始地址大小等)以及选择器比特的位置和当前数据地址中的掩码改变触发位的位置可以扩展。

在上文中,已经关于在外部存储器中检索以供微控制器mcu使用的数据的解密处理描述了解密/加密电路100和操作这种电路的方法。

如在意大利专利申请no.102018000003373(在提交本申请之日尚未公开)中所讨论的,这种电路可以提供对这种经检索数据的快速运行中解密。

但是,关于加密处理可能涉及类似的问题。例如,数据加密可以由设备供应商执行以生成存储在存储器中的这种经加密数据,例如用于与微控制器协作。

用于生成经加密数据的第一种可能性可以是在通用处理单元上运行专用加密软件。这种方法可能导致计算时间长。

生成经加密数据的另一种可能性可以是使用专用加密ip核11,如图2所示。

如图2所示,加密电路21可以从初始化向量寄存器200接收输入初始化向量,并且从密钥寄存器202输入密钥以计算密钥流。

用于计算密钥流的详细过程可以根据所涉及的加密过程而变化,例如128位aes(计数器)算法。根据诸如aes算法等特定加密过程来计算密码密钥流是本领域技术人员已知的,因此这里将不提供详细描述。

由加密电路21中的由加密引擎204计算的密钥流可以存储在密钥流寄存器206中。

然后可以在异或处理模块208中利用输入明文数据“plain_text”处理这样的计算(和存储的)密钥流。例如,异或处理模块208可以在来自密钥流寄存器206的输入密钥流与输入明文数据单元之间执行按位异或运算。

这种异或处理模块208的输出“encrypted_data”是与输入明文数据相对应的经加密数据(例如,经加密的可执行代码),其适合存储在(外部)存储器中的某个地址处以便与微控制器单元协作。

在如图2所示的过程中,初始化向量和秘密密钥的大小可以适应于所生成的密钥流的大小,其可以变化。例如,128位初始化向量和128位密钥可以用于生成128位密钥流。

此外,明文数据单元和经加密数据单元的大小也可以变化。例如,明文数据单元和经加密数据单元可以是128位长。或者,明文数据单元和经加密数据单元可以更短,例如64位长。在这种第二种情况下,如果所生成的密钥流是128位长,则可以使用单个密钥流来加密多个数据单元。因此,应当理解,先前关于解密处理描述的若干特征也可以应用于加密处理,例如,使用单个密钥流来加密多个数据单元。

某个明文数据单元可能需要某个密钥流来进行加密,这种密钥流是在参考图1所述的解密处理中连续解密相应的经加密数据单元所需要的相同密钥流。

实际上,如前所述,与某个数据单元相关联的密钥流取决于存储数据单元的(外部)存储器中的数据单元的地址,例如,由于初始化向量依赖于对应数据单元的地址。

因此,加密一组明文数据单元可以涉及使用一组初始化向量和秘密密钥来生成对应的一组密钥流。

在如图2所示的过程中,一组密钥流的计算可能需要重新配置(例如,提供不同的初始化向量和/或秘密密钥)加密引擎204以用于计算不同的密钥流。例如,每个密钥流的计算可以涉及重新配置加密引擎204。

因此,在如图2所示的过程中,可能无法对连续数据地址执行任何推测以减少密钥流的计算时间。实际上,关于数据单元的地址的信息可以(仅)在如图1中关于解密处理所例示的“运行中”解码器电路中可用。

在如图2所示的过程中,可以涉及正确配置专用加密ip核11的若干尝试,以便匹配相应数据单元的如图1所示的解密ip核100的相应配置。配置专用加密ip核11用于加密要由解密ip核100解密的数据可能增加引入错误的可能性,例如密钥、地址和/或初始化向量中的错误。

因此,改进加密处理的可能性是将如图1所示的解密引擎100配置为可切换到其中引擎执行数据加密的“加密状态”。在这种情况下,不涉及专用加密ip核的附加配置。此外,使用解密引擎100来执行数据加密可以通过依赖于上述“推测”行为而提供更短的加密时间。

图3是提供这种改进的解决方案的一个或多个实施例的示例。

如图3所示,微控制器mcu和存储器控制器mc经由包括地址读取通道10和数据读取通道20的通信总线耦合,其配置类似于图1中例示的配置。存储器控制器mc被配置为控制经由合适的连接302对外部存储器m的访问。

类似于图1所示的电路100,解密/加密引擎100'耦合到数据总线10、20,并且被配置为根据控制信号enc交替地作为解密引擎或加密引擎操作。

应当注意,在图1的示例性图中示出为电路100的一部分的密钥寄存器42在图3的示例性图中被示出为在电路100'外部的模块。

当作为解密引擎操作时,图3所示的解密/加密引擎100'可以:

接收对在某个数据起始地址“addr”存储在外部存储器m中的数据单元的数据访问请求,并且在地址读取通道10上读取(经加密)数据单元的数据起始地址“addr”,

通过存储器控制器mc和通信总线的数据读取通道20来读取从外部存储器m检索的(经加密)数据单元“rdata_extmem”,

根据相应经加密数据单元的数据起始地址“addr”并且可能根据前面所述的推测数据起始地址来生成解密掩码,

通过向其应用所生成的解密掩码来解密所检索的经加密数据单元,以及

通过通信总线10、20向微控制器mcu提供经解密的数据单元“rdata_otfdec”。

当作为加密引擎操作时,图3所示的解密/加密引擎100'可以:

接收对在某些数据起始地址“addr”处存储在外部存储器m中的数据单元的“假”(或“伪”)数据访问请求,并且在地址读取通道10上读取这样的数据起始地址“addr”,其中地址“addr”对应于应当存储经加密数据单元的存储器地址,

读取从专用data_in存储器308(例如,data_in寄存器)检索的明文数据单元“plain_text”,

根据数据起始地址“addr”并且可能根据如前所述的推测数据起始地址来生成密码掩码,

通过向其应用所生成的密码掩码来加密所检索的明文数据单元,以及

通过数据总线10、20向微控制器mcu提供经加密数据单元“rdata_otfdec”,以便从地址“addr”开始在外部存储器m中连续存储。

在一个或多个实施例中,微控制器mcu可以被配置为经由专用地址和数据写入通道(在图中不可见)将由解密/加密引擎100'提供的经加密数据单元存储在外部存储器m中。

可以理解,这里提到的明文数据单元的数据起始地址是这样的数据单元:一旦加密并且存储在外部存储器m中就占据的起始地址。

因此,图3所示的电路100'可以备选地作为解密引擎或加密引擎来操作。诸如解密或加密引擎等操作可以取决于提供给电路100'的(二进制)控制信号enc的值,如图3所示。

例如,在本文和以下图4和5所示的实施例中,控制信号enc等于1表示电路100'作为加密引擎操作,并且控制信号enc等于0表示电路100'作为解密引擎操作。

应当注意,控制信号enc的值的互补选择是可能的,仅需要对对应实施例的架构进行小的调节,诸如插入反相器和/或交换多路复用器的输入。这种调节可以由本领域技术人员容易地实现,因此这里将不提供更详细的描述。

在如图3所示的一个或多个实施例中,仅当处理单元mcu以安全模式操作时,控制信号enc的值可以被设置为1(即,解密/加密引擎100'可以被设置为用作加密引擎)。

例如,这可以通过在与逻辑门306的输出处产生控制信号enc来实现,该与逻辑门306的第一输入耦合到信号“sec_mode”,例如由处理单元mcu提供的信号,例如由嵌入在处理单元mcu中的闪存接口提供的,并且指示处理单元mcu是(sec_mode=1)否(sec_mode=0)以安全模式操作,如图3所示。因此,如果处理单元mcu不以安全模式操作(即,如果sec_mode=0),则控制信号enc可能不设置为1。

处理单元mcu的这种安全操作模式可以涉及可以从处理单元mcu的闪存中检索的处理单元mcu的操作条件,作为处理单元mcu处于重置状态的结果,例如在所谓的选项字节加载阶段。作为处理单元mcu以安全模式操作的结果,处理单元的安全资源可以是可用的,例如,如前所述的控制信号enc的写入能力。

在一个或多个实施例中,出于安全原因,数据存储器308可以仅作为处理单元mcu以安全模式操作的结果是可访问的。

在一个或多个实施例中,与逻辑门306的第二输入可以耦合到加密/解密引擎的控制寄存器304。

因此,图3是一个或多个实施例的示例,其中可能执行解密/加密过程的推测性触发的解密/加密引擎100'可以根据控制信号enc在解密和加密工作模式之间切换。

在一个或多个实施例中,作为解密或加密引擎的电路100'的替代操作可以涉及多路复用器电路402的操作,如图4所示。

注意,如图4中的虚线矩形所示的电路100'可以被理解为包括如图1所示的电路100的电路模块和子模块。图1所示的掩码寄存器84和异或模块89在图4中也清楚地可见。图4所示的加密引擎204与图1所示的密钥流生成器电路模块70类似地操作。图1中可见的其他模块和子模块在图4中不可见,以便于说明。

因此,电路100'的解密/加密流水线可以被配置为根据如前面参考图1所述的电路100的解密流水线进行操作。

因此,初始化向量可以例如由解密/加密管理器电路模块60根据从地址读取通道20读取的数据起始地址“addr”来计算。

这种经计算的初始化向量可以存储在相应的初始化向量寄存器200中,如图4所示。

备选地,在一个或多个实施例中,初始化向量可以由组合逻辑电路块根据数据起始地址“addr”计算并且被提供给加密引擎204。

密码引擎204(例如,可选地以如前所述的“推测”方式管理的标准aes加密引擎)可以根据初始化向量和从密钥寄存器42检索的秘密密钥生成要存储在掩码寄存器84中的密钥流。

可以从寄存器200检索初始化向量,或者可以通过组合逻辑电路块将初始化向量提供给密码引擎204。

存储在掩码寄存器84中的密钥流可以在异或处理模块89的第一输入处提供,其中异或处理模块89的第二输入是从外部存储器m检索的经加密数据单元“rdata_extmem”(在enc=0的情况下)或者是从data_in存储器308检索的明文数据单元“plain_text”(在enc=1的情况下)。

异或处理模块89可以通过在分别在其第一和第二输入处接收的在密钥流和数据单元之间应用按位异或处理来提供输出数据单元“rdata_otfdec”。

因此,如果enc=0,则由电路100'提供给处理单元mcu的输出“rdata_otfdec”是与在外部存储器m中的地址“addr”处检索的经加密数据单元“rdata_extmem”相对应的明文。相反,如果enc=1,则由电路100'提供给处理单元mcu的输出“rdata_otfdec”是与从data_in存储器308中检索并且预期要存储在外部存储器m中的地址“addr”处的明文数据单元“plain_text”相对应的密文。

如上所述,可以通过在地址读取通道10上接收假(或伪)数据访问请求来在电路100'中触发加密处理。

实际上,在一个或多个实施例中,电路100'还可以包括如图5所示的用于管理假(或伪)数据访问请求的控制电路51。

在一个或多个实施例中,控制电路51可以提供第一输出信号rvalid以用作加密电路100'的解密/加密控制器电路模块80的输入信号。

尽管本文中例示为不同元件以便于解释,但是在一个或多个实施例中,控制电路51可以被包括在解密/加密控制器电路模块80中,其也在图1中示出。

如先前关于图1所示的电路100所描述的,信号rvalid指示用于电路100'的解密/加密处理的输入数据的可用性。

如图5所示,如果电路100'作为解密引擎操作(即,enc=0),则由控制电路51提供的信号rvalid是由存储器控制器mc提供的信号rvalid_extmem的副本。因此,当从外部存储器m检索的经加密数据单元在数据读取通道20上可用于电路100'中的解密处理时,可以触发信号rvalid(例如,设置为高)。在一个或多个实施例中,作为电路100'作为解密引擎操作的结果,可以控制传播到解密/加密控制器电路模块80的信号rvalid_extmem,例如以便处理在解密电路的操作期间可能发生的时延。例如,可以在对应的解密掩码可用之前从外部存储器检索用于解密的经加密数据单元,其中这种时延通过延迟信号rvalid_extmem的传播来管理。

备选地,如果电路100'作为加密引擎操作(即,enc=1),则由控制电路51提供的信号rvalid是在寄存器500(例如,触发寄存器500)的输出处提供的信号rvalid_dmy的副本,寄存器500接收由处理单元mcu提供的信号rready_cpu作为输入。

例如,在处理单元mcu是微控制器单元的情况下,信号rready_cpu可以由嵌入微控制器单元mcu中的cpu处理单元提供,例如由cpu处理单元的直接存储器访问控制器(dmac)提供。由于cpu处理单元可能未准备好在某些时间处理数据,因此寄存器500可以作为脉冲生成器操作,该脉冲生成器生成“脉冲”(例如,变为高)以指示在cpu处理单元准备好进行处理的情况下数据节拍可用于处理。

因此,当处理单元mcu通过地址读取通道10发出假(或伪)数据访问请求并且触发信号rready_cpu时,可以触发信号rvalid(例如,再次设置为高)。

控制电路51可以提供第二输出信号“arvalid”以用作到存储器控制器mc的输入信号。信号arvalid指示对通过总线10发布的存储在外部存储器m中的数据单元的数据访问请求。

应当注意,为了便于说明,在图5中将存储器控制器mc绘制两次。实际上,图5中用参考mc标识的两个块指的是同一存储器控制器。

如图5所示,如果电路100'作为解密引擎操作(即,enc=0),则由控制电路51提供给存储器控制器mc的信号arvalid是由处理单元mcu提供的信号arvalid_cpu的副本,信号arvalid_cpu指示对由处理单元mcu通过总线10发布的存储在外部存储器m中的数据单元的数据访问请求。

因此,当处理单元mcu发出数据访问请求时,可以触发信号arvalid(例如,设置为高)。

如果电路100'作为加密引擎操作(即,enc=1),则控制电路51提供的信号arvalid可以设置为0。这允许发出如上所述的伪数据访问请求,其中由微控制器mcu发出的数据访问请求可以被通知给加密电路100'而不传播到存储器控制器mc。

例如,即使请求没有传播到存储器控制器mc,来自它的诸如arready信号等信号也可以保持不变,例如当存储器控制器空闲时等于'1',并且传播到mcu,以表明该请求已获取“智能”授权。

实际上,作为电路100'作为加密引擎操作的结果,针对异或处理模块208的输入数据从data_in存储器308中检索,而不需要存储器控制器mc的介入,如前所述。

注意,在一个或多个实施例中,处理单元mcu可以包括上述cpu处理单元、以及诸如外部存储器控制器接口mc等从设备和诸如闪存和/或ram存储器等内部存储器。在这种情况下,通信总线10、20也在处理单元mcu内部。

在一个或多个实施例中,处理单元mcu可以包括解密/加密引擎100'。

因此,一个或多个实施例可以提供通过使用(一位)控制信号enc和减少数目的逻辑门(诸如多路复用器和与门)以及存储器块(诸如寄存器)在解密工作模式与加密工作模式之间切换执行加密/解密过程(例如,aes计数器算法)的推测性触发的电路的功能的可能性。

因此,一个或多个实施例可以有利于提供可逆的加密引擎,而不涉及用于加密目的的专用引擎。

在一个或多个实施例中,用于实现加密和解密工作模式之间的切换的减少数目的逻辑门和寄存器可以使得对硅区域的影响很小。

在一个或多个实施例中,通过专用存储器308提供用于加密的明文数据可以有助于提高加密处理的安全性,因为不能在外部存储器上提供明文数据。

在一个或多个实施例中,可以利用单个密钥流(例如,128位密钥流)对多个数据单元(例如,32位数据单元)进行异或处理,例如通过使用不同的密钥流部分。因此,data_in存储器308的大小可以减小。

在一个或多个实施例中,一种方法可以包括:

提供用于存储经加密数据(例如,rdata_extmem)的存储器位置(例如,m),存储器位置具有相应地址并且经由通信总线(例如,10、20)可访问以读取存储在其中的数据,

通过通信总线(例如,10)接收(例如,32)对存储器位置的访问请求,其中访问请求可以包括从相应起始地址(例如,addr)开始访问存储器位置的相应组的突发请求,突发请求传送相应起始地址,

根据起始地址,基于密码密钥计算(例如,204)加密/解密密码掩码,

接收(例如,308)用于加密的明文数据(例如,plain_text)并且将密码掩码应用于(例如,208)明文数据以从中获取经加密数据,以及

将经加密数据包括到输出数据(例如,rdata_otfdec)中以便通过通信总线(例如,20)进行传输。

在一个或多个实施例中,一种方法可以包括在存储器位置中从相应起始地址开始存储通过通信总线传输的经加密数据。

一个或多个实施例可以包括:

将密码掩码应用于从相应起始地址开始经由通信总线从存储器位置检索的存储的经加密数据以从中获取经解密数据,以及

包括经解密数据到输出数据中以便通过通信总线进行传输。

一个或多个实施例可以包括:

从耦合到通信总线的处理单元(例如,mcu)接收访问请求,以及

经由通信总线向处理单元传输输出数据传输。

一个或多个实施例可以包括:

感测(例如,306)指示处理单元以安全模式操作的安全模式信号(例如,sec_mode),其中上述处理单元的安全资源是可用的,

根据安全模式信号值(例如,enc)应用密码掩码来加密明文数据或解密所存储的经加密数据。

一个或多个实施例可以包括从存储器(例如,308)中检索用于加密的明文数据,其中存储器是可访问的,因为安全模式信号的值指示处理单元以安全模式操作。

一个或多个实施例可以包括通过根据控制信号(例如,enc)选择性地将访问请求传播到存储器控制器,经由耦合到通信总线的存储器控制器(例如,mc)来使存储器位置可选择地可访问。

在一个或多个实施例中,可以由于接收到输入数据可用性信号(例如,rvalid)而应用密码掩码来加密明文数据或解密所存储的经加密数据,输入数据可用性信号(例如,502)由存储器控制器(例如,rvalid_extmem)和处理单元(例如,rvalid_dmy)中的一个根据控制信号来提供。

在一个或多个实施例中,通过通信总线接收的访问请求可以与相应的起始地址一起传送关于数据安全性、数据单元大小、突发请求类型和突发请求长度的补充信息,并且应用密码掩码可以包括:

存储(例如,206)一组经计算的密码掩码,

根据输入数据可用性信号和补充信息来计算(例如,62)用于可用于密码掩码的数据(例如,plain_text;rdata_extmem)的当前数据地址(例如,85),

向可用于应用密码掩码的数据应用根据当前数据地址从所存储的密码掩码中选择的密码掩码。

一个或多个实施例可以包括在当前数据地址中提供至少一个掩码改变控制位,以及作为至少一个掩码改变控制位的值的改变的结果,改变(例如,86)应用的密码掩码的至少一部分。

一个或多个实施例可以包括:

通过在其中提供适用于不同数据的多个掩码部分来计算(例如,72)密码掩码,

在当前数据地址中提供第一掩码改变控制位和第二掩码改变控制位,

作为第一掩码改变控制位的值的改变的结果,改变应用于数据的密码掩码,以及

作为第二掩码改变控制位的值的改变的结果,改变应用于数据的密码掩码的部分。

在一个或多个实施例中,通过通信总线接收的访问请求可以与相应的起始地址一起传送关于数据单元大小、突发请求类型和突发请求长度的补充信息,并且应用密码掩码可以包括:

根据输入数据单元可用性信号和补充信息,计算可用于应用密码掩码的数据的当前数据地址,以及

根据最后接收的访问请求的起始地址、为最后接收的访问请求计算的当前数据单元地址、以及突发类型中的至少一个来计算适用于未来的传入访问请求的一组候选密码掩码,以及存储该组候选密码掩码中的至少一个密码掩码。

一个或多个实施例可以包括经由处理流水线(例如,3、4、5、6、7)根据起始地址计算密码掩码。

一个或多个实施例可以包括检查(例如,32)处理流水线是否可用于处理传入访问请求,作为处理流水线不可用的结果,将传入访问请求存储(例如,38)在寄存器(例如,36)中。

在一个或多个实施例中,根据起始地址计算密码掩码,并且应用计算的密码掩码可以包括应用高级加密标准aes处理。

在一个或多个实施例中,一种被配置用于实现根据一个或多个实施例的方法的电路可以包括:

输入节点(例如,32),被配置为通过通信总线接收对存储器位置的访问请求,存储器位置经由通信总线可访问,其中访问请求可以包括从相应起始地址开始访问存储器位置的相应组的突发请求,突发请求传送相应起始地址,

输出节点,被配置为通过通信总线传输输出数据,以及

处理电路(例如,204、206、208),被配置用于:

i)根据起始地址基于密码密钥计算加密/解密密码掩码,

ii)接收用于加密的明文数据,

iii)根据安全模式信号的值,应用密码掩码来加密明文数据以从中获取经加密数据和/或解密存储在存储器位置中的经加密数据以从中获取经解密数据,以及

iv)将经加密数据和/或经解密数据包括在输出数据中以便通过通信总线进行传输。

在一个或多个实施例中,一种设备可以包括:

用于存储经加密数据的存储器位置,存储器位置(m)具有相应地址,

通信总线,被配置为将访问请求传送到存储器位置,其中访问请求可以包括从相应起始地址开始访问存储器位置的相应组的突发请求,该突发请求传送相应起始地址;

根据一个或多个实施例的电路,该电路具有:被配置为通过通信总线接收对存储器位置的访问请求的输入节点;以及被配置为通过通信总线传输输出数据的输出节点;该电路可以耦合到通信总线以从其接收突发请求并且向其传输输出数据。

在不影响基本原理的情况下,在不脱离保护范围的情况下,细节和实施例可以相对于仅作为示例描述的内容而变化,甚至是显著的。

可以组合上述各种实施例以提供其他实施例。根据以上详细描述,可以对实施例进行这些和其他改变。通常,在以下权利要求中,所使用的术语不应当被解释为将权利要求限制于说明书和权利要求中公开的特定实施例,而是应当被解释为包括所有可能的实施例以及这样的权利要求的等同物的全部范围。因此,权利要求不受本公开的限制。

尽管该领域有广泛的活动,但仍需要进一步改进的解决方案。

例如,期望解决方案可以利用改进的加密速度和减少对硅面积的影响来促进数据的加密。

一个或多个实施例可以提供适合于插入通信总线上以与微控制器和存储器控制器协作以访问外部存储器的硬件解决方案。

一个或多个实施例可以涉及深度流水线以并行地执行地址解码、生成和数据解密/加密,例如在高级加密标准(aes)掩码挖掘期间。

一个或多个实施例可以依赖于基于有限状态机(fsm)解决方案的解密/加密引擎执行aes掩码生成和突发字段提取的“推测”触发以便以改进的方式管理响应数据流。

因此,一个或多个实施例可以解决明文数据的快速加密问题以便存储在存储器中以供微控制器连续使用,其中区域影响减小和/或时延影响减小。

一个或多个实施例有助于提供优化的解密/加密引擎,以实现代码保护和来自外部存储器的快速代码执行。

一个或多个实施例可以提供在加密状态与解密状态之间可切换的“可逆”密码引擎,其中在加密状态下,密码引擎处理输入明文数据以生成输出经加密数据,在解密状态下,密码引擎处理输入经加密数据以生成输出明文数据。

因此,一个或多个实施例可以允许微控制器用户向第三方提供受保护的固件以供执行而无需公开内容。

例如,一个或多个实施例可以应用于越来越多地用于iot(物联网)领域的通用的高性能微控制器(mcu)。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1