密码学基础-为什么使用真随机数(True Random Number Generators)

密码学基础-为什么使用真随机数(True Random Number Generators)

概述

随机的意义很重要,就像你的银行密码如果是亲朋好友的生日,结婚纪念日(可预测的),那么就容易被人测试出来;而如果是与上述信息毫无关系的随机数,那么破解的难度就增大了。
加密、签名算法中经常添加随机数,以增强算法的安全性。
在这里插入图片描述

随机数生成器是保证保证生成的随机数足够“随机”(不可预测)的一种安全组件。对这种随机性的具体描述可以表达为:

  1. 前向保密保证了对设备过去输出和内部状态的了解不应使攻击者能够预测未来的数据;
  2. 向后保密保护“相反的方向”:对未来输出和内部状态的了解不应泄露先前的数据。

按照原理,将随机数生成器分为:

  • 伪随机数生成器(Pseudo Random Number Generators,PRNG)

也称为 确定性随机数。软件生成的随机数只是伪随机数。它们不是真正的随机的,因为计算机使用基于分布的算法,并且不安全,因为它们依赖于确定性的、可预测的算法。
即只要对算法输入相同、相似的数据,就可以大致猜测出该算法生成的随机数的范围。
Python 和 Excel 等日常工具中的伪随机数生成基于 Mersenne Twister 算法。但是,它们不适用于安全加密的方案。

  • 真随机数生成器(True Random Number Generators,TRNG)

TRNG是基于不可预测的物理现象(称为熵源,随机性越高,熵源值越大)的功能或设备,旨在生成非确定性数据(例如,一系列数字)。真随机数必须是不可预测的、统计上独立的(与任何先前生成的随机数无关、并且与之后生成的随机数也无关)、均匀分布(生成任何数字的概率相等)和受保护的。
对于真正的随机数,计算机必须使用一些不可预测的外部物理变量来生成,例如同位素的放射性衰变或电波静电,而不是通过软件算法。一些亚原子粒子具有完全随机的行为,使它们成为生成真随机数的一种方案。

两种随机数生成机制应用场景

真随机性和伪随机性根据其特征都有自己的实际应用。

真随机性的实际应用

1.密码学:

  • 密钥生成: 真随机数对于生成加密密钥、会话令牌和其他安全参数至关重要,以确保它们的不可预测性和安全性。在加密协议中使用真随机值来防止重放攻击、侧信道攻击并确保加密操作的唯一性。各种算法(对称、非对称加密、MAC、身份验证签名)和协议(SSL/TLH、SSH、WIFI、LTE、IPsec 等)生成密钥时建议使用真随机数。

2. 赌博和彩票:

  • 彩票抽奖: 通过使用真正的随机数来选择获胜者来确保公平竞争。

3. 科研:

  • 随机抽样: 真正的随机抽样在实验设计和统计研究中是必不可少的,以消除偏差并确保结果的有效性。

伪随机数的实际应用

1. 计算机模拟与建模:

  • 游戏开发: 伪随机数用于在游戏中生成各种元素(例如,地形、敌人行为),这些元素看起来是随机的,但可以复制以进行调试。

  • 模拟: 科学和工程仿真通常使用伪随机数来模拟复杂的系统和过程。

2. 算法和数据结构:

  • 哈希算法: 伪随机数用于在哈希表之间均匀分布数据。

  • 随机算法: 依靠随机性(例如,快速排序、随机选择)来提高平均性能的算法。

3. 程序内容生成:

  • 赌博: 生成广阔而多样的游戏世界(例如,Minecraft),这些世界是伪随机创建的,每次都提供不同的体验,同时允许可重复性。

4. 网络安全:

  • 代币生成: 会话令牌和非关键加密操作,其中完美的不可预测性不是必需的。

  • 验证码系统: 生成伪随机但足够不可预测的挑战,以阻止自动化机器人。

