Frp: 希望能加入ChaCha20加密方式

Created on 7 Oct 2019  ·  20Comments  ·  Source: fatedier/frp

我现在是用 openwrt 路由器跑 frp,功能都正常,但是现在加密方式对于路由器来说太重了, 希望

  1. 加入 ChaCha20 这样比较轻量的加密方式,对于低端设备会更好

  2. 希望发布 release 的时候增加 softfloat 版本 (go编译的时候可以选择),很多低端设备都不具备FPU,加密运算需要浮点计算,编译使用 softfloat 版本对低端设备效率更高 (尤其是 mips , mipsel 这种)

enhancement

All 20 comments

  1. 有具体的测试结果吗?在你的路由器上实际的性能消耗以及对比。
  2. 目前 mips 和 mipsle 编译时都是配置了 softfloat 的。

我 mips 上测试过 v2ray 的加密, v2ray 支持 aes-128-gcm 和 chacha20-poly1305, 用 chacha20-poly1305加密的话,看 youtube 速度比 aes-128-gcm 能快一倍以上,主要原因还是 mips 的处理器做加密解密 aes 太慢了

frp 一般不是用于 gfw ,只是为了防止 DPI 探测, 弄个 XOR 或者 RC4-MD5 其实也行,或者 Base64编码 也挺好,就是整数运算,怎么简单怎么来,这样效率就高很多

另外,如果用 aes ,尽量用 gcm ,别用 cfb , cfb 不安全

加密方式,最好是 client 选择加密方式, server 自适应, 这样同一个server 能处理 不同的 client 选择不同的加密方式,电脑、路由器 用不同的加密连接同一个 server

加密对于这个项目来说不是强需求,所以并不打算提供多种加密算法客户端来选择的方式。更多的是防止通过抓包来直接看到明文内容,所以直接用一个性能消耗低,比较通用,易于实现的加密方法就可以了。

针对你说的性能问题,可以考虑另外提供一个参数来启用一个其他的加密算法,但是不继续往这个方向扩展,不支持设置指定算法。

还有一个趋势是,后面可能会全都走 TLS 连接,整个 frpc 和 frps 的通信就全都加密了。

TLS 作为可选,不要默认吧

  1. 特征太明显(密钥协商握手),容易被阻断(公司内部防火墙阻断非 443 的 tls)
  2. 建立链接的延迟大

^_^ 默认加密用个简单的就好,整数运算不需要FPU的, TLS 和 AES 留给有需要的人自己配置就好

那么也就是说这个项目经过的流量不具有足够的安全?

说句闲话,个人希望加密方法也可以使用插件的方式来机型扩展,这样就可以根据需求选择满足需求的加密方式了

@funnypro 目的是加密,而不是通过加密来去除流量特征,安全是相对的,没有绝对的安全,只是看给破解增加的成本有多大。所以不会在加密上做太多文章,个人倾向于使用 TLS。

那么在使用frp的stcp走明文流量的话,能够保证足够的安全吗?

TLS中最好是加入加密方法的配置,用户可以简单选择使用AES还是Chacha20等。
我在D2550 CPU上测试过目前的TLS,由于D2550 CPU不支持硬件AES加速,所以最高只能跑到70Mbps左右。

QAQ 你的这个tls,双方事先并没有任何对方的凭据,无论密钥是写死的还是现生成,理论上都没法保证安全吧,了解一下机理就能中间人了。还有那个token的对称加密,既然没有人提到日期时间错误导致问题,那应该也不防重放吧(不过这不是大问题)。主要是tls的问题,至少一方要有另一方的公钥才起作用。现在这个repo挺多关注了,主要也是内网在背着公司用,潜在风险应该不小。谢谢喵

QAQ 你的这个tls,双方事先并没有任何对方的凭据,无论密钥是写死的还是现生成,理论上都没法保证安全吧,了解一下机理就能中间人了。还有那个token的对称加密,既然没有人提到日期时间错误导致问题,那应该也不防重放吧(不过这不是大问题)。主要是tls的问题,至少一方要有另一方的公钥才起作用。现在这个repo挺多关注了,主要也是内网在背着公司用,潜在风险应该不小。谢谢喵

要不把包抓出来给各位看看?

@oO0oO0oO0o0o00 @funnypro 之前说了,目前 tls 的作用是加密,还没有包含身份认证,之后会支持配置自己的证书。

@oO0oO0oO0o0o00 @funnypro 之前说了,目前 tls 的作用是加密,还没有包含身份认证,之后会支持配置自己的证书。

那未来会允许配置 tls 使用的是什么加密方法吗?

@funnypro 这个我还没有仔细看,如果目前 golang 的实现本身可以支持多种加密算法的话,可以考虑开放这个配置。

@funnypro 这个我还没有仔细看,如果目前 golang 的实现本身可以支持多种加密算法的话,可以考虑开放这个配置。

好的
感觉使用 tls 的话可能还是要面对一些问题,例如说 kcp 是否可用 tls 加密?

@funnypro 可以的,tls 是在四层之上的协议。

@funnypro 可以的,tls 是在四层之上的协议。

好的
我个人还有一个问题:既然用到了 tls 的话,为了正常使用加密是否必须申请一个域名?
还是说用自己的 CA 证书之类的?

@funnypro 目前不需要,证书都是自动生成的,并且没有校验有效性。之后如果提供配置自己的证书,那么就可以支持这个校验,双向认证。

@funnypro 目前不需要,证书都是自动生成的,并且没有校验有效性。之后如果提供配置自己的证书,那么就可以支持这个校验,双向认证。

那么未来自动生成用于加密的证书会双向验证吗?

@funnypro 目前不需要,证书都是自动生成的,并且没有校验有效性。之后如果提供配置自己的证书,那么就可以支持这个校验,双向认证。

那么未来自动生成用于加密的证书会双向验证吗?

自动生成的没有验证的意义。要认证或者加密,无论如何都需要【事先&&用安全的途径】共享一些什么,可以是密码,可以是证书的公钥,也可以是上级签发者的公钥。

Was this page helpful?
0 / 5 - 0 ratings