端到端加密通道方案研究

曾經旳苆承諾

一、加密通信

加密通信:在发送信息的时候把信息加密成密文,然后在接收方把密文解密成信息的通信过程。

​ 加密通信的主流技术包括对称加密非对称加密两种。

对称加密:加、解密使用的同是一串密钥。

常见:DES、AES(Advanced Encryption Standard)

优缺点:效率高、加密速度快。密钥管理和分发困难,不安全。

非对称加密:加、解密使用不同的密钥,一把作为公开的公钥,另一把作为私钥。公钥加密的信息,只有私钥才能解密。反之,私钥加密的信息,只有公钥才能解密。

常见:RSA

优缺点:安全性更高。加密和解密花费时间长、速度慢、适合对少量数据进行加密。

混合加密:接收方将生成的公钥共享给发送方一份,发送方使用此公钥将生成的会话秘钥进行加密,同时发送方使用会话秘钥对明文内容进行加密,完成加密后,将两份加密过的内容一起发送给接收方,接收方接收到消息,先通过配对的私钥解密出会话秘钥,然后使用会话秘钥对密文进行解密,得到明文内容。

二、现阶段加密

客户端跟服务器之间的通信的确是加密的,但是服务器本身是可以拿到明文信息,意味着双方必须信服服务器端的运营者。

攻击者只要拿下服务器,就可以获取大量重要的隐私数据。

image.png

三、端到端加密

端对端加密的英文是 End-to-end encryption ,缩写是 E2EE 。指在设备上给消息加密,并且只有接收设备可以解密,消息在传输过程中全程都是以加密的形式存在的。

image.png

信息在发送方的客户端,例如 Alice 的手机上加密,而只有接收方,例如 Bob 的手机上才能解密密文,服务器不保存密钥,所以也根本不能解密密文。攻击者拿下服务器,什么也获取不到,服务器无密钥。攻击者攻克了单人的手机,只能获取单人的聊天记录。
端到端加密在安全即时通讯应用程序,电子邮箱通讯扮演重要角色。

关键技术:

1、AES对称加密算法

AES支持三种长度的密钥:128位,192位,256位
image.png
密钥K: 通常是通过非对称加密算法(RSA)加密密钥,然后再通过网络传输给对方,或者直接面对面商量密钥。

AES加密函数:C = E(K, P)

AES解密函数: P = D(K, C)

2、diffie-hellman 迪菲赫尔曼密钥交换算法

Diffie–Hellman (以下简称DH)密钥交换是一个特殊的交换密钥的方法,DH可以让双方在完全缺乏对方(私有)信息的前提条件下通过不安全的信道达成一个共享的密钥,此密钥用于对后续信息交换进行对称加密。

image.png

g:公共原根 p: 公共质数 a: Alice私钥 A: Alice 公钥 b:Bob私钥 B:Bob公钥 K:共享密钥,对称密钥

## 四、端到端加密面临的威胁

1、 中间人攻击(冒充接收人,将收件人公布的公共密钥替换成自己 => 身份验证(数字认证证书或信任网络))

2、终端安全

3、后门程序

五、与NGINX是否冲突

Nginx可以实现HTTPS双向验证,主要有两个步骤:签署第三方可信任的 SSL证书和配置 HTTPS

要配置HTTPS需要用到一个私钥文件(以.key结尾)和一个证书文件(以.crt结尾) ,而证书文件是由第三方证书颁发机构签发的,要让第三方证书颁发机构签发证书文件,还需要给他们提供一个证书签署请求文件(以.csr结尾)

nginx配置本地Https---ssl证书

