【密码学】一文读懂BBS

简介: 之前聊过不少非密码学安全的伪随机数生成算法,这次呢,咱们来聊一个密码学安全的伪随机数生成器 「BBS」 ,这个是三位设计者的首字母: Blum、Blum 和 Shub。

【密码学】一文读懂BBS


4JOQ%`99TTSPEG@`VMUJ0CR.jpg

之前聊过不少非密码学安全的伪随机数生成算法,这次呢,咱们来聊一个密码学安全的伪随机数生成器 「BBS」 ,这个是三位设计者的首字母: Blum、Blum 和 Shub。


生成器结构

%5TMWL0_A7{A0Q291RESVDH.png

BBS结构

首先BBS需要选择两个素数p和q,并且使得

image.png

简单解释一下上面这个式子吧,也就是说p和q同余与4模3,大白话就是p和q在除以4的时候余数都是3。

然后,令 ,之后选择一个随机数s作为种子,这里对于种子有个要求,要求s和n互素。

然后按照如下的方式产生随机序列:

image.png

好了,这篇文章依然很短,因为这个算法结构实际上并不复杂,如果想去看原理的,可以去参考文末参考资料当中的paper。


代码实现

这个代码实际上写起来也比较简单,这里我偷懒了,没用大数,直接用的uint

Go

package bbs
type BBS struct {
  p uint
  q uint
  x uint
  n uint
}
func New(p, q uint) *BBS {
  return &BBS{
    p,
    q,
    0,
    p * q,
  }
}
func (b *BBS) Seed(seed uint) {
  b.x = (seed * seed) % b.n
}
func (b *BBS) Rand() uint {
  x := (b.x * b.x) % b.n
  return x
}

Rust

struct BBS {
    p: u32,
    q: u32,
    x: u32,
    n: u32,
}
impl BBS {
    pub fn new(p: u32, q: u32, seed: u32) -> BBS {
        let n = p * q;
        let x = seed.wrapping_mul(seed) % n;
        BBS { p, q, x, n }
    }
    pub fn rand(&mut self) -> u32 {
        self.x = self.x.wrapping_mul(self.x) % self.n;
        return self.x;
    }
}


相关文章
|
监控 Linux
Linux 进程标识符:深入探讨 getpid() 和 getppid()
在Linux操作系统中,进程管理是一项重要的任务。为了正确管理和监控进程,我们需要了解如何获取进程的标识符。本文将详细介绍两个重要的Linux系统调用函数:`getpid()`和`getppid()`。这两个函数用于获取当前进程的进程ID(PID)和父进程的PID。我们将深入探讨它们的用途、使用方法以及示例代码。
2778 0
|
Rust 算法 数据安全/隐私保护
【密码学】一文读懂RSA的随机数生成器
本文接着来聊一个比较轻松的内容,再来说一个随机数生成器,对于这个随机数生成器呢,这里和之前讲到过的BBS有一些类似,直接来看具体的内容蛤。
1311 1
【密码学】一文读懂RSA的随机数生成器
|
6月前
|
人工智能 新能源 BI
关于举办"2025年第五届全国大学生技术创新创业大赛"的通知
大赛已连续举办四届,举办以来大赛始终以“创新驱动,赋能就业”为目标,促进学生的创新创造能力,普及创新创业知识,拓宽就业创业渠道,挖掘创新人才,培育多元化的未来产业推进力量。自开赛以来,赛事受到百余所学校关注,十几所高校已立项,参赛人次达上万人,征集优秀商业计划书上千余份。本届新赛事将继续全面贯彻党的二十大精神,完整、准确、全面贯彻新发展理念,加快构建新发展格局,以传统产业的高端化升级和前沿技术的产业化落地为主线,以创新为动力,第五届赛事将开展优秀项目落地北京计划。
1953 4
|
11月前
|
人工智能 自然语言处理 安全
Claude官网中文版:在国内使用claude AI的最佳选择!
Claude 是 Anthropic 公司开发的一款大型语言模型,类似于 OpenAI 的 ChatGPT 或 Google 的 Bard。它被设计成一个乐于助人 😊、诚实 🤝 且无害 😇 的 AI 助手。
|
11月前
|
存储 NoSQL PHP
如何用Redis高效实现点赞功能?用Set?还是Bitmap?
在众多软件应用中,点赞功能几乎成为标配。本文从实际需求出发,探讨如何利用 Redis 的 `Set` 和 `Bitmap` 数据结构设计高效点赞系统,分析其优缺点,并提供 PHP 实现示例。通过对比两种方案,帮助开发者选择最适合的存储方式。
298 3
|
12月前
|
机器学习/深度学习 分布式计算 安全
深度学习之安全多方计算
基于深度学习的安全多方计算(Secure Multi-Party Computation,简称MPC)是一种密码学技术,旨在让多个参与方在不暴露各自数据的前提下,协作完成一个计算任务。
445 0
|
存储 算法 安全
密码算法的分类
【8月更文挑战第23天】
793 0
判断是否保持函数依赖的方法
判断是否保持函数依赖的方法
309 2
|
并行计算 安全 Java
多线程编程中的线程安全问题与解决方案*
多线程编程中的线程安全问题与解决方案*
如何使用node搭建本地服务器(最详细)
如何使用node搭建本地服务器(最详细)