1. 在互联网上,没人知道你是一条狗?

1993 年,《纽约客》(The New Yorker)杂志刊登了一幅漫画:一只黑狗站在电脑椅上,爪子扶着键盘。它望向站在地上、表情迷茫的一只同类,无不兴奋地说:「在互联网上,没人知道你是一条狗。」(On the Internet, nobody knows you're a dog.)这幅漫画成了《纽约客》历史上重印最多的一幅,画中那只狗的台词也成了 IT 界广为流传的经典笑话。

「在互联网上,没人知道你是一条狗。」
「在互联网上,没人知道你是一条狗。」

然而,这句笑话或许真的要变成笑话了。

如果《纽约客》漫画中的那只狗还在上网,它大概会惊恐地发现,在今天的互联网上,别人不仅知道它是一条狗,而且知道它的名字、主人、地址、品种、血统、毛色,甚至知道它最喜欢吃什么牌的狗粮、有没有做过绝育、跟隔壁那只猫上次打架是哪天。

这就是如今网络的现状——「隐私」「匿名」这些传统上互联网的题中之义,已经越来越让人感到陌生了。各种网站、服务日渐把收集用户数据作为最重要的商业模式,用户的隐私信息在网络上无处遁形,甚至成为网站间流通的通货:一分钟前搜索的关键词,一分钟后就成了社交网站和购物网站上广告的标题。真实世界和虚拟世界之间的边界模糊了。你在网络上的任何行为,都可能成为追踪到个人的蛛丝马迹。人类花了几万年进化到衣冠楚楚的文明社会,互联网只用了几十年就把他们打回了衣不蔽体的原形。

不过,还是有一些不愿意束手就擒的人、一些不愿意随波逐流的网站。它们在瓜分用户数据的狂潮中站出来,大声疾呼隐私的重要性,坚定地承诺「我们不追踪你的信息」,让你在互联网巨头们张牙舞爪的入侵中看到一股清流。

看到这里,你脑海中大概会浮现出钢铁侠那样高大英武的形象,或者是黑客帝国中那些充满科技感、闪着绿光的操作界面。

直到你看到这个网站的图标。

DuckDuckGo 首页
DuckDuckGo 首页

初见 DuckDuckGo 的人恐怕都会第一眼被它那古怪的 logo 所吸引:一只鸭子傻乎乎地张着大嘴,挂着一副人畜无害的表情,两撮鸭毛在头顶戏谑地翘起,脖子上不合时宜地挂着一副与红色背景格格不入的绿色领结。这样一副似乎是从搞笑漫画中走出来的形象,与页面下方那句严肃的标语「The search engine that doesn't track you(不会追踪你的搜索引擎)」形成了鲜明的对比——这只鸭子真的没有跑错片场吗?

DuckDuckGo 创立于 2008 年,创始人是毕业于麻省理工的 Gabriel Weinberg。谈到这个奇怪的网站名字,Weinberg 表示是受启发于儿童玩的追逐游戏「duck, duck, goose」,并没有其他深意或隐喻。

在自己的流量统计页面上,DuckDuckGo 特别标出了几个重要的发展节点:2011 年 1 月,DuckDuckGo 在旧金山架起一幅巨型户外广告牌,内容直指 Google 的追踪行为——「Google tracks you. We don’t.」,一举吸引众多关注;一年后,Google 宣布更新隐私政策,决定在其各个在线服务中搜集用户信息,DuckDuckGo 借此迎来了一次流量激增;2013 年,棱镜门事件爆发,再次引发了公众对网络隐私的担忧,DuckDuckGo 的日均使用量在一年之内翻了一倍以上;2014 年,Safari 和 Firefox 浏览器宣布将 DuckDuckGo 作为可选的搜索引擎,进一步促进了其用户量增长。

经过近十年的发展,DuckDuckGo 如今已有每天 1600 多万次的搜索量。虽然这比起 Google 每天动辄 30 多亿次的搜索只是九牛一毛,但想到其完全依靠社区支持,背后没有任何巨头推动,也是一个相当可喜的成绩。科技圈内也有许多名人表达过对 DuckDuckGo 的赞许和支持,如著名博主 John Gruber 就曾多次表示已转用 DuckDuckGo 为默认搜索引擎

我了解到 DuckDuckGo 是在 2015 年底,摆弄 Safari 浏览器设置时,无意从内置的搜索引擎列表中发现了这个陌生而古怪的名字。从那以后,我逐渐尝试和探索了 DuckDuckGo 诸多独特的功能;现在,它已经成为了我每天使用的主力搜索引擎。下文将介绍 DuckDuckGo 的主要功能和特色,并给出一些具体的应用场景实例。

说明:

  1. DuckDuckGo 目前无法在国内直接访问,因此体验时请自行准备相应条件;
  2. DuckDuckGo 提供包括中文在内的多语言支持,但其中文翻译存在很多影响理解的明显错误,故后文在介绍时仍将以英文界面为准;
  3. Safari 和 Firefox 可直接将 DuckDuckGo 设为默认搜索引擎,Chrome 浏览器可使用其官方插件,DuckDuckGo 另提供手机 app 和短网址 ddg.gg

2. DuckDuckGo 的主要功能

2.1 搜索

2.1.1 基础搜索与 URL 参数

DuckDuckGo 最基础的搜索功能与其他主流产品别无二致,对常见的 OR-site:filetype:语法也有良好支持,搜索结果页亦支持通过语言、更新时间等参数进一步过滤结果,不会给从其他搜索引擎切换来的用户施加额外的学习成本。

对于进阶用户,DuckDuckGo 也支持通过在 URL 上附加参数(parameter)的方式进行高级搜索。例如,下面的 URL:

 https://duckduckgo.com/?q=wikipedia&kp=0&kl=cn-zh

将会发起一次关键词为「wikipedia」(q=wikipedia)、不过滤搜索结果(kp=0)、地区范围为中国(kl=cn-zh)的搜索。

DuckDuckGo URL 参数
DuckDuckGo URL 参数

但与 Google 等具备类似功能的搜索引擎不同的是,DuckDuckGo 不仅支持通过 URL 参数定义搜索的方式,而且支持定义搜索页面的行为(如是否在新标签页中打开链接)和外观(如主题背景)。(可以在 DuckDuckGo 的文档中找到全部可用的参数。)

这就进一步提高了使用自定义搜索引擎或启动器 app 调用 DuckDuckGo 时的灵活性。举一例以抛砖引玉:使用 iOS 上的 Workflow 调用 DuckDuckGo 搜索时,只要加上一个基于当前时间的 if 判断,当运行时间为夜间时,在打开的搜索 URL 尾部附加上 &kae=d(意为启用暗色主题)这一参数,就可以达到自动「夜间模式」的效果。

2.1.2 隐私保护

前已述及,DuckDuckGo 认为自己区分于其他所有搜索引擎的关键特征就在于重视维护用户隐私。那么,它具体做了哪些努力呢?要回答这个问题,首先要知道搜索引擎在哪些环节可能泄露我们的隐私。

搜索引擎的隐私泄露风险
搜索引擎的隐私泄露风险

一方面,搜索引擎通常会搜集并记录你的各种信息,包括但不限于你的 IP 地址、地理位置、搜索历史等。这么做的目的在于给用户「画像」——如果搜索引擎能更了解你的居所、身份、偏好,就能更为精准地给你投放推广信息,使你更有可能对其感兴趣并点击访问,从而提高其广告收益。另外,更令人担忧的可能是用户信息被转卖和窃取的潜在危险,类似的事件在近年来早已屡见不鲜。

对此,DuckDuckGo 的承诺是:它既不会记录你的 User Agent(用户识别符,用于识别你所用的浏览器)、IP 地址、搜索关键词等被动传来的信息,也不会主动通过 Cookies(网页存储在本地的缓存)等机制识别你的身份。

另一方面,使用搜索引擎还会将你的搜索行为披露给第三方网站。一般地,当你在搜索结果页面 A 点击一个网站 B 的链接时,由于 HTTP 协议的机制,网站 B 将可以从 HTTP 表头的来源地址(referrer)字段中知道你是从 A 页面跳转而来的。又因为从搜索页面的 URL 中可以看出关键词,网站 B 也就知道了用户是通过什么搜索关键词找到自己的。不仅如此,既然搜索引擎可以通过前文所述的方法追踪并识别用户,只要它将用户的身份信息披露给第三方网站(出于推广营利目的,它很可能乐于这么做),网站 B 还能进一步知道是你发起了这次搜索。即便我们假定网站 B 是善意的,多一个人知道你的信息,也就意味着多一重信息泄露的风险。

DuckDuckGo 同样考虑到了这种风险。为此,它在转发你的访问时,会对请求进行处理,使得第三方网站无法知道你是从其搜索结果页跳转而来——在后者看来,你就像是在地址栏中输入其网址直接访问一样。另外,DuckDuckGo 还会自动修改一些主要站点索引的 URL,在你点击访问时指向它们的 HTTPS 地址,以进一步提高安全性。

此外,对于那些追求极致隐私保护的用户,DuckDuckGo 还提供了更多增强安全性的工具。

例如,它允许用户通过 POST 方法而非 GET 方法发送搜索请求。两者技术上的区别在此不赘;仅从现象上而言,启用该选项后,从浏览器地址栏的 URL 中将无法看出你的搜索关键词,因而搜索历史也不会呈现在历史记录中,实现了类似于「隐身模式」的效果,在公用设备上有利于进一步保护隐私。

POST 方法和 GET 方法产生的 URL 和历史记录
POST 方法和 GET 方法产生的 URL 和历史记录

再如,DuckDuckGo 是少有的提供 Tor 站点的搜索引擎。如果你能够访问 Tor 网络(洋葱路由,俗称「暗网」),则可以通过访问 3g2upl4pq6kufc4m.onion 来使用 DuckDuckGo,并获得端到端的匿名和加密。

Tor 网络上的 DuckDuckGo
Tor 网络上的 DuckDuckGo

综上所述,DuckDuckGo 确实远比其他主流搜索引擎更为注重用户隐私。当然,任何收益都是有成本的,隐私保护的代价就是你无法在 DuckDuckGo 中得到其他服务中那种「私人订制」的搜索结果,HTTPS 连接的响应通常更慢,而启用 POST 方法将会影响「返回」按钮的正常功能。但在笔者看来,在隐私面前,这些小小的妥协都是值得的。

2.1.3 Instant Answers 与搜索结果准确度

必须承认,对于一个搜索引擎而言,功能多寡和隐私保护说到底都只是锦上添花的要素;能不能吸引用户使用,最终还要取决于其搜索结果的质量,换言之,用户能不能用 (a) 最短的时间找到 (b) 最准确的结果

对于需求 (a),即提供答案的效率,DuckDuckGo 提出的解决方案是 Instant Answers。简言之,当你搜索特定关键词时,DuckDuckGo 将识别出你的需求,直接在结果页顶端将答案呈现给你。虽然目前大多数搜索引擎都提供类似的功能,但 Instant Answers 的优势在于它是一个完全开源的项目,任何人都可以根据其文档编写新的 Instant Answers 支持。

正因如此,Instant Answers 的覆盖范围十分广泛:它可以转换汇率、查询天气、寻找食谱,可以呈现维基百科的词条、特定地理位置的地图和简介,甚至 Photoshop 的快捷键、DoTA 2 的英雄资料、Swift 函数的文档都能直接搜出结果。目前,Instant Answers 支持的各类功能已经有 1000 多个,而且还在不断增加。想到这些功能的背后都是开源爱好者无偿的劳动,不得不赞叹社区文化的力量。

各种 Instant Answers
各种 Instant Answers

而需求 (b),即搜索结果的准确度,则是一个十分主观的标准——对于同一份搜索结果是否令人满意,不同人可能有不同的判断。固然有很多人因为不堪忍受百度那种充斥着推广和竞价排名的搜索结果而坚持使用 Google,但也有同样多的人觉得只有这种把贴吧之类的来源置顶的搜索结果才是正确(expected)的。因此,笔者在此并不能对 DuckDuckGo 的准确度作出一个客观评判。

DuckDuckGo 和 Google 的中文搜索结果对比
DuckDuckGo 和 Google 的中文搜索结果对比

仅就主观印象而言,DuckDuckGo 在英文搜索结果上与 Google 并无明显水平差异,至少与 Bing 等二线搜索引擎处于同一基准上(事实上,DuckDuckGo 在组织搜索结果时会参考 Bing、Yahoo、Yandex 等服务的结果),大多数情况下可代替 Google 使用;但在中文搜索上,离 Google 或百度的结果尚有一定差距,对国内主要站点的索引有待加强。对此,将地区过滤设为中国有助于一定程度上提高准确度,也可利用后文介绍的 Bangs 功能间接解决。

2.2 自定义

2.2.1 外观自定义

初见 DuckDuckGo 的人可能被它那「非主流」的 logo 所「迷惑」,觉得这会是一个在设计上不修边幅的网站。但事实并非如此。经过数年的研演进,DuckDuckGo 如今在外观上已经不逊于同类服务,且由于没有泛滥的广告困扰,其观感远比百度之流来得清爽简洁。最重要的是,DuckDuckGo 还提供了极其细致的外观定制选项,因此你完全可以按照自己的口味进行调节。

DuckDuckGo 的外观设置分布在在设置页面的「Theme」(主题)和「Appearance」(外观)两个选项卡中。前者允许你从预置的六个主题中选择——其中包括一套颇为实用的夜间主题,而后者中则可任意定制字体、字号、对齐方式、页面宽度,以至搜索结果页面背景、链接、文字的颜色。如果你熟悉设计或对某个网站的配色情有独钟,完全可以将其在 DuckDuckGo 中「像素级」复刻出来。

DuckDuckGo 的主题
DuckDuckGo 的主题

当然,如果你真的还是对那只鸭子心存芥蒂的话,可以通过 Stylish 插件的主题把它换成看着更顺眼的图标。不过,偶尔离经叛道一点有什么坏处呢?

2.2.2 其他自定义设置

除外观之外,DuckDuckGo 还允许对搜索引擎的行为进行细致自定义,这些选项可以在设置页面的「General」(通用)和「Privacy」(隐私)两个选项卡看到,这里不一一叙述,只提出几个较为独特或实用的。

  • General > Safe Search:即其他搜索引擎中的结果过滤,默认为 Moderate(适中),可按需调为严格或关闭。
  • General > Advertisements:尽管 DuckDuckGo 上的广告已经非常克制,你仍可在此将其全部关闭。
  • General > New Window:开启后,在搜索结果页面点击链接会在新窗口中打开,如果你习惯一口气打开多个结果链接再慢慢筛选,该选项非常实用。
  • Privacy > GET requests:默认为开启。如果关闭,DuckDuckGo 将使用 HTTP 中的 POST 方法而非 GET 方法来发送你的搜索请求。

2.2.3 设置的同步

如果想将自己的偏好设置在多个设备上使用,就需要同步机制的帮助。对此,几乎所有网站采取的都是账号机制。但多一个账号就多一分隐私外泄的风险,以保护隐私为己任的 DuckDuckGo 显然不会放过这个漏洞。于是,它采取了一种我目前见过最独特且有趣的机制。

在 DuckDuckGo 设置页面的 「Cloud Save」(云端保存)部分点击 「Save Settings」 按钮,网页会要求你输入一段密码,或者直接点击「Suggest a pass phrase」自动生成一个,然后点击「Save」保存。这样,你的偏好设置就被保存在了 DuckDuckGo 的服务器中;其他设备上,只要在同一页面上点击「Load Settings」并输入密码,即可载入设置,而新的更改也会在设备间同步。

DuckDuckGo 的设置同步
DuckDuckGo 的设置同步

很明显,在 DuckDuckGo 设计的这套机制中,并不存在「账号」的概念。而所要求的「密码」与其说是为了保密,不如说是为了识别,其唯一的作用是建立一个对应关系,在你需要时将服务器中保存的特定设置调取出来。因此即使密码泄露,由于 DuckDuckGo 不存储你的 IP 地址或身份信息,攻击者也得不到任何有用的数据。反过来说,即使忘记了密码,你也没有任何损失,只需重新生成一个就好了——如果你仍然抱有疑虑,也可以随时点击「Delete my data」,彻底删除密码和设置信息间的对应关系。

2.3 神奇一跃——Bangs

从前文的比较可以看到,DuckDuckGo 虽然在搜索结果准确度上的表现已经可圈可点,但毕竟距离 Google 还有一定差距;百度虽然遭人嫌弃,但个别中文搜索需求也不能完全将其抛弃。这就产生了同时使用多个搜索引擎的需求。

调用默认之外的其他搜索引擎是一个非常经典且常见的需求,现有的解决方案也很成熟,如在 Mac 上利用 Alfred、LaunchBar 等启动器的自定义动作,在 iOS 上利用 Drafts、Launch Center Pro 等可启动自定义 URL 的 app 等。但 DuckDuckGo 直接将这个功能放进了搜索引擎里,并将其称为 Bangs。不夸张地说,这个功能填平了将其真正作为默认搜索引擎的最后一道障碍。

Bangs 功能
Bangs 功能

Bang 的运行机制很简单,只要在你的搜索关键词之前(或结尾)加上一个以半角感叹号 ! 开头的标识符(称为 bang),DuckDuckGo 就会替你调用这个 bang 所指向的搜索引擎或网站进行搜索。例如,如果你搜索:

!g Wikipedia

DuckDuckGo 就会跳转到 Google 搜索 Wikipedia 这个关键词。类似地,!bd!bing 会分别将你跳转到百度或必应进行搜索。这样一来,如果你对 DuckDuckGo 的某次搜索的准确度抱有怀疑、或想通过比较各个搜索引擎的结果获得最多的信息,只要在 DuckDuckGo 的搜索框中就能完成,无须借助其他工具。

上述只是 Bangs 功能最简单的应用。事实上,DuckDuckGo 目前支持的 Bang 语法已经接近五位数个,而且还在不断增加,其覆盖面之广超乎想象。这里只举几个常用的例子:

  • 指定类型搜索:!gi(Google 图片搜索)、!itunes(iTunes 搜索)
  • 指定地区搜索:!ghk(Google 香港)、!gcn(Google 中国)
  • 指定网站搜索:!acn(亚马逊中国)、!taobao(淘宝)

你可以在 Bangs 功能的页面看到所有的语法,如果其中没有你想要的,还可以自行提交建议来新增语法。

当然,从技术实现的角度看,Bangs 功能并没有什么高深之处——无非就是识别特定关键词并转发到其他网站,起一个「跳板」作用罢了。然而,仔细思考就会发现,这个简单的「跳板」正是该功能真正的价值所在。

首先,通过 Bangs 转发的搜索是完全匿名的。当你用 Bangs 发起搜索时,目标网站收到的请求是来自 DuckDuckGo 而非你本人,因此它无法将这次搜索与你关联起来,也就无法据此为你「画像」,进行追踪、广告推荐等后续行为。因此,即使你完全不用 DuckDuckGo 来搜索,也可以利用 Bangs 这个跳板来处理日常的搜索需求,只要修改你的浏览器/启动器中的搜索引擎 URL 即可。例如,我就将 LaunchBar 中 Google 搜索的 URL 从:

https://www.google.com/search?q=*

换成了:

https://duckduckgo.com/?q=!g%20*

其中,%20 是 URL 编码中表达空格的方式,* 是 LaunchBar 自定义搜索引擎中代表关键词部分的占位符,对应的占位符在 Alfred 中是 {query},在 iOS 上的 Pin 中则是 %@

其次,Bangs 是整合在搜索引擎之中的,不依赖于特定的 app。这意味着只要将 DuckDuckGo 设为默认搜索引擎,只靠浏览器的地址栏就可以实现原本需要其他效率工具辅助才能实现的功能。在移动端,这样的优势体现得格外明显:比起以往要下拉通知中心/退回主屏启动 Launch Center Pro 才能调用其他搜索引擎的繁琐操作,我现在可以随时在 Safari 以至 Spotlight 中用 Google 香港(而不是 Google 日本,相信有特定需求的读者知道我为什么这么说)或百度发起一次搜索。如果嫌中文状态下输入半角感叹号不方便,还可以通过在 iOS 的键盘设置中将 vghk 替换为 !ghkvbb 替换为 !bd 等,进一步提高效率。

话虽如此,Bangs 功能也有其不足:由于搜索请求经过 DuckDuckGo 的转发,使用中会明显感到一个停顿过程,没有直接搜索来得迅速;而且,如果你无法正常访问 DuckDuckGo,即使搜索目标是连接通畅的网站,等着你的也只有 404 而已。当然,这还是为了隐私和「自由」必须付出的代价;孰轻孰重,就是你自己的选择了。

3. 题外话

网络隐私是一个敏感而复杂的话题,因为它不仅仅是一个技术问题,更是一个涉及公权与私权边界、服务提供者与用户权利义务边界的理论问题、理念问题。从这个角度看,DuckDuckGo 并没有给出一个上述任何一个问题的答案,只是摆出了一种不妥协的姿态。因此,在不少人看来,DuckDuckGo 的努力很可能是徒劳的:在众多巨头的带领下,收集用户数据已经是互联网商业模式的大势,以 DuckDuckGo 的渺小体量,坚持「不追踪」无异于螳臂当车;更何况,信息收集行为也未必让用户纯受损失:在让渡部分隐私的同时,用户不也正享受着个性化服务和 O2O 模式带来的福利吗?没有数据支撑,大数据、人工智能技术能取得突飞猛进的发展吗?

这样的观点是没有根据的。法谚有云:「法律不保护权利上的睡眠者。」用户不能指望被他人「施舍」权利,而应积极用言论和行动去主张权利。事实上,用户的呼声足以改变任何庞大公司的陈规和偏见:几个月前,Facebook 正是在巨大的舆论压力下,改变了对其 News Feed 中仇恨言论和虚假新闻的消极态度,投入大量资源进行筛查。如果用户一直忍气吞声,很难想象 Facebook 有任何改变现状的动力。

其次,DuckDuckGo 固然只是搜索引擎市场中不起眼的一个,但其存在的意义不在于与 Google 争夺多少市场份额,而在于维持一个垄断市场中的竞争压力,使上位者不敢固步自封、肆意妄为,损害用户福利。今年,美国两大无线运营商 Verizon 和 AT&T 纷纷宣布推出无限流量计划,其动因正是来自竞争者 T-Mobile 和 Sprint 的压力,而后两者的市场份额还不到它们的一半。这正是竞争带来的效果。

另外,信息收集带来的福利与维护隐私并不矛盾。这方面,最好的例子就是苹果的 differential privacy 技术:为了在输入法词组、图像识别等服务上提高用户体验,苹果也需要收集部分用户数据;但它坚持在收集的数据中人为加上「噪音」,切断数据和用户身份之间的关系,从而达到既获得所需信息、又不至于泄露隐私的效果。这与上文提及的 DuckDuckGo 同步用户设置的机制有异曲同工之处。

在互联网的浪潮中,DuckDuckGo 选择了一条逆流而上的道路。这注定是一个困难的方向:我们无从预判它带来的这份隐私能坚持多久,甚至无从验证它承诺的这份安全究竟有多可靠。但可以肯定的是,只要还有 DuckDuckGo 这样的「叛逆者」在波浪中奋力游动,互联网就不会变成隐私的荒漠。