goclang访谈:FoxAE的APN安全策略
最近有一些朋友就APN的安全性提出一些质疑,为此我们特别咨询了FoxAE的技术核心goclang,有一些问答已经在Twitter上发出,但因为篇幅所限不能写全,现把全版本的访谈内容发上来
1. 为什么做了个FoxAE?
goclang:
我自己就买过SSL的服务在电脑上用,主要是查个资料下载SDK什么的。后来觉得速度实在太慢,大概5k/s ~ 8k/s,就又弄了个linode。但还是慢,而且出于显而易见的原因,不论是买的SSL隧道还是linode的连接经常假死或者就被闪断。
我自己非常不喜欢VPN或者OpenVPN(OpenVPN不是开源的吗?)这类被几家厂商把持了的技术方式。所以不论是iPhone、iPad还是我那个Nexus连Google一点资料都很费劲。
做FoxAE大概是不耐烦了吧。
2. 能具体说说你为什么不喜欢VPN(我最喜欢VPN了)?
goclang:
其实也没有什么特别的,主要的原因是觉得麻烦。拨号?我可不想回到95年Hayes的14.4K(此拨号是彼拨号?)。另外在手机3G或者Edge上,运营商对VPN进行了不少干扰,经常掉线(不清楚,有遇到干扰掉线的说说)。
3. 所以FoxAE选择了APN方式?
goclang:
其实是被选择。iOS上面不越狱,除去VPN也就这个办法了(还有一种修改DNS服务器,然后DNS劫持网址的方法,下文讲)。
4. APN没有VPN安全?
goclang:
是的,也不是(我认为一般都是)。纯粹从技术上说,APN访问HTTP协议的内容总要有一段明文传输,所以比VPN、SSL这些隧道技术要差一些。至于HTTPS的内容则是安全的,因为协议本身是面向端到端加密的,中间人篡改、截取等问题都不存在。
说到这个,就要说说APN部署和VPN部署的差别。VPN一般在国外放置服务器,客户端到服务器直连,也就是逻辑上客户到国外的这个过程是客户端自己完成的。
APN则需要国内国外分别放置服务器(也可以只用国外服务,使用特殊端口,这个我以前讲过)。HTTP协议内容通过国内服务器中转,HTTPS内容可以由客户端到国内或国外服务器透过HTTP/1.1协议的CONNECT方式做加密隧道。
那么绕来绕去APN不仅比VPN多了国内部分的服务器成本,而且还有明文传输的部分,为什么还是选择这种方式呢(我感觉有两点:一、无奈,系统不支持VPN,比如微软WP系统及非智能机,二、速度快,不用VPN那样拨号认证,基本感觉不到断线重连)?
从本质上说,我觉得是个唯一的选择。你说这叫无奈也可以。没人愿意把服务器部署在国内的机房。一提起这个我本能的反应就是个F***。国内一堆人掌 握着带宽资源,问题是互相之间限制流量,有时候国内直接的速度比出国再回来还慢。另外,DNS污染也是个大问题,即使自己搭DNS缓存8.8.8.8也有 问题。
5. 具体是哪些问题呢?
goclang:
UDP丢包率高,TCP间歇性复位,另外全球负载均衡也制造了不少麻烦。比如youtube、feedburner在国内查询8.8.8.8和在国外查询 8.8.8.8的结果是不同的。也就是8.8.8.8也在做负载均衡。如果把DNS缓存放在国外,那么youku这类限制IP地理位置的网站就
访问不了了。
这问题的解决最后就是人肉版的DNS负载均衡。弄个列表,分别查询不同的DNS缓存。人肉版软件总是让人很讨厌(这点的确很讨厌)。
6. 再具体说说安全问题吧。
goclang:
涉及安全就必须确定对安全的预期。从技术上看,VPN、APN都存在中间人监听的问题。
7. VPN不是全程加密吗?
goclang:
暂时把加密可靠性放在一边,APN在国内明文传输这段,会有第三方嗅探的风险,VPN没有。但是在VPN服务器上,也就是VPN服务商还是可以看到的,也就是中间人风险。这点VPN、APN是相同的(所以一定要选择你信任的或国外知名的服务商)。
不过说起加密,我倒是要说两句。迷信VPN是没有道理的。VPN和SSL相同都是PKCS这类加密。这类加密的特点都是基于大素数理论,问题就在数 论上。PKCS里面有一些魔数,也就是没有原因算法里面就使用的一些数字。这些数字的来由很成问题。在某个,或者某几个黑屋子里面藏着这些数字的秘密。掌 握这些秘密就可以很大程度上减低暴力破解的计算量。所以,SSL、VPN对某些机构来说并不是破解不了。稍微费点劲,但是肯定可以快速破解。
再有,PKCS的证书体系也是问题。这就是很多人把电脑浏览器里面CNNIC的根证书删除的原因。掌握了根证书,就可以伪装成任何人。而iOS上面又没有办法查看某个网站签名的根证书。于是,iOS上面经过拆包又重新封装并使用CNNIC根证书签名的内容根本无法发现。
8. 那全都不安全吗?
goclang:
再回到对安全预期的问题上来。绝对安全是不存在的。只要使用公共网络,也就是互联网,就没有安全。从IP找到门牌号码也就几十分钟到两个小时的时间。
但是另一方面看,真的需要那么秘密吗?如果就为了上twitter,那么你的发言本身就是公开的。要是以为那东西看不见那就是迷糊了。信息都是公开的,APN的第三方嗅探漏洞也就不存在。都公开了,还怕嗅探?
至于twitter、facebook密码,gmail内容,这些都是HTTPS上面跑的,VPN和APN都一样(有个问题一定要考虑,在公共wifi网络下,登录http网站使用VPN时可以防止黑客,使用APN不行)。那么非HTTPS内容又想尽量安全怎么办?简单说,没办法。HTTP这种明文协议传输的内容本质上谁也不知道过了几道手才传输回来,有没有透明代理(至少VPN和保证从客户到VPN服务器的过程是加密的,APN代理不能)。
9. 是的,公开信息没有加密问题,但是我不想让人知道我看了,怎么办?
goclang:
你不能。刚才提到了,只要上网,找到人是分分钟的事(有时候一天能找到你比一年找到你危险差别是很大的)。另外,希望服务器在国外,可以拒绝移交数据,我看有点一厢情愿(至少当局获得国内数据要比国外简单的多得多)。找得到人(这还有个问题,使用VPN时可以实现隐藏真实IP的匿名冲浪,比如你在国内网站发不和谐的言论,网内网站获得是你VPN的IP,而APN代理在这方面就弱的多,其实其他设置的代理也一样,我以前说过),还有什么找不出来的?
10. FoxAE存储用户数据吗?
goclang:
不存。很简单,怕麻烦。网站的注册不要求验证邮箱,一方面是我们根本就对收集信息这类事情没有兴趣,另一方面也是不想自找麻烦。另外,FoxAE的 部署方式决定了我们没有使用Squid这类缓存服务器。缓存的管理也是件烦人的事(也有APN代理服务商靠缓存提速哦)。CPU、内存、硬盘消耗不说,其实效果很有限。
11. 那也就是FoxAE自称没有存储啦?
goclang:
是,也不是(总是似是而非呀)。刚才说了,HTTPS内容我们是看不到的,这一块想存也存不了。HTTP这块其实简单,自己架设个透明代理,看看HTTP的Header里面Date,Etag,应该也可以推测一下。当然,明文内容,信心其实就是个信任问题(嗯,一定要找个你信任的,或者知名的老牌的)。
对于一些对安全有特殊要求的人,我建议还是自己搭服务器算了。同时,自己搭服务器并不代表就安全。第一,手机本身是否安全,输入法什么的都是非常大 的安全隐患(苹果的输入法有很大安全隐患?)。第二,如果手机和电脑连接过,电脑是否安全。第三,Linode上面弄个OpenVPN,并不代表安全,参见CNNIC部分内容。
SSL其实不是好的保密传输选择。隐藏树叶最好的地方就是森林。所以,如果不是重新开发加密算法的话,使用SSL套SSL并且伪装数据包为媒体文件,然后使用HTTP明文传输伪装后的数据,这样应该比VPN什么的安全的多(你干嘛老是苦思冥想地说VPN呢,就因为你说不喜欢)。
当然,这并不方便,也不容易。
原文:http://blog.foxae.com/?p=32
(文中括号中的斜体字是我加的,哈哈哈)