安全是有分量的

高防御cdn_服务器ddos防御_超稳定

2022-01-12 10:20栏目:应用

高防御cdn_服务器ddos防御_超稳定

多年来,RSA密码系统在攻击中占有相当大的份额,但在最令人印象深刻的攻击中,您可以找到臭名昭著的Bleichenbacher攻击[Ble98],它在1998年使PKCS v1.5失败。19年后,机器人攻击证明了Bleichenbacher攻击仍然是一个值得关注的问题。现在,除了rsapkcsv1.5,我们还有什么替代方案?好吧,它的继承者,RSA OAEP,也被称为RSA PKCS v2.1,显然是一个很好的候选者。

RSA OAEP是一个有趣的方案,因为它在数学上被证明是安全的,可以抵御随机预言模型中选择的密文攻击。

猜怎么着?还存在针对RSA OAEP的"弱实现"的攻击。这种攻击虽然不如Bleichenbacher的攻击知名,因为它从来没有成为头条新闻,穿盾cc怎么防御,但它被称为"Manger's attack"[Man01],以其创建者James Manger的名字命名,他在2001年发表了这篇博文。

在这篇博文中,我将首先解释攻击的每一部分,然后在Go中指导您完成它们的实现。我们将以一个功能齐全的攻击结束,只需等待所谓的"oracle"被插入。典型的预言,在实践中,是由时间信息提供的,但有时一条错误消息会简化工作。

首先,让我先介绍一下oracle的概念,因为我将在本文中使用它:

定义:oracle甲骨文是一个黑匣子,它会接受一个输入,并回答一个关于其输入的特定的、固定的问题,而不受知识的限制。在密码学中,用来攻击不同方案的最常见的神谕是填充神谕和计时神谕。

填充神谕和布莱肯巴赫的攻击一样,以密文作为输入,解密后显示填充是否正确。例如,Kocher[Koc96]使用的计时预言器通常报告解密特定密文所需的时间。

最后,计时预言器通常可以用作填充预言器,通常是在填充错误的情况下,实现返回早期错误时,引导攻击者根据实现的返回时间构建填充oracle。

Manger's Attack

设为RSA模,分别为和其公共和私有指数,并设为其字节长度。然后,只要攻击者能够访问一个能够告诉他们是否小于的oracle,那么他们就能够在查询中将与密文对应的可能消息的范围缩小到只有一条消息。

此外,攻击在很大程度上依赖于RSA密码系统的一个众所周知的属性,即其延展性[DDN91]:

定义:延展性对于明文的加密,如果给定的函数可以为一个函数生成另一个产生明文的密文,则该方案是可延展的,而在任何时候都不需要密码的知识。延展性的性质称为延展性。

这是RSA密码系统的情况,因为我们在商环中操作。对于给定的公钥,明文被加密为。我们可以为任何人构建密文,传输层的ddos防御软件,

现在让我正式描述一下攻击:最初,我们只知道一个密文,我们希望在不访问私钥的情况下解密,但是通过访问oracle,我们可以告诉我们,当我们向它发送一个值时,解密的值是否满足。我现在将在[Man01]中描述这种攻击,通常情况下是这样的,因为大多数RSA模的大小都是位的精确倍数,呈现的大小至少是它的两倍。如果不是这样,那么攻击仍然是可能的,如何学会ddos防御,但是必须处理多个间隔,参见[Man01]第3.2节。因此,当这个假设成立时,攻击分三步进行:

步骤1

我们首先要尝试将未知的明文与将值发送到oracle for,直到它返回该值。由于RSA密码系统的可塑性,这一点很快就会实现。这确保了我们,所以我们知道。

这可以很容易地在Go中完成,如下:

1234f1:=new(big.Int).SetInt64(int64(2))for!tryOracle(f1,c,e,N,ourOracle){f1.Mul(two,f1)}

其中tryOracle(f,c,e,N,ourOracle)函数将密文发送到我们的oracle,该函数返回是否返回。

步骤2

我们现在尝试用利用RSA密码系统的可塑性。为此,我们发送给甲骨文,直到它返回。它必然意味着,模约化"包装"成小于的东西,因为根据和的定义,我们知道。反过来,它意味着,

请注意,这一步骤必然终止,最多执行oracle查询,因为当

这也很容易在Go中实现:

1234567nB:=new(big.Int)。Add(N,B)nBB:=new(big.Int)。Div(nB,B)f2:=new(big.Int)。对于tryOracle(f2,c,e,N){f2,Add(f2,f12)}

第3步

我们终于想把可能的消息范围缩小到一条。这是迭代完成的,在每一步将范围大约除以2。它使用一种启发式方法来定义它的参数,并且还没有被Manger在他的文章中正式证明。这意味着定义和,然后只要范围包含多个值,就可以执行以下操作:

选择一个临时倍数;计算边界点;计算一个值,它跨越一个边界点,如下所示:;将值发送到oracle,如果返回,则可以设置并返回1。否则,网络安全工具,如果返回,则可以设置并返回1。

这是计算的最长部分,可以在go中实现如下(使用尽可能接近manager文章的符号):