Tuesday, October 4, 2016

Yubikey 4 入手

最早应该是从Bigeagle的网站上了解到YubiKey的最近入手了YubiKey 4从Yubico官网购买使用GitHub用户的20%优惠顺丰的海购丰运转运历时20天总算到手到手价格一只260 RMB左右
美国国内物流采用USPS运费5刀
sp160913_174249
顺丰转运的验货照
781002803993_b4d9eb6c-ef61-4925-81ce-96cc3309c066
screenshot-from-2016-10-04-20-08-31
screenshot-from-2016-10-04-20-10-04

作为一个普通用户的我使用YubiKey能干些什么呢
经过几天的配置和使用目前使用YubiKey的主要用途有以下几项

1. FIDO U2F
FIDO U2F的功能是YubiKey出厂的时候配置好的开箱即用支持此功能的网站有FastmailGoogleDropboxGitHub等在这些网站的二次验证的选项中有一项被描述为安全密钥以GitHub为例二次验证的设置页面最低端有一项Security Key的选项
github1
github2
点击注册新设备后会提示Waiting for Device此时插入YubiKey并按下实际上轻触即可上面的按钮即可
github3
github4
以后每次登录的时候除了密码认证之外新增了插入YubiKey的二次验证
github5
这项功能开箱即用操作起来十分方便但是目前也存在一些缺点首先是支持该功能的网站数量十分有限且目前只有Chrome浏览器对该功能的支持是完备的Firefox可以通过插件实现该功能但是部分网站的支持不完善比如Firefox在GitHub上该功能可用但是Google便无法识别Opera Stable版本中已有FIDO U2F的开关但是开启后依然无法正常使用Opera Dev版本开启该功能后可以正常使用

2. 将YubiKey 4作为PGP SmartCard
这是购买YubiKey后最主要的使用场景之一YubiKey 4支持保存4096位的PGP私钥很遗憾原本打算购买的Yubico另一款产品YubiKey NEO目前只支持2048位的PGP私钥而我的PGP私钥都是4096位的我也不想再添加2048位的私钥因此最后还是购买了YubiKey 4相比之下YubiKey 4缺少了YubiKey NEO中的NFC功能因此在Android手机上使用OpenKeychain以及Lastpass就稍微缺少了一定的便捷性

关于YubiKey 4作为PGP SmartCard的配置方法网络上详尽的教程很多Using GPG with Smart Cards老生常谈的一点提醒在将PGP私钥导入到YubiKey 4中前一定要将自己原有的PGP私钥做好备份因为私钥导入YubiKey中之后是无法取出的如果你在Android手机上使用OpenKeychain等软件且你使用的是YubiKey 4即没有NFC功能那么一定要在私钥导入到YubiKey之前将私钥导入到OpenKeychain中当然你也可以开启每次执行PGP操作时必须按下YubiKey上的实体按钮的功能可采用该脚本开启该设置
设置如下

curl https://gist.githubusercontent.com/a-dma/797e4fa2ac4b5c9024cc/raw/dd9612337e91a4a3e212bbf72c8521c3efb1ea6b/yubitouch.sh -o yubitouch.sh
chmod +x ./yubitouch.sh
./yubitouch.sh sig on
./yubitouch.sh aut on
./yubitouch.sh dec on

如果重新导入了PGP私钥需要重新执行该脚本

3. U2F
U2F本身是一个开源的认证协议在这里我指采用U2F协议实现在Linux本地的sudo认证/登录认证

在最新的macOS Sierra中可以采用PIV协议登录系统在Windows系统中个人用户可以通过challenge-response模式配置使用YubiKey登录系统Windows 10的周年更新中带来了Windows Hello模块YubiKey配合Windows Hello进行系统认证的软件支持也正在开发中
在Linux下其实也可以通过配置Challenge-response来进行系统登录和sudo认证不过我最终还是使用了pam-u2f模块详细的说明如Local Two-Factor Authentication With U2F on Ubuntu 14.04配置完成之后每次用户登录包括开机时登录以及从锁屏恢复除了需要输入密码之外还需插入YubiKey不然会提示为密码错误这里也有需要注意的如果你的Linux安装过程中开启了硬盘加密那么可能会碰到配置失败或无法登录的问题请事先多查找相关文档

