b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

WhatsApp加密概述(技术白皮书)-翻译

电脑杂谈  发布时间:2020-04-30 04:20:59  来源:网络整理

web端和pc端app端_whatsapp端到端加密_whatsapp端对端加密

本白皮书提供了WhatsApp端到端加密系统的技术说明. 请访问WhatsApp网站以了解更多信息.

WhatsApp Messenger允许人们自由地交换消息(包括聊天,群聊,图片,视频,语音消息和文件),并在发送方和接收方之间使用端到端加密(2016年3月31日版之后)

Signal协议是由Open Whisper Systems(一个非营利软件开发组织)设计的,并且是WhatsApp端到端加密的基础. 此端到端加密协议旨在防止第三方和WhatsApp访问明文形式的消息或呼叫. 更重要的是,即使用户设备的密钥泄漏,先前发送的消息也无法解密.

本文概述了Singal协议在WhatsApp中的应用.

注册时,WhatsApp客户端发送公共身份密钥(public Identity Key),签名的预共享公共密钥(public Signed Pre Key)和一批一次性的预共享公共密钥(One-Time Pre)密钥)到服务器. WhatsApp服务器存储与用户身份相关的公钥. WhatsApp服务器无法访问任何客户端的私钥.

要与其他WhatsApp用户进行通信,WhatsApp客户端需要首先建立加密的会话. 创建加密的会话后,除非会话失败(例如,重新安装应用程序或更换设备),否则客户端无需重新创建会话.

建立会话:

会话发起者申请接收者的公共身份密钥(public Identity Key),签名的预共享公共密钥(public Signed Pre Key)和一次性预共享密钥(One-Time Pre Key). 服务器返回请求的公钥. 一次性Pre Key仅使用一次,因此在请求完成后将从服务器中将其删除. 如果一次性键已用完并且尚未补充,则返回null. 启动器将收件人的身份密钥保存为Irecipient,将已签名的预共享密钥(Signed Pre Key)保存为Srecipient,将一次预共享密钥(One-Time Pre Key)保存为Orecipient. 启动器生成一个临时的Curve25519密钥对-当启动器计算主密钥master_secret = ECDH(启动器,收件人)时,启动器将加载其自己的身份密钥(Identity Key). ECDH(引发剂,收件人)| | ECDH(引发剂,收件人)|| ECDH(引发剂,收件人). 如果没有一次性预共享密钥(One-Time Pre Key),则最终的ECDH将被忽略. 启动器使用HKDF算法从master_secret创建根密钥和链密钥.

web端和pc端app端_whatsapp端到端加密_whatsapp端对端加密

建立长期的加密会话后,发起者可以立即将消息发送给接收者,即使接收者处理了脱机状态. 在接收方响应之前,来自发起方的所有消息都将包含创建会话所需的信息(在消息的标题中). 这些包括发起人的发起人和发起人. 当接收方收到包含会话设置的消息时:

接收者使用他自己的私钥和消息头中的公钥来计算相应的主密钥. 接收方删除发起方使用的一次性预共享密钥(One-Time Pre Key). 发起方使用的HKDF算法. 主密钥派生相应的根密钥(Root Key)和链密钥(Chain Keys)

建立会话后,客户端交换消息将受到AES256消息密钥加密(CbC模式)和HMAC-SHA256身份验证的保护.

消息密钥是短暂的,并且在每条消息发送之后都会更改,因此,用于加密消息的消息密钥在发送或接收之后无法从会话状态中重建.

消息密钥是从发送消息时发件人的“链锁”的前“棘齿”派生的. 此外,每个消息巡回执行一个新的ECDH协议以创建一个新的链密钥(Chain Key). 通过组合即时“哈希棘轮”和游览“ DH棘轮”来提供前向安全性.

每次消息发件人需要一个新的消息密钥,计算如下:

消息密钥(消息密钥)= HMAC-SHA256(链式密钥,0x01)然后,链密钥(链式密钥)更新为: 链密钥(链式密钥)= HMAC-SHA256(链式密钥,0x02)

这形成一个正向“棘轮”链密钥(Chain Key),这也意味着所存储的消息密钥不能用于导出当前或过去的链密钥值.

whatsapp端到端加密_web端和pc端app端_whatsapp端对端加密

每个发送的消息都带有一个短期的Curve25519公共密钥. 收到响应后,新链密钥(Chain Key)的计算如下:

ephemeral_secret = ECDH(星历表,临时收件人)链密钥(链密钥),根密钥(根密钥)= HKDF(根密钥,短暂密钥)

一个链接密钥只能将消息发送给一个用户,因此该消息密钥无法重复使用. 由于消息密钥和链接密钥的计算方法,消息可能会延迟,混乱或完全丢失而没有问题.