5. 机器学习:

  • 数据洗牌: 以伪随机方式随机洗牌数据,以确保训练集和测试集正确随机化。

  • 参数初始化: 使用伪随机数初始化神经网络中的权重和偏差,以确保训练期间的收敛性。

主要区别

  • 真随机数源自物理过程(例如放射性衰变、大气噪声),本质上是不可预测的。它的实现成本通常较高,消耗的时间更多,并且会随着物理器件的使用寿命增加而存在损坏风险。
  • 伪随机数由算法(例如,线性同余生成器)生成,是确定性的,但设计为随机的。它的实现成本通常较低,执行较快。

在不可预测性和安全性至关重要的场景中,真正的随机性是必不可少的,而在可重复性和效率很重要的应用中,伪随机性是首选。
对于大多数应用来说,伪随机数就足够了。例如,如果你想对一大组数据进行随机抽样,你需要将数字输入程序,以便样本或多或少均匀分布。在这种情况下,使用伪随机数是完全可以接受的,因为在随机性程度上真随机数没有数量优势。大部分情况下,可以使用伪 RNG 来满足你所有的随机数需求,直到你遇到真正需要真正随机的东西的情况,请从他们的区别出发,再评估下你的需求。

真正的随机性很难实现

真正的随机性很难实现(一个真正的随机生成器当然是可能的)。正确构造的TRNG需要从某种形式的随机过程(如晶体管中流动的电流产生的噪声或放射性衰变事件之间的时间)中收集熵,然后调节熵信号以消除偏置并白化产生的输出序列的频谱。此外,还必须根据工作温度、老化、对电子噪声和扰动的敏感性、电压变化和工作频率范围等因素来控制此过程。如果不控制这些因素,TRNG电路可能会被试图影响其运行的外部人员修改。
真随机数发生器基本上由三个主要组件组成:基于物理不可控现象的噪声发生器、随机性提取器(用于确保生成的位均匀分布)和随机性测试电池。下图是 STM32 上的真随机数生成器的结构,它基于电噪声来实现:
在这里插入图片描述

普通笔记本电脑等个人计算机可用的随机性来源包括:

  • 周围的光线和场景
  • 周围的声音或噪音
  • 网络的 TCP 信息
  • 特定网络的 RTT,取决于网络的拥塞情况
  • 系统时间
  • 内核或多核调度延迟

一些标准

弱随机数或可预测的随机数可能会破坏加密密钥、拦截数据以及提供入侵设备的通道。真正的随机性对于密钥生成、芯片制造、加密算法的初始值、挑战和侧信道对抗解决方案至关重要。
一些标准和认证协会正在推动TRNG的规范和验证方法,以定义真正的随机数解决方案的认证指南。
美国国家标准与技术研究院 (NIST) 机构开发了一套 NIST SP 800-90A/B/C 标准。德国标准机构 (BSI) 长期以来一直有一套单独的 RNG 标准 (AIS 20/31)。
在这里插入图片描述
• GM/T 0005-2012 和 GM/T 0062-2018 是中国标准,描述了 TRNG 和随机位序列的性能要求
• OSCCA是针对中国市场的认证计划。它需要基于其更高级别的不同原理的多个不同的熵源。
不同的标准描述了TRNG的要求,并适用到不同的地理区域。

总结

  • 随机数生成器是保证保证生成的随机数足够“随机”(不可预测)的一种安全组件
  • 真随机数生成器(True Random Number Generators,TRNG)生成不可预测的、统计上独立的(与任何先前生成的随机数无关、并且与之后生成的随机数也无关)、均匀分布(生成任何数字的概率相等)和受保护的随机数据。
  • 真随机数与为随机数在生成原理、实现成本、执行速率上存在差别。可以 TRNG/PRNG 组合一起使用,从而使随机数生成更加有效。
  • 真正的随机数很难生成,并且需要一定的硬件成本。
  • 真随机数目前有NIST、AIS、GM/T 的一些标准。
    (感谢收藏和点赞)

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从零开始学习性能测试

学习目标 理解性能测试定义、目的理解常见性能测试策略理解性能指标理解性能测试方法学习性能测试工具 什么是性能测试 测试中的非功能测试其实范围比较广,性能、稳定性、安全性等都可以放进这个范畴。非功能测试,一般比功能测试门槛高些,多数…

深入理解计算机系统 CSAPP lab:bomb

实验资源下载地址:csapp.cs.cmu.edu/3e/labs.html 请先查看writeup 解压后 当我们运行bomb时,发现该程序要求我们输入行,如果输入错误,程序就会返回BOOM!!!提示我们失败了. 所以我们的目标是输入正确的行.以解开bomb程序. 实验前先详细阅读bomb.c //bomb.c /*****…

计算机系统基础(一)

开始复习了软考软件设计师还有考研复习了,这个重合部分比较大,开始学习打卡,基础最重要,直接看书又多又杂,重点理不出来,学习记录。 计算机系统基础 冯诺依曼体系结构奠定了计算机的基础结构。五个部分组成…

认识Modbus RTU与Modbus TCP

(选自成都纵横智控-Modbus RTU与Modbus TCP协议区别详解 ) Modbus RTU 和 Modbus TCP 是两种常用的工业通信协议,用于连接电子设备,但它们在多方面有所不同。以下是它们的详细比较: Modbus RTU 协议类型: …

Flink 实时数仓(九)【DWS 层搭建(三)交易域汇总表创建】

前言 今天立秋,任务是完成 DWS 剩余的表,不知道今天能不能做完,欲速则不达,学不完就明天继续,尽量搞懂每一个需求; 1、交易域下单各窗口汇总表 任务:从 Kafka 订单明细主题读取数据&#xff0…

SpringBoot中使用过滤器filter

过滤器Filter 在 Java 中,Filter(过滤器)是一种用于对请求进行预处理和后处理的机制。 工作原理: 当一个请求到达服务器时,会先经过一系列配置好的过滤器。过滤器可以检查请求的参数、头信息、请求体等内容&#xf…

【ARM】v8架构programmer guide(3)_ARMv8的寄存器

目录 4.ARMv8 registers 4.1 AArch64 特殊寄存器 4.1.1 Zero register 4.1.2 Stack pointer (SP) 4.1.3 Program Counter (PC) 4.1.4 Exception Link Register(ELR) 4.1.5 Saved Process Status Register (SPSR) 4.2 Proc…

PythonStudio 控件使用常用方式(十三)TScrollBox

PythonStudio是一个极强的开发Python的IDE工具,它使用的是Delphi的控件,常用的内容是与Delphi一致的。但是相关文档并一定完整。现在我试试能否逐步把它的控件常用用法写一点点,也作为PythonStudio的参考。 从1.2.1版开始,Python…

mac 2k显示器 配置

前言 今年5月份买了一个2k显示器,刚收到的时候发现只有一个1080 x 720(HiDPI)分辨率是人眼看起来比较舒服的,于是一直用着。但是直到开始写前端代码的时候,我才发现,网页在2k显示器和内建显示器的布局竟然…

Go语言中gin+gorm开发前端端分离博客时遇到的问题,gorm执行查询时如何选中特定字段?

代码获取 本篇文章的代码放在了Github上,可以免费获取。 https://github.com/zhangdapeng520/zdpgo_gin_examples 概述 在查询用户信息的时候,由于密码这个字段比较敏感,需要进行处理,不要返回给前端。 我一开始的解决方案是直…

SpringBoot+Mybatis 分页

无论多数据源,还是单数据源,分页都一样,刚开始出了点错,是因为PageHelper的版本问题 这里用的SpringBoot3 SpringBoot2应该是没有问题的 相关代码 dynamic-datasourceMybatis多数据源使用-CSDN博客 依赖 <?xml version"1.0" encoding"UTF-8"?&g…

