随机数发生器设计(五)

news2024/9/25 9:40:33

随机数发生器设计(五)- 重播种、输出、自测试

  • 4 重播种函数
  • 5 输出函数
  • 6 自测试

4 重播种函数

重播种函数利用熵输入及额外输入更新种子,同时对内部状态进行更新。重播种操作函数如下:
函数定义:SM3_RNG_Reseed(working_state, entropy_input, additional_input)
输入:
——当前内部状态:V,C,reseed_counter和last_reseed_time的当前值。
——熵输入entropy_input:由熵输入源获取的比特串,长度为512比特
——额外输入additional_input:由上层应用传入,此输入为可选。
输出:
——新的内部状态:V,C,reseed_counter和last_reseed_time。
种子更新流程如下:
a)更新种子seed = SM3_df(0x01||entropy_input||V, seedlen);
b)更新内部状态变量。V = seed,C = SM3_df(0x00||V, seedlen),reseed_counter = 1,last_reseed_time=当前时间;
c)返回V,C,reseed_counter,last_reseed_time作为新的内部状态,即new_working_state。
内部状态为随机数发生器的内部临时存储。内部状态组成为{V, C, reseed_counter, last_reseed_time, reseed_counter_interval, reseed_time_interval},其中:
a) 比特串V,长度为55字节,每次随机数生成时会进行更新;
b) 比特串C,长度为55字节,每次种子更新时会进行更新;
c) reseed_counter,在初始化或种子更新之后,请求随机数的次数,每次执行随机数生成操作时会自动加1;
d) last_reseed_time,上次重播种的时间值,Unix 时间戳,单位为秒;
e) reseed_counter_interval,重播种计数器阈值,该值为常量值1024;
f) reseed_time_interval,重播种时间阈值,单位为秒,该值为常量值60s。
重播种函数1

5 输出函数

输出函数为外部应用提供API,生成请求长度的随机数。
函数定义:SM3_RNG_Generate(working_state, requested_number_of_bits, additional_input:bytes)
输入:
——当前内部状态: V,C,reseed_counter和last_reseed_time的当前值。
输出:
——状态status:Success或者需要执行种子更新的标识;
——返回的随机数returned_bits:每调用1次输出函数,返回的随机比特,长度为256比特;
——新的内部状态:V,C,reseed_counter和last_reseed_time的新值。
输出函数用来产生每次请求所需要的随机数据,该随机数据通过将随机数发生器的内部状态进行计算,并将计算结果经过密码运算而得到。随机数发生器输出一组随机数数据的长度为256比特。
输出函数的执行流程如下:
a) 如果需要重新更新种子,则执行种子更新操作;否则执行继续执行下述步骤;
b) 计算临时值temp = SM3(V);
c) 按需求的随机比特长度从左侧截取temp作为结果输出;
d) 计算H=SM3(0x03||V);
e) 更新V=(V+H+C+reseed_counter)mod 2seedlen;
h) reseed_counter自增1;
输出函数

6 自测试

随机数发生器的自测试包括自检测(运行时的自测试)和使用时自测试。
1)本章节主要描述自检测的方式。
2)使用时测试应符合GM/T 0062密码产品随机数检测要求。相关内容将在后面陆续展开。
DRNG自测试采用已知答案自测试。将固定值输入软件随机数发生器,确认软件随机数发生器输出与预期答案一致。在产品上电时,产品需执行上电自测试,DRNG的自测试发生在随机数上电自测试之前;当产品调用DRNG自测试接口时,产品也会执行DRNG自测试。
当DRNG自测试结果与预期不一致时,产品进入错误状态,此时内部存储的状态位置为自测试失败。处于错误状态的DRNG无法输出随机数。
在执行DRNG自测试时,内部存储的状态位置为自测试状态,此时无法输出随机数。自测试完成后,产品会清空当前随机数发生器的输出并重新执行初始化函数。
已知答案自测试的测试数据如下表所示。

