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

京东云_阿里云网站空间_是什么

小七 141 0

加密:缩小性能差距

我们在CloudFlare爱走已经不是什么秘密了。我们使用它,而且我们经常使用它。围棋有很多值得喜爱的地方,但我个人觉得吸引人的是编写汇编代码的能力!乔恩·库诺的2.0图像抄送当你想到围棋的时候,这可能不是你第一个想到的东西,但是是的,它确实允许你写代码"接近金属",如果你需要的性能!我们在CloudFlare中经常做的另一件事是。。。密码学。为了保证你的数据安全,我们加密了所有的东西。而CloudFlare里的一切都是很多。不幸的是,Go中的内置密码库的性能不如OpenSSL等最先进的实现。这在CloudFlare的规模上是不可接受的,因此我们创建了椭圆曲线和AES-GCM在amd64架构上的组装实现,支持AES和CLMUL NI,使性能达到我们用于通用SSL的OpenSSL实现的水平。我们已经使用这些改进的实现有一段时间了,并试图使它们成为官方Go构建的一部分,以造福于社区。现在,您可以使用我们的特殊的Go fork来享受改进后的性能。这两种实现都是恒定时间和侧通道保护。此外,fork还对Go的RSA实现进行了一些小的改进。与测试过的Haswell CPU上的标准Go 1.4.2库相比,此fork的性能优势如下:CloudFlare Go 1.4.2加速AES-128-GCM 2138.4 MB/秒91.4 MB/秒23.4倍P256操作:基乘26249 ns/op 737363 ns/op 28.1X倍增/ECDH补偿110003 ns/op 1995365 ns/op 18.1X生成密钥/ECDH gen 31824 ns/op 753174 ns/op 23.7XECDSA标志48741 ns/op 1015006 ns/op 20.8XECDSA验证146991 ns/op 3086282 ns/op 21.0XRSA2048号:标志3733747 ns/op 7979705 ns/op 2.1X标牌3-prime 1973009 ns/op 5035561 ns/op 2.6XAES-GCM简介那么什么是AES-GCM?我们为什么要关心它?好吧,这是一个AEAD认证的加密与相关数据。具体地说,AEAD是一种密码和MAC(消息认证码)算法的特殊组合,使用单个密钥,形成一个单一的鲁棒算法。这与另一种执行身份验证加密的方法"encrypt then MAC"(或TLS对CBC SHAx所做的"MAC then encrypt")不同,在这种方法中,可以使用密码和MAC的任何组合。使用专用的AEAD可以减少密码和mac的错误组合以及其他错误(例如使用相关密钥进行加密和身份验证)的危险。考虑到与HMAC一起使用AES-CBC的许多漏洞,以及RC4的弱点,AES-GCM是目前web上事实上的安全标准,因为目前只有IETF批准AEAD与TLS一起使用。您可能听说过另一个AEAD是ChaCha20-Poly1305,CloudFlare也支持它,但它还不是一个标准。这就是为什么我们使用AES-GCM作为客户HTTPS的首选密码,只为支持它的移动浏览器优先使用ChaCha20-Poly1305。你可以在我们的配置中看到它。因此,今天60%以上的面向客户的流量是用AES-GCM加密的,大约10%是用ChaCha20-Poly1305加密的。随着浏览器支持的提高,这一比例每天都在增长。我们还使用AES-GCM加密数据中心之间的所有流量。抄送2.0图像3:19AES-GCM作为AEAD正如我提到的,AEAD是密码和MAC的特殊组合。对于AES-GCM,密码是计数器模式下的AES分组密码(AES-CTR)。对于MAC,它使用一个通用的hash哈希,用AES-CTR加密。AES-GCM AEAD加密的输入如下:密钥(K),可能是128、192或256位长。在TLS中,密钥通常对整个连接有效。一个称为IV(初始化值)的特殊唯一值,在TLS中是96位。IV不是秘密,但在任何情况下,同一个IV不能用于多个具有相同密钥的消息!为了达到这个目的,通常IV的一部分被生成为nonce值,其余部分作为计数器递增。在TLS中,IV计数器也是记录序列号。GCM的IV不同于CBC模式下的IV,后者也必须是不可预测的。使用这种类型的IV的缺点是为了避免冲突,必须在IV计数器溢出之前更改加密密钥。附加数据(A)-这些数据不是秘密的,因此不是加密的,但它正在由GHASH进行身份验证。在TLS中,附加数据是13个字节,包括记录序列号、类型、长度和协议版本等数据。明文(P)-这是秘密数据,它是加密和认证的。该操作输出密文(C)和认证标签(T)。C的长度与P的长度相同,T的长度是128位(尽管有些应用允许更短的标记)。标记T是在A和C上计算的,因此,如果其中任何一个位被更改,解密过程将检测到篡改企图并拒绝使用数据。在TLS中,标签T附加在密文C的末尾。当解密数据时,函数将接收A、C和T,并计算接收到的A和C的身份验证标签。它将结果值与T进行比较,只有当两者相等时,它才会输出明文P。通过支持两种最先进的AEAD—AES-GCM和ChaCha20-Poly1305,以及ECDSA和ECDH算法,CloudFlare能够在所有平台(无论是PC还是手机)上提供最快、最灵活和最安全的TLS体验。底线Go是一个非常容易学习和使用乐趣,但它是最强大的系统编程语言之一。它允许我们在短时间内交付健壮的web规模的软件。随着CloudFlare为其加密堆栈带来的性能改进,Go现在也可以用于高性能TLS服务器!