CocosCreator使用 ProtoBuf WebSocket与服务器对接方法

在 Cocos Creator 中使用 .proto 文件和转换成 TypeScript&#xff08;TS&#xff09;两者各有其优缺点&#xff0c;具体选择取决于你的项目需求和团队的开发习惯。以下是两者的一些比较&#xff1a; 1、使用 .proto 文件的优点&#xff1a; 跨语言支持&#xff1a;Protocol B…

学习STM32(6)-- STM32单片机ADCDAC的应用

1 引 言 深入了解并掌握STM32F103单片机在模拟数字转换&#xff08;ADC&#xff09;和数字模拟转换&#xff08;DAC&#xff09;应用方面的功能和操作。学习如何配置STM32F103的ADC模块&#xff0c;实现模拟信号到数字信号的精确转换&#xff1b;同时&#xff0c;探索DAC模块…

著名人工智能新经济数字经济新能源新质生产力讲师培训师教授专家唐兴通分享人工智能社会学商业模式创新人工智能就业工作与教育学习出海跨境数字化转型数字营销数字销售

添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 2024 年是人工智能在工作中真正应用的一年。根据微软和领英进行的调查&#xff08;2024年5月&#xff09;&#xff0c;在过去六个月中&#xff0c;生成式人工智能的使用量几乎翻了一番&#xff0c;全球75%的…

Android RadioGroup实现多行显示,并保持单选

公司项目最近有个这样的需求&#xff0c;要求实现【多个文本&#xff0c;多行显示&#xff0c;且同时只能选中一个】。设计图效果如下&#xff1a; 看上去很简单&#xff0c;使用 RadioGroup LinearLayout RadioButton 快速实现&#xff1a; <RadioGroupandroid:id"…

[C++进阶数据结构]二叉搜索树

多态讲完了,我们来讲点轻松的(也许)。 我们之前讲过二叉树&#xff0c;而二叉树中&#xff0c;又有一种特殊的树称之为二叉搜索树。 一、二叉搜索树的概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是具有以下性质的二叉树: 若它的左子树不为空…

中电信翼康济世数据中台基于Apache SeaTunnel构建数据集成平台经验分享

作者 | 中电信翼康工程师 代来 编辑 | Debra Chen 一. 引言 Apache SeaTunnel作为一个高性能、易用的数据集成框架&#xff0c;是快速落地数据集成平台的基石。本文将从数据中台战略背景、数据集成平台技术选型、降低Apache SeaTunnel使用门槛及未来展望几个方面&#xff0c…

【环绕字符串中唯一的子字符串】python刷题记录

R4-字符串 动态规划 class Solution:def findSubstringInWraproundString(self, s: str) -> int:dp[0]*26num1#dp初始化dp[ord(s[0])-ord(a)]1for c1,c2 in pairwise(s):if not (ord(c2)-ord(c1)-1)%26:num1else:num1dp[id]max(dp[id : ord(c2)-ord(a)],num)return sum(dp)p…

调用azure的npm实现outlook_api模拟查看邮件、发送邮件(实现web版接受outlook邮件第一步)

文章目录 ⭐前言⭐注册azure应用&#x1f496;添加权限 ⭐调用npm 实现收发邮件&#x1f496;安装依赖&#x1f496;创建appSettings.js 放置密钥&#x1f496;创建graphHelper.js封装功能&#x1f496;主文件index.js 对外暴露&#x1f496;效果 ⭐结束 ⭐前言 大家好&#x…

Flutter GPU 是什么?为什么它对 Flutter 有跨时代的意义?

Flutter 3.24 版本引入了 Flutter GPU 概念的新底层图形 API flutter_gpu &#xff0c;还有 flutter_scene 的 3D 渲染支持库&#xff0c;它们目前都是预览阶段&#xff0c;只能在 main channel 上体验&#xff0c;并且依赖 Impeller 的实现。 Flutter GPU 是 Flutter 内置的底…