无秘的手机号单向加密可破解,用户隐私令人担忧

鞭牛士  •  扫码分享
我是创始人李岩:很抱歉!给自己产品做个广告,点击进来看看。  
\

昨天无秘的运营找到我,说我报道不实,要求我删帖。本来我写那篇文章也不是公关稿,如果真的冤枉了无秘的话,被要求删帖也是可以理解的事,不过对方给的论据主要是下面这条微博:

"针对近期用户的疑虑,在这里统一回复。无秘数据库里没有保存手机号,注册时的手机号是为了匹配朋友关系,会经过不可逆加密,同时密钥存放在客户端,即便内部人员也无法知道具体秘密的发布者,请放心使用。”

看到这个消息,我真心不知道说什么好,密钥存放进客户端?你确定不是猴子派来的逗比么?好吧,就算密钥是真的放进客户端,我想知道为什么换一台手机输入手机号和密码依然可以登录进去?难道客户端的意思不是用户手机里下载的app?将密钥存放进客户端且不说安全问题,客户端卸载或手机清除后你又如何进行验证呢?

好吧,这是幻觉,口误,笔误,表达错误……先放过那个存进客户端的雷点好了。下面说一下手机号如果单向不可逆加密后是否可以破解。

什么叫做单向不可逆呢?这里需要一点数学知识,比如说f(x)=y,x是明文密码,y是密钥,但是没有一个g(y)=x这样的可逆函数可以通过y来快速得到x,这种情况下就是单向不可逆,常见的哈希比如说md5,sha1都是如此的,对于这些的破解需要建立巨大的表格——彩虹表,如果这个表格理论性过大的时候通常会找一个字典去缩小范围,另外由于单纯的md5这样的算法已经有了非常成熟的表,通常在加密的过程中会使用盐或者是二次加密,甚至使用非固定盐增加破解的难度,在这个情况下,我们的长密码一般是不太可能用彩虹表去破解的。

但是幸运的是,手机号的加密比这个容易了多,因为f(x)=y这个表格因x的区间足够小,建立一个y映射x的表格其实是可行的。手机号一般是13,15,18开头,后面跟9位,也就是30亿种可能性,只要把这30亿种可能的手机号对应的密钥都算出来(计算方式黑客能看到库基本上也能看到相关代码,猪猪侠通过看开发文档也发现了),就可以建立一个30亿条数据的彩虹表,那么对应一个密钥,我们就可以在有限时间内跑出手机号,这个表有多大呢?一个机械硬盘就可以装得下,也就是说在物理条件完全可以承受的情况下手机号无论用多复杂的方式加密,都可以完美破解的。

在当下无法更改验证方式的情况下,想要避免这个问题是不可能的。如果更改验证方式,那就难以完成手机通讯录的匹配了。如果使用手机+xx信息组合起来生成单一的一组密钥呢?这个虽然可以增大x区间,防止彩虹表,但是手机通讯录就无法匹配了。(具体为啥自己去想吧,解释起来不容易)总体来说就是,一个匿名社区使用手机号作为登陆,无论你如何加密,都是无法从根源上防范用户隐私被暴露的。

随意打赏

提交建议
微信扫一扫,分享给好友吧。