云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

谷歌云_京东云免费_免费申请

小七 141 0

CIRCL:一个高级密码库

作为2019年加密周的一部分,今天我们很自豪地发布我们一直在研究的一个密码库的源代码:一个用Go编写的密码原语集合,称为CIRCL。这个库包含一组包,这些包的目标是后量子(PQ)的密码算法、椭圆曲线密码和素群的散列函数。这对我们广大的观众是有用的。准备好了解我们是如何形成的唯一的。密码学在GoWe经常在Cloudflare使用Go。它在易用性和性能之间提供了一个很好的平衡;学习曲线非常简单,而且在很短的时间之后,任何程序员都可以很好地编写快速、轻量级的后端服务。多亏了在Go装配中实现性能关键部件的可能性,我们可以尝试"挤压机器"并获得性能。Cloudflare的加密团队设计和维护安全关键项目。安全很难不是秘密。这就是为什么我们要引入Cloudflare互操作可重用加密库CIRCL。CIRCL背后有多个目标。首先,我们希望集中精力在一个地方实现加密原语。这样就更容易确保遵循正确的工程流程。其次,Cloudflare是互联网社区的积极成员—我们正在努力改进和提出标准,以帮助互联网变得更好。Cloudflare的使命是帮助建立一个更好的互联网。出于这个原因,我们希望CIRCL能帮助密码社区创建概念证明,就像我们正在做的后量子TLS实验。多年来,密码学家们提出了许多想法(例如同态加密、多方计算和隐私保护构造)。最近,我们看到了这些概念在不同的环境中被学习和运用。CIRCL对加密原语的实现为希望使用的开发人员创建了一个强大的工具箱他们。那个Go语言为几种著名的加密算法(如密钥协商算法、哈希函数和数字签名)提供本机包。还有一些由社区维护的包golang.org/x/crypto为支持认证加密、流密码、密钥派生函数和双线性对提供了多种算法。CIRCL不想与golang.org/x/crypto无论如何。我们的目标是提供一组互补的实现,这些实现可以更积极地进行优化,或者可能不太常用,但将来很有可能非常有用。解包CIRCLOur加密团队提出了一个新的建议,用一组新的包来增强Go用户的能力。你可以通过键入:$go get来获取它们github.com/cloudflare/circlTheCIRCL的内容分为不同的类别,总结如下表:类别算法说明应用后量子密码术锡德基于同系同源的密码学。SIDH提供了使用临时密钥的密钥交换机制。锡克SIKE是一种关键的封装机制(KEM)。密钥协议。密钥交换X25519,X448RFC-7748提供了基于Montgomery椭圆曲线的密钥交换机制。TLS 1.3条。安全壳。福尔克128位安全级别上最快的椭圆曲线之一。密钥协商和数字签名实验。数字签名Ed25519RFC-8032提出了一种基于扭曲Edwards曲线的数字签名算法。数字证书和认证方法。椭圆曲线群的散列几种算法:Elligator2,Ristretto,SWU,Icart。基于椭圆曲线的协议要求散列函数将位串映射到椭圆曲线上的点。在隐私通行证等协议中很有用。不透明。帕克。可验证随机函数。优化曲线P-384我们的优化减少了从P-256到P-384的负担。ECDSA和ECDH在最高机密级别使用suiteb。SIKE,后量子密钥封装机制为了更好地理解后量子世界,我们开始试验后量子密钥交换方案,并将其用于tls1.3中的密钥协商。CIRCL包含sidh包,这是基于超奇异同构的Diffie-Hellman(sidh)的实现,以及基于锡德·赛克使玩PQ密钥协议非常容易。下面是SIKE接口的一个示例,它可用于在双方之间建立共享机密,以便在对称加密中使用。该示例使用密钥封装机制(KEM)。在这个方案的例子中,Alice生成一个随机的密钥,然后使用Bob预先生成的公钥对其进行加密(封装)。产生的密文被发送给Bob。然后,Bob使用他的私钥来解密(解密)密文并检索密钥。在这个Cloudflare中查看有关SIKE的更多详细信息博客。让我们来看看如何使用CIRCL://Bob's key pairprvB:=NewPrivateKey(Fp503,KeyVariantSike)pubB:=NewPublicKey(Fp503,KeyVariantSike)//生成私钥prvB.生成(随机读卡器)//生成公钥prvB.GeneratePublicKey(出版物)var publicKeyBytes=make([]数组,出版物尺寸())var privateKeyBytes=make([]数组,prvB.大小())公共出口(publicKeyBytes)prvB.导出(privateKeyBytes)//将公钥编码为JSON//在磁盘上保存privateKeyBytesBob将公钥上载到任何人都可以访问的位置。当Alice想与Bob建立共享机密时,她执行封装,结果分为两部分:共享机密和封装结果密文。//将JSON读取到字节//爱丽丝的钥匙对pubB:=NewPublicKey(Fp503,KeyVariantSike)公共导入(publicKeyBytes)变量kem:=锡克·纽西克503(随机读卡器)kem.封装(密文、共享机密、公共广播)//把密文发给鲍勃Bob现在接收来自Alice的密文并将共享的解密秘密:var kem:= 锡克·纽西克503(随机读卡器)凯姆脱胶囊公共文本,公共文本此时,Alice和Bob都可以从秘密中派生出对称加密密钥生成.SIKE实施包含:两个不同的现场尺寸:Fp503和Fp751。选择该领域是在性能和安全代码针对AMD64和ARM64体系结构以及通用Go代码进行了优化。对于AMD64,我们检测微体系结构,如果它是最新的(例如,它支持ADOX/ADCX和BMI2指令集),我们使用不同的乘法技术来实现均衡执行更快。代码在固定时间内实现,即执行时间不依赖于秘密价值观。我们同时还处理了低堆内存占用,因此,实现使用最小数量的动态分配内存。在未来,我们计划提供多个后量子方案的实现。目前,我们的重点是对TLS中密钥交换有用的算法。SIDH/SIKE非常有趣,因为这些算法产生的密钥大小相对较小(与其他PQ方案相比)。不过,性能还不是很好,所以我们将继续寻找。我们计划在CIRCL中添加基于格的算法,如NTRU-HRSS和Kyber。我们还将添加另一个更具实验性的算法cSIDH,我们想在其他应用程序中尝试。CIRCL目前不包含任何后量子签名算法,这也是我们的待办事项。在TLS密钥交换的实验完成后,我们将研究后量子PKI。但这是未来博客文章的主题,所以留下来吧调整。最后,我们必须承认,我们的代码很大程度上是基于NIST提交的文件以及前实习生亨利·德瓦伦斯(Henry De Valence)的工作成果,我们要感谢亨利和赛克队的伟大工作。椭圆曲线密码与基于RSA的算法相比,椭圆曲线密码具有密钥长度短、运算速度快等优点。椭圆曲线是在21世纪初被标准化的,最近由于椭圆曲线是保护通信安全的一种更有效的方法而广受欢迎。在Cloudflare的几乎每个项目中都使用椭圆曲线,不仅用于建立TLS连接,还用于证书验证、证书撤销(OCSP)、隐私传递、证书透明性和AMP-Real网址Go语言提供了对NIST标准曲线的本地支持,其中最流行的是P-256。在之前的一篇文章中,vladkrasnov描述了优化几个密码算法的相关性,包括P-256曲线。在Cloudflare scale中工作时,围绕性能的小问题会显著放大。这就是Cloudflare突破效率边界的原因之一,在证书的连锁验证上也发生了类似的事情。对于某些证书,我们在验证证书链时发现了性能问题。我们的团队成功地诊断了这个问题:具有来自P-384曲线(对应于192位安全级别的曲线)签名的证书占用了99%的CPU时间!更接近信任链根的证书通常依赖于更强大的安全假设,例如,使用更大的椭圆曲线。我们的急救反应是以Brendan McMillion编写的优化实现的形式出现的,它将执行椭圆曲线操作的时间缩短了10倍。P-384的代码也在中提供循环椭圆曲线密码技术的最新发展促使人们转向使用具有更快运算速度的椭圆曲线模型。最好的例子无疑是Curve25519;其他的例子是Goldilocks和FourQ curves。CIRCL支持所有这些曲线,允许Diffie-Hellman交换和Edwards数字签名的实例化。尽管它与Go本地库略有重叠,CIR