4. SSH认证
既然YubiKey中存了PGP私钥而PGP公钥又能通过一定的办法转换为SSH公钥因此通过PGP也能进行SSH的登录详细的方法如yubikey and ssh authentication不过如果你是GNOME用户gpg-agent与GNOME-keyring之间可能会产生一定的冲突解决方法可以参考dainnilsson/scripts

5. 其他
意外地发现在Ubuntu 16.04下YubiKey Personalization Tool Gui竟然无法识别YubiKey 4的型号但实际上各项功能使用正常
screenshot-from-2016-10-04-21-11-02
在配置YubiKey的过程中再一次体会到这玩意还是在Linux以及macOS上配置简单在Windows下的配置过程中碰到过各种不必要的问题如Windows 10的Windows Subsystem for Linux无法识别YubiKey而在Cygwin中Cygwin原生的GnuPG只有1.x的版本想用2.x以上的GnuPG除非自己从源代码编译或是安装Win32的版本而Win32的版本在gpg2 –card-edit的过程中fetch指令不支持https虽然这不是一个大问题但是我莫名被浪费了很多时间又比如在Windows上配置通过GPG进行SSH登录在我的Cygwin环境下gpg-agent始终不能如预期工作

以上就是目前使用YubiKey 4的所有功能使用体验还是十分不错的喜欢折腾的强烈建议入手最后一点吐槽YubiKey对金属触点没有任何保护措施日常使用中除了有可能被钥匙刮伤外还有可能发生
cs6zy1tvuaadsl3
所以假如如果有机会为YubiKey 3D打印一个外壳也不错呢
Share:

ERROR 451: 本網頁基於國家法律而封鎖

关于HTTP状态码,你可能最熟悉的就是404 Not Found了。当服务器返回404时,意味着你请求的资源无法找到。本文介绍的451状态码,从某种程度上来说可以视为404的变种,但具有比较特殊的含义。

如果你在中国大陆境内,当你访问programthink/zhao时,可能会面临两种情况。第一,你可能根本无法打开网页。这意味着你和GitHub之间的连接又被防火长城干扰了。第二,如果你很幸运地打开了网站,你也只能看到如下页面。
根据该页面的描述,由于中国政府有关部门的要求,GitHub对于中国大陆境内的访问者封锁了该页面。如果你查看一下GitHub返回的状态码,你就会发现服务器返回的状态码是451.
令人值得回味的是,在处理这件事情上,某国政府通过了GitHub的官方渠道使得相关文档“下架”,而不是像2015年年初时采取的“大炮”攻击一般。
设置HTTP Error 451的提议最早在2013年被正式提出,并在2015年正式通过了IESG的审核,并在2016年2月作为RFC 7725发表。在这之前,reddit上就有相关用户对451进行讨论,如451: Proposed Web censorship HTTP status code。比较意外的是,微软之前已经应用了Error 451,只不过其应用场景是客户端访问了错误的服务器,详见(MS-ASHTTP]: HTTP Error 451)。

很显然,IESG最终在RFC 7725中将451定义为An HTTP Status Code to Report Legal Obstacles是有向Fahrenheit 451致敬的意味吧。

其实世界上各地的网民都有对自由和开放网络的追求。各国网民对于政府侵犯言论自由的法案都有着强烈的抗议声浪。如美国的SOPA法案被提出后,反对者认为该法案侵犯了《美国宪法第一修正案》,是一种网络审查行为。同时该法案还会导致互联网发展的倒退。反对者还担忧,该法案会鼓励互联网上的告密行为,同时影响言论自由[1]。又如中华民国经济部智慧财产局研拟封锁境外侵权网站事件,由于网民的抗议声浪过高,原本预计于2013年第二立法院院会期间审查,后来停止推动修法[2]。在这次事件期间,Mozilla社群制作了一个Blackout 451 页面,用来警醒网民警惕政府的作为,以维护秘密通讯与言论自由。
我将该页面做了一定的修改,效果如https://clarkzjw.github.io/Error451-Blackout/所示。
具体使用只要将

<script src="//rawgit.com/clarkzjw/Error451-Blackout/master/blackout.js"></script>

加到网站 </body> 前方第一行,使用者进站时即会看到 Blackout 451 画面。

代码在GitHub
Share: