★Tox是什么

一个反窥探的开源项目;一种基于DHT(BitTorrent)技术的即时通讯协议;一个为安全而生的加密通讯系统 。
美国棱镜计划曝光后,一个名为 irungentoo 的牛人于17天后的2013年6月23日在Github上发起该项目,目标是为大众提供安全且便捷的沟通。

★ Tox有什么

  • 【加密通讯】——每次会话都使用不同的密码加密,安全无忧,巧妙防破解
  • 【去中心化】——没有服务器存储你的账户信息和会话内容,无从窥探,隐私有保障
  • 【开源免费】——源代码可以自由获取、修改和审查,不用担心软件后门,更不用厌恶广告

◇加密通讯

不加密的通讯犹如隔空喊话,飘过的人都知道通话内容,下文我们称未加密的通讯内容为【明文】。国内不少应用因为各自的原因,居然极不负责任的直接将明文数据发送出去,非常容易导致消息被有心之人拦截和篡改,各类诈骗事件中所谓技术手段作案屡见不鲜,加密通讯的出现正是为了保护用户,提高安全性。

然而,近年加密聊天的软件可谓层出不穷,面对如今破解效率不断提升,Tox抗破解表现如何呢?
Tox采用前向保密(英文:Forward Secrecy,属于对称加密,细节见下文),其密钥“交换”机制非常巧妙,能有效抗击各种破解方式。

技术哥哥们不要一看到使用 对称加密 就看衰Tox哟,在介绍Tox加密之前,先用应用场景解答两个疑问:

什么是对称加密?

场景一:
文件压缩的时可以对内容做加密操作——设置压缩密码,解压时同样需要提供该密码才能解压,这种加密和解密用同一个密码的加密方式称为 对称加密。

那么,非对称加密呢?

场景二:
发送商业机密邮件前通常也会做加密操作,不同的是加密邮件内容的密码是对方已公开发布的,我们称之为【公钥】(公开的密钥),对方收到后用自己私密保存的【私钥】解密邮件获得明文,加密解密用完全不同的密码,这方式称为 非对称加密。需要说明的是公钥和私钥是由算法成对产生的,也就是说一个私钥只要一个唯一匹配的公钥。非对称加密还能有效防止抵赖,这里不展开说。

弊端分析

场景一的文件如果只是本机存储还好,倘若要发给别人,则需要告诉对方你的密码是多少,这个沟通过程的保密是个附加问题,次数多了更可能泄露你的密文生成习惯。
场景二解决了上面需要告知密码的弊端,但新问题又来了,双方密钥长期没有更换,加密数据在流转过程可能会被第三方长期录制存储,坐等日后私钥泄露、协议漏洞或者破解效率提升后一次性解密数据。

Tox如何解决上述历史性难题呢?

解答前先理清Tox密钥的几个概念:
公钥: Tox软件界面看到的Tox Id,用于公开发布
私钥: 内置于本机特定目录下的文件中,我们成为密钥文件,切勿泄露
加密密钥: 用于【本次】加密会话的密码

Tox采用的 前向保密 正是为安全而生,通讯双方预先自行交换公钥(通过加好友完成交换),私钥自己好生保管,每次通讯前交换一些包含随机性的必要参数,然后双方各自拿 对方的公钥+自己的私钥+必要参数,在自己本机【单方面】运算生成本次加密的密钥,神奇的地方在于密钥的合成算法能保证双方独立生成加密密钥内容一样 (精髓所在啊),最后用该密钥加密内容发送出去,对方再用本机同样的密钥解密数据,规避场景一需要告诉对方密码明文的问题,而且下次会话是另一个同样复杂的加密密钥。万一私钥泄露(自己注意保护),只要本机的记录清除了,有随机参数的保护,也难以追溯历史加密密钥,这样可以有效对抗流量录制,即使日后破解效率出现飞跃式提升,也因为加密密钥一直在变化,没法一次性破解内容,破解成本大幅超过数据本身才能有效保证数据安全。

补充:前向保密虽然拥有在不安全的网络环境实现安全通讯的超能力,但是如果你本机电脑环境早已沦陷,一切都是浮云啊,请确认本机环境的干净(挖坑中……)——防火防盗防内鬼。

◇去中心化

中心化的应用场景:
云同步,内容可以同步到“高大上”的云端——不管你在哪里我都在你身边,只要账户一登录,所有的关爱都立马簇拥过来;
离线消息,消息先存储到软件官方服务器,对方上线后立马可以收到——关怀无处不在。