每种大型附件(视频,音频whatsapp端对端加密,图像或文件)也都进行了端到端加密:

发送者(发送消息的whatsapp用户)生成一个32字节的AES256临时密钥和一个32字节的HMAC-SHA256临时密钥. 发送方使用AES256密钥(CBC模式)和随机IV加密附件,然后使用HMAC-SHA256密文附加MAC. 发件人将加密的附件上载到服务器以进行二进制存储. 发送方将包含加密密钥,HMAC密钥,加密二进制文件的SHA256哈希值和指向二进制文件存储的指针的加密消息发送给收件人. 收件人解密消息,从服务器检索加密的二进制数据,然后验证AES256哈希,验证MAC并解密为纯文本.

传统的未加密聊天应用程序通常对组消息使用“服务器端扇出”功能来发送组消息. 当用户向组发送消息时whatsapp端对端加密,服务器会将消息分发给每个组成员.

“客户端扇出”表示客户端向每个组成员发送消息.

WhatsApp组消息是基于上面列出的配对加密会话构建的,以通过服务器端扇出有效地实现大量组消息. 这是通过信号消息协议的“发件人密钥”完成的.

whatsapp端对端加密_whatsapp端到端加密_web端和pc端app端

WhatsApp组成员首次向该组发送消息:

发送者生成一个随机的32字节链密钥. 发送者生成一个随机的Curve25519签名密钥对. 发送者将32位链式密钥(Chain Key)和签名密钥中的公钥组合成消息发送者密钥(Sender Key). 发件人使用配对的传输协议分别为每个组成员加密发件人密钥(发件人密钥).

所有发送到该网上论坛的后续消息:

发件人从链密钥获取消息密钥并更新链密钥. 发送方使用AES256在CbC模式下加密消息. 发件人使用签名密钥(Signature Key)). 签名密文的发件人向服务器发送一条密文消息,服务器将消息分发给所有组成员

消息发送者的链密钥的“哈希棘轮”提供了前向安全性. 小组成员离开后,所有剩余的小组成员将清除发件人密钥并重新生成它.

WhatsApp的语音和视频通话也进行了端到端加密. 当WhatsApp用户发起语音或视频通话时:

发起方与接收方建立加密会话(如果尚未建立). 启动器生成一个随机的32字节安全实时传输协议(SRTP). 主密钥将包含安全性的消息发送给接收者. 实时传输协议(SRTP)主密钥的加密消息用于发送呼叫信号. 如果呼叫被应答,则将发起安全实时传输协议(SRTP)呼叫

WhatsApp状态加密方法与组消息非常相似. 首次向指定的收件人组发送消息时,遵循与向该组的第一条消息相同的步骤. 同样,将后续状态发送到同一组收件人也遵循与发送组消息相同的步骤. 当状态发送者更改状态隐私设置或从通讯簿中删除号码以删除接收者时,状态发送者将清除发件人密钥并重新生成它.

whatsapp端对端加密_whatsapp端到端加密_web端和pc端app端

要填补的坑

WhatsApp用户还可以验证与其通信的用户的密钥,以便他们可以确认未经授权的第三方(或WhatsApp)没有发起中间人攻击. 这是通过扫描QR码或比较60位数字来完成的.

QR码包括:

当用户扫描对方的QR码时,他们将比较这些密钥,以确保QR码中的身份密钥与服务器检索到的身份密钥相符.

通过串联两个用户标识密钥的30位指纹来计算60位数字. 计算30位数字指纹的步骤:

重复SHA-512哈希标识公共密钥和用户标识符5200次,以获取最终输出哈希的前30个字节. 通过解析每组5个字节,将30个字节分成6组,每组5个字节. 字节数据块是big-endian无符号整形,并且将100,000次模转换为5位. 六组5位数字连接成30位数字

WhatsApp客户端与服务器之间的所有通信均位于单独的加密通道中. 在Windows Phone,iPhone和Android上,这些端到端加密客户端可以使用噪声管道,并在Noise Protocol Framework中使用Curve25519,AES-GCM和SHA256来实现长期的交互式连接.

这为客户端提供了一些不错的属性:

WhatsApp用户之间的消息受到端到端加密协议的保护,因此,第三方和WhatsApp都无法学习消息的内容,并且消息只能由收件人解密. 所有WhatsApp消息(包括聊天,群聊,图片,视频,语音消息和文件)和WhatsApp呼叫均受到端到端加密的保护.

WhatsApp服务器无法访问WhatsApp用户的私钥,而WhatsApp用户可以选择验证密钥以确保其通信完成.

WhatsApp使用的信号协议库是开源的,代码:

翻译水平有限,我希望能帮助不擅长英语的朋友.


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/ruanjian/article-193763-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...