server {
        listen 443;
        server_name localhost;
        ssl on; #启用SSL功能
        ssl_certificate /etc/nginx/keys/server.crt;#配置证书CRT位置
        ssl_certificate_key /etc/nginx/keys/server.key;#配置秘钥位置
        ssl_client_certificate /etc/nginx/keys/ca.crt;#双向认证
        ssl_verify_client on; #双向认证
        ssl_session_timeout 5m;
        ssl_protocols SSLv2 SSLv3 TLSv1 TLSv1.1 TLSv1.2; #按照这个协议配置
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; #按照这个套件配置
        ssl_prefer_server_ciphers on;#
        root html;
        index index.html;
        location / {
                try_files $uri $uri/ =404;
        }
}

情景

1、 从浏览器使用HTTPS直接连接到应用程序,则会提示提供客户端证书,并且一切正常。

2、禁用https并使用proxy_pass在启用HTTPS的nginx(使用相同的服务器密钥和证书)后面作为HTTP服务器运行,则不会提示输入客户端证书。

3、节点应用程序上启用https,那么似乎无法从nginx代理传递它。nginx充当TLS(SSL)端点时,不可能通过nginx将客户端证书传递给nginx后面的应用程序服务器。这是因为TLS是TLS客户端(浏览器)和TLS终结器(nginx或应用程序服务器)之间的端到端加密系统。所有TLS操作(客户端/服务器身份验证,加密等)必须在客户端和服务器上进行。

处理:客户端连接公开应用服务器,要么使用nginx将实际的TCP连接代理到后端stream 模块。

参考:https://cloud.tencent.com/dev...

https://cn.gbtwireless.com/95...

https://serverfault.com/quest...

https://server.51cto.com/sOS-...

六、端到端加密方案

1、端到端加密方案: 使用CA认证中心的方式来实现端到端加密服务。

参考: http://docs-im.easemob.com/st...

2、 Nextcloud: End-to-End Encryption 服务器API支持端到端加密,基于PHP和JavaScript。

  • 创建并同步身份认证
  • 加密文件夹和添加文件

总的来说,Nextcloud创建一个端到端的加密文件夹是通过标记一个空文件夹进行端到端加密,创建元数据,加密和上传。该进程受锁定保护,客户端请求服务器锁定,并在所有更改完成并上传后再次释放。 每个文件都使用自己的唯一密钥加密,该密钥存储在元数据文件中。元数据文件中的所有数据依次被安全地加密,文件名和目录结构也被隐藏在服务器上,使用唯一的UUID作为每个文件的名称。

参考:https://github.com/nextcloud/...

https://www.orgleaf.com/2884....

3、ZeroDB:基于ZODB和Python的开源端到端数据库。

在ZeroDB中,客户端负责数据库逻辑。数据加密,解密和压缩也发生在客户端。因此,服务器永远不会对数据,其结构或顺序有任何了解。

客户端还具有可调整的缓存,该缓存存储数据结构中最常用的部分,即使其大小很小(例如1兆字节),也可以大大加快查询速度。

参考: https://github.com/nucypher/z...

https://github.com/nucypher/z...

4、OpenPGP:Google开发的基于JavaScript,支持密钥生成,加密,解密,数字签名和签名验证。

拓展应用:E2EMail,Freedom JS,uProxy,Google End-tp-End Extension,Yahoo End-tp-End Extension

参考:https://github.com/google/end...

5、Ockam: 基于Rust和Elixir的分布式应用程序之间的相互身份验证和端到端加密消息传递的工具,可轻松构建与云服务和其他设备进行安全,私密和可信任的通信的设备。

image.png

Features

  • End-to-end encrypted, mutually authenticated secure channels.
  • Key Lifecycle and Credential Exchange protocols.
  • Attribute-based Access Control with Credentials that support Selective Disclosure.
  • Add-Ons for a variety of transport protocols, hardware cryptography, and enterprise integrations.
  • Libraries for multiple languages - Rust, Elixir (more on the roadmap)

参考:https://www.ockam.io/

https://github.com/ockam-netw...

阅读 2.6k
1 声望
0 粉丝
0 条评论
1 声望
0 粉丝
文章目录
宣传栏