安全是有分量的

服务器防御_cdn防御ddos效果_原理

2022-01-11 17:40栏目:安全

服务器防御_cdn防御ddos效果_原理

听说量子威胁即将来临?今天,我们深入研究后量子密码,或者说量子抵抗密码,它不能与量子密码混合在一起(见我们之前的博客文章),打开我们的后量子Go库

后量子密码

量子计算机的到来威胁着传统密码算法的安全。Shor、Grover和Brassard的算法是一些工具的例子,这些工具能够对我们所知道和使用的公钥密码进行强大的量子攻击。一些方案,如RSA或Diffie-Hellman的困难不再被认可,促使我们寻找依赖于替代假设的替代方案,即后量子密码术。格是一个具有序关系的集合,意味着每两个元素都有唯一的上确界和下确界。最重要的基于格的计算问题是最短向量问题(SVP),它要求在给定的格中寻找最短向量。大多数基于晶格的结构的安全性可以归结为SVP问题的安全性,它似乎可以抵抗经典计算机和量子计算机的攻击,是NIST后量子密码标准化进程的最终入围者。晶体套件的第一个协议是Kyber,一种密钥封装机制(KEM),它确保密钥材料在不安全的通道上交换。它使用非对称加密来传输短的对称密钥。然后使用此对称密钥加密较长的消息。简而言之,Kyber是使用一种安全转换来构建的,它将Regev的弱安全加密方案转换为强安全加密方案。

第二种协议是Dilithium,一种数字签名算法(DSA),在消息上生成签名,该签名可由持有与秘密签名密钥相关联的公共验证密钥的任何人验证。Dilithium遵循Fiat-Shamir结构,对掩码进行采样并拒绝,直到签名具有约束力,但隐藏了签名密钥。

这些协议的安全性由各种因素(如晶格的大小)参数化。Kyber和Dilithium可以被实例化以提供轻、推荐或非常高的安全级别,并分别被指定为Kyber512、Kyber768和Kyber1024,或Dilithium2、Dilithium3和Dilithium5.

侧通道攻击

彻底的密码分析是必要的,但不足以保证库的安全。在过去的十年里,出现了大量关于新一类攻击的出版物(熔毁、幽灵、僵尸……)。旁道攻击以算法安全的密码系统的实现为目标,可以利用从实现本身获得的信息。

通常被忽视的是,旁道攻击可以用来削弱或完全破坏基础设施的安全性。对侧通道漏洞的关注不够可能导致毁灭性的漏洞,正如我们在NSA的TEMPEST系统中看到的那样,该系统可以通过监听计算机的电磁辐射来重建整个屏幕,或者最近的幽灵攻击可以操纵一个进程来泄露敏感数据,比如密码,监控缓存命中和未命中后的计时。这就是为什么我们优先考虑在我们的实现中提供尽可能多的保护来抵御所述侧信道攻击。

我们的库

由于其简单性和安全性,Go语言在密码学家中得到了普及。编写和维护Go代码非常简单,非常适合各种规模的项目,安全狗防御ddos,从概念验证到完整的基础设施。

在我们的库中,网站怎么防御ddos,我们提供了一个Go协议的实现。开源代码可以在crystalsgo存储库中找到。虽然有一些现有的实现是由C-to-Go中可用的官方实现的直接翻译组成的,但是我们选择了偏离引用的方式来提供额外的安全性和性能属性。我们的代码的正确行为是通过CRYSTALS作者提供的已知答案测试来确保和测试的。

API

在本节中,我们提供了如何使用我们的库的实践示例。首先,crystal go模块可以通过以下方式安装:

1go get-u github.com/kudelskisecurity/crystals go

为了在参数和算法之间有一个清晰的分离,我们定义了适用于所有可能参数集的通用方法,并在完全定义要使用的参数的Kyber或Dilithium实例上调用它们。因此,用户首先必须通过在Kyber512、Kyber768、Kyber1024和Dilithium2、Dilithium3之间创建Kyber或Dilithium的实例来定义他们想要使用的安全级别,Dilithium5:

12k:=NewKyber512()//创建一个安全级别为d的Kyber实例:=Dilithium3()//创建一个安全级别为推荐级别的Dilithium实例

用户现在可以通过调用:

1pk,sk:=k.KeyGen(seed)

1pk生成一个公钥和私钥对,sk:=d.KeyGen(seed)

一旦定义了参数并生成了密钥,就可以调用Kyber和Dilithium的核心功能

Kyber的主要功能是Encaps和Decaps。Kyber的一个典型流程是:

12345678910//选择参数sk:=NewKyber512()//生成密钥并公开公开公钥。pk,sk:=k.KeyGen(seed)//生成共享密钥和密文。与seed类似,可以将封装过程中使用的随机//硬币赋予或去除方法。c,ss:=k.Encaps(coins,pk)//将密文发送给私钥持有者,私钥持有者将密文解封以恢复//共享秘密(ss=ss')。ss':=k.Decaps(c,sk)

类似于二锂,Sign和Verify的主要方法通常如下: