SyxnX – since Nov 26, 2006

DSC_0016

朋友们,我和 @Syxnx 决定结束七年多的爱情长跑,结为连理。没有世俗繁复的仪式,我们计划安排一个简单的自助餐会,带上精心准备的喜糖,和大家分享我们此刻的甜蜜和对未来的憧憬。到时候见!

Douban FM CLI updated: 支持终端标题显示歌名以及通知中心

早上醒来工作,听到一首歌不错,突然想知道是什么歌,但是终端开了很多,感觉要找到 Douban FM 的 tab 太不方便。

于是吭哧吭哧敲了两个小功能,给原作者发了 pull request。

主要添加了终端标签显示播放状态,以及 OS X / Linux 通知中心、Growl 提醒当前歌曲的功能:

Screen Shot 2014-03-17 at 8.38.11 AM

嗯,这下舒服多了。

目前还没有被 merge 到上游,有兴趣可以去下载我的 fork:

https://github.com/Leask/douban.fm

升级 MacBook Pro with Retina display late 2012 以支持 802.11ac 无线网络

2013 年 MacBook Pro with Retina display 有小幅更新,对比 2012 年款,有以下几点变动:

1:从 Intel 第三代 Core IvyBridge 处理器升级到第四代的 Core Haswell / Crystalwell;
2:802.11ac Wi‑Fi wireless;
3:Bluetooth 4.0 wireless;
4:Thunderbolt 2。

从看到以上升级开始,我就开始垂涎 802.11ac 千兆无线网,但是手头的 12 年 rMBP 依然是够用的,现在追赶升级电脑有点不理智。于是萌生了升级网络模块的想法。其实早在 13 年款 MacBook Air ( MD712, MD760 ) 支持 802.11ac 以来,就有不少 geek (@yarshure…) 尝试把它装到 rMBP 上。但是由于两个网卡的长短不一致,Air 的网卡 ( BCM94360CS2 ) 比较短小,所以无法通过螺丝固定在 Pro 的网卡插槽内,虽然改造后可用,但方案并不优雅。

随着 13 年 rMBP 的上市,市场上开始出现拆机网卡,淘宝搜索型号 BCM94360CSAX,几百块就能到手,于是有了本文。

改造过程相当简单,所以没有什么好详细写的,让大家看几个图吧。

首先看看千兆无线网卡长什么样:
IMG_0940

翻个背面看看:
IMG_0953

拆开 Unibody 外壳,无线模块就在左上角风扇旁边:IMG_0949

来张近照:
IMG_0950

小心把上图的这个模块拆下来,然后换上新的就好了。

我们来看看升级前通过 Time Capsule 2013 的 5Ghz 802.11n 能达到的最高速度,450 Mbps:
BhPT-UwCIAAZLic

升级后,同样的网络环境,实现 802.11ac,跑满 1300 Mbps:
Screen Shot 2014-03-03 at 6.21.29 PM

速度提升还是相当明显的,还需要留意的是,很多应用都是直接或者间接使用无线网卡的 mac 地址来作为每台电脑的唯一标识的,例如 iTunes 和 Sublime Text 等,你需要重新授权一下:
Screen Shot 2014-03-04 at 4.24.05 PM

由于 Mac 的设计无线网卡和 Bluetooth 适配器是集成在一个模块里面的,所以升级无线模块后,我的机器同时也获得了 Bluetooth 4.0 功能。

这次升级应该算是小折腾见效快的便捷改造,十分推荐。如果需要查询更多拆机的细节、技巧,自行移步到 http://www.ifixit.com 即可。

PS:最后,我还尝试了安装 MacBook Air 2013 的无线网卡到 MacBook Air 2012 的机器里,但是发现这两代机器的网卡长短不同,13 年 Air 的网卡比较长,无法安装到 12 年的机器里,看图:
IMG_0965

启用新电话号码

Leaskh
朋友们,两年前我决定弃用iPhone启用iPad mini LTE作为唯一随身通讯设备。但由于种种原因在家保留了个非智能手机作为补充。得益于国内虚拟手机号码服务开通,我终于可以彻底告别手机了!今天起我正式启用联通虚拟号码13073171897大家想电话、信息找我请使用这个新号码。
2/21/14, 5:02 PM