清点系统的应用软件清单,不难发现不少“挚爱”(不点名啦)需要先注册账户或者以手机号码登录,以便在官方服务器留下到此一游的唯一标识(比如邮箱),从而实现用户行为分析和广告推送等——话说用户即财富。
中心化给我们提供了便捷的体验,为软件集中管理提供了保证,但也给泛滥的监控和信息窃取提供了很好的温床。时常见于头条的账户信息泄露事件屡见不鲜,安全和便捷有着不可调和的矛盾。
棱镜计划也正是利用了中心化的“缺陷”,将监控深入到你生活的方方面面。

为安全而生的Tox自然要打破这个禁锢,它无需注册,没有中心服务器,永远没有广告推送! 除了志愿者提供的“中继服务器”(提供前期引导和后期中转服务,详情见下文)外,每个连入网络的客户端同时也会成为中继网络的一部分。不过去中心化的代价是造成部分功能限制,首当其冲的是没有云同步,消息记录只在本地存储;其次不支持离线消息,只有伪离线消息,其实就是将你的“离线消息”存在本机,等下次双方同时上线时自动发送过去。

◇开源免费

项目在GitHub上,属于GPL V2授权协议(协议内容自行补脑),有效避免日后被商业化。不过因为 irungentoo 主要提供内核的开发,其他软件爱好者主要基于内核自行开发客户端,所以Tox存在多个不同的版本,类似Linux内核和发行版本的模式。
客户端主要按语言区分,界面风格和功能完善情况不一,可自行选择。整体来说跨平台支持得不错,现在已覆盖Windows(vista,7,8,10全覆盖;xp sp3下载特定版本)、OS X(10.7+)、Linux、Android(安卓)、IOS(IOS 8+) 和 FreeBSD;Windows Phone暂时没动作 ,具体支持情况可前往官方网站了解。
桌面电脑上比较完善的是qTox,其次是uTox。除了日常用到的点对点文字、语音、视频聊天和文件传输外还有不限人数的群聊(支持语音群聊),更支持多国语言、主题切换、代理设置和伪造离线消息等。

广告^_#:个人偏爱uTox,界面设计简约、有暗黑主题,支持消息内嵌截图,但是,稳定性欠佳,还有界面漏洞,新手慎用。

