JavaScript中的高速公共密钥加密技术(第1部分)

在本文中,我们将通过基础知识讨论如何在JavaScript中实现“ 端到端安全通信”
在这里,我们使用最先进的密码库来介绍鲁棒密码系统的基本基础。

让我们先描述开始实施之前需要的两个入门概念。

公钥密码术

“公钥密码术”是使互联网安全的加密机制。

公钥密码术或非对称密码术是使用密钥对的任何密码系统:可以广泛传播的公钥和仅拥有者已知的私钥 。 这完成了两个功能:身份验证(其中公钥验证配对的私钥的持有者发送了消息)和加密(其中只有成对的私钥持有者可以解密使用公钥加密的消息)。

公钥密码术–维基百科

公钥密码学或非对称密码学是使用密钥对的任何密码系统:公钥…

en.wikipedia.org

使用公钥密码术的系统示例:

  • SSL / TLS握手
  • Whatsapp的
  • 三马
  • PGP和OpenPGP
  • 其他十亿个例子…

NaCL和TweetNaCL.js

NaCl(发音为“盐”)是一种易于使用的新型高速软件库,用于网络通信,加密,解密,签名等。NaCl的目标是提供构建高级加密工具所需的所有核心操作。 。

介绍

NaCl是在由欧洲委员会的资助的CACE(计算机辅助密码学工程)项目下发起的。

nacl.cr.yp.to

NaCL项目由我们时代最杰出的计算机科学家之一Daniel J.Bernstein领导。

您也可以选择阅读Aaron Swartz对Daniel J.Bernstein的评论:http://www.aaronsw.com/weblog/djb

具体来说,NaCl使用椭圆曲线密码术,而不是RSA; 它使用具有多个高级安全功能的椭圆曲线Curve25519。 它使用Salsa20,而不是AES(尽管它确实在侧面包括AES实现); 它使用Poly1305,而不是HMAC; 它使用的是EdDSA,而不是ECDSA。

NaCL被证明是安全的,因为理论上打破Salsa20的每一轮都比打破相应的AES轮更昂贵。
另一方面,Salsa20在设计时考虑了速度,即使在低速CPU下也能提供出色的性能。 有关Salsa20速度的详细说明,请参见:https://cr.yp.to/snuffle/speed.pdf

NaCL

TweetNaCl是世界上第一个可审核的高安全性密码库。 TweetNaCl仅适合100条推文,同时支持应用程序使用的所有25种C NaCl功能。 TweetNaCl是一个自包含的公共域C库,因此可以轻松地集成到应用程序中。

TweetNaCl:简介

TweetNaCl是世界上第一个可审核的高安全性密码库。 TweetNaCl只适合100条推文,而…

tweetnacl.cr.yp.to

TweetNaCL.js项目将TweetNaCL引入了JavaScript,因此也引入了Node.js和Web。 它使用XSalsa20 (较长的nonce)流密码代替Salsa20。

JavaScript基准测试:https://github.com/dchest/tweetnacl-js/blob/master/README.md#benchmarks

鲍勃为爱丽丝加密消息

TweetNaCL.js公钥加密示例

爱丽丝解密鲍勃的消息

TweetNaCL.js公钥解密示例

使用预先计算的共享密钥

对于同级之间的加密/解密会话,建议使用预先计算的共享密钥:

TweetNaCL.js使用共享密钥加密
TweetNaCL.js使用共享密钥解密

公钥

公共密钥基础结构 ”需要适当的解决方案来维护和认证用户的公共密钥。 尽管此过程不在本文讨论范围之内,但一种常见的解决方案包括将用户的公共密钥作为其个人资料页面的一部分进行维护,并使其通过类似于目录的API的联系人可以访问。

私钥

维护秘密密钥要复杂得多,因为这是用户希望保密的非常敏感的信息。 通常,此过程是用户的责任,因此以某种方式要求实现公钥加密的应用程序允许用户输入其私钥( 永远不要将其传输到服务器端 )。

秘密密钥通常使用离线安全存储机制或在线存储,并使用强大的对称加密方法(例如AES)来保护密钥。 第二种方法简化了将私钥“注入”到应用程序中的过程( 仅客户端解密 ),例如:在登录阶段。

在本文中,我们介绍了公钥密码术,以及如何使用TweetNaCL.js库在JavaScript中实现它。

使用XSalsa20代替RSA ,可将CPU使用率和电池消耗降至历史最低水平,同时保持强大的256-bit security级别。
—给您的应用的消息😉

使用TweetNaCL.js的 数字签名将在该系列的第二篇文章中进行讨论: 在此处阅读

一如既往,感谢您的反馈!