测试为 Flora_Pac 提供 HTTP host

有 Flora_Pac 用户(yyxst***@gmail.com 等)提出能不能提供官方 HTTP host 方式,通过 request 参数来返回适用的 PAC 文件(类似于 autoproxy2pac)。这个需求我早前就有考虑,起初主要担心集中提供 PAC host 会导致服务器被墙而徒劳无功。但最近又想了想,很多朋友的机器上其实是没有开发环境的,他们也不见得全都熟悉 Python 等工具,本着让翻墙能尽可能简单便利,尽可能降低门槛的期望,我简单实现了一下这个功能。目前的实现相当简陋,但凑合能用。

Flora_Pac host demo

使用相当简单,我就不写什么教程了,直接上几个 demo 大家一看就懂了:

* 创建代理地址为 SOCKS 127.0.0.1:8964 的 PAC 文件:
$ curl http://flora.leaskh.com/pac?proxy=SOCKS%20127.0.0.1%3A8964

* 创建代理地址为 SOCKS5 127.0.0.1:8964 的 PAC 文件:
$ curl http://flora.leaskh.com/pac?proxy=SOCKS5%20127.0.0.1%3A8964

* 创建代理地址为 HTTP 127.0.0.1:6489 的 PAC 文件:
$ curl http://flora.leaskh.com/pac?proxy=PROXY%20127.0.0.1%3A6489

* 当第一代理 ( SOCKS5 127.0.0.1:8964 ) 失败时尝试第二代理 ( SOCKS 127.0.0.1:8964 ):
$ curl http://flora.leaskh.com/pac?proxy=SOCKS5%20127.0.0.1%3A8964%3B%20SOCKS%20127.0.0.1%3A8964

