java什么叫用例_BigInteger的.isProbablePrime()的可能用例是什么?

问题

方法BigInteger.isProbablePrime()很奇怪;从文档中,这将告诉数字是否为素数,概率为1 - 1 / 2^arg,其中arg是整数参数。

它已经存在于JDK很长一段时间了,所以它意味着它必须有用。我在计算机科学和算法(和数学)方面的有限知识告诉我,知道一个数字是否"可能"是一个素数而不是一个素数并不是真的有意义。

那么,人们想要使用这种方法的可能情况是什么?密码?

#1 热门回答(66 赞)

是的,这种方法可用于密码学.RSA encryption包含大量素数的发现,有时大约为1024位(约300位)。 RSA的安全性取决于这样一个事实,即将由这些素数中的2个组成的数字相乘,这是非常困难和耗时的。但要使它发挥作用,它们必须是最重要的。

事实证明,证明这些数字也很难。但Miller-Rabin primality test,其中一个素数测试使用isProbablePrime,要么检测到数字是复合的还是没有给出结论。运行此测试n次允许你得出结论,在2个节点中有1个这个数字真的是复合的。运行it100次会产生2100的可接受风险,即这个数字是复合的。

#2 热门回答(20 赞)

如果测试告诉你一个整数不是素数,你当然可以相信100%。

这只是问题的另一面,如果测试告诉你整数是"可能的素数",你可能会怀疑。用不同的"基数"重复测试允许错误地成功地"模仿"素数(相对于多个碱基是强伪素数)的概率可以根据需要做得小。

测试的有用性在于它的速度和简单性。人们不一定会对"可能的素数"作为最终答案的状态感到满意,但是在引入素数测试的大枪之前,人们肯定会避免在几乎所有复合数字上浪费时间。

对整数分解难度的比较是一种红色的鲱鱼。众所周知,整数的素数可以在多项式时间内确定,实际上有证据证明米勒 - 拉宾检验扩展到足够多的基数是确定的(在检测质数时,与可能的素数相反),但这假设广义黎曼假设,所以它不太确定(更昂贵)AKS primality test。

#3 热门回答(18 赞)

用于BigInteger.isProbablePrime(int)的标准用例是密码学。具体而言,某些加密算法(如RSA)需要随机选择的大质数。然而,重要的是,这些算法并不真正要求这些数字被保证为素数 - 它们只需要以极高的概率进行素数处理。

有多高?好吧,在加密应用程序中,人们通常会调用.isProbablePrime(),其参数介于128和256之间。因此,通过这种测试的非素数的概率小于2128或2256中的一个。

让我们从视角来看:如果你有100亿台计算机,每台计算机每秒产生100亿个可能的素数(这意味着任何现代CPU上每个数字的时钟周期不到一个),并且这些数字的素数用.isProbablePrime(128)测试,你平均而言,预计一个非素数将在每1000亿年中出现****。

也就是说,如果那些100亿台计算机在不经历任何硬件故障的情况下以某种方式运行数千亿年,就会出现这种情况。但实际上,更有可能随机宇宙射线在恰当的时间和地点撞击你的计算机,将返回值of.isProbablePrime(128)从false翻转为true,而不会产生任何其他可检测的效果,而不是非-prime数字实际上在该确定性水平上通过概率素性测试。

当然,随机宇宙射线和其他硬件故障的相同风险也适用于确定性素性测试,如AKS。因此,在实践中,即使这些测试由于随机硬件故障而具有(非常小的)基线误报率(更不用说所有其他可能的错误源,例如实现错误)。

由于很容易将米勒 - 拉宾素性测试的内在假阳性率推迟到.isProbablePrime()远低于此基线速率,仅仅通过重复测试足够多次,并且因为,即使重复这么多次,米勒 - 拉宾测试仍然快得多实践比AKS这样最着名的确定性素性测试,它仍然是加密应用程序的标准素性测试。

(此外,即使你偶然选择强伪荧光作为RSA模量的因素之一,它通常也不会导致灾难性的失败。通常,这种假性质是大约两个(或很少)质数的产物。长度的一半,这意味着你最终得到amulti-prime RSA key。只要没有任何因素是小的(如果它们是,原始性测试应该抓住它们),RSA算法仍然可以正常工作,并且虽然键相对于某些类型的攻击比相同长度的普通RSA密钥稍微弱一些,但如果你没有不必要地缩短密钥长度,那么它仍然应该是合理安全的。)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值