今晚回顾了一下2018年科技界关于数据泄露而引发的个人隐私问题,特别是互联网产业大佬们的一些言论,让我对于中国用户的隐私数据有一种被过度使用的担忧,如果你也遇到了如下的几个问题,那么说明你的个人数据已经被卖了,哪里还有隐私可言。
- 收到很多放款的短信
- 邮箱里收到很多垃圾邮件
- 时不时的接到一些销售的电话,有卖保险的,有卖车的
- 做为大数据的因子,你被很多互联网服务分析来分析去,这些互联网服务可能比你自己还要了解自己
- 如果你经常被人骚扰,有没有想过是不是你的个人信息被泄露了
我想我的个人隐私数据肯定被泄露了,因为上述几种情况经常出现,有时候真的很烦。为了今后不再泄露,那么只能从自己做起,怒而追随大佬创业开发了一款工具,它的很多设计都是被安全工程师们反复斟酌而得出的结论,它-秘迹就是为保护个人隐私数据而生。我相信这一款产品,也能重新开始把我个人的隐私数据保护起来。
让我来为大家介绍它们:
- 秘迹搜
- 秘迹App
当然,接下来我也会从技术方案上为大家阐述明白:
- 为什么秘迹App是安全的
- 我们的价值观和逻辑是什么
- 我们选择了什么样的密码学体系方案来保证你的数据安全性
秘迹搜
网址:https://mijisou.com/
如果你在搜索结果页面里使用匿名代理访问,由于一些技术限制性的问题,可能会丢失一些样式,看起来访问的页面会是这样:
不过,这是暂时的,后期我们会想办法解决匿名代理引发的一些页面缺失问题。
在Web的世界里追踪的技术既有Cookie也有你搜索关键字服务端的存留,以及访问浏览网页时被第三方网页标记的数据。我们提供的隐私搜索完完整整地实现了几项非常重要的指标,让你能放心安全得在这里搜索你想搜索的资源。
浏览器的隐私模式并不能防止你使用搜索时被追踪和数据泄露
我们采用了如下的方式来保证你不被追踪:
- 不记录Cookie 和 localStorage
- 服务端不存留任何搜索关键字
- 搜索项目开源
- https://github.com/entropage/mijisou 接受同行的安全评审
- 提供匿名代理访问第三方网页
秘迹App
秘迹App 是我们推出的组合拳中最重要的解决方案,在这个解决方案中我们实现了两个功能来着重保护你的数据,保险箱和悄悄话。在保险箱中你可以创建管理你的账号密码,使用悄悄话功能时利用公钥加密你想发送的消息。
产品使用传送门:
- https://zhuanlan.zhihu.com/p/55026933
- https://zhuanlan.zhihu.com/p/54938542
如果用一个很形象的比喻来描述 秘迹App 的数据存储方式,那么比特币钱包就是一个很好的参照,在 秘迹App 中你的全部数据使用 AES-256 加密 keepass 2.x 格式数据库文件的方式来存储,在这个数据库文件中不仅保存着你的账户密码,也保存着你使用悄悄话加密明文生成的CMS。为了能让大家明白,用一张很形象的图来表述我们是如何创建你的加密数据库:
之所以随机生成16字节密钥的原因,那是因为 AES 的安全性取决于你密钥的复杂度,我们随机生成了一个16字节128位的数据块,它有2的128次方的组合可能,如果你想暴力破解,则需要8.8亿亿年。但对于产品来说,这16字节的密钥还是不能被直观的使用。
因此我们参考比特币钱包,设计了记助词,对于记助词来说它才是你真正需要记住的密钥(写于纸上)。在比特币钱包的设计思路上,一大长串的S并不好记忆,于是人们开始提出S可以透过12组记助词来产生,而这一份提案被称为 bip-0039,它的改进对于用户而言则大大降低了记忆成本。
[引用了一张网络上的图]
https://github.com/bitcoin/bips/tree/master/bip-0039 开源了词典,任何人都可以获取词典来完成 bip-0039 的设计,我们也选择了bip-0039来实现面向用户可直观使用的密钥,这也是为什么在第一次启动 秘迹App 时,会有一种创建比特币钱包的感觉:
假设有一天你需要更换设备,这12组记助词就是你恢复数据的关键钥匙,因此它很重要。你用笔记录下来的12个汉字,永远只会留存在你手中。
对于备份和恢复的功能,并没有你看见生成ID那么简单,我们会处理很多步骤,比如对这个 Key 进行多次 Hash 计算。如果你了解过单向散列函数,那么就会明白它是多么的重要。
在上述的图中并没有显示全部的技术细节,更多技术细节可以阅读我们发布的 《秘迹安全白皮书(v1.0.0)》。
单向散列函数(英语:Hash function)又称散列算法、哈希函数,是一种从任何一种数据中创建小的数字“指纹”的方法。对于前端的同学来说,在设计你的 Web 应用系统时也应该多加考虑,防止数据被篡改。在这里我引用 google crypto-js 为前端的同学展示一下该如何使用 Sha256 和 Hmac。
Sha256:
代码语言:javascript复制import * as CryptoJS from "crypto-js";
const sha256 = CryptoJS.algo.SHA256.create();
sha256.update("Message Part 1");
sha256.update("Message Part 2");
sha256.update("Message Part 3");const hash = sha256.finalize();
Hmac:
代码语言:javascript复制const signStr = `Hello icepy-123456789`;
const signKey = CryptoJS.HmacSHA1(signStr, "ICEPY").toString();
const signature = CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(signKey));
因此我建议使用 秘迹App 的同学们,先用 保险箱 功能把你的账户密码管理起来,将密码修改为不同的强密码,尽可能的减少被人撞库的可能性,试想一下如果你使用的一个服务因为被拖库,正好你使用的另一项服务比如隐私相册使用了相同的密码,并且保存了你和你女朋友羞羞的图片,很遗憾同学们,你的 隐私照片 肯定被泄露了。
阅读到这里你可能要问,如果我的账户密码都保存在 秘迹App 里,我想在 Mac 上登录网站该怎么办?岂不是每次都要打开手机复杂粘贴再想各种办法发送到Mac上。
现在我可以为你介绍另外一种方式来处理这个问题。
在我们的世界观里,数据都不应该离开安全区域,这个安全区域不仅是在本地,而且有一套加密存储的体系,数据只要离开了安全区域,都有可能提高被泄露的概率,因此我们的哲学逻辑是不让数据离开安全区域,通过其他技术方式来辅助你完成一些操作。
你需要去下载我们为 秘迹App 开发的辅助工具 Chrome 插件并安装在你的 Chrome 浏览器里,在 秘迹App 中使用自动登录功能,将登录所依赖的关键 Cookie 发送给 Chrome 插件,Chrome 插件会利用 chrome.cookies API 辅助你在Mac上完成登录。
这个数据交互的通道和数据本身是安全的吗?
我可以很肯定的和大家说,这个数据交互的通道不仅是 HTTPS ,而且你发送的数据块也会被 AES 加密之后将密文发送给插件。只不过在互通之前,你需要使用秘迹App 和 插件 完成一个连接的动作。它的逻辑是由插件生成临时二维码,这个二维码中包含了 AESKey ,秘迹App 通过扫码获得 AESKey,这个步骤不会经过网络,只有你和你才能获取,于是秘迹App 和 插件就能完成对称加密/解密。
你看,这就是我们使用对称加密的一个经典场景。
为了你能方便迁移至秘迹App,在我们在 Chrome 插件中也贴心提供了账户密码迁移功能,你可以导入已经导出的.csv文件:
对称密钥算法又称为对称加密,这类算法在加密和解密时使用相同的密钥,或是使用两个可以简单地相互推算的密钥。事实上这组密钥成为在两个或多个成员间的共同密钥,以便维持专属的通信联系。与公开密钥加密相比,要求双方获取相同的密钥是对称密钥加密的主要缺点之一。
在对称加密中最经典的要属AES-256了,它非常适合在本地存储数据时来处理你想加密的数据块或维持双方特定场景下的通信数据交互,在这里我引用 google crypto-js 为前端的同学展示一下该如何使用AES。
AES:
import * as CryptoJS from "crypto-js";
export function aesDecrypt(text, originKey){
const bytes = CryptoJS.AES.decrypt(text, originKey);
return bytes.toString(CryptoJS.enc.Utf8); }
export function aesEncrypt(text, originKey){
const c = CryptoJS.AES.encrypt(text, originKey);
return c.toString(); }
如果你对开发 Chrome 插件感兴趣,不妨阅读一下我们为此写的一本小书,《Chrome Extension 入门指南》。 https://github.com/welearnmore/chrome-extension-book
Chrome 插件和内部项目都使用 TypeScript 开发,如果你对 React TypeScript 感兴趣,不妨阅读一下我们为此写的一本小书,《浅谈TypeScript》。 https://github.com/welearnmore/typescript-book
接下来我为大家介绍另一种场景,如果你想将你重要的账户密码分享给你在美国的女朋友,但经过网络传输,这都有可能被截取泄露。如果你和你的女朋友在聊私密的话题,聊天的记录无意中泄露了出去,这会让你很尴尬和不适。
在我们 秘迹App 中提供了悄悄话功能,使用它,你可以大胆的将重要的账户密码分享给你在美国的女朋友,通过端到端的加密你的聊天记录只有你和她才能解开和看见。
如果你了解非对称加密,那么就能明白在互联网的基础设施中,PKI用非对称密码算法原理和技术实现了现今我们所依赖的通用性互联网安全基础。
用一句科普的话来讲非对称加密又被称之为公开密钥密码学,就是说这种算法将密钥分成了两个部分,加密的部分是公开的这俗称为公钥,解密部分是需要隐藏的这俗称为私钥。因此,一般来说公钥加密计算的部分相当复杂,比之对称加密在性能上要稍逊一筹,但它的优势在于这样的设计极其的适合于互联网的通信,公钥因为公开性,任何人都可以使用你的公钥加密消息并发送给你,而这段密文只有你拥有私钥的人才能解密。
在上文的引用中提到了 PKI,而我们的 秘迹App 就实现了PKI,为你创建,验证,管理公私钥,PKI是一个很庞大的体系,它包括了很多不同的技术和知识,非对称加密也仅仅是其中的一个技术。
在这里我引用开源的 JavaScript PKI 库为前端的同学展示一下该如何使用:
代码语言:javascript复制const asn1js = require("asn1js");
const pkijs = require("pkijs");
const Certificate = pkijs.Certificate;
const buffer = new Uint8Array([
// ... cert hex bytes ...]).buffer;
const asn1 = asn1js.fromBER(buffer);
const certificate = new Certificate({ schema: asn1.result });
它的 example 中包含了一份如何创建 certificate 的过程,大家如果有兴趣不妨研究一下。
https://github.com/PeculiarVentures/PKI.js/blob/master/examples/CertificateComplexExample/es6.js
真的朋友,在个人数据被严重泄露的今天,个人隐私的保护,没有任何人能帮助你。只能依赖你自己的行动,你自己的意识。学习保护个人隐私数据相关的知识,学习和掌握保护个人隐私数据相关的工具。就像我们提供了这样的解决方案,如果你不用起来,你还能谈你在意自己的个人隐私数据吗?
我们所有技术方案的设计都遵循一个原则,如果有一天我们的服务器被黑,我们的工程师被买通,这都不会泄露你的个人隐私数据,因为打开门的钥匙只有你才拥有。
我们所有的设想都是呼唤起每一位同学自我保护个人隐私数据的意识
秘迹App 就是因此而生,这是我们的一小步也是我们的第一步,或多或少在使用体验上有不少瑕疵,产品会继续迭代优化,因为看见,所以存在,希望你们能喜欢;
链接引用
- https://www.leakzero.com/download
- https://mijisou.com/
- https://mp.weixin.qq.com/s/LpxVIrOFeqQ9agtIVfxCwQ
- https://zhuanlan.zhihu.com/p/55026933
- https://zhuanlan.zhihu.com/p/54938542
- https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki
- https://github.com/bitcoin/bips/tree/master/bip-0039
- https://code.google.com/archive/p/crypto-js/
- https://github.com/PeculiarVentures/PKI.js
- https://github.com/PeculiarVentures/PKI.js/blob/master/examples/CertificateComplexExample/es6.js
- https://github.com/welearnmore/chrome-extension-book
- https://github.com/welearnmore/typescript-book