基本上就这样,如 demo 所示,直接把代理服务器地址转义后填入 proxy 参数中,请求 Flora_Pac 服务器(http://flora.leaskh.com/pac)就行。其中 URL 参数的转义规则 Google 一下很容易查到。下面列出可能会被用到的几个符号:

* 空格 ‘ ‘   ===>   %20 或者 +
* 冒号  :    ===>   %3A
* 分号  ;    ===>   %3B

先写到这里,有疑问欢迎联系我。最后,再一次期望有一天我们不再需要翻墙。

每一行代码都在改变世界

最近有几天比较闲,更新了一下几个用于翻墙的小项目。其中变化比较大的是 Flora_Pac,我一直很关注 PAC 在实际应用场景的效率问题,因为这直接和翻墙体验密切相关。能省一次 DNS 请求、一次正则匹配,就意味着用户可以把更多的延迟容忍度分配到代理通道上来。有天 @googollee 提出了使用二分搜索加速路由匹配的想法很不错,于是我们对其可行性做了比较多的分析和研究,最终于今天完成了代码。

然后前几天我在 Github 上看到了一个很不错的项目,叫做 bestroutetb ( Best Route Table ),能把 VPN 路由表条目压缩到原来的 2% 大小,且基本不影响使用。我立刻研究了优化思想 ,发现作者 @ashi009 的思路相当有趣,并且行之有效。我开始思考把这种算法移植到 Flora_Pac 的可能性,但是在详细研究之后,我觉得并不适合。首先,bestroutetb 项目要达到最佳压缩比其实是对路由表进行有损压缩的,虽然能满足大部分使用场景,但我直觉上认为这不是完美的方法,仅让有限几个国家走 VPN,哪么其他被墙的小国网站还是无法访问;其次,通过合并子网后,Flora_Pac 实际的条目数是 1700 条的量级,距离 bestroutetb 仅包括 US / UK / HK 的情况下实现 1200 条的成绩差距并不大,反而前者路由规则更完善;再次,路由表和 PAC 很不一样,路由表简单地匹配规则,无法(由于原理不同路由表也没有必要)使用更好的算法加速匹配,而 PAC 却能够(且必要)实现算法来进行更复杂的匹配,问题在于如选用 bestroutetb 的思路,必然会破坏列表顺序的连续性,使二分搜索失效,反而让匹配时间变长。综上考虑,我还是放弃了使用 bestroutetb 优化 Flora_Pac 的念头。PS:以上讨论只表明 bestroutetb 的优化思路不适合 port 到 PAC 上,而`不能`否定 bestroutetb 是一个很好的项目。

Mac 翻墙用户应该都碰到了一个问题,OS X 10.7 之后,由于系统贯彻 sandbox 策略,网络配置中不能再通过文件系统直接指定 PAC 脚本,而必须把 PAC 文件 host 到 HTTP 服务器上。针对此情况,我在新版本的 Flora_Pac 中内建了 HTTP PAC 服务器。PAC 服务器使用相当简单,只需要在使用 Flora_Pac 的时候指定一个本地监听端口即可,见下图。

Flora PAC Server on Mac

目前 Shadowsocks + Flora_Pac 是我所有设备的翻墙方式,包括 Mac、Linux、iOS、Windows 使用都很平滑,对比 VPN 方式更轻松灵活,基本上不用再关心网站被墙的问题。Shadowsocks-iOS 我有一个 Fork,目前推上去的改动比较少,这个 Fork 主要是想让开发者更容易在 iOS 上 build 一个能跑在后台的翻墙代理。但由于系统限制,目前障碍较多,等有进一步的成果我再写写吧。

近期我在 Twitter 上关于 #开房记录 数据库的事情惹来一些争议 ,我原想写篇文章总结一下想法,后来想想也就算了,有时间还是多写写代码吧。我不善雄辩,且由始至终我都`没`觉得我做错了,我认为无须费唇舌解释什么。总有一天,当体制的黑幕完全吞噬蓝天的时候,大家才会发现原本死守那一点点私隐,有多么可笑。

为什么我会在这里谈 #开房记录 数据库的事情?和翻墙有关系吗?其实私隐数据泄露的本质是公共服务实名制,这和 GFW 其实同样来源于“体制的高墙”,他们背后代表着同样一个邪恶的目的。翻墙的本质,无论你是否认同,你就是在对抗村上春树老先生所唾弃的“体制的高墙”。Flora_Pac 的目的其实和网上其他开源翻墙辅助工具一样,在“努力通过技术手段让翻墙变得更轻松”。我坚信,面对“体制的高墙”,技术永远是一把利剑,所以在我眼中 WikiLeaks、Snowden,以及开发翻墙工具的工程师们,你们都是英雄,是这个时代的游侠。

每一行代码都在改变世界,你希望你的代码把世界改造成什么样?

隐私,信息以及信息安全 by @virushuo

感谢 virushuo 撰写此文,以下是全文转载:

作者:virushuo 发表于 2013-10-19 02:10 最后更新于 2013-10-19 02:10
版权声明:按照by-nc-sa的cc协议可转载,拒绝采用“独家” 授权媒介(含网站和平面媒体)转载、引用、链接,除非获得本人许可。转载时请务必以超链接形式标明文章原始出处和作者信息及本声明。
http://blog.devep.net/virushuo/2013/10/19/post_85.html


这几天网上流传一份号称某个经济酒店开房记录的数据,其原始格式是sql server的backup文件。Leaskh转换了一个csv版本,分享到了网盘上,但遭到了很多人的痛骂。我开始比较惊讶为什么有人会这么激动,后来明白了,就像医生认为生死是自然规律,而普通人则觉得要避讳。人们对于自己越不了解的事情,越喜欢表现出来天然正义的样子。

隐私确实是一个值得讨论的话题,它和每个人密切相关,可惜在信息化如此彻底的时代,多数人除了直觉之外,对此一无所知,甚至连基本的准备都没有。现实世界和科技脱节如此之大的状况并不常见,这让这个话题显得更加有意义。在这篇blog里面我想分享一下我对这个问题的看法,我所知道的现实状况,以及可行的解决方案。

一 信息化改变了什么

在信息化之前,数据的泄漏和传播比今天难的多。传统的纸质文档很难被复制和传播,对比一下早年的”手抄本”,很容易就能理解,在信息可以被数字化之前,就算要刻意传播一份信息,也需要巨大的成本和时间, 那时候生产信息和传播的权利基本是被垄断的。

到了现在,一份存储在联网设备中的数据,可以瞬间被复制到世界各处。这从根本改变了传播的方式,也使得保密变得无比困难。这种低成本、速度极快的传播特性,造成了”不可撤回”的特性,即一份数据,一旦流传进公共领域,则无法被撤回或销毁,(这个观点我在几年前写Google的blog中也提到过)进入公共领域之后的数据,就相当于永远存在在互联网上了。

这样就很容易明白,用任何现实世界的东西来比喻信息传播,都是不恰当的类比。现实世界的物体,无法被复制,我拿走你的东西你就没有了。信息可以被无限复制,被复制者并不会失去原有的信息,甚至很多时候被复制者并不知道自己的信息已经被复制过了。

在这种状况下,应该默认凡是以数字化形式存在的数据,都早晚会进入公共领域,即泄密。唯一的区别只在于泄密的时间早晚。所以,正确的心态是默认凡是被数字化的数据都已经是公开的。这样你就可以提前做好准备,当泄密真的出现的时候,可以不那么慌乱。

从非公共领域到公共领域这个界限一旦突破,后面的事情就是不可阻挡的了。所以指责某一个传播者是毫无意义的,这就和政府要立法追究传播超过500次的微博一样荒唐。禁止别人传播一份从公共领域获得的数据,这本质上就是信息管制。这种行为和政府以行政命令要求删贴是一样的,两者的区别只在于是否使用公权力完成,以及如何定义”不良信息”而已。注意,这里所说数据特指已经进入公共领域的,如果是从非公共领域传播到公共领域,那是应该被谴责的,这种行为不仅不道德,而且违法。

好玩的是,反对传播这些数据的人,他们的反对本身也在加速这份数据的传播,并不只是传播全部数据才叫传播,传播关于有这份数据存在的消息同样是传播方式。由于他们的反对,更多人关注了这个事件,并且找到了下载方式。如果真想避免传播,那么看到这种情况最好在心里骂一下,而不要写出来。

二 隐私的进化以及本质

人们对隐私的容忍一直随着时代和开放程度的推移而进化,20年前,刚刚有互联网的时候,照片就算隐私。如果有人把你的照片放到BBS上,人们竟然看到了你真实形象,你会觉得隐私被严重侵犯了。而到了2006年,flickr给照片加了一个People in Photos功能,用户可以方便的在一张照片中标记出现的人的名字。被标记的人往往并不觉得被侵犯了隐私。

现在,照片对于大多数人已经不是那么难以容忍的隐私了。有了Facebook之后,贴照片简直是理所应当的,有了Instagram之后,你随时可能被别人拍下来,贴到一个任何人都可以看到的地方。可见关于隐私的定义是一直在变化的。

到底什么才是最重要的隐私呢?我认为是关联到一个物理的人的办法。比如我获取了一堆网站访问数据,如果我只知道创建这些数据的ip地址,这不算得到了他人的隐私,而一旦我知道了当时使用这个ip的物理的人,用这种办法把访问数据和这个人连接起来,这时候这些数据就变得非常敏感了,这时候这些数据和链接关系就成为了隐私。

我非常能理解人们对于身份证号泄漏的担心,但号码本身其实并没有任何意义,真正的危害在于现实社会有很多资源是关联在身份证号上的。这也就是为什么人们不再担心照片这种隐私,而担心身份证号,因为后者关联了更多的重要信息。

在恐惧身份证号被泄漏的同时,很少有人会考虑一下,为什么我们需要把这么多信息关联到一个号码上。比如说,为什么办一个手机卡需要身份证?为什么住个酒店也需要?为什么买张火车票也需要?为什么去网吧上网也需要?为什么买把菜刀也需要?

使用带有照片的官方身份证明时,主要目的是证明物理的人到底是谁。比如用来登机和安检的时候,这时候需要确认身份是正常的,但为什么上个网,住个店也需要呢?这两种只是普通的商业活动,付钱就可以完成交易,为什么关心人的真实身份呢?在商业活动中,多数情况下都可以使用间接的验证方式,比如利用事先约定的预订号,或者电话号码,或者信用卡号码完成,但现实中,至少在中国,往往必须非身份证不可。这到底是为什么?

答案是政府对身份信息的极度渴求。这不仅仅是中国的问题,而是个世界性的普遍问题。

如果不是这种渴求,那么能把信息链接到物理的人的机会就会少的多。如果住酒店不需要提供身份证号,只需要验证一下订房所用的信用卡或者订单号,那么也就不会有这次的泄漏事件。

三 更危险的数据

现实中被收集的数据远远多于基本的身份信息,比这更危险的数据多的是。我一直觉得如同定时炸弹一样的信息包括:

  1. 电子商务网站的购物历史记录
  2. google的搜索历史
  3. 网站的浏览记录
  4. 手机的基站漫游历史数据
  5. 铺天盖地的摄像头记录

这些数据可不是这次泄漏的身份证号,住址这种静态信息,而是关系到人的行为记录。得到这些数据,经过一些计算,往往能挖掘出来你自己都不知道的东西。比起这些,这次泄漏的东西根本算不上隐私,也一点都不值得担心。

我相信这些信息除了有关部门掌握之外,至少还有一部分同样在某些地下渠道流传,某一天他们就会突然曝光在所有人面前。每个人都应该认真想想这一天到来的时候怎么办。

最可怕的事情是你在不同地方的数据被汇总到一起,并且用于计算。这将计算出整个人的生活轨迹,到这种状况才是毫无隐私可言。而现在连买个预付费手机卡都需要身份证,将来出现这种情况我也毫不惊奇。

donttrackus这个网站非常形象的解释了在现在的网络条件下,网络广告商是如何定位一个人的。这些数据的收集时刻都在发生,这些数据可比身份证号码重要多了,但关心的人反而不多。

四 对策和希望

很诡异的,这次对leaskh骂的最狠的那些人,恰好是最不注重隐私保护的那个群体,他们不仅仅是不注重,而且在这方面缺乏基本知识。因为只要对这种状况略有所知,也不会认为身份证号和地址是多大的事,他们举出的那些仇家利用这些信息报复之类的例子更是可笑,如果真想知道一个人的身份证信息和电话,一般花几十块钱就能轻松买到。

前面说过,事情的根本在于身份信息的滥用和过分的存储,在这种情况下,信息必然会泄漏。我们当然希望没有任何信息被泄漏,但在现实中,这是无法保证的。所以指责传播已经泄漏信息的人是没有意义的,更算不得解决方案,除非有办法让全世界所有人都不这样做,这也同样不可能,就算有严格的法律,仍然会有人愿意冒险,何况现在根本没有像样的法律规范这种行为。所以,更好的办法是理解,并且接受这个事实。听起来很残酷,但这就跟北京的空气状况一样,已经是无法更改的现实了。

为了避免我前面所说的最可怕的状况出现,有一些对策可用。其中最根本的解决问题方式我们没法直接做到,只能间接推动的,另外一部分是自己就可以做到的。列在这里:

  1. 目前基于单个号码的身份验证体系不适合信息社会,应该尽早改用公私密钥方式。这不是我们能决定的,就算是美国也没能到这一步,只能尽量呼吁。
  2. 商业机构应该尽量避免直接关联身份证号码,至少做到验证了人的身份之后不存储或尽量短时间存储。这也不是我们能改变的,只能尽量呼吁。
  3. 充分理解社会规则,并灵活应用。比如有人认为 不登记身份证就没办法住酒店,其实用户口本也可以。买火车票机票,护照、港澳通行证都可以用。当然这些也属于相对敏感的信息,但关联不同证件的能力目前应该还只有少数人能做到。灵活组合这些证件的应用模式,能在数据大规模泄漏时有效降低危害。
  4. 准备不同手机号码应用于不同场景,使用voip工具做到这一点成本更低,也更方便。
  5. 仔细阅读 http://donttrack.us/ 理解网络广告是如何收集你的隐私和定位你的。并且按照里面的建议处理你的浏览器。
  6. 扔垃圾的时候把快递单和信封上的信息用刀刮掉。
  7. 面对无处不在的摄像头,和识别率已经极高的面部识别系统,学会cvdazzle化妆方法

如果你真的关心这个领域发生的事情,仔细去思考应该能想到更多要注意的事情。不过我想多数人只是骂骂人发泄一下而已。

五 泄漏的信息与权利平衡

我支持传播已经泄漏的信息。因为信息的价值在于独享,秘密只有被少数人知道才成为秘密。一旦人人皆知,就不再是秘密,也不再有价值。所以加速传播被泄漏的信息,反而会降低对当事人的伤害,并且有益于整个社会群体。

对于个人来说,每个人都需要尽早知道自己的信息是否已经泄漏,并作出对应的解决方案。如果你不知道自己信息已经泄漏,而其他人知道,那么危害就很大,比如可以用来敲诈,也可以用来对你的亲属行骗。用更方便查看的格式,更快的传播,有利于人们确认自己的信息泄漏状态。

当所有数据人手一份的时候,每个人之间会形成权利平衡,即,你可以查阅我的信息,我也可以查阅你的。这比只有单方面拥有权利更加可靠,也可以降低危害。

这当然不是最好的办法,但这是现实条件下瑕疵最少的办法。

毫无保留的传播这些信息的人是友好的,因为他们本可以保持私有,用来获利。比如去做个查询信息是否泄漏的网站,这还能通过流量赚到广告费。(这次已经出现了好多个这种网站了)。直接毫无保留的放出全部数据的意义在于避免了进一步诈骗发生的可能性,这就是信息平等之后的好处。

举个例子说明吧。如果获得这次泄漏的身份信息的人,不直接提供全文下载,而是做一个网站,让你输入你的身份证号和电话查询是否泄漏,这就能成为一个新的骗局,大量本来不在泄漏范围内的人会主动提供自己的身份信息用来查询,最终被记录下来,造成新的泄漏。

甚至在没有发生真正的信息泄漏之前,都可以利用这种方式获得敏感信息。比如故意传播出某类信息被泄漏的消息,然后提供一个查询网站,把所有来查询的人的数据都记录下来。所以,在拿到你自己可以查询的全部数据之前,不要相信任何传说或者任何人。

除此之外,全部数据的流传也对于追查事情的起源有帮助。不同的人根据自己的知识,可以通过数据格式、范围、特征等等猜测泄漏的方式,这些碎片的线索组合在一起,就有可能拼凑出泄漏的方式和起源,以及系统的漏洞等。如果没有大规模的全部数据的泄漏,相信没有厂商会承认泄漏的原因是自己的平台吧。

很难相信特定的人或者组织可以完成以上这些工作,把全部数据放出来,通过群体的智慧来保护群体更可靠。这次泄漏的数据由最早风传的开房记录,到最后可以被确认是酒店内wifi认证的信息,正好可以说明这一点。

更有意思的是,正是因为这份数据被传播开,人们才有机会证明其中的数据是真实的。这又形成了另外一个驳论,即:对于二次传播者,如果不传播它,就无法证明其中真实数据的比例,也无法知道传播的是否是带有隐私性质的数据。

六 总结

信息安全和隐私是这个时代不可避免的威胁。解决这个威胁,不是靠情绪化的谩骂和煽动,而是需要确实可行的解决方案。涉及现实世界、政府、立法等诸多层面,这个问题的完美解决如此的复杂,并且需要漫长的时间。更有效的个人保护方式是先调整好心态,清楚的知道什么状况下信息有可能被泄漏。

当你每一次提供个人信息的时候,都应该先考虑这些信息泄漏之后会对你造成什么危害,并且想好处理办法。如果会造成不可避免的危害,而且你又想不出办法避免提供这些信息,那么这件事最好干脆不要做。

就和前一段突然冒出一些平时对版权毫不关心的人开始关心抄袭和临摹一样,这次也同样冒出来很多对隐私和信息安全毫不关心的人指责一个只不过转换了一下数据格式的程序员侵犯了他们的隐私。这是多么荒唐的事,对照我前面提出的解决方案,如果大部分事情都没做到,那么在信息时代你实际上是在裸奔的。

如果一个人不敢指责过分收集信息的政府,不去指责存储这些本来不需要长期存储信息的商家,又没法找到真正盗取这些信息的人,只去指责一个转换了一下数据格式,以利于人们查询和研究的程序员,这种行为显得懦弱又无知。在我看来,这就像一个裸奔的人,拼命保护着身上仅有的一条的领带,并且认为自己衣着整齐。

ps: 两年前密码泄漏的时候,我也写过一篇主题相近的blog: 《密码泄漏和黑天鹅事件》,其中也提到了”与其说是安全问题,不如说是出乎多数人的意料造成的恐慌”。