BBS伪随机数生成器

news/2025/11/15 17:08:41/文章来源:https://www.cnblogs.com/luminescence/p/19225827

Blum Blum Shub(BBS),由Lenore Blum、Manuel Blum和Michael Shub于1986年提出。BBS伪随机数生成器以其可证明的安全性而闻名,其安全性基于大整数分解问题的困难性

BBS生成器的数学基础

1. Blum整数

BBS生成器的核心是Blum整数,定义为两个特殊素数的乘积:

N = p × q

其中p和q必须满足:

  • p和q都是大素数
  • p ≡ 3 (mod 4)
  • q ≡ 3 (mod 4)

2. Blum素数生成

class BlumInteger:@staticmethoddef generate_blum_prime(bit_length: int) -> int:"""生成Blum素数(p ≡ 3 mod 4)"""while True:# 生成候选奇数candidate = random.getrandbits(bit_length)candidate |= (1 << (bit_length - 1))  # 确保指定位数candidate |= 1  # 确保是奇数# 检查是否 ≡ 3 mod 4if candidate % 4 != 3:continue# Miller-Rabin素性测试if MillerRabin.is_prime(candidate):return candidate

3. Miller-Rabin素性测试

class MillerRabin:@staticmethoddef is_prime(n: int, k: int = 40) -> bool:"""Miller-Rabin素性测试"""if n <= 1:return Falseelif n <= 3:return Trueelif n % 2 == 0:return False# 将n-1分解为 d * 2^sd = n - 1s = 0while d % 2 == 0:d //= 2s += 1# 进行k轮测试for _ in range(k):a = random.randrange(2, n - 1)x = pow(a, d, n)if x == 1 or x == n - 1:continuefor __ in range(s - 1):x = pow(x, 2, n)if x == n - 1:breakelse:return Falsereturn True

BBS生成器核心算法

1. 基本原理

BBS生成器使用简单的二次剩余迭代:

x_{n+1} = x_n² mod N

其中:

  • N是Blum整数
  • \(x_0\)是与N互质的种子
  • 输出为\(x_n\)的最低有效位(LSB)

2. 核心实现

class BBSGenerator:def __init__(self, N: int, seed: Optional[int] = None):"""初始化BBS生成器"""self.N = Nself.state = seed if seed is not None else self._generate_seed()# 验证种子if not self._validate_seed():raise ValueError("种子必须与N互质且不能为0或1")def next_bit(self) -> int:"""生成下一个随机比特"""# BBS核心算法: x_{n+1} = x_n^2 mod Nself.state = pow(self.state, 2, self.N)# 输出最低有效位(LSB)bit = self.state & 1return bit

3. 种子验证

def _validate_seed(self) -> bool:"""验证种子有效性"""return (self.state > 1 and self.state < self.N - 1 and math.gcd(self.state, self.N) == 1)

多种输出格式

1. 比特序列生成

def next_bits(self, num_bits: int) -> str:"""生成指定数量的随机比特"""bits = []for _ in range(num_bits):bits.append(str(self.next_bit()))return ''.join(bits)

2. 字节生成

def next_byte(self) -> int:"""生成下一个随机字节"""byte = 0for i in range(8):byte |= (self.next_bit() << i)return byte

3. 浮点数生成

def next_float(self) -> float:"""生成[0, 1)范围内的随机浮点数"""# 使用52位精度(IEEE 754双精度尾数)bits = self.next_bits(52)mantissa = int(bits, 2)return mantissa / (2**52)

统计测试套件

1. 频率测试

def frequency_test(bits: str, significance: float = 0.01) -> Tuple[bool, float]:"""频率测试(单比特测试)"""n = len(bits)ones = bits.count('1')# 计算测试统计量s_obs = abs(ones - n/2) / math.sqrt(n/4)# 计算p值p_value = 2 * (1 - BBSTestSuite._normal_cdf(abs(s_obs)))return p_value >= significance, p_value

2. 游程测试