数据项数据值
初始化函数输入熵数据000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30313233343536
输入的nonce数据012345670123456700000001331051e42be3c2139b4077728785ff2553d1d7ffc7c98377875581837ee6a99501bd28a12c491ea656e5666286fdabc56bb05d811596e9667b165367c7d2e4c8
预期输出比特长度256
预期输出随机比特b47e84d43fabbc089f00b60c5ea5a2cc5f79138b1c76fb4046bdc2ddf3d9e037

至此,软件随机数发生器的设计告一段落。后续将开始GM/T 0005 和0062随机数自测试相关内容介绍。
如果商用密码产品认证中遇到问题,欢迎加微信symmrz或13720098215沟通。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/657730.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数据库原理与实践】记忆型章节作业汇总

填空题部分: Chp 8 安全性与完整性 part 1: 数据库的安全性是指保护数据库以防止不合法的使用所造成的( 数据泄露、更改或破坏 )。计算机系统有三类安全性问题,即( 技术安全 )、管理安全和…

【gitflow】 概念基本介绍

gitflow 简介 什么是gitflow? 我们大家都很会用git,但是我们很少去关心我们要怎么用branch和版本控制。 只知道master是第一个主分支,其他分支都是次要分支, 那你知道如下的问题如何回答吗? 如何保证主分支的稳定…

vue3+ts封装axios 配置BASE_URL拦截器 单个接口的拦截 全局拦截器

1. config.ts 书写BASE_URL ( service/request/config.ts) BASE_URL书写的方式很多 1: 直接在axios.create里面写死 ,在打包或者测试的时候手动进行修改BASE_URL 2:新建一个文件 在文件里面判断当前的环境 进行赋值BASE_URL 3:定义.env文件 …

线程间同步