Tox项目正在完善中,目前还不完美,热切期待大家的参与。如果你只是普通用户,可以前往各发行版的讨论组反馈功能漏洞和新功能需求等(用英文表达);如果熟悉编程语言(C、C++、Python、Java和C#中任意一种均有对应的客户端),希望能帮助修复基于该语言的分支客户端;如果英语精湛,希望可以帮助翻译Tox的英文资料(部分会涉及网络通讯)。

◇群聊说明

Tox的群聊目前(后续会推出新设计)分为【自建群】和【聊天室】,两者均尚在完善中,与我们日常接触的群聊有一定的出入,这里特意作简要辨析。

【自建群】——支持文字【和】语音;类似一个闭门会议 ,任何人均可创建,群内成员可以自行拉好友入群,群外用户不能自己申请加入。
【聊天室】——支持文字【或】语音;创建时【必须】指定是文本聊天还是语音聊天;类似开门会议,需要加入机器人节点(可自建),在同一个机器人节点的用户都可以自行进入节点下的某聊天室。

提示:对于创建时设了密码的聊天室 ,正如上了锁的门,进入时需提供相应密码。
自建群 和 聊天室 因为没有中心服务器,暂时有一些使用上的限制,例如:自建群的存在状态目前暂时不能保存,在你关闭软件后,你就退出了群,而聊天室则在所有成员均离开“房间”后,会被机器人自行回收等。

★ 运行原理

某人英语长年挂科,对官方纯天然的原文消化不良,如与实际有出入望指正。普通用户可以跳过本节。

◇密钥文件

首次运行 Tox 会在你本机生成密钥文件——表明到此一游,文件内容含有你的私钥信息,务必妥善保管,同时通过软件设置界面你可以看到一个 Tox ID,那是公钥可公开发布的,别人通过这个ID加你为好友, 等确认好友请求后就能愉快的聊天了。
出于安全考虑,建议你在设置中启用了加密选项,那么理论上密钥文件和聊天记录(uTox的聊天记录暂时没有,理论真是个好东西) 会被加密,此后每次启动软件都需要输入密码——忘了就死了,所以……你还要启用加密吗?

完整的 Tox ID 内容如下图所示:

每次加对方好友都需要输入类似上图这样完整的 Tox ID,其中 Publick Key 属于公钥,除非清理掉私钥文件,否则生成后不会再改变;NoSpam 用于防骚扰设计,可以自行改变值内容生成一个“全新”的Tox ID,这样不但现有的好友不需要重新加你,而且日后所有人都只能用新的Tox ID才能加你;最后的 Checksum 是一个散列值,提供对Public Key 和 NoSpam 的有效校验。

需要注意的是 公钥里面包含了你本地公网出口IP,该设计是为了方便好友直接发现你,如果介意公网IP泄露,建议先开VPN或者代理软件,然后再打开Tox,而已经生成了 Tox ID 的用户如果想重新生成密钥文件,只需要删除系统Tox目录下的密钥文件(tox_save.tox )即可,各系统该文件所在目录如下:

Windows: \%appdata%\tox\
Linux: ~/.config/tox/
OS X: ~/Library/'Application Support'/Tox/

因为 tox_save.tox 记录了好友的ID等数据,是非常重要的文件,所以建议【每次】变更好友后单独备份,笔者就因为Tox软件崩溃被自动清空过该文件。此外Tox客户端的配置文件、好友头像目录甚至还有聊天记录(文件名是好友ID)等默认均在该目录下,如有需要可选择性备份。

◇中继服务

Tox软件都内置一批中继服务器IP,软件启动后,先去连接中继服务器,成功后Tox会缓存IP等数据 ,中继服务器也获取了你的位置,并提供你在线好友的IP信息,此后就开始和在线的好友建立会话连接,连接成功后,本机同样缓存好友的IP数据,也就是说与好友聊天时,彼此的外网IP是可见的。

Tox连接完成后缓存的中继IP和好友IP会定时更新数据,其中中继服务器清单在运行时只会使用最优质的8个IP,如果好友IP清单有比中继服务器更优质的IP资源,则该IP将提升为本机中继服务器的8个IP之一。

讲到这里就有一个疑惑,如果连接不上内置的中继服务器IP呢?
Tox对于曾经连接过的中继服务器,会缓存IP数据等到本地文件,可以尝试这些缓存节点,另外会扫描本地IP,还会尝试去直接连接好友的IP节点,好友的IP数据就来自于好友的Tox ID,生成Tox的公钥时,软件就将当时的公网出口IP加密写入了字符里面,在此特殊环境就可以派上用场了。
由此可推断出同一个Tox ID的多个设备先后上线,将只有最先“上线”的设备可以发现好友,该设备下线后,后面的设备才能接着真实的“上线”,另外通讯过程因为采用的前向保密也限制了一次也只会有一个设备能够和好友建立连接。

★ 用户分布

用户数统计推测是由开发者提供的几个主要中继节点根据中转的IP数目统计而成

*颜色越深表示在线用户越多

上图可知美国和俄罗斯的在线用户数最大,颜色较淡的中国、澳大利亚基本持平,加拿大在浅色区域中在线人数最多,将近中国的两倍;欧洲用户以德国、法国、乌克兰、瑞典和芬兰为主。

下图是本国用户自己能分到的平均中继节点数占比:

又见“中国灰”,这次灰的很彻底,占比仅有0.03%,和用户数差不多的澳大利亚(1.9%) 对比,中继节点占比完全不在一个数量级上,心碎一地,这情况推测跟国内本身拥有的IP数少有关,多数在线用户基本没有固定IP,日后如果用户数上来了就可以减少对国外中继节点的依赖,想想7亿潜在用户,用中国红照亮全宇宙。

★文末清场

现在使用Tox恰似荒漠里独自的徒步,无边的荒寂,找不到一个朋友,甚至有可能成为方圆百里唯一的节点,但却是繁华喧嚣过后绝佳的通讯选择,回归静谧而安全的沟通;小众的选择也能不断成长,邀你成为全球三千中继之一。
献上Tox ID一枚:
5996CA3B6A01FF32BAF38C959F4340550A1FD6FE0462172730343E139E8E625D1802226EE8D2
加我、加我、加我,懒的输入就用 Tox 扫二维码吧

我的另一个博客:http://www.lemols.com/

小众Tox——大众的“去中心化”聊天软件的更多相关文章

  1. Baccarat是如何运用去中心化治理模式的?

    区块链的出现,让大家看到了去中心化的可能.去中心化的数字资产从最初的默默无闻,一路起起伏伏发展了十年,逐渐成为了大众认可的价值存储方式.去中心化的金融,使数字资产的生态建设者意识到,即使没有中心化的金 ...

  2. 为什么说NGK的去中心化预言机越来越受欢迎?

    2020年区块链市场非常火热,从年初的交易所杠杆,到Defi热潮,一波连着一波,风向不断切换,很多人无奈感叹跟不上时代,很多人欢欣雀跃登上了早班车.随着Defi的不断火热,预言机也进入了大众视野.NG ...

  3. IM 去中心化概念模型与架构设计

    今天打算写写关于 IM 去中心化涉及的架构模型变化和设计思路,去中心化的概念就是说用户的访问不是集中在一个数据中心,这里的去中心是针对数据中心而言的. 站在这个角度而言,实际上并非所有的业务都能做去中 ...

  4. 一个轻client,多语言支持,去中心化,自己主动负载,可扩展的实时数据写服务的实现方案讨论

    背景 背景是设计一个实时数据接入的模块,负责接收client的实时数据写入(如日志流,点击流),数据支持直接下沉到HBase上(兴许提供HBase上的查询),或先持久化到Kafka里.方便兴许进行一些 ...

  5. 一步步教你开发、部署第一个去中心化应用(Dapp) - 宠物商店

    今天我们来编写一个完整的去中心化(区块链)应用(Dapps), 本文可以和编写智能合约结合起来看. 写在前面 阅读本文前,你应该对以太坊.智能合约有所了解,如果你还不了解,建议你先看以太坊是什么除此之 ...

  6. ImCash:币安下架BSV之辩:规则、中立与去中心化

    一种看法是:一个引用价格数据和执行交易的加密货币交易所,其业务决策往往是在链外发生的,不受制于严格的.类似于准宪法的链上规则的约束,加密货币交易所可以拒绝任何人喜欢的价格和交易,而且这样做并不会损害底 ...

  7. 理解去中心化 稳定币 DAI

    本文转载于深入浅出区块链, 原文链接 随着摩根大通推出JPM Coin 稳定币,可以预见稳定币将成为区块链落地的一大助推器. 坦白来讲,对于一个程序员的我来讲(不懂一点专业经济和金融),理解DAI的机 ...

  8. 去中心化存储项目终极指南 | Filecoin, Storj 和 PPIO 项目技术对比(下)

    在上篇文章中,我们主要从价值定位.技术层次架构.服务质量.去中心化程度,和经济激励机制五个方面分析了三个项目的不同.在这一篇文章中,我们将着重从区块链的架构设计.数据传输技术设计和数据存储技术设计三方 ...

  9. 去中心化存储项目终极指南 | Filecoin, Storj 和 PPIO 项目异同

    Filecoin,Storj 以及 PPIO 这三个存储公链的设计思路是不一样的,没有优劣之分,写这篇文章也并不是为了争论各项目的好坏对错.去中心化存储是一个长期商业赛道,不同团队在同一个赛道上往不同 ...

随机推荐

  1. Python文本处理nltk基础

    自然语言处理 -->计算机数据 ,计算机可以处理vector,matrix 向量矩阵. NLTK 自然语言处理库,自带语料,词性分析,分类,分词等功能. 简单版的wrapper,比如textbl ...

  2. 修改.net mvc中前端验证信息的显示方式

    最近一直在学习.net core的用法.想法是通过写一个新闻系统来熟悉一下这个最新的技术.其实,我以前一直对.net技术都是浅尝辄止,最主要原因是没有动力.平时写企业站因为时间原因,不是使用php的框 ...

  3. BZOJ 2424: [HAOI2010]订货

    2424: [HAOI2010]订货 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 915  Solved: 639[Submit][Status][ ...

  4. C#的接口

    什么是接口?其实,接口简单理解就是一种约定,使得实现接口的类或结构在形式上保持一致.个人觉得,使用接口可以使程序更加清晰和条理化,这就是接口的好处,但并不是所有的编程语言都支持接口,C#是支持接口的. ...

  5. html和css

    html css 和js说明 1.什么是html? HTML(HyperText MarkUp Language)超文本标记语言,通过使用标记来描述文档结构和表现形式的一种语言,由浏览器进行解析,然后 ...

  6. Docker 学习之命令详解

    1. docker version docker version 显示 Docker 版本信息. 2. docker info docker info 显示 Docker 系统信息,包括镜像和容器数. ...

  7. mysql数据库远程访问指定数据库设置

    grant all privileges on huarenwang.* to 'huarenwang'@'%' IDENTIFIED BY 'huarenwang'; on后面的是指定的数据库to后 ...

  8. Matlab编程知识点

    容易忘记的小知识点: Matlab程序首行程序: clear:close all:clc:程序运行开始最好清理下之前残留的各种数据,不然matlab可能会出错. clear(清理变量空间),close ...

  9. linux 卸载编译安装的软件

    有些软件会有 make uninstall 之类的功能,但大多都没有,所以只有手动删除,或者在configure的时候加个preifx参数,比如 --preifx=/opt/squid,这样当你不用的 ...

  10. Maven的安装及更改下载仓库

    之前在MyEclipse这个IDE中配置Maven,完成配置后启动Maven时出现-Dmaven.multiModuleProjectDirectory system propery is not s ...