def runs_test(bits: str, significance: float = 0.01) -> Tuple[bool, float]:"""游程测试"""n = len(bits)ones = bits.count('1')zeros = n - ones# 计算游程数runs = 1for i in range(1, n):if bits[i] != bits[i-1]:runs += 1# 计算期望和方差expected_runs = (2 * ones * zeros) / n + 1variance_runs = (2 * ones * zeros * (2 * ones * zeros - n)) / (n**2 * (n - 1))# 计算测试统计量z_obs = (runs - expected_runs) / math.sqrt(variance_runs)# 计算p值p_value = 2 * (1 - BBSTestSuite._normal_cdf(abs(z_obs)))return p_value >= significance, p_value

BBS的安全性分析

1. 周期性

BBS生成器的周期至少是λ(p)和λ(q)的最小公倍数,其中λ是卡迈克尔函数:

def carmichael_blum(p):return (p - 1) // 2
lambda_p = carmichael_blum(p)
lambda_q = carmichael_blum(q)
period = math.lcm(lambda_p, lambda_q)

2. 安全性基础

BBS的安全性基于以下数学难题:

  1. 大整数分解问题:已知N,难以找到p和q
  2. 二次剩余问题:给定x和N,难以判断x是否为二次剩余
  3. 预测困难性:预测BBS输出等价于分解N

性能特点

1. 优势

  • 可证明安全性:基于数学难题
  • 长周期:周期长度可达2^
  • 可重现性:相同种子产生相同序列

2. 劣势

  • 速度较慢:每次迭代需要大数模运算
  • 初始化复杂:需要生成大素数

使用示例

# 生成Blum整数
p, q, N = BlumInteger.generate_blum_integer(256, 256)
# 创建BBS生成器
bbs = BBSGenerator(N)
# 生成随机数
bits = bbs.next_bits(128)          # 128位随机数
bytes_data = bbs.next_bytes(16)    # 16字节随机数
random_int = bbs.next_int(1, 100)  # 1-100随机整数
# 统计测试
test_results = BBSTestSuite.run_all_tests(bbs, 10000)

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

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

相关文章

[KaibaMath]1022 一道平面几何题的两种解法

本文给出一道平面几何题的两种解法。第一种解法基于初等数学,第二种则基于高等数学。(该题目的解答完成于2017年)

实用指南:从0开始了解kafka《第二篇 kafka的安装、管理和配置》

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

动态规划法

动态规划法一、按照动态规划法的求解步骤分析作业题目“数字三角形”: 1.1 根据最优子结构性质,列出递归方程式,说明方程式的定义、边界条件: 从三角形顶部出发,每次只能向下或向右下移动,最终到达底部时,找到一…

函数表达式:JavaScript中那些你不知道的优雅写法 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

11.15模拟赛

t1 小 \(\mathrm{L}\) 有一串 \(n\) 块宝石的项链, 它可以顺时针看成一个圆环, 即第 1 块宝石与第 2 块和第 \(n\) 块宝石相邻, 第 2 块宝石与第 1 块和第 3 块宝石相邻, 以此类推。 但不幸的是, 项链的宝石破碎了。每…

2025 最新无缝钢管优质厂家推荐:国际测评认证 + 技术创新 + 全场景适配 + 服务保障综合榜单

引言 本榜单基于国际钢管行业协会(ISSF)最新测评数据编制,通过三大核心维度构建权威评价体系:技术实力(占比 40%)涵盖生产工艺先进性、定制化能力及检测设备精度;产品品质(占比 35%)依据力学性能、尺寸公差、…

西门子S7200_SMART仿真软件的使用(保姆级教程)

第一步:编写一个简单的程序用于测试 第二步:导出“.awl”格式的文件第三步:双击打开软件包里的“S7_200汉化版.exe” 第四步:输入密码“6596”并点击“确定” 第五步:选择与之对应的CPU型号 第六步:点击“程序…