线程间资源竞争 int count 0;void * add(void *arg){int val,i;for(i 0;i< 5000;i ){val count;printf("%p: %d\n",pthread_self(),val);count val 1;}return nullptr; }int main(){pthread_t tida,tidb;pthread_create(&tida,NULL,add,NULL);pthread_c…

python爬虫进行AES解密遇到的问题

1、TypeError: Object type <class ‘str’> cannot be passed to C code 报错如下&#xff1a; File "C:\Python311\Lib\site-packages\Crypto\Util\_raw_api.py", line 143, in c_uint8_ptrraise TypeError("Object type %s cannot be passed to C cod…

【改进算法】混合鲸鱼WOA和BAT算法(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

0101B站学习视频发留言找小伙伴-实用小工具系列

文章目录 1 起因2 找方法3 bilibili_api4 实现5 知识点结语 1 起因 经常在B站看学习视频&#xff0c;但是一个人学习&#xff0c;偶尔在想&#xff0c;我学的怎么样&#xff1f;有没有用&#xff1f;有没有谁可以一起交流下&#xff1f;好在现在有互联网&#xff0c;可以极大的…

WiFi各协议理论速度

一、总览 二、11b到11g提升点 802.11g工作在2.4G频段下&#xff0c;能够支持OFDM和CCK两种调制方式&#xff0c;提供16-QAM、64-QAM、BPSK和QPSK四种编码方式&#xff0c;我们通常说的54Mbps速率就是在2.4G频段下&#xff0c;通过OFDM调制&#xff0c;采用64-QAM编码的情况下实…

表达式和语句

表达式 可以被求值的代码&#xff0c;并将其计算出一个结果 语句 一段可以执行的代码&#xff0c;是一个行为&#xff0c;例如分支语句和循环语句 三大流程控制语句 以前写的代码&#xff0c;写几句就从上往下执行 &#xff0c;---顺序结构 有时候要根据条件 选择执行代码…

Spring源码之PostProcessor解析

系列文章目录 文章目录 系列文章目录前言一、PostProcessor是什么二、PostProcessor的作用三、Spring框架中有哪些PostProcessor呢BeanPostProcessorBeanFactoryPostProcessorInstantiationAwareBeanPostProcessorDestructionAwareBeanPostProcessorMergedBeanDefinitionPostPr…

Pinia 和 Vuex ,理解这两个 Vue 状态管理模式

Pinia和Vuex一样都是是vue的全局状态管理器。其实Pinia就是Vuex5&#xff0c;只不过为了尊重原作者的贡献就沿用了这个看起来很甜的名字Pinia。 本文通过Vue3的形式对两者的不同实现方式进行对比&#xff0c;让你在以后工作中无论使用到Pinia还是Vuex的时候都能够游刃有余。 …

Linux下在日志中打印时间戳

1、背景介绍&#xff1a;在实验过程中需要记录任务运行情况&#xff0c;为此需要在日志中增加时间戳打印信息&#xff0c;方便事后查看。 2、实现方法 示例如下&#xff1a; #include <stdio.h> #include <time.h> #include<string.h>void print_debug_me…

如何在iPhone上用ChatGPT替换Siri

To use ChatGPT with Siri on an iPhone or iPad, get an OpenAI API key and download the ChatGPT Siri shortcut. Enter your API key in the shortcut setup and select the GPT model you want to use, then hit “Add Shortcut.” Trigger the shortcut manually first t…

FreeRTOS实时操作系统(二)系统文件代码学习

文章目录 前言系统配置任务创建任务创建删除实践 前言 接着学习正点原子的FreeRTOS教程&#xff0c;涉及到一些详细的系统内文件代码 系统配置 可以通过各种的宏定义来实现我们自己的RTOS配置&#xff08;在FreeRTOSconfig.h&#xff09; “INCLUDE”&#xff1a;配置API函数…

【Java】catch里面抛出了异常finally里面的事务会提交吗?

文章目录 背景目前的代码直接实战演示单元测试总结 背景 我们公司的系统中有一个业务场景&#xff0c;需要第三方的账户数据同步到我们系统。 同步账号的同时&#xff0c;会将所有同步数据和是否成功记录到一张同步日志表中&#xff0c;方便排查问题和记录。 好了&#xff0c;…

window11系统CUDA、cuDNN 安装以及环境变量配置

文章目录 一&#xff0c;说明二&#xff0c;cuda的下载以及安装1. 确定自己电脑设备哪个版本cudaa. 点击左下角b. 点击左下角c.接着点击 组件 2. cuda的下载3. cuda的安装1. 双击 点击 ok2. 同意即可3. 这个随意哪个都行4.选择安装位置 接着下一步 三&#xff0c;cuda环境变量设…

Oracle安装时先决条件检查失败和[INS-35180] 无法检查可用内存问题解决

Oracle安装时先决条件检查失败和[INS-35180] 无法检查可用内存问题解决 问题&#xff1a; [INS-13001] 此操作系统不支持 Oracle 数据库问题原因解决方案 问题2&#xff1a;[INS-35180] 无法检查可用内存问题原因解决方案 问题&#xff1a; [INS-13001] 此操作系统不支持 Oracl…

Python面向对象编程-构建游戏和GUI 手把手项目教学(1.1)

总项目目标&#xff1a;设计一个简单的纸牌游戏程序&#xff0c;称为"Higher or Lower"&#xff08;高还是低&#xff09;。游戏中&#xff0c;玩家需要猜测接下来的一张牌是比当前牌高还是低。根据猜测的准确性&#xff0c;玩家可以得到或失去相应的积分。 项目1.1…

循环码的编码、译码与循环冗余校验

本专栏包含信息论与编码的核心知识&#xff0c;按知识点组织&#xff0c;可作为教学或学习的参考。markdown版本已归档至【Github仓库&#xff1a;https://github.com/timerring/information-theory 】或者公众号【AIShareLab】回复 信息论 获取。 文章目录 循环码的编码循环码…

实现 strStr

在一个串中查找是否出现过另一个串&#xff0c;这是KMP的看家本领。 28. 实现 strStr() 力扣题目链接 实现 strStr() 函数。 给定一个 haystack 字符串和一个 needle 字符串&#xff0c;在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在&…