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

devtools/2024/10/19 7:31:37/

密码学基础-为什么使用真随机数(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.ppmy.cn/devtools/90488.html

相关文章

机器学习模型选择与优化: 打造智能IDS

引言 面对琳琅满目的机器学习模型,你是否也感到无从下手?别担心,这篇文章将为你详细讲解各种模型的优缺点,帮助你选择最适合的模型,并进行优化。是时候给你的入侵检测系统装上最强“大脑”了! 项目支持 毕业设计难…

PYTHON专题-(8)我错了该怎么整?

什么是异常处理? 异常处理是一种机制,用于在程序执行期间发生错误或异常时,对发生的异常进行捕获、处理和恢复,以确保程序能够继续执行或正确地终止。异常处理可以包括捕获异常、处理异常,以及执行相应的操作来处理异常…

Bug太多,苹果手机升级到18.1后怎么降级

最近苹果公司发布了iOS 18.1开发者测试版和macOS Sequoia 15.1的开发者测试版,此次发布的iOS18.1开发者测试版本苹果给其带来了两个重要的新功能。 1、通话录音功能 现在只要拨打或者是接听电话,界面左上角就会出现通话录音按键,点击即可开启…

书生大模型学习笔记2 - Python

Python实现wordcount 请实现一个wordcount函数,统计英文字符串中每个单词出现的次数。返回一个字典,key为单词,value为对应单词出现的次数。 解题思路:首先把字母转小写>然后把单词取出来去除标点>循环单词列表>key已存…

面向对象之设计模式,四种内部类,类关系

面向对象 1. 类关系 继承 使用extends表示,类和类单继承,接口和接口多继承,多个逗号隔开 又叫泛化关系 实现 类和接口是多实现关系,多个逗号隔开,通过关键字 implements表示 依赖 一个类中的局部变量 ,保存了另一个类对象 关联 又叫强依赖,一个类中的成员变量,是另一个类对象…

Animate软件基本概念:传统补间、补间动画及补间形状

这里主要讲Animate软件中三种基本的补间类型的概念。 FlashASer:AdobeAnimate2021软件零基础入门教程https://zhuanlan.zhihu.com/p/633230084 FlashASer:实用的各种Adobe Animate软件教程https://zhuanlan.zhihu.com/p/675680471 FlashASer&#xff…

【数学建模】——【A题 信用风险识别问题】全面解析

目录 1.题目 2.解答分析 问题1:指标筛选 1.1 问题背景 1.2 数据预处理 1.3 特征选择方法 1.4 多重共线性检测 1.5 实现步骤 问题2:信用评分模型 2.1 问题背景 2.2 数据分割 2.3 处理不平衡数据 2.4 模型选择与理由 问题3:模型对…

集成Apache Kylin与Apache Hadoop:实现大数据高效分析

集成Apache Kylin与Apache Hadoop:实现大数据高效分析 引言 大数据技术的迅猛发展使得企业能够以更低的成本和更高的效率处理和分析海量数据。Apache Hadoop和Apache Kylin是两个广泛使用的大数据处理和分析框架,它们的结合能够提供强大的数据处理能力…