参考
对于相关的文档和软件,请访问:
https://www.dialog-seminile.com/produ雷电竞官网登录cts/greenpak.
下载我们的免费GreenPak Designer软件[1]打开.gp文件[2]并使用GreenPak开发工具[3]在几分钟内将设计冻结到您自己的定制IC中。
雷竞技电竞平台对话框半导体提供了一个完整的应用程序库注意[4],其中包含了设计示例以及对话框IC中的功能和块的说明。
- GreenPak Designer软件,软件下载和用户指南,对话框半导体雷竞技电竞平台
- AN-1200真随机数发生器硬件.gp,绿派克设计文件,Dialog半导体雷竞技电竞平台
- GreenPak开发工具,GreenPak开发工具网页,对话半导体雷竞技电竞平台
- GreenPak应用笔记,GreenPak应用笔记网页,对话框半导体雷竞技电竞平台
- SLG46620数据表,对话框半导体雷竞技电竞平台
- D. Gilson,“BlockChain.Info在比特币盗窃受害者退款,2013年8月21日。[在线]。可用的:http://www.coindesk.com/blockchain-info-issues-refunds-to-bitcoin-theft-victims/.[访问:Jun。2017年6月30日]。
- B. Sunar, W. J. Martin, D. R. Stinson, "一个可证明安全的、内置对主动攻击容错的真实随机数生成器",IEEE Trans。计算机。,第56卷,第1期,2007年1月。
- P. Alfke,“高效移位寄存器,LFSR计数器和长伪随机序列发生器,”Xilinx应用笔记,XAPP 052,JUL。7,1996。
- K. Wold和C. H. TAN,“基于振荡器环的FPGA中随机数发生器的分析和增强”,可重构计算国际杂志,卷。2009年,第501672号,2009年。
- A. Rukhin,J.Soto,J. Nechvatal,M. Smid,E.Barker,S. Leigh,M.Levenson,M.Vancel,D. Banks,A. Heckert,J. Dray和S. Vo,“随机和伪随机的统计测试套件
- 加密应用程序的数量生成器,“NIST特刊800-22,修订版1A,201雷竞技安卓下载0年4月。
- A. T. Markettos和S. W. Moore,《基于环形振荡器的真随机数生成器的频率注入攻击》,刊于《基于环形振荡器的真随机数生成器的频率注入攻击》过程。第11届国际研讨会密码硬件和嵌入式系统。,洛桑,瑞士,2009,pp。317-331。
- “解读NIST(P)NRG套件的结果,2017年1月9日。[在线]。可用的:https://crypto.stackexchange.com/questions/19861/Interpretation-of-the-results-of-nist-pnrg-suite。[访问日期:2017年7月16日]。
- 《统计检验指南》2014年7月16日。(在线)。可用的:http://csrc.nist.gov/groups/st/toolkit/rng/stats_tests.html..[访问日期:2017年7月17日]。
摘要
在密钥生成和签名等加密应用程序中,雷竞技安卓下载需要使用随机数。硬件或固件可以使用许多方法来生成伪随机数。然而,伪随机数生成器是确定性的:如果生成器的内部状态是已知的,那么生成器的输出是完全可预测的。这使得伪随机数生成器不适用于加密应用程序。雷竞技安卓下载这些应用程序雷竞技安卓下载需要一个真正的随机数生成器(TRNG)。
TRNG使用不可预测的物理现象生成随机数。TRNG的一个例子是放大来自电阻器的热噪声,然后使用模数转换器将该噪声转换为数字。由于需要较大的增益,这样的系统通常需要大量的分立元件。由于热噪声是混沌微观效应的结果,该发生器将产生不可预测的数字。这种不可预测性被称为熵。熵可以用位来衡量,例如,一次公平的掷硬币会产生1位熵,因为有两种同样可能的结果。独立的熵源相加,所以投掷8枚独立、公平的硬币将产生8比特的熵。一枚总是落在人头上的有偏硬币将产生0比特的熵,因为一枚完全有偏的硬币是完全可预测的。
一个好的trng将能够快速生成足够的熵,因此无法释放加密密钥或秘密。一个坏随机数发生器可以危及加密系统。例如,故障随机数发生器是加密电机比特币的几个盗痕的原因[6]。
熵源
本应用笔记中描述的真正随机数生成器使用自由运行的环形振荡器。使用奇数的逆变器构造出这些环振荡器。振荡器在没有锁定到其他时钟的意义上是自由运行的,并且将累积抖动 - 请参见图1,用于从单个振荡器的抖动频域表示。该抖动是许多不可预测的效果的结果,包括热噪声,因此由环形振荡器构造的发电机被称为真正随机数发生器。
该环振荡器以约19 MHz的标称频率振荡,并且输出已经在48 kbit / s以数字上进行了数字。因为振荡器的频率远远高于奈奎斯特频率,所以振荡器信号已被混溶到〜7.5kHz。该环形振荡器中的抖动是可见的,因为峰值不是无限的薄,因此是理想的无抖动振荡器的情况。相反,峰值具有约2 kHz的3 dB带宽。
为了增加可用的熵量,并使设计更强大,应使用许多环形振荡器。因为振荡器是独立的,所以它们将随机漂移在彼此的阶段。可以通过定期采取它们的所有输出的XOR来对振荡器进行采样,这代表振荡器的相对相位。这不是对样本振荡器最有效的方式,因为在振荡器彼此漂移之前需要多种振荡。但是,这是一种简单的方法,不需要使用许多环形振荡器 - 更高吞吐量设计可能需要100多个振荡器[7]。
美白
完美熵源生成的比特流具有白色功率谱(在所有频率中功率相等;频谱平坦)且统计上无偏(几乎相等的1和0)。真正的熵源是不完美的——它们生成的比特流在某种程度上统计性能较差。例如,电路中的噪声通常具有非白色的功率谱。实际上,图1显示了本应用说明中使用的环形振荡器具有非平坦的噪声功率谱。电路中的不对称(例如,由于上升和下降传播延迟的差异)可能导致输出偏置。统计上不完美的熵源仍然有用,但它们需要后处理。这种后处理被称为增白。
为了说明美白的必要性,假设有人希望从一系列抛硬币中提取熵。他们使用的是一套假设的16枚硬币,其中8枚是公平的,8枚是完全有偏见的,并且总是落在头上。为了类比,这个假想的人也无法区分公平的硬币和有偏见的硬币。翻转所有16枚硬币将导致部分可预测的结果,因为保证至少有8枚硬币出现。然而,总的熵应该是8位。可以使用增白器获取16次抛硬币的结果,并处理这些结果以获得8个随机位。
该LFSR将产生以下输出:111100010011010111100010011010111100010011010111100010011011111010110
检查此伪随机比特流显示它每15位重复它。
本应用笔记中使用的白元是线性反馈移位寄存器(LFSR)。LFSR易于在硬件中构造,并且由移位寄存器组成,其中一些寄存器内容一起XORADE,并反馈到移位寄存器的输入中 - 有关此示例,请参见图2。在其自己的情况下,LFSR的输出将是重复伪随机的位序列。仔细选择寄存到XOR的寄存器的内容意味着该伪随机序列的循环长度将是最大循环长度。n位移寄存器的最大可能循环长度为2n - 1.在[8]中给出了合适的XOR选择表。一个大的最大LFSR将产生一个非偏见和白色的比特流。
LFSR将产生具有良好统计属性的比特流,但自己,它仍然只有伪随机。对于此应用说,LFSR的反馈也具有环形振荡器的原始输出。LFSR的内部状态现在将受环形振荡器的影响,将LFSR从伪随机数发生器转换为真正随机数发生器。即使使用这种修改,也是大型最大LFSR的整体反馈结构,确保其输出仍然是无偏见和白色的。因此,通过这种方式使用的LFSR,满足了白甜点的功能。
与GreenPak设计师实现:环形振荡器
在SLG46620V中有足够的lut用于6个环形振荡器。它们的实现如图3所示。每个环形振荡器从一个与非门开始,而不是简单的逆变器。连接到每个非和门的是一个全局使能信号(矩阵0的净EN0,矩阵1的净EN1)。当这个使能信号是低的,所有非和门将输出高,不管其他输入的状态。这将导致环形振荡器停止振荡,并进入一个静态的,明确的状态。当此使能信号高时,与非门有效地作为另一个逆变器。
所有环形振荡器均由3个逆变器构成,其中一个环形振荡器除外,该环形振荡器具有额外的缓冲器。所有环由2位LUT、3位LUT、4位LUT和INV0/INV1块的独特组合构成。这是一个关键的设计选择。实验表明,如果任何两个环由相同类型的块构成,它们的振荡频率将非常相似。频率非常相似,振荡器之间的少量串扰(可能是开关噪声的结果)最终会导致振荡器锁相在一起。这种现象(通常称为注入锁定)将导致熵产生的灾难性失效,因为振荡器将始终彼此精确同相。2位LUT、3位LUT、4位LUT和INV0/INV1块都具有不同的传播延迟,因此使用这些类型块的独特组合可确保振荡器频率不同。
每个环形振荡器的输出锁存在RAW_CLK信号的上升沿。这请遵循[9]的建议,其中观察到未能锁存振荡器输出,导致设置并保持对XOR门的输入上的违规。这种方法还有助于降低开关噪声,从而最大限度地减少振荡器之间的有害串扰量。
每个环形振荡器都有如图1所示的频谱,噪声带宽约为2khz。熵率可以用哈特利定律计算:
其中C是比特率,B是带宽,M是可区分的状态数。使用B = 2 kHz, M = 2(因为环形振荡器的输出是0或1)会得到4kbit /s的比特率。因此,每个环形振荡器贡献4kbit /s的熵。
最后,所有振荡器的锁存输出被xor在一起,以测量它们的相对相位。这个异或输出被锁存在RAW_CLK信号的上升沿上,以确保输出信号中没有虚假的转换。这将导致RAW_OUT信号。RAW_OUT从引脚19发送给用户。RAW_OUT引脚19的选择完全是任意的;系统设计人员可以自由地重新分配引脚,使PCB布线更容易。
使用GreenPAK designer实现:LFSR
实现了35位LFSR,因为存在一个结构非常简单的最大35位LFSR:反馈由寄存器33和35的异或组成(参见[8]中表3的n=35项)。LFSR使用SLG46620V中的两个管道延迟块,其中每个管道延迟块由16个串行D触发器组成。管道延迟0提供移位寄存器的前16位,管道延迟1提供下16位,D触发器7、8和9形成移位寄存器的最后三位。由此产生的35位LFSR具有235–1的周期周期,与LFSR时钟速率相比非常长。
图4中所示的反馈元件使用NXOR而不是XOR。这不会改变LFSR的结构或循环周期。但是,它确保当移位寄存器初始化为全0S状态时,确保LFSR在换档寄存器初始化时不会进入锁定状态(其中循环周期= 1),这是电源期间的情况。
LFSR由全局LFSR_CLK信号(矩阵0的净LFSR_CLK0,矩阵1的净LFSR_CLK1)时钟/移位。LFSR (LFSR_OUT)的输出不直接暴露给用户。相反,LFSR的输出锁存在WHITE_CLK信号的上升沿上。注意,WHITE_CLK的运行速度比LFSR_CLK慢——这是为了允许丢弃LFSR_OUT的一些位。这个锁存输出作为WHITENED_OUT信号发送到引脚5。和RAW_OUT一样,引脚5的选择是完全任意的。
用GreenPAK designer实现:时钟
TRNG的主时钟源是一个振铃器由LUT构造,在图5的底部图像中可见。虽然SLG46620V确实具有许多内置的时钟,但没有使用其中。其原因是改善拒绝共模干扰,例如电源噪声,温度变化和电源电压变化。通过以与熵源相同的方式构造主时钟,这些共模干扰源应该以相同的方式影响主时钟和熵源,部分地消除干扰的效果。
主时钟被馈送到矩阵1的EXT中。CLK2,其中CNT7和CNT8被设置为计数器以将主时钟划分为306,以实现约80kHz的标称(在VDD = 3.3 V)RAW_CLK。CNT7和CNT8在该特定级联中设置(CNT7具有计数器数据= 152,CNT8具有计数器数据= 1),以确保RAW_CLK具有50%的占空比。RAW_CLK用作环形振荡器的采样时钟,因此RAW_OUT将具有80 kbit / s的标称比特率。RAW_CLK也输出到引脚20(此引脚分配是任意的),以便用户可以在正确时间示例RAW_OUT。
LFSR_CLK与RAW_CLK具有相同的频率-唯一的区别是LFSR_CLK可以通过断言ENABLE_WHITENED low来抑制。LFSR_CLK用于对LFSR中的移位寄存器进行时钟。在矩阵0中,将LFSR_CLK送入EXT. CLK1, CNT5和CNT6可以从中推导出WHITE_CLK。CNT5和CNT6被设置为计数器,都具有计数器数据= 1,因此它们将LFSR_CLK除以4。分割时钟,WHITE_CLK,被用来抽取LFSR输出。WHITE_CLK被发送到引脚3(此引脚分配是任意的),以便用户可以在正确的时间采样WHITENED_OUT。WHITE_CLK的标称频率为20 kHz;WHITENED_OUT的比特率为20kbit /s。
最终选择20kbit /s的比特率是因为测试显示每个环形振荡器可以提供大约4kbit /s的熵。由于熵源由6个环形振子组成(如图3所示),并且假设熵源相加,那么RAW_OUT的总熵约为24 kbit/s。由于环形振荡器和LFSR的缺陷,这一速率降至20kbit /s。
注意,虽然RAW_OUT的名义比特率为80kbit /s,但RAW_OUT的预期熵率仅为20kbit /s。这是因为RAW_OUT在统计上有缺陷,这使得它的比特流部分可预测。另一方面,WHITENED_OUT是完全不可预测的,因此它的名义比特率(20kbit /s)等于它的预期熵率。
DLY2的输出保持CNT5复位;DISABLE_WHITENED信号停止WHITE_CLK。DLY2的设置使得DISABLE_WHITENED信号的下降沿延迟400个LFSR_CLK计数。这样做的效果是,使能白化输出后,LFSR的前400位将被丢弃。有必要丢弃LFSR输出的前400位,以便新的熵可以混合到LFSR的内部状态中。
用GreenPAK设计器实现:启用逻辑
其余的配置用于启用逻辑。启用逻辑允许用户通过禁用部分TRNG来节省电力。ENABLE_ALL信号连接到引脚17(该引脚分配是任意的)。如果用户断言引脚17低,那么所有环振荡器将停止振荡。这将导致整个TRNG进入静态状态。
Enable_All信号也被POR块的输出和输出。这是必要的,因为除非它们从明确的状态开始,否则环形振荡器不会开始振荡。POR时钟被配置为在上电后输出高4μs。这使得环形振荡器4μs沉降到定义良好的禁用状态(参见“与GreenPak Designer:环形振荡器”部分“),确保环形振荡器在上电后可靠地启动振荡。
ENABLE_WHITENED信号连接到引脚15(该引脚分配是任意的)。如果用户断言引脚15低,那么LFSR_CLK将被禁用,整个LFSR部分将进入低功耗的静态状态。一个相关的信号DISABLE_WHITENED被用来抑制白化输出的前100位(即LFSR输出的前400位),以便在输出任何东西之前,新鲜的熵被混合到LFSR内部状态。由于这个原因,当LFSR或熵源(重新)启动时,DISABLE_WHITENED将被断言为高。
检测结果
本应用说明中描述的TRNG是在SLG46620V中实现的,并从RAW_OUT和WHITENED_OUT引脚中取样。这是使用LPC11U24微控制器完成的,该微控制器被设置为在RAW_CLK/WHITENED_CLK的下降边缘取样RAW_OUT/WHITENED_OUT。这些样本通过UART-to-USB转换器发送到PC,然后将样本记录到一个文件中,以便稍后进行分析。
在原始输出上执行的FFT的结果如图7所示。虽然光谱大致扁平,但在2.5dB之内,显然存在峰和槽的结构。这种结构与完美熵源(平面频谱)的预期结果不一致。
对白化后的输出执行FFT的结果如图8所示。该光谱是平坦的,(统计)方差观测到在0.4 dB以内。
可以使用NIST开发的一套统计测试来完成进一步的统计测试,详细描述[10]。有关每个测试检查的内容简要说明,请参阅[13]。NIST测试专门适用于测试随机比特流。例如,“频率”测试检查了那些的比例和零是否相同。“频率”测试检查比特流是非偏见的。要测试TRNG,收集了大约80,000,000位的RAW_OUT和WHITEND_OUT,并记录在文件中。这些文件分为每个800,000位的100位流,然后使用[10]中描述的评估工具分析。附录A包含原始输出的最终结果(“FinalAnalysiseReport.txt”),附录B包含白化输出的最终结果。
在[12]中给出了解释NIST测试结果的可访问介绍。NIST测试结果包含大量列,但重要的是“p值”和“比例”列。“p值”柱中的值应均匀地分布在0和1.接近0(例如0.0000)或1(例如0.999999)的值表示故障。“比例”列描述了100个比特流中有多少通过统计测试。统计上,预计一些比特流将失败。最小通过率在每个附录的底部描述。“p值”或“比例”列中的星号表示故障。
从NIST测试结果得出的一般结论是,原始输出无法通过大多数统计测试。这种失败是意料之中的——原始输出是一个不完美的熵源。另一方面,白化后的输出通过了所有的统计检验。这表明白化后的输出可以用作几乎完全随机位的源。
如何使用trng
在本申请中实现的TRNG仅需要SLG46620V来生成随机比特流;除了用于SLG46620V的去耦电容之外,它不需要任何外部组件。可以通过连接RAW_CLK(PIN 20)来对原始输出进行采样
RAW_OUT(PIN 19)到微控制器 - 有关这些信号看起来的示例,请参见图9。
如果单片机SPI在奴隶模式支持,那么RAW_CLK可以连接到SCLK和RAW_OUT可以连接到莫西人,CPOL设置为0和CPHA设置为1 (SPI模式1)。另外,单片机可以设置中断的下降沿RAW_CLK,抽样RAW_OUT中断处理程序。
白化后的输出也可以使用WHITENED_CLK(引脚3)和WHITENED_OUT(引脚5)信号进行类似的采样——图9给出了这些信号的示例。对于大多数应用程序来说,白化输出是最合适的输出。雷竞技安卓下载
RAW_OUT在RAW_CLK的上升沿转换;Whitened_out在Whitened_Clk的上升沿转换。RAW_OUT和WHITEND_OUT都应在各个时钟的下降沿上进行采样。在该示例中,RAW_OUT被描绘为输出比特流1001001111101010011,并且将返回位于输出比特流01101的命中。RAW_CLK以80kHz的标称速率运行。Whitened_clock在raw_clk的四分之一,标称速率为20 kHz。
白化输出可以通过断言ENABLE_WHITENED(引脚15)低来禁用。整个TRNG可以通过断言ENABLE_ALL(引脚17)low来禁用。两个使能引脚都是上拉的,所以如果它们都不连接,TRNG的所有部分都是使能的。
表1中给出了信号概要。
姓名
|
销
|
类型
|
描述
|
Raw_out. |
19. |
数字推挽输出 |
TRNG的原始输出 - 所有环形振荡器的XOR的锁存输出,代表其相对相位。 |
Raw_Clk. |
20. |
数字推挽输出 |
RAW_OUT采样时钟。以标称80 kHz运行。RAW_OUT在此时钟的上升沿转换。 |
whitened_out. |
5. |
数字推挽输出 |
通过LFSR美白后TRNG的输出。 |
whitened_clk. |
3. |
数字推挽输出 |
用于白白的抽样时钟。在标称20 kHz处运行。Whitened_out在此时钟的上升沿转换。 |
全部启用 |
17. |
具有上拉功能的数字输入 |
当低时,停止TRNG内的所有时钟,使其成为低功耗静态状态;RAW_CLK和WHITEND_CLK将停止滴答。 |
ENABLE_WHITENED |
15. |
具有上拉功能的数字输入 |
当低时,停止LFSR时钟,导致白化输出停止;WHITENED_CLK将停止滴答。 |
安全考虑
高安全性应用程序应验证熵源是雷竞技安卓下载否正常工作。为此,他们不得测试白化输出;即使经过统计测试,美白的输出不应该是真正随机的。这是因为本应用笔记中使用的最大35位LFSR是一个很好的伪随机数发生器,并且即使熵源完全破坏,也会产生将通过大多数统计测试的结果。相反,应用程序应尝雷竞技安卓下载试通过在原始输出上运行统计测试来试图检测失败。例如,应用可以测试异常的0雷竞技安卓下载s或1s串,或者如果原始输出频谱比图7更少,则使用FFT进行测试。
为简单起见,白化后的输出可以直接用于加密操作。雷竞技安卓下载要求更高安全性的应用程序应该使用白化的输出来播种一个加密安全的伪随机数生成器(cspring),当新的白化输出比特可用时,不断地重新播种cspring。这种方法有以下优点:
- CSPRNG可用于产生按需比特的高吞吐量;应用程序将不限于此TRNG产生的20 kbit/s。
- 重新定义操作允许熵累积在CSPRNG的内部状态中。即使在TRNG的熵源部分失败的情况下,这使CSPRNG将变得越来越不可预测(并因此安全)。
- 其他熵源(例如,来自无线电接收器的数据)可用于重新传输CSPRNG。这将使加密系统对熵源的失败更加强大。
使用SLG46620V作为TRNG的加密系统是脆弱的侵袭攻击的脆弱。具有对系统的物理访问的攻击者可以简单地删除SLG46620V,将其与产生完全可预测的比特流的设备替换。这可以通过使物理访问困难或试图检测物理访问来对抗。
众所周知,基于环形振荡器的trng很容易受到注入其电源[11]的信号的影响。这可以通过对电源进行滤波来抵消。对这个应用程序说明的一个可能的扩展是使用ACMP和VREF块来检测这种注入攻击。
精简的设计
本应用笔记中描述的TRNG设计可以在较小的GreenPak中实现,以降低成本和板空间要求。熵源中使用的环形振荡器的数量可以减少到至少两个。由于使用了较少的振荡器,因此将设计的吞吐量降低至第三:大约6.6 kbit / s。
D触发器要求可以通过使用较小的LFSR来减少Whitener。最小LFSR尺寸取决于环形振荡器的数量,以及振荡器采样时钟速率。通过使用连续较小的LFSR长度,可以通过使用较小的LFSR长度来实验确定最小LFSR尺寸,直到白炽的输出开始失败NIST统计测试。
通常,在包含微控制器的系统中使用TRNG。因此,最小的GreenPak设计可以完全省略漂白剂,依赖于微控制器进行美白。微控制器中的固件可以轻松实现一个非常大的LFSR,或者它可以使用加密散列函数来实现更强大的白痴。
结论
GreenPak可用于实现紧凑的真正随机数发生器,该发生器不需要外部组件(除耦电容除外),并以20 kbit / s的速率产生真正的随机数。TRNG具有简单的界面,具有节电功能,使其适用于需要熵源进行加密操作的移动性空间受限的设备。
有关测试方法和结果的解释,请参阅“测试结果”部分。
有关测试方法和结果的解释,请参阅“测试结果”部分。