2025年RS485红外线测温仪源头厂家权威推荐榜单:在线红外测温仪/20mA红外线测温仪/红外线测温仪变送器源头厂家精选

在工业自动化与智能制造的浪潮下,RS485红外测温仪因其信号传输稳定、抗干扰能力强且便于组网的优势,市场需求持续增长。选择合适的RS485接口、支持Modbus-RTU协议的红外测温仪,已成为工业现场实现可靠温度监控的关键…

P14508 猜数游戏 guess

每次通过一些特别的手法可以知道一个长度的区间内是否有东西。 那么设 \(f_i\) 为长度为 \(i\) 的区间最少花费,那么每次将其划分成两个区间,看其中需要确定一个的最小花费是什么,这是好做的(因为确定了一个区间就…

AMD Instinct MI50 通过llama.cpp 在 ROCm7.0.2上运行

关于网上传言MI50 ROCm7.0.2的性能提升了,这边做了下测试。 ROCm7.0.2安装方法: ROCm 7.0 Install for Mi50 32GB | Ubuntu 24.04 LTS : r/LocalLLaMA 这边系统使用的ubuntu22.04 ROCm安装 wget https://repo.radeon.…

如何成为高级的安卓逆向工程师 glm4.6

如何成为高级的安卓逆向工程师 glm4.6如何成为高级的安卓逆向工程师 ● Ill help you understand how to become a senior Android reverse engineer. Let me create a comprehensive roadmap for you. ● 成为高级安…

PyTorch实战(9)——从零开始实现Transformer - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

天津雅思培训机构排名2025,无老师国际/新通教育等优质机构,师资/口碑/提分率大PK

天津雅思培训机构排名2025,无老师国际/新通教育等优质机构,师资/口碑/提分率大PK随着留学申请热度的持续攀升,雅思成绩已成为学子们海外深造的“通行证”,天津地区雅思培训市场也随之蓬勃发展。专业的雅思培训机构…

2025 最新无缝钢管源头厂家推荐:国际测评认证 + 技术创新 + 全场景适配 + 服务保障综合榜单

引言 本榜单基于国际钢管行业协会(ISSF)最新测评数据编制,通过三大核心维度构建权威评价体系:技术实力(占比 40%)涵盖生产工艺先进性、定制化能力及检测设备精度;产品品质(占比 35%)依据力学性能、尺寸公差、…

用HBuilder建立查询天气的网页

查询天气.container { max-width: 500px; margin: 50px auto; padding: 20px; border: 1px solid rgba(221, 221, 221, 1); border-radius: 10px } .input-group { margin-bottom: 20px } input { padding: 8px; width…

2025 11 15

第23场弘文了这场我T1都没切,我考虑枚举排列和起点之后,我不知道为什么就没有去想把在A中的B和在B中的A率先交换,以及在A中的C和在C中的A交换,然后再算B,C的,理由应该归咎于状态问题加上没有充分思考,因为一开始…

常用设计模式:职责链模式

根据 ChatGPT 的描述, 后端项目中出现频率最高的前 6 名设计模式是:排名 模式 典型应用🥇 1 单例模式 数据库连接、缓存客户端、全局配置🥈 2 工厂模式 动态加载不同实现(如多租户、支付、存储)🥉 3 代理模式…

fanuc 双安检实验指导书

实验:双安检功能实验学时:2~3学时实验目的与要求了解并掌握双安检功能原理以及应用,通过该功能的学习能够确保信号输入输出的正确性、保证机床处于准确的安全位置以及定期进行安全测试。实验内容双安检功能硬件连接…

Rust RefCell 多线程读为什么也panic了?

Rust RefCell 多线程读为什么也panic了?这是最近实战中遇到的一个小知识点,没理解之前觉得「不可能」,反应过来之后,觉得自己很蠢🤣,借本文记录下。 看一段复现代码: struct MyRefCell<T>(RefCell<T&…

关于样式

请大家使用亮色观看,目前暗色模式有些功能未开发