Shell's Home

Mar 8, 2018 - 2 minute read - Comments

密码学基本原理

Digest 摘要为一个函数H。对任意数据d,有h=H(s)。同时至少满足下面特性1。其余特性为额外要求。 对相同的数据d1=d2,计算得到h1=H(d1)和h2=H(d2),必然有h1=h2。但不要求h1=h2的情况下,必然有d1=d2。 根据h计算任意一个可能的d极其困难。(安全性) d服从随机分布的情况下,h的分布足够随机。(均匀性) hash系列函数 hash系列中最著名的即MD5,其后继者为SHA1,SHA2,SHA3等。但实际上这几个都是密码学hash函数。非密码hash常用于快速计算均匀散列值(例如hashtable),代表有CRC (实际上CRC主要的目地是校验,而不是散列), FNV,Murmur。这几个非密码hash函数的对比可以看这里。 hash函数需要注意长度。一般来说,长度越长越安全(越难被找到一个碰撞值)。但是过于长的值会在保存和使用上产生困难。 Rainbow table Rainbow table是一种通过预先计算来碰撞的手段。 从粗略的角度来说,你可以认为这就是一个巨大的反向hash表,保存了所有计算过的hash和对应的碰撞数据。但是通过计算可知,这样的反向表会占用巨大的存储空间。彩虹表采用巧妙的算法缩减了空间消耗。 其基础思想是,对某个碰撞数据,计算其hash,随后通过某个算法R,将这个目标hash再映射到另一个碰撞数据上去。通过这种方式,一个碰撞数据可以持续的计算出一串不同的hash。假设这个长度为n,我们最后保留最终一个hash和最初一个碰撞数据。 在检索某个hash的原始碰撞数据时,我们可以利用R将其映射为碰撞数据(但不是我们需要的那个碰撞数据),进而计算hash串并检测是否在反向表里。如果表里存在这个hash的碰撞数据,那么在生成n步的hash串的过程中,必然能在反向表里发现命中。而当发现命中后,就可以通过原始碰撞数据算出整个碰撞链,从而找到该hash的对应碰撞数据。 从算法分析的角度来说,这是一个空间换时间和时间换空间同时存在的巧妙算法。利用反向表计算原始碰撞是用空间换时间,用hash串来压缩空间消耗是用时间换空间。 另一个细节是hash链的碰撞。当hash链在某个节点相同,后续链条必然完全相同。这大大降低了hash串的效率。因此彩虹表采取了一个变形。算法R在n步中每一步都各不相同(实际一般是将n当作参数),这样使得hash碰撞只发生在一个点上。由于算法在每个步骤上各自不一,因而得名彩虹表。 KDF 密钥生成算法( KDF )是一类算法的统称,用于将一个密码/密钥变换成另一个(或多个)密码/密钥。在这个过程中,会提供很多额外特性。例如符合特定格式,防御暴力穷举攻击,保存后难于破解原始密码,等。 KDF的最知名场景,就是密码保存问题。用户的密码不应直接保存,这样在万一数据库泄漏时就会泄漏原始密码。而单纯hash会导致用户密码遭受彩虹表攻击。一般解决这个问题的方法是对密码加盐。但是盐是加在前面还是后面呢?以我个人的分析来看,似乎是没有区别的。即s+salt和salt+s都能保证安全。当然,更好的方法是用scrypt或bcrypt。他本身就有专门的函数保证密码安全保存,这可比加盐好使多了。 最佳实践 现在已经2018年了,我相信大部分读者都应该知道MD5和SHA1不安全的事了吧。这两者虽然还能完成摘要的用途,但是并没有安全保证了。如果你需要一个安全的hash算法,我推荐sha2。sha3目前并没有进入主流系统,而且执行速度还是略慢。 另外,如果有的选择的话,在sha2算法族里我推荐SHA-512/256或SHA-512/224。这两个算法有助于避免长度扩展攻击。 Encryption and Decryption 对称加密解密为一对函数,加密为E,解密为D。对任意数据d和密钥p,满足下面要求1和2。 加密为e=E(d, p),解密为d=D(e, p)。 攻击者得知E,D,e的情况下,无法反推d和p。 在条件2的基础上,攻击者能得知d和对应e的情况下,无法反推p。(已知明文攻击) 在条件2的基础上,攻击者能构造d并得知对应e的情况下,无法反推p。(选择明文攻击) 对称加密有几种可能的变形情况,例如E和D为同样的函数,一次加密第二次解密。或者由生成算法构造出密钥p和解密密钥p’。在其中密钥p可以推算变换为解密密钥p’。但这其实仍然符合上面的描述。因为解密时可以使用d=D(e, p'),而p'=G(p),因此d=D(e, G(p)),即可认为d=D'(e, p)。对于密钥p无法推算出解密密钥p’的情况,请参考下面的“非对称加密”。 DES/AES加密解密算法 加密算法中最有名的是DES和AES。关于这两个,我们不赘述。 密码模式 加解密算法一般都是以块模式运作的。即每个加密算法都有一个特定的长度,他只能处理这个长度的数据。块密码模式算法将基于某个特定的块算法,将其应用于流上。 最简单的用法是重复进行加密。取明文的前N字节加密,得到N字节密文。重复直到得到最后一块数据,数据的长度必然大于0小于N。对尾部的数据补足0。最后将所有密文联合起来,得到最终密文。这种模式叫做ECB模式。 ECB模式的好处是简单,但是ECB并不能防御内容替换攻击。攻击者可以通过某种方式获得一个数据的加密形式(选择明文)B’,然后将某个加密后的块B’替换原始块B。以此,虽然攻击者并不知道原始内容,但是可以替换其中的部分内容。 人们对ECB做了一点改进,使用上一个块的加密结果,对下一个块做干扰(具体使用XOR)。如此一来,对任意一个块的变更会导致后续块全部都无法解密。第一个块没有上一个块,也就没有加密结果。所以CBC需要一个初始向量IV来初始化干扰。而先加密上一个块的结果,再和当前数据XOR的算法,被称为CFB。CFB和CBC仅仅顺序上有区别,但是CFB可以用于流式加密,而CBC不行。因为CBC必须得到一个完整块,才能计算加密。而CFB预先算出mask,用XOR获得结果。 CFB再略变化一点,就可以构成OFB。OFB取的是XOR前的结果,因此加密序列并不受明文的影响,只受IV和key的影响。你可以想像,OFB是一个由IV和key已经决定好的,无限长的mask,逐步XOR到明文上。 但是CFB和OFB都有一些缺陷,例如明文和密文的异或对应性。在确定模式为CFB或OFB的前提下,对某些特定位置遍历所有可能空间,就能在不了解解密结果的前提下遍历所有明文可能性。这个问题被用于ss的主动探测上。 密码模式具体可以看这里。 Salsa20 Salsa20原来叫Chacha20,是一种经过特别设计的密码系统,在未经优化的CPU上拥有非常快的执行速度。 最佳实践 可能和大家想像的相反,一般没事不推荐直接使用加密函数本身,而是推荐使用AEAD算法。这里有一份2015年密码学最佳实践,按照推荐,是使用AES-GCM或Chacha20-Poly1305最好。这两种都是AEAD,具体下面有介绍。 如果一定要用加密算法,而非AEAD的话。推荐使用NaCl。它的加密算法默认选择是XSalsa20/20(Salsa20的一个变形)。 Message authentication code 消息验真,不同于摘要,要求的是拦截者无法伪造。其前提条件是发送者和验证者有一个共同的秘密p。本质上看,这个就是签署(sign)。但是一般我们讲sign都是指非对称的sign,MAC是对称式的。对称签署为两个函数,签署为S,校验为V。对任意数据d和密钥p。 对于签署获得的v=S(d, p),可以用V(d, v, p)来检验d和v是否成对。 攻击者在得知S,V,v,d的情况下,无法反推p。 签署算法经常和摘要算法合用,即对数据d先使用摘要H得到摘要,再计算签署。即v=S(H(d), p)。验证时使用V(H(d), v, p)来验证。

Jan 30, 2018 - 1 minute read - Comments

similan船宿

大致情况介绍 Similan archipelago,在Thailand,Phuket西北方一点的位置。要从Phuket坐一个多小时车,到一个叫做Khao Lak的地方。然后再坐船出海,走大概两三小时。地图上看,在Thailand的外海,离海岸50公里以上。(这应当是公海了吧) 潜店和船 我们是让朋友报的船,到了才知道,潜店是这家Khaolak Scuba Adventures,船是三天三夜的一艘Manta Queen 5。船宽5米长26米,推荐容纳20人,实际容纳22人。推荐船员5人,实际7人。推荐潜导5人,实际7人(含manager)。 这艘船,怎么说呢,家吉一看就觉得很坑爹,我觉得还好吧,毕竟这个价格。船舱里面是上下铺的床,都是软垫铺一层床单,加一个枕头和被子。床很小,大约60-80公分宽,2米长。趟下去顶天立地,横向只够翻身,高度不够坐起。船舱里有空调,但是只有晚上打开。平时只有头上的一个风扇。幸好电倒是24小时提供,足以充手机和相机。然而这一路上都没有信号。 这也不难理解。Similan离最近的陆地超过50km,而普通手机信号只能传播20km左右。再加上按照地球弧度,50km造成的高度差会高达200m左右(6700*(1-math.cos(50⁄20000.0*math.pi))*1000,不知道我有没有算错),信号塔不在山上的话,无线信号会直接被海水阻挡住。所以整个船宿过程是没有信号的。 我们说回船。一层前半部是8个船舱,中间是三个浴室兼厕所,后部是潜水装备间。二层前半部是船长室和4个船舱,后部是公共空间,一般在这里做brief或者吃饭。三层是Sun deck,带一个顶棚。我们经常在潜水间隔跑去Sun deck那里晒太阳。冬天Similan的水还是有点冷(28左右吧),晒晒太阳有助于蒸发水分补充热能减少寒冷。 这里要说说厕所。船上的厕所都是直排的,你的排泄物会直接冲到海里。所以如果有什么可能导致问题的东西(例如,纸巾),必须丢到垃圾桶里。有一次某个客人的纸巾丟到马桶里了,结果一个厕所就无法使用了。我们还只有三个厕所,每个都是厕所/浴室/面盆的合体(地方也不是一般的小)。一旦碰到早上起床,潜水前后。厕所前排长队是意料之中。所以那次厕所出问题后,基本每次高峰时刻,厕所前面都会排上一个小时左右的队。 航程 我们是晚上9点左右上船的,经过一个简短的brief就开船了。Manager是一个俄罗斯妹子,声音比较沙哑。晚上经过两个多小时的晃悠,我们到了Similan群岛附近的一个地方停泊。 睡过一晚上后,早上6点起床做brief,下水check dive,吃早饭。休息一小时顺便换个地方,再下一支,起来吃午饭再休息一小时。下午下一支,起来休息两小时再吃个晚饭。晚饭后大家聊聊天,再下一次夜潜,第一天结束。 第一天我碰到了剧烈的头痛,推测是在第二或第三潜的时候上浮过快导致。一旦产生气泡,要消解起来就要好几小时的排氮。所以夜潜的时候都在头痛,直到夜宵结束后才逐步减轻。所以大家要小心上浮速度问题,非但不要超过18m/min,最好控制在9m/min以内,甚至短距离内也不要放松。 这次潜水我全程使用高氧,一支大概要150THB,合30CNY。全程总计300CNY,我觉得挺便宜。原则上说,这让我全程舒服很多。至于头痛,只能说大概我控制的还不够好。 潜点我就不一一列举了,反正你们也没得选。大致来说,1.1左右Similan水温28左右,不需要湿衣。天气晴,偶尔有小雨。海浪一般。大部分时候是没什么感觉的,只有一次例外。当然,开船的时候晃动还是比较猛烈的。 第二天就是晕船。早上起来,船长泊在一个面向波浪,靠近岛礁的地方休息,等待等会潜水。(海浪也是有传递方向的,一般船长会选择泊在岛背面,减少波浪)结果海浪加岸边的波浪反弹把我晃晕了。早上一支结束后,难受的生不如死,就吃了一颗晕船药,放弃一支潜水,躺在船舱里睡觉。他们上来后,船长就开始换地方,我继续睡觉。等突然就有船员很开心的敲门,Dolphin!我大概也好的差不多了,跑到Sun deck那就开始观望海豚。一群海豚追逐着我们和隔壁一艘潜水船,不断盘旋和跳出水面,大概跟了半个多小时。船长还特意偏出部分航线来追海豚。可惜跑的太快了,忘记把相机拿出来,结果没照片,只能等同船的人发给我(如果他们还记得的话)。 至于晕船,我了解到一点。不是我不会晕,只是海浪还不够大。后来我就聪明了。凡是这种有晕船可能性的情况,统统先吃再说。 第三天去北边的Koh Bon那。我们早上第一支下去的时候,有个团友就看到了Manta,但是他没有叮叮。潜到一半的时候,潜导把我们集体敲起来看Manta。我们集体连气泡都不敢吐,就看着一只巨大的Manta从我们头顶飞过。旁边还有几条大鱼(当然,和Manta本身大小比起来是大大不如)。上水之后,把同船的人羡慕坏了,我们Team直接变成了Manta Team。不过第二支的时候,我们在一个山脊侧面遇到1-2节的对向流。潜导看我们踢的很辛苦,就斜切避开了。后面几个Team就直接顶流,最后Drift。所以他们上水的位置比较靠外,我们是在Bay里面上水的。他们上水的时候又看到了Manta。 好吧,这样也是蛮公平的。 另外就是回程路上,我们最后一支是在回程一半的地方,Wreck Dive。尼马Wreck我见多了,但是这么多鱼的我还是头一次见到。能见度不高,只有10左右。但是整个行程基本都是在鱼类瀑布里面游动。就看到无数鱼围着你转圈圈。上来之后我们在那里吐槽,为啥海洋中间能见度那么差?那TM都是鱼类的粪便。 上陆地后事情就乏善可陈了。在Phuket住了一晚,早上坐L家的车到了Samui,晚上在Samui吃了点东西(下船的时候正好大雨,等我们住下,雨停了)。再一个早上坐另一艘船到了Koh tao。 Koh Tao Koh Tao算得上是我和家吉的老地盘了,这次还是到Crystal。他们的宿舍修好了,就在学校隔壁。很近不说,还有空调,1000THB一天。 这次去Crystal,是考Deep Dive。这次搞明白了一个问题。在AOW的时候,我们不是有五个专长么?其实在AOW的时候,我们并不是修完了5个专长,而是每个专长只上了一节课。所以AOW修完,我们是没有专长证的。但是在AOW时附修的EAN,是专门的两支,所以有专门的证。AOW的这五节课只给了我们两个好处: 部分的专长能力。例如深潜,AOW必修课,给我们30米深度许可。 在考对应专长的时候,能少上一次课。 所以,这次的深潜专长,经过三次大深度潜水(至少一次30米以上),和一次额外辅助减压(抱气瓶),许可我潜到40米深度。但是不得不吐槽一下,在仔细查过之后,我发现这个证并不是特别有用。因为: 很多保险并不支持40米深度。例如美亚,要求你在证件许可下,30米深度内活动。所以30米以下深度潜水是无保险的(而且可能会连累你之后的潜水全都没有保险)。 40米深度并不是谁都能去的。如果你的潜导,全组潜伴并不是都有这个证,你就下不去。 EAN下40米深度的配套很不友好。EAN32的最大深度是32-33米,要下40米深度,需要用EAN28。但是EAN的标准是32或36(左右),很多地方并没有28,例如Crystal。这导致这种大深度潜水反而必须使用空气,其实非常消耗No Dec。老潜水员知道,大部分高强度潜水的时候,No Dec才是瓶颈。 30-40米深度可见生物更少。这个深度生物体积更大,出现几率变少,基本都是博人品的重复潜水。 所以,如果考专长的话。你们可以考虑一下Deep Dive是不是值得考。以下是我觉得还不错的几个证,有机会可能会考: Wreck。绑线进去的那种,汗。要求15以上,AOW。 Sidemount。15岁以上,OW。 Dry Suit。10岁以上,OW。这个在潜冷水的时候是必需品。 Rebreather。18岁以上,OW,EAN,最低25潜。这个要求挺复杂,但是主证到不用AOW(实话说EAN+25logs其实是超过AOW的)。CCR在大深度还是比较管用的,而且下去不会有气泡惊到鱼群。 其中,Sidemount,Drysuit,Rebreather都是需要考虑是不是能在潜店租到装备的。也欢迎考过上述几个证的朋友给予意见,是不是值得。起码EAN是非常值得的一个证。 另外两个非专长的课,我有计划去上的。 Rescue。要先考出EFR来。但是我挺不喜欢中红会。 GUE Fundamentals。俗称馒头课。从我看到的数据来说,PG就可以上。 最后说一下这次考证的几个细节。

Dec 17, 2017 - 1 minute read - Comments

在云存储上叠加加密文件系统

目标很简单。云存储上很多文件都挺私人的,直接放着很吓人。虽说云存储采用各种方法来保证你的安全,但是世界上没有绝对的安全。万一密码泄漏,或者更糟糕,云存储泄漏。此时你的各种文件就在网络上裸奔了。 最简单的解决方法是什么?在底层存储上套一层加密呗。不过由于是云存储,所以基于块设备的加密方案不能用,例如LUKS。否则你同步到云上的就是一个超级巨大的块文件,然后每次修改,云存储客户端都要找到差别上传。这太蛋疼了。正解是每个文件分别加密上传。但即便如此,对于超大文件进行加密后依然会影响上传效率,请提前考虑一下这个问题。 同时又要注意,云存储用的加密文件系统和普通的加密文件系统还有点差别。很多加密文件系统的daemon会认为自己是唯一一个会访问加密内容的进程,而云存储可能随时接收来自远程的修改。所以这会造成一些问题。 备选方案 我对比了四种方案,EncFS,CryFS,GoCryptFS,eCryptFS。对比的方法是用这四种分别建立一个加密目录,然后用不同的方法做写入测试,看他的各种参数。顺便说一句,如果你要看的话,其实看这份表格就好。我只是在自己的机器上复现了一下,顺便了解一下各家特点。 测试语句: time dd if=/dev/zero of=test bs=1048576 count=1024 time dd if=/dev/zero of=test bs=1024 count=1048576 time tar xf linux-4.13.12.tar.xz 其中,在裸盘上直接解压内核源码耗时7.568s,空间使用870M。 数据对比 +---------+-------+-----+-------+-----+-------+-----+--------------+ | |time1 |size1|time2 |size2|time3 |size3|comment | +---------+-------+-----+-------+-----+-------+-----+--------------+ |EncFS |13.210s|1.1G |39.039s|1.1G |26.496s|894M | | +---------+-------+-----+-------+-----+-------+-----+--------------+ |CryFS |9.327s |1.1G |21.230s|1.1G |42.918s|2.5G |删除耗时2.804s| +---------+-------+-----+-------+-----+-------+-----+--------------+ |GoCryptFS|3.515s |1.1G |28.180s|1.1G |19.874s|918M | | +---------+-------+-----+-------+-----+-------+-----+--------------+ |eCryptFS |3.132s |1.1G |10.218s|1.1G |9.448s |1.4G | | +---------+-------+-----+-------+-----+-------+-----+--------------+ 解读 首先说怎么解读。time1是连续写入性能,time2是离散写入性能,time3是小文件写入性能,size3是大量小文件膨胀系统。size1和size2没啥用。 下面先看性能。从性能上看,最优秀的是eCryptFS。这是理所当然,因为这是唯一一个内核态而且和内核整合的系统。GoCryptFS次之。EncFS要慢上好多。至于CryFS,一开始写小文件就原型毕露了。何况这是唯一一个删除大文件时间超过1s的,达到2.8s。你看我其他系统测试里都没写。 然后是膨胀率。EncFS膨胀2.75%,CryFS膨胀近三倍,GoCryptFS膨胀5.52%,eCryptFS膨胀65%。相比起来,EncFS膨胀率最小,GoCryptFS次之,CryFS最糟糕。 安全性 下面是同一个人出的三份审计报告:

Nov 22, 2017 - 1 minute read - Comments

京都游记

细节不说太多了,京都毕竟是一个挺现代化的城市了,又不是什么荒郊野外。我只说几个特别的建议吧。 京都公交一日卡非常便宜,只要500JPY。如果单独坐车,一次230JPY,所以三次回本。但是公交日卡和铁路日卡是分开的,一起买1200JPY。公交日卡地铁站就有卖,铁路日卡铁路那里没得卖,你最好趁早在京都站搞定。公交日卡不需要写日期,头次用会塞到机器里打印一个日期,第二次起直接给司机看就行。啊,对了,这些卡都有使用范围限制,具体查一下。 大部分公交都是后门上前门下,下车付费,不设找零(但是1000JPY以下有自动兑换机)。部分车上车的地方有个刷卡机,那就可以分段计费了。但除非是照顾对象,请不要坐优先席。 强烈推荐Hot Pepper这个应用。可以指定一个区域,搜索平均费用在什么区间的一个什么类型的饭店。我用这个找到了几个不错的店。不是说特别好吃,京都的店都不差,就算街上随便碰也都不错。而是说没有这个应用我找不到店,或者店不合适。例如仁和寺门口,有个挺便宜的小店,叫篝・喫茶,旁边还有个咖喱店。但是这要走两步。如果你没看到,直接进了门口的佐近,那就走的远了。我相信东西会好吃很多,可是价钱也会贵一些。 机场的商品种类不多,而且价格不一定便宜。有的便宜了,有的反而贵。最简单的办法是在市内的免税店把东西都买好,过机场的时候把免税单一交就行。 不要担心语言问题。只要有钱,你不说话都行。不过想省钱,还是把日语学学好。

Nov 6, 2017 - 1 minute read - Comments

Boracay潜水攻略

大致情况介绍 Boracay,菲律宾长滩岛。关于菲律宾的基础信息不介绍了,这篇里面都有。我们就说一点当地的东西吧。 我们主要在西边活动,东边没怎么去,据说不太平。Boracay西边有个贼长无比的海滩,一条繁华的海滩商业街就沿着那里展开。初此外还有一条主路。基本你就沿着这两条路走,一定能找到你要去的地方。海滩商业街上有很多店,基本都是餐饮,按摩,小商品,潜水,辫子,纹身。我们所说的大部分店,都在海滩边上。如果不在,我会特别指出。 潜店 Boracay的潜店一大堆,我随便走走都能看到10多家。但是在padi上注册过的并不多。我这里看到的idc有Calypso Diving School International和Sea World Dive Center。从padi上看,watercolors也是idc。但是他的注册位置和实际位置不大一样。其他的都不是idc,或者没有在padi上注册过。 Sea World我路过去看过。当时打着中文广告,我还以为是中国人开的,结果是韩国人开的。广告很NB,岛上唯一一家五星IDC。岛上究竟几家上面我都列出来了。不过不说别的,他们的位置和店面都很不错。而且店员会中文,这点对很多人很有用。 Boracay的价格基本都稳定下来了,FD标价都在1800PHP左右,偶尔能见到1900,比较贵。我选的一家是朋友推荐的,老板是韩国人(很帅的欧巴哦)。标价都是1800,去了才发现地方略偏,但是有好处的。除了两潜外,潜导都是1对1服务。不过最后一天我才发现,两个潜导一个SSI一个CMAS。幸好我有一支和老板一起下水了,所以让老板给我签个PADI的,好规避review问题。 最后说一点,DSD。岛上的DSD才是最大的潜种,而不像有些地方,基本都是FD。这很好理解,Boracay是一个休闲旅游岛,而不是一个专门潜水的岛。在我选的这家店里,有次我看到十多个人在那里做DSD培训(店里有人会中文),出去的时候还要加十个左右的instructor(有负责照相的)。30个人浩浩荡荡两条船跑出去。 做DSD的(虽然我估计DSD不大可能来我的blog,会来的不是程序员就是老潜水员)请千万注意几个问题。DSD最主要的安全问题是什么?潜导不足潜导违规。只要配够instructor按规定操作,DSD几乎没有风险。说几乎是因为,就算平地走路都可能被雷劈死,跳到海里去潜水不会更加安全的。因此体验潜水一个强制要求是,instructor和潜水员比例不得超过1:2。 这两天闲聊的时候,我听到的范围里,所有潜店都坚持了这个比例配置。但是如果坚持这个比例,你就可以算出来,做DSD好像还没有FD赚啊(1:1的这种FD不谈)。所以很多DSD有一定的玩花样的成分。例如水下配个AOW下去给你照相,回头卖你相片。还有气不给打足,20多分钟就可以上来了。当然,万幸的是,好歹大家节操还比较足,不会出现耳压培训不做就踢下水,然后等你受不了升水的情况(三亚名产)。 潜点 Boracay通常流都不大,因为大部分情况下洋流都是东西向的,而岛是南北向的。因此在西面大部分时候都没有流,或者小流。在岛的最南和最北有大洋流,所以去的人很少。西面大部分时候都是南向北或者北向南的一节流。人类活动较多,水下能见度一般。 照片在这里。 Camia Wreck 11° 57.115’ N, 121° 54.523’ E Max: 28.4, Avg: 19.5, Vis: 10+, Current: 1 海滩正对面的一个沉船,没啥好多说的。有几条非常大的鱼,品种搞不清楚。中间船舱有个地方能沉下去,然后穿过大约3-5米的封闭船舱(警告:这是潜水违规操作),右转上升出舱。中间距离非常大,对脚法没有要求。这个点有种非常大的鱼,谁知道是什么? Angol Point 11° 56.828’ N, 121° 55.2’ E Max: 14.3, Avg: 7.9, Vis: 10+, Current: 0 海滩对面的浅点,非常容易。基本就在里面玩了一阵而已,没啥难度。照到了三个海兔排排坐。另外,下去之前我的reg的O-ring爆裂了。 Friday Rock 11° 58.083’ N, 121° 54.263’ E Max: 17.4, Avg: 12.8, Vis: 10+, Current: 0

Nov 1, 2017 - 1 minute read - Comments

golang安装和编译环境搭建

我本来以为是个挺简单的问题,结果实践一下发现还是挺多人不明白的。所以我写一下。 安装 挺简单的。你在golang.org下载一个合适的安装包,回来之后找个地方解开——例如~/usr/share/go这个目录。 而后你需要调整两个变量,GOROOT和PATH。PATH是必须调整的,GOROOT原则上可以不管。当你使用了正确的go程序后,GOROOT会自动设定。但是我习惯先设定GOROOT,然后计算出PATH。像下面这样(注意环境变量里要用绝对路径,不要用~)。 export GOROOT=/home/user/usr/share/go export PATH=$GOROOT/bin:$PATH 一般我会将这个设定设在bashrc里,变成我私有的设定。这样不会对系统产生干扰。在经过这个设定后,你需要让所有bash载入这个设定。最快的是重启,不喜欢动静太大的可以source ~/.bashrc。载入完成后,你可以试试go version,看看是否生效,版本是否正确。 配置环境 golang的编译环境配置只需要配置一个变量,GOPATH。例如我将GOPATH设定到~/usr/,在bashrc中加入export GOPATH=/home/user/usr,那么源码路径就是~/usr/src。将来下载的所有包,都会根据这个位置自动计算路径。例如http2的包,名字叫做golang.org/x/net/http2,下载时的路径就会是~/usr/src/golang.org/x/net/http2。你可以用go get golang.org/x/net/http2来自动下载这个包。 如果你自己开了一个项目,那么你需要搞一个url,例如github。然后把你的项目放到对应路径——例如~/usr/src/github.com/username/project。然后在这个路径下做所有操作。最后你可以使用go build package编译它,非常容易。 install golang除了源码之外,还有很多的编译结果。例如go项目自己的源码在~/usr/share/go/src/下面,可执行文件在~/usr/share/go/bin/下面。而你和你下载的各种项目的编译结果就在~/usr/bin/下面——是不是觉得和linux的文件管理方式非常像? 所以上面的bashrc配置还需要做一点调整,以便让你除了能用go做编译外,还能直接使用go编译出来的项目。 export GOROOT=/home/user/usr/share/go/ export GOPATH=/home/user/usr/ export PATH=$GOROOT/bin:$GOPATH/bin:$PATH

Oct 10, 2017 - 2 minute read - Comments

法国游记

废话不多说了,讲点实在的吧。首先上照片。 常识 法国使用法语,通行欧元。对他们来说,英语是一种外语,学习难度和我们学日语差不多。旅游业有关的人,英语水平还是不错的。但是其他地方很可能碰到不会英语的人,尤其是列车上查票的小姐姐。大部分地区都能用信用卡,只有少数地方不行,例如地方集市上的小贩(因为他正职可能是个普通社员)。信用卡里Visa比较好用,Master就到处被歧视,至于JCB就不提了。目前EUR和CNY比例1:8左右,国内到处都能换,所以不要紧张。但是要注意,某些卡在非美元区会有额外手续费(例如招行的),法国当然不是美元区。手机供应商有好几家,我们用了一家德国的公司,漫游过来。根据某个法律,他们漫游是不收费的。(中国的运营商你们看看)电源插头是欧标,记得提前买。 衣 我们是10月去的,当时法国并不冷,和上海差不多。单长裤,上装长袖短袖都行。特别冷的地方需要加一件外套,不要太厚。当时猫说法国很冷,我就带上了贝加尔湖那套。从头到尾没用上,还在南法被热了个半死。 食 法国吃的很贵,因此要吃饱吃好是有点技巧的。 一般的法式餐饮,早餐是各种甜品和茶,午餐和晚餐是正餐,两道式或三道式的。两道是前菜加主菜,或者主菜加甜点,三道就是一起上。比比中国就弱爆了,随便上个餐馆都是两菜一汤呢。 价格各地不一样,三道式10-20欧不等。一般来说,巴黎比其他地方贵,景区比外面贵,好吃的店比不好吃的贵,米其林比上述都贵。如果时间不方便,或者没钱,法国街头并没有什么其他选择(是的,悲剧),不过还是有一些不得已的选项的。下面我们分三个方面细说。 超市 首先,我假定你比较穷。那么,超市将是你的大食堂。 我不是让你去买超市里做好的三明治,或者色拉。那个一份2-4EUR,根本吃不饱。再来一份就会变成6EUR,合CNY48。怎么想都太过分了吧。 你可以在超市里找香肠。能够直接吃的,2欧以下的香肠。我在法国各地的monoprix里,都找的到法兰克福肠,1.5EUR 6根,配上一条面包,能顶一顿饭。这不过是3EUR不到,可谓食肉动物最佳选择。有钱的还可以换2EUR 10根的更大包装。我还找到一种烟熏马鲛鱼,2EUR 200g,味道比较咸,配上面包更好。一般两人一顿饭就是一大条面包,加一包肠,加马鲛鱼,总计5EUR左右。算下来20CNY一人,可谓便宜到了头。 当然,我看不懂法国那堆复杂的香肠,法兰克福肠是经常吃的,比较保险。如果你比较有挑战精神,可以试试其他种类,有没有物美价廉的。我还看到加了大蒜的肠,类似哈尔滨肠那种。不过比较贵,4EUR。 超市里值得买的还有水。法国这里原则上是可以直接饮用自来水的。但是我们并不习惯,所以还是出来买水。一般超市放在外面的,都是500ml 2EUR的高价水。你往里找找,有一些饮料,柠檬或者橙子一类的。其中有很多味道比较淡,而价格又比较亲民。1EUR 1L左右。晚上买个两瓶,喝一晚,带一瓶,应该够用。不够就再找一次超市,应该不难。饮料分为有气的和没气的,要带的话建议没气比较好。 法国超市要注意两个问题,一个是周日多数不开。法国周日是家庭日,所以很多地方不开门。景点是否开放也要预先查一下。另一个就是,由于周日不开,因此周五六,周一晚上。尤其是周六晚上,人会非常多。要提前屯货,同时避开高峰。 小吃 法国街头基本没什么小吃,除了满地的kebab。我吃到的版本是一个大饼烤一下,里面塞上切下来的土耳其烤肉,再加点洋葱什么的。一般这么一个2EUR(南法物价)。加上一小盒薯条和一罐饮料3EUR(还是3EUR和4EUR?我记不清了)。反正不贵的情况下,也能把一顿饭对付过去。不过烤肉又油又咸,我家猫不很喜欢吃。 另一种则是可丽饼,也就是法国版本的山东杂粮煎饼,里面可以放甜的或咸的。随着放的东西不一样价格也不大一样,原味的1EUR,放点果酱就要2.5EUR的样子。据说法国人早上只吃甜的,而日间只吃咸的。这两种可丽饼叫法还不大一样的样子。不过可丽饼一般一个吃不饱,我们俩要吃三个。加各种酱料的话,搞不好一顿要超过8EUR,还是有点小贵的。 另外我们在小镇(Annecy)上买到过烤鸡腿,3EUR,味道很不错。在石头城本地集市上买到过烤肠,2.5EUR,西红柿汉堡,2.5EUR,鸡大腿肉,3.5EUR。不算便宜,但是风味很好,也算是物美价尚可的选择。不过Annecy的那个店中午关门了(?!!)。是的,吃饭时间呢,关门了。集市每周就开一早上。这些都是隐藏道具,碰到就碰到了,没碰到,就这样了。指望不住。 餐馆 在进餐馆之前,请确认一下您的钱包。没有一人20EUR的打算是不要坐进去的。大多数餐馆的两道或三道式也不算很多,吃菜是吃不饱的。虽说一般餐馆都会无限(我还没测试出限量多大,难道真要吃八个?)供应面包,但如果您进餐馆就为了吃面包吃个粗饱,为什么不直接选用超市呢? 我在法国吃过很多不同的东西。最贵的是米其林一星,两个人吃了70EUR(没留神,矿泉水被坑了10EUR)。照片在这里。 贵归贵,菜非常赞,服务也很好,餐馆和餐具都很漂亮,感觉非常超值。老婆点了一道法国蜗牛。我的主菜是一道蔬菜烧三文鱼什么的,不知道怎么搞的,三文鱼刚刚好熟透,却又非常嫩。做过的人应该都知道难度。强烈建议去吃一趟。不要点水,两个人60EUR就行了。500CNY级别的米其林一星啊。餐馆的名字是这家Benoit Paris 然后是法国附近的黑暗料理——fondue。我总共吃了两回。第一回想吃的是奶酪锅,但是点成了肉锅。把牛肉,鸡肉,鸭肉放在油里面炸。20EUR。实话说不是特别喜欢吃。第二回就更糟了,确实是奶酪锅,15EUR,用各种食材沾奶酪吃。但是食材本身都太咸,搞的我满口都是咸腥味。而且奶酪的味道比较重,吃不惯。建议大家先在本地试试改良版fondue。如果改良版都不是很有爱,还是不要去原版那里冒险了。 比较特殊的餐馆是这家Mirama。中文是美丽华酒家。这是一家中国菜。我家猫中国胃嘛,结果我们就去吃了两次,其实味道放在中国一般。正宗的广式厨房,没有改良的粤菜。牛腩面上面真是一大堆牛肉,对得起9.6EUR的价格。烤鸭(其实应该是烧鸭,这个和北京烤鸭不是一回事)也不错。放在中国大概是一家还算可以的街边小餐馆。当然,在法国也是,只是价格从60CNY变成了40EUR。 实话说,我一直觉得中国的吃的挺好的,便宜好吃。虽然顶级的料理,玩装逼和意境的那些还不如国际同行,但是各种日常餐饮实实在在能吊打大部分地区。你在欧洲能吃四菜一汤盘盘见肉么?你能天天吃四菜一汤顿顿不重翻一个月花样么?你能靠上班工资天天吃四菜一汤还有人管送么?上海一般小店里面,也就是150-200两个人,一天也就是300-350,老顾客还有折扣,一个人150上下,吃到翻过来。靠工资不是吃不起。法国,我按南法物价算好了,15EUR一顿,算上甜品还不到四道菜,普通人也勉强吃的起。可盘盘见肉吃到翻过来我就见了鬼了。我在法国感受最深的不是好吃,而是吃不饱。像日本菜似的,嘴一张一合,吃的没了,好像还缺点啥。严格说起来,应该不是东西不好吃,而是工资不够高,简称穷。 至于翻一个月花样就更呵呵了。你看看他们菜单上几个菜。按四道执行,差不多一天一家餐馆就没花样了,周围30家餐馆,还得不重样,鬼知道要跑多远。至于送,更是没得说。Thomas老婆没事就在和我感慨,你们厂赶紧来法国营业吧,我太怀念打个电话就有东西吃的日子了。我说可以啊,按照法国物价,你这地方10EUR肯送的都是铁哥们——成本都不够。上下山都得开汽车,小摩托不知道要开到猴年马月。而且汽车一趟来回一小时,一天最多送8趟。偏偏法国低保给力,不干活都有900EUR,一天开40EUR都不知道有没有人给你干,而且绝对工作不到8小时。一单10EUR是不是成本价?这地方要真执行,一单起码30EUR以上,运费比餐费还贵。她说50EUR肯来就不错了。他们水工,上门费200EUR,啥都不干。我说上海修电脑,上门费就100,还是人民的币。 住 法国酒店比上海贵的多,我们在Fontaine Saint-Michel旁边,订了一个超级小的酒店,800多一天。上海随便一个地方找个三星,要求不高的,也就400撑死了吧。 注意,法国还有个选择,Airbnb。Airbnb并没有便宜很多,但是对于自定行程来说,会方便一些。因为法国的酒店里一般不提供热水壶。是的,你没看错,我也没写错。Thomas家不算,我住了四个酒店。只有一个酒店提供了热水壶。但于此同时还提供了洗衣机洗碗机和厨房,所以这应该算Airbnb的待遇。如果你订Airbnb,可以使用很多设备,例如厨房和洗衣机。有厨房你就能用外面买的材料简单做一顿,这对中国胃来说太重要了。至于洗衣机,我就不说了。 行 法国的铁路很发达,巴黎地铁四通八达,居然地铁票能在Gare de Lyon换车去Fontainebleau这么个鬼地方。这就像上海地铁能把你从滴水湖送到昆山是一个概念。不过相对的,车票也很贵。一张票2EUR不到。你可以在售票机上直接买10张ticket+,15EUR。便宜一些。有朋友吐槽,为什么售票机上有8张和9张的选项呢?钱更贵票更少。我只能说,这是一个feature。 法国地铁支线众多,上车前一定要看明白这辆车是去哪的。例如同样是RER,分为RER A/B/C/D,这是不同线路。同一个RER A,还有分叉。最简单的办法是找站台上的一个大板,然后看你要去的站前面的那个灯有没有亮。亮了就可以放心上,没有就要再等等。 巴黎和里昂都有日票,里昂的日票是5EUR有效24小时。巴黎是按照zone算的,我们5zone的要13EUR(具体数字不是很确定,反正十几)。算起来也很贵。但是到Fontainebleau单程也没便宜几块。合理使用日票和通票能够有效减少你的车票费用。上海地铁也有类似的日票,单日18,只是很少有人知道。这里多扯一句日票的设计,一般都是遵循4次左右平衡。里昂是3次,上海是4.5次。如果你乘地铁次数会远高于这个值,可以考虑使用日票。而频繁乘坐地铁的,一般都是短距离场景。 法国的火车也很不错,火车分为TGV(高铁)和普通列车。TGV速度250公里/小时,和中国高铁是一个级别的东西,分分钟吊打印度“高铁”。但是法国地方比中国小,所以从南法回巴黎,穿越半个国家,只用了三个小时,还带换车。坐火车要注意电子票和纸质票。法铁上车时不剪票,上车后查票。票分为固定时间和可变时间的,车次分为固定座位和随便坐的。如果你是固定时间的,那么啥都不用做。电子票一般都是固定时间的。但如果是可变时间的,需要在进站前,在黄色的机器那里打一下卡。靠左插进去,咔咔一声,就能看到时间,这相当于剪票了。如果不打印时间的话,你这张票今天能坐,明天又坐一遍。如果查票的小姐姐发现这种情况,理论上会罚款20欧。我们就碰到了。不过运气很好,两个小姐姐认为我们是外国人第一次来,不知道规矩。所以直接用笔给我们写了时间,相当于补剪一下,没罚款。所以后来我们就所有票都咔咔一下。结果用巴黎通票去Fontainebleau的时候又出了问题。那个是小型票,肯定没法打。查票的小姐姐说,你们这张票没写时间哎。然后又用笔给我们补了时间。 感觉法国的车票管理比上海的难搞懂的多,也许是不大习惯。 巴黎 我们刚到法国,在机场买了博物馆通票。40EUR多点吧,4天,一大堆美术馆博物馆,非常合算。注意到手之后在上面写一下时间。然后坐RER地铁到我们住的地方。七绕八绕,从巴黎圣母院门口冒了出来。当时还不认得巴黎圣母院,也不知道自己在哪里。跟着导航走到了地方。最后一天转回去的时候发现,我们初次上来的地方就在法国测地原点旁边。 巴黎我们刷了这么几个地方: Fontaine Saint-Michel 圣米歇尔喷泉 Musée du Louvre 卢浮宫 Cathédrale Notre-Dame de Paris 巴黎圣母院 Sainte Chapelle 巴黎圣礼拜教堂 Conciergerie 巴黎古监狱 Le Centre Pompidou 蓬皮杜中心 Église Saint-Merri Saint Merri Church Tour Eiffel 埃菲尔铁塔 Château de Versailles 凡尔赛宫 Panthéon 先贤祠 Musée d’Orsay 奥赛博物馆 Musée de l’Orangerie 橘园美术馆 Arc de Triomphe 凯旋门 Square Louise Michel 路易丝米歇尔广场 Sacré-Cœur 圣心堂 Le mur des je t’aime 爱墙 Moulin Rouge 红磨坊 Château de Fontainebleau 枫丹白露宫 在Conciergerie,我还被老婆带错了路,跑到了旁边的原顶建筑。人家问我们来干嘛,我们说观光。人家很奇怪的说,这是法院啊(Greffe du Tribunal de commerce de Paris 巴黎商业法院登记处)。好么,生平头一次给老婆送进法院。从法院出来,又进了监狱——Conciergerie。

Aug 28, 2017 - 2 minute read - Comments

使用Debian作为Router

设备是一台D525的多头主机,2G内存,4G电子盘,有4个网口,两个USB口,一个Serial口(很特殊吧),还有一个VGA口。原本预装是RouterOS的。最近给RouterOS整烦了,所以把路由器洗了换成Debian了。由于不想干掉原本的电子盘,所以新买了一块msata的电子盘。JD上大概80,自己买就行。 目标 我希望整个路由能够为家里的网络系统提供良好的基础。因此,我确立了一系列目标: 全家能够上网,并充分利用带宽。 能够映射外网地址到内网,提供一定的服务(例如通过https管理内部,或者做bt)。 能够分离两个区域,一个可信区域,一个只能上外网(guest网络环境)。 能够为家里的所有用户,包括guest,提供有限目标翻墙,例如只翻google。该机制不会使访问国内网络受影响,例如变慢。可以限制部分IP不翻,例如bt。 下面是一些可选目标。 能够直接通过机器名解析出DHCP地址。这样就无需为每个需要被访问的机器总是分配固定IP。 对guest网络提供配额限制。 对总体能做一定的QoS。 基础设施层面的防投毒/欺骗/攻击。 支持IPv6,家里每个设备至少一个IPv6地址,且外网可访问。 架构 首先是分离设计。用两个网口分别提供两个网段,作为可信区域和guest网络用。然后提供一个VPN,允许guest区域进入可信区域。对于可管理交换机而言,其实也可以用vlan技术。一个网口打到交换机上,然后在交换机上设定哪些是guest口。我这里没有可管理交换机,而桌面交换机有多。所以直接出两个口就好。核心路由是四口的,一个外网,两个内网,还有富裕。 以下是主要目标的工程清单: 多头主机,上防火墙,建立Serial和ssh双管理机制。 内网dnsmasq,外网NAT。最后测速。 DDNS,外网port mapping。 安装openvpn做vpn-in。 做vpn out,调整路由表。 多网段,内部互通限制。 安装 Debian的安装没什么好多说的,我直接用VGA安装的。stretch,目前stable版,没什么特殊的。等进入系统了,直接改grub配置,改成serial能够控制。这样将来路由器出问题的时候只要用Console线接上,就能登录系统排查问题了。具体方法搜一下就行,我是用这个页面,按照里面改了以下三个参数。 GRUB_CMDLINE_LINUX="console=tty0 console=ttyS0,115200n8 quiet" GRUB_TERMINAL=serial GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1" 然后再用putty访问就行,指令是putty -serial -sercfg 115200,8,n,1,N。注意速率要和设定一致。 安装过程中我注意到有一点坑。在上海电信这种环境,Router要上网需要PPPoE拨号。我找到了Debian官方的说明页面,里面提到了三个包,ppp,pppoe,pppoeconf。但是默认光盘里没有。说是有的,甚至还有篇文档叫做通过 PPP over Ethernet (PPPPoE) 来安装 Debian GNU/Linux。但是我按照Guide,修改了光盘的boot line,自动搜索DSL拨号配置的时候,直接失败了。幸好我早做了准备,把这几个包提前下载下来了,然后手工安装。但是比较坑的是,实现pppoe还需要一个额外的包,libpcap0.8。这个包wiki里没说,所以我就没下。但是想下的时候,原有Router又洗掉了。最后我是用手机下载传上去的,同样情况的朋友请自行注意。 初始化 进入系统后没啥复杂的,先设定PPPoE拨号,照着官方的说明页面就行。拨号成功后,首先先更新软件并重启。因为原本的系统和最新补丁会有一点时间的差异,而安装时我们没有网,所以没有安装更新补丁。 补丁升级完成并重启后,先下载iptables-persistent这个包。这个包会把你的防火墙配置固化下来并自动加载。没有这个,防火墙功能运作是缺失的。如果在无持久化的情况下安装了服务,你又需要重启路由器,就要先断开外网才能安全重启了。否则防火墙规则是空的,服务外网可访问。而且进系统后又得重新配置防火墙。所以比较简单的方法就是先装持久化包。至于防火墙,我的初始化配置是这样的。 -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -i ppp0 -j DROP -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT 第一条允许已经建立好的连接访问,第二条允许ping,第三条不限制本地访问,第四条禁止外网访问,第五条打开OpenSSH端口,最后别忘了INPUT默认DROP。因此第二个包就是安装OpenSSH。安装完了这个包,再配置本地网口。接下去就可以把路由器复位,通过远程来控制,而不是serial了。

Jul 24, 2017 - 1 minute read - Comments

riot.im简介

riot是一个开源的去中心化聊天工具,提供了一个聊天的底线解决方案。 分布式 和大部分IM工具不同,riot的用户,是属于某个特定的服务器的。我们可以对比一下Email和QQ。Email里,你可以选用不同邮箱,不同邮箱之间是可以互相发送消息的。而QQ里,你的帐号必然只能在腾讯的体系里。前者,我们认为是一个分布的系统。用户分布在多个组织里,依靠协议互相通讯。后者,我们认为是集中的,供应商掌控一切。也许你会反驳说,QQ也分布在全国多个节点。这是对的,但是这是腾讯自己的分布,而不是用户的分布。用户对这事是没有感知的,也无权选择。 riot是一个用户分布式的IM系统。你需要找一个服务商,然后向他注册。就像你找一个邮箱供应商并注册一样。随后你会获得一个用户名和密码。配置用户名和密码,你就可以在各种地方登录。Windows,Mac,Linux,Android,iOS,web,我至少知道这几种客户端。登录之后,你可以找任何人聊天,哪怕他和你不在一个服务器。服务商会连接对方的服务器,并完成通话准备。如果你懒得找,riot.im官方也提供注册。你可以把他视为最大的供应商。 和印象相反,用户分布式的系统,听上去很高大上,其实是比集中式难用的。因为分布式系统依靠的是协议,而协议是很难更新的。只有大多数人跟进,一个特性才有用。就像反垃圾邮件,已经好几年了,推进仍然有限。而集中式体系则不然。只要供应商想,他们就可以不停升级协议。你现在还能用12年版的QQ协议么?不行了对吧。这样就使得一个新特性可以在很短时间内铺开。 那么分布式的好处在哪里? 分布式的用户体系,提供了一种可能性。即使在一个供应商出现种种问题的情况下,整个通讯系统依然不崩溃。你甚至可以换一家供应商,然后重新联系你原来的好友——只要你有好友的通讯录备份。这使得保持协议的同时更换供应商成为了可能——一种永远不可能在腾讯体系内实现的可能。 也许你会觉得,供应商会出什么问题?嘛,我们依然以腾讯为例。在中国,腾讯占有了很大的IM和游戏市场份额。作为腾讯的对手,你要警惕的不仅是企鹅帝国的挤压,还有,你要用什么IM作为办公工具。如果您依然认为QQ是个好选择,我只能祝愿您好运。当然,也许您会觉得,我们可以用钉钉。嘛,我也祝愿您好运。这是一个信仰问题,您开心就好。 riot的特性在此时就非常有用。你可以搭建一个自己的聊天服务器,自行维护。自然,此时就没有坑爹的国际线路问题,也没有企鹅运营问题。甚至,如果上下游的公司也选用了支持riot协议的体系,你们还能直接互相聊天。当然,在中国微信和QQ包打天下的格局下,这种情况基本是不大可能了。 类似的场景还有,如果你觉得企鹅家会在聊天记录里搞事。担心聊天记录泄密。严重洁癖甚至都不相信telegram。那么riot的纯开源自维护体系应该能让你感到满意。但是一切的一切,最关键的一点在于。只有你对聊天的供应商有选择权,供应商才会真正“听”你的话。在一个无法离开的体系里,只会变成:用户你好,我是你爸爸。 当然,使用riot要注意他的几个缺点。首先,riot的各个客户端维护的比较差。难看,功能有限,而且不稳定,修复时间长。其次,riot和现有的主流用户完全隔离,这对销售来说非常致命。 安全特性 riot的聊天是非加密的,对此你不应该感到意外。riot的安全是额外提供的,你必须手动打开。riot的加密系统非常有趣,不是基于用户的,而是基于设备。这种加密被称为E2E加密,意思是端到端。 手机在选项里拉到底,可以看到把对话转换为加密对话的选项。需要注意的是,打开E2E加密后,这个对话是不能转回去的。你可以开个新对话,把所有人都加进去。但是这个已经存在的对话本身是不能转换回去的。另外就是,由于E2E加密需要端点支持,所有web原则上是很难做出E2E的。因此web版本上这个功能基本是废的。 当你用一个新的终端登录,例如一台新手机连入的时候。所有人会看到你这个新终端,并选择是否信任你。如果他们信任你,那么你可以看到他们说的话,这个都能理解。如果他们不认可你呢?默认情况下也能看到。这是因为系统里有个选项,默认发消息给所有未信任终端。关闭之后,那些你不认可的人就看不到你讲的话了。当然,在进去的同时,你也会看到里面所有的端,并选择是否信任。 当你更换了一个客户端,例如换了一台手机。默认情况下,视同一个新手机登录,所有人都要重新信任,而且所有之前讲的话都会无法浏览。注意,哪怕在同一个手机上,当登出再登录时,也视同一个新客户端。所有人都要重新信任,之前所有会话无法浏览。如果要避免这个问题,你需要在登出前先导出自己的E2E密钥,登录后导入。 这里就要说一下用法问题了。首先,请关闭“发送消息给所有未信任终端”的选项。新用户无法查看之前的消息,但是能查看新的?这个简直了。其次,一开启E2E,就要导出密钥并妥善备份。否则每次都要重新认证终端,对其他人很不友好,而且不安全。第三,不要随便认证终端,一定要确保对方是本人。你可以问一些只有你们知道的问题,或者干脆看着他互相认证也行。 E2E加密的基本原理是,每个端携带一个密钥,进入聊天时把自己公钥发送出去。如果说话的人信任你这个终端,那么他就会认可你的公钥。客户端就会使用你的公钥加密发出去的信息,你在接受到之后就可以用自己的私钥解密。如果他不用你的公钥加密发出去的消息,那么你就看不到,或者说看不懂。 透过这个机制,我们可以理解上面如此设定的机理。当初次进入聊天时,虽然你可以从服务器端同步所有历史消息。然而由于这些消息都没有用你的key加密过,所以你看不懂。当对方开始用你的key加密消息了,你就可以看懂消息了。当登出时,未保存的E2E key会被丢弃。 E2E对抗的风险,就是服务器不可靠,例如被攻陷。或者用户不可靠,例如密码泄露。即便在服务器被攻陷,或者某个用户密码的情况下。E2E机制依然能让攻击者无法看到加密的消息(注意,这里前提就是你关闭了“发送消息给所有未信任终端”)。因为加解密都在客户端做,所有服务器端看到的消息本身就是一团乱码。攻击者拿到密码后,伪装客户终端进来。然而这个终端由于没有信任,因此既看不到历史记录,也看不到新消息。能够对付E2E机制的,只有导出的密钥备份丢失而且被破解,或者直接拿到终端。或者更干脆,聊天中某个人变节,把记录全部发了出去。

Jun 7, 2017 - 2 minute read - Comments

Puerro Galera游记

基本情况介绍 菲律宾通行货币是peso,缩写PHP(最好的语言,哈?)。去之前别忘了换一点PHP,带一些USD。PG那里我没找到ATM,上去都是换钱的。带着PHP回来只能再去菲律宾,带USD哪都能去。如果怕不安全的话,提前联系好中文潜店,商量好微信或者支付宝转账,再让他们帮你把房一起订了。这样你去的时候只用带上不多的钱就好。安全是一方面,同时也很方便。 交通 PG在马尼拉南边,从manila机场出来,不用过市区,直接往Batangas码头走,过海就到。坐大巴换公船的话,大概5个小时多点。 我这次来去都是找人拼的车船。去的时候16个人左右,100元包车船。回的时候5个人,价钱就到了200。但是反正我不觉得这是重点。毕竟你花了大几千的机票钱,飞到菲律宾,就想省个50,100的交通费?自己拼车船几个好处。一个是不用和人挤,车也好一点。另一个是车船中间的空档,如果是公船就必须留足时间以防没赶上。自己包的话到了就跑,省事的多了。 包车船的时候记得一点,先和老大讲好包不包高速费用,还有高架(sky way)。有的时候司机会问你要不要走高速,走的话费用自己掏。这样车船价格就贵了。你先讲明白了就OK了。 另外就是机场的住宿。T3有一个胶囊酒店,1000P一晚7个小时,就在麦当劳往里走一点的位置。如果你需要过夜,提前订好,带上自己的耳塞,住一晚,非常方便。这里推荐一个网站,http://www.sleepinginairports.net/,上面有非常多的机场住宿攻略。 方位 下船的地方叫Sabang。PG,即Puerro Galera,还在20分钟车程山路之外。我去PG看过,没Sabang繁华。所以你可以忘掉PG,只要考虑Sabang就好。如果有人给你推荐一个住宿在PG,不要犹豫,扇他就好。 Sabang坐南朝北,和Batangas的大灯塔隔海相望。西边是Big Lalaguna。去那鬼地方有三个方法: 码头上坐小船,200P就肯走了。有的时候会和你讲价,250P也死活磨半天什么的。一船能坐3-4个,我们这次坐了6个,还有我。感觉像个沙丁鱼罐头。 坐摩托车过去,50P。你给个100P能把你连人带行李搬过去。我就是这么搞的搬房间。注意,摩托不停沙滩,停在镇子的门口。你得穿过镇子里迷宫一样的道路才能到沙滩。反正经过几次之后,我觉得自己像一只白老鼠。 用脚。开始来的时候不知道,硬从沙滩上走过去的,15-20分钟,看脚程。 Sabang镇有个好处,吃的东西多,娱乐多。如果你打算天天往水里扎,起来就在房间里窝着,那就当我没说。不过如果你晚上还是想找个地方happy一下的,最好不要住Big Lalaguna。来去都有费用是一方面,另一方面是真心麻烦。 餐饮娱乐 说Sabang娱乐多,其实还是挺乏善可陈的。餐饮我点名这几家: 海明威,码头沿着沙滩往西去,过了Angelyn’s。建议别去。虽然并不难吃,但是性价比太低了。看攻略说还不错,去了发现有变化。 Tarmarine,就在Angelyn’s旁边。烧烤真心好吃,但是上菜一小时。而且服务员上来就告诉你,一小时。 TEQ’s,码头往山里方向(古堡那边)走,路左手有个牌子的。东西味道很不错,也不贵。但是第一次去,上菜一小时,还不提前说。第二次去,牛骨汤就给了一半。后面就再也不去了。 Sabang Fastfood。码头往山里方向(古堡那边)走,路右手。他们家的mongo shake真心顺滑,铁板亲子没有dong也不错(什么鬼?就是铁板鸡肉加鸡蛋啦)。 Capt’n Greggs。码头沿着沙滩,马上就能看到。他家牛排量超大,770P厚厚一大块。我们四个人吃两块吃的超级饱。Gin调的鸡尾酒也不错,超级大一壶,四个人根本喝不完(好吧,我不能喝)。 按摩。你随便找一家就得,400-500P。手法各自不同,略有差别。这个不贵,你开心就好。但是特别注意,深潜后原则上禁止按摩,容易诱发DCS。自己决定,别说我没提醒过。 更多介绍可以看这篇,上面的地图也不错。不过注意,我去的时候是17年5月,以我的经验来看,一两年后情况就完全不是一回事了。 潜店 好了,前面说了那么一堆,现在说最关键的问题,潜店。我所知道的有这么几家: scandi,在Big Lalaguna。我开始就潜的这家。看攻略以为是一家很严谨的潜店,结果依然八个粽子放风筝,还有AOW应届生一起。这样根本对不起我27刀的FD费用啊,于是果断转店。15支批发价,25刀。装备一天14刀。 divingpark。就在scandi隔壁,看公开报价是28刀,也不便宜。这家中国人比较多,大概是中文教练多。scandi的中文教练好像就一个北京的姐们。 asiadivers。貌似是岛上最高大上的潜店。我没找到他的具体报价,但是印象基本就一个字,贵。 蓝鳍,在热浪的后面,美杜莎隔壁。我最后是在他们家潜的。价格还行,10支批量1000P一次,包装备。140多点,这个价格基本和停泊岛的差不多。老板是个上海人,做事精明不小气。我不知道10支的事,下了9支。他直接给了折扣价。 大家特别注意,潜店好不好,主要看装备是不是够新够好,还有潜导是几个对几个。不要特意省钱去8v1,这样很不安全,而且体验很差。如果有条件,尽量在4v1以内。如果你需要一定2v1或者4v1,最好先沟通,约定好(有可能还要加钱)。这次指望scandi能良心点给个4v1,结果。。。 8v1的最大问题是,buddy大多都是刚拼凑的,很少有默契和能力保持整齐的队形。结果就是潜导叮叮一指,一群人端着相机就围了上去,像是在开秘密会议。然后所有人就撞成一堆。潜导一游动,队形完全走样,路上就不停的撞车,被踢。你有事,潜导一回头,根本看不到你。如果你有熟悉的buddy,最好固定组队。照相的话,和大部队保持一点距离。你上去照相的时候,buddy帮你看着点潜导。这样大家都会玩的很开心。 住宿 说到最后,说说住宿。如果你住高大上的度假村,他们自己就有住宿。如果没有,也可以自己订。我这次住了两家,scandi和古堡。先说scandi。 scandi是一个典型的resort,他们的住宿和潜店是前后的,所以可以潜水完了回房间休息一下。但是等你洗洗弄弄结束,休息不了半小时,又得出去了。而且你中午吃饭也必须在scandi,没法跑去别处。娱乐选择相对就少一点。古堡呢,到哪都很方便,但是回来的时候衣服都是湿的。好坏就自己选择吧。 古堡特别说一点,不要住他们Deluxe的房,住Suite的。大小翻倍,而且Deluxe里面蚊子超级多,似乎还有跳蚤。费用嘛,也就是40刀变50刀而已。 大概来说,你可以参考这篇 潜点 PG附近的潜点,我完全没记住。反正名字都写在dive log里了,然而谁是谁还是分不清。我都是回来才查的潜点。水温一般都在29-30左右,可以水母衣直接下水。但是很多地方有盐温交错面。Verde Island下去的时候,一过交错面我直接就冻毙了,怀疑水温低到27度左右。在底下甚至能肉眼看到强烈的交错面乱流。 Ernie’s Point 13° 31.398’ N, 120° 58.982’ E Max: 25, Avg: 15, Vis: Good, Current: Low