首页
社区
课程
招聘
[翻译]加密聊天室:第一部分
发表于: 2018-5-3 12:29 3933

[翻译]加密聊天室:第一部分

2018-5-3 12:29
3933

为了了解更多加密以及如何在网络协议中实现加密的细节(比如SSHHTTP over TLS),我开始编写一个加密的聊天客户端和服务器。现在已经差不多完成了,我想在此与你分享我学到的东西。


我将这个系列分成两个帖子。本帖将涵盖理解这个程序如何工作所需的概念。第二个帖子将深入讨论代码并将这些概念与程序实际正在做的事情联系起来。感谢@oaktree的建议使用这种方式。


下面开始。

目标:建立一个共享密钥,用于在客户端和服务器之间发送的消息的加密与解密。

要设置聊天室,客户端必须能够安全地将消息发送到服务器,反之亦然。对称加密使用相同的密钥来加密和解密消息,对于这项任务来说非常合适。但是这样做的话,客户端和服务器必须协商一个秘钥。


**记住:加密密钥只是非常大的数字。


那么我们如何让两台电脑拥有相同的大数字?我们不能通过电报发送它......这首先会破坏加密的目的,因为窃听者可能窃取密钥并解密所有内容。所以我们将使用Diffie-Hellman密钥交换



Diffie-Hellman(或简称DH)使用有限循环组来使两个实体达到相同的数量,而没有明确地共享它。很多有限循环组的应用使用了整数乘法组模p,其中p是质数。但是,其他选项(如椭圆曲线)也存在(比如你现在正在使用一个选项来查看此网页!)。


抛开疯狂的数学,交换背后的实际概念并不是很难理解,并且执行它所需的数学运算也是基础级别的。以下是Wikipedia上列出的图表:


Diffie-Hellman密钥交换背后想法的例证

对于我们的聊天室来说,“共同的油漆”是一个非常大的质数模量p(至少2048位)和基数g。这些数字可以公开分享并且不会威胁我们的安全通信。“秘密的色彩”是每个参与者生成的随机数字,并保持秘密。整个过程因以下原因而起作用:


其中a和b是“秘密的颜色”,%是模数运算符(它只是分割和返回余数)。你问为什么这两个表达式是相等的?我没有资格告诉你。我想这就像是问为什么2 + 2 = 4,尽管听上去我们的例子更复杂- 它就是这样。如果有人能够很简单地解释这个等式,请发表评论,因为我也希望自己能更好地理解它。我还没有研究群论,但也许有人可以在此提出对这个等式更多的看法。


如果你没有完全理解这里发生了什么,那么没关系,当我们看代码的时候,我会更详细地讨论它。重要的是我们现在有相同的数字(共同秘钥):一旦我们有了,我们可以继续下一步。


(高级加密标准)


由于AES的速度和安全性,AES是一种广泛使用的对称加密算法。除非使用它的系统正在泄漏数据(例如通过糟糕的功能实现),否则破解它的唯一方法就是暴力破解。我们将在密码块链模式(CBC模式)中使用AES-256,该模式依赖于256位密钥(这也是为什么你会看到我们将通过SHA-256传递我们的共享大数字以将其标准化为256 比特长度)并且使得该系列中的每个块依赖于前一个块。


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2018-5-3 12:32 被一壶葱茜编辑 ,原因:
收藏
免费 1
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//