从扎克伯格Facebook泄露5千万用户数据的泄密门事件到Hash算法的密码签名
Posted VBA语言专家
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从扎克伯格Facebook泄露5千万用户数据的泄密门事件到Hash算法的密码签名相关的知识,希望对你有一定的参考价值。
扎克伯格独自坐在大厅的中央,连续两天,十个小时,对面是围坐两排半圆形的数十位美国国会议员们。面对一轮又一轮或是尖锐直率,或絮叨无序,甚至奇葩无知的车轮战审问,扎克伯格以极大的耐心回答了每一个问题,向每一位提问议员,不厌其烦地重复他的歉意和承诺。这就是Facebook数据泄露超5000万个人用户数据丑闻爆发后的最新事态进展.那么到底泄露了什么呢?笼统的是用户资料,是密码吗?不是.下面详细讲解密码的相关知识,即Hash的算法的密码签名策略。
首先,我们先看看什么是Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(预映射pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值。
直观解释起来,就是对一串数据m进行杂糅,输出另一段固定长度的数据h,作为这段数据的特征(指纹)。无论数据块m有多大,其输出值h为固定长度。
到底是什么原理呢?首先将m分成固定长度(如128位),依次进行hash运算,然后用不同的方法迭代即可(如前一块的hash值与后一块的hash值进行异或)。如果不够128位怎么办?用0补全或者用1补全随意,算法中约定好就可以了。
在密码学中,hash算法的作用主要是用于消息摘要和签名,换句话说,它主要用于对整个消息的完整性进行校验。举个例子,我们登陆企鹅号的时候都需要输入密码,那么企鹅号如果明文保存这个密码,那么黑客就很容易窃取大家的密码来登陆,特别不安全。怎么办?可以使用hash算法生成一个密码的签名,后台只保存这个签名值。由于hash算法是不可逆的,那么黑客即便得到这个签名,也丝毫没有用处;而如果你在网站登陆界面上输入你的密码,那么企鹅号后台就会重新计算一下这个hash值,与网站中储存的原hash值进行比对,如果相同,证明你拥有这个账户的密码,那么就会允许你登陆。银行也是如此,银行是万万不敢明文保存这个密码的。
SHA1是哈希算法的一种,是对长度小于2^64位的输入,产生长度为160bit的散列值,因此抗穷举(brute-force)性更好。SHA1的块大小64,校验和的字节数20。一个字节八个比特,就是八个二进制位。四个二进制数最大表示为15,就是一个16进制数,所以八位可以表示成两个16进制的数,上面的20个字节即40位16进制数。计算时将其追加到data的后面形成一个新的byte切片。最后使用方法就是将data置为nil。
先看看一个SHA1的GO语言实例:
1 package main
2 import "crypto/sha1"
3 import "fmt"
4 func main() {
5 s := "T12345"
6 h := sha1.New()
7 h.Write([]byte(s))
8 bs := h.Sum(nil)
9 fmt.Println("密码:", s)
10 fmt.Printf("%x\n", bs)
11 s2 := "E16788"
12 h2 := sha1.New()
13 h2.Write([]byte(s2))
14 bs2 := h2.Sum(nil)
15 fmt.Println("密码:", s2)
16 fmt.Printf("%x\n", bs2)
17 s3 := "123411"
18 h3 := sha1.New()
19 h3.Write([]byte(s3))
20 bs3 := h3.Sum(nil)
21 fmt.Println("密码:", s3)
22 fmt.Printf("%x\n", bs3)
23 }
输出:
密码: T12345
388e859976e59c06fc5642c68c5e433ac532c4ee
密码: E16788
8293f2389429df4fbb84b58ea44b38cc3f63be7d
密码: 123411
2077519b6bf20d0aaaeada1f5577ae5a20e500bd
截图:
算法
输出
由上面的解读可以看到,Facebook 用户的泄密事件,不可能是用户密码的泄露,即使你知道了后台保存的SHA值也是登陆不了用户的操作界面的,不仅Facebook如此,银行也一样,不可能在后台根据SHA值推算出你的账户密码来,这点还要大家放心。
分享成果,随喜正能量
以上是关于从扎克伯格Facebook泄露5千万用户数据的泄密门事件到Hash算法的密码签名的主要内容,如果未能解决你的问题,请参考以下文章