前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一文带你了解数据保护的重要性

一文带你了解数据保护的重要性

作者头像
数据森麟
发布2020-02-20 16:42:27
7240
发布2020-02-20 16:42:27
举报
文章被收录于专栏:数据森麟数据森麟

作者:瓜小七

来源:凹凸数据

前人种瓜,小七吃瓜。

本文阅读需要七分钟。废话不多说,直奔主题。

相信不小心点进来的客官,要么是已经从事数据分析的,要么是打算找一份这样工作的你,或多或少都了解数据保护的重要性。

学习python的可儿,通过爬虫这种手段从网上获取了我们想要的数据之后,然后进行数据分析,把数据存储在数据,不被坏人发现和窃取。那么,我们是如何对珍贵的数据进行保护的呢?

下面从摘要算法与加密很浅显的梳理一下。

小七,上茶!

1

摘要算法

什么是摘要算法?

一开始直接灌输这个名词概念是书本上的死板做法。

这样吧!小七举个小栗子,我们在正规官网下载软件的时候,打开下载页面的时候,网站一般都会公布文件的Hash值,常见的就是MD5和SHA1等等,用户下载完毕之后打开文件检验器对比Hash值,以此来进行文件的完整性检验。

总而言之,

摘要算法,又称哈希算法,是一种能产生特殊输出格式的算法。其表现为给定任意长度的数据生成定长的文本,Hsah的结果是不可逆的, 不能被还原为原数据。理论上无法通过反向运算取得原数据内容,一个安全的摘要算法几乎是无法找到碰撞的。

名词解释-碰撞: 简而言之就是两个不一样的文件,产生了一样的Hash结果。

温馨提示,摘要算法不是加密!摘要算法不是加密!摘要算法不是加密!

有思辨能力的同学或许会问,为什么需要摘要算法?

通过文件完整性验证确保是官网的软件,一定程度上避免了被污染,从而保护用户的密码。譬如像操作系统以及我们常用的开发工具,被污染是一件很可怕的事情喔。像昨晚我们在群内谈及的安全软件(有点耍流氓的国产360全家桶,以及良心干净并杀毒偏弱的火线软件),有时可能保护不住我们的数据呢。

名词解释-污染: 简而言之就是别人恶意篡改,类似于投毒等想尽办法拿到用户群的私密数据。有兴趣了解被污染大事件的请查阅https://haveibeenpwned.com/,不擅长英文的请自行用插件

上面光说理论不现场实操就是耍流氓。第一个维度是本地的数据。或许你正听得兴趣勃勃,还是不厌其烦。请看下面用python代码的摘要算法。

代码语言:javascript
复制
# 1.导入标准库hashlib
import hashlib

# 2.用ascii编码转换成bytes对象
password = 'guaxiaoqi'.encode(encoding='ascii')

# 3.以MD5为例,创建一个MD5实例对象
md5 = hashlib.md5(password)

# 4.以16进制的方式返回Hash之后的字符串
print(md5.hexdigest())
# 结果如右边表示: 'da64fc462d6d7b71d0c4c537b7eed9be'

# 5.以SHA1为例,创建一个SHA1实例对象,并以16进制的方式返回字符串
sha1 = hashlib.sha1(password)
print(sha1.hexdigest())
# 'e4c3a127d8aa82bc354217877a57159c16fe7255'

# 6.再举一个sha256的例子。用摘要算法保护你的用户数据。
sha256 = hashlib.sha256(password)
print(sha256.hexdigest())
# '79eba32f82b32f381d244efb26d1aa0a6a8878e4489be30749906c6dabe68147'

# 7.通常以上的三次练习,你应该掌握其基本用法,下面是习惯用一行写摘要算法代码。
_md5 = hashlib.md5('gua'.encode('ascii')).hexdigest()
_sha1 = hashlib.sha1('gua'.encode('ascii')).hexdigest()
_sha256 = hashlib.sha256('gua'.encode('ascii')).hexdigest()
print(f'MD5: {_md5}')
print(F'SHA1: {_sha1}')
print('SHA256: {}'.format(_sha256))

看代码截图发现有一处错误,就是ascii不支持中文等等,有兴趣自行用搜索引擎研究

MD5在90年代是已经被任意碰撞了,已经不安全;

SHA1这几年已经能被碰撞了,不太安全。

在此建议使用SHA256,但是随即计算机性能再一步提升,过几年我们换更高级的摘要算法保护密码。

此处提及彩虹表 有兴趣的同学自行扩展: https://cmd5.com/

摘要算法是可以被穷举的,就是暴力破解。彩虹表可以破解一些简单的常见的密码,比如一个MD5可能也就一秒破解。因为彩虹表提前存储了数以百万的简单密码,理论上简单密码花点时间就能破解。碰撞是没有任何问题的,我们使用摘要算法是增加别人破解我们数据的时间成本。一些别有用心的家伙或者职业黑客,他们窃取大型且大量的数据,使用碰撞进行密码撞库,摘要算法增加了他们的时间成本。既然一步hash不怎么安全,那就两步三步怎么样?鄙人之见,两步hash或者多步这种做法并不安全。

下面,我们在摘要算法的基础上,扩展一下思维。

我们引入一个概念——"" (salt)。加盐为了扰乱密码的破解,也让别人没法直接用彩虹表攻击你。重新制作彩虹表的事情是难以实现的,别人不会为了一个用户而重新制作彩虹表,这样的做法是没有价值的。请看下面用python代码加盐过后的摘要算法。

代码语言:javascript
复制
import hashlib
def salted_password(password, salt):
    salted = password + salt
    hash_sha256 = hashlib.sha256(salted.encode('ascii')).hexdigest()
    return hash_sha256

salted_password('guaxiaoqi', '^777$1@&[o]')

另外,也可以使用python的标注库uuid可以生成随机字符串作为盐,这个也比较安全。

代码语言:javascript
复制
import uuid
print(f'uuid: {uuid.uuid4()}')
# 以__repr__()显示,交互模式带有""返回字符串,开发测试常用.
print(f'uuid: {uuid.uuid4()!r}')
# 以__str__()显示,也是默认的print输出的形式,不带"".
print(f'uuid: {uuid.uuid4()!s}')

数据在网站使用的时候,一般表现为cookie和session。至于cookie和session此处不扩展说明。

行走在互联网江湖,哪有不挨刀。

你电脑连接的路由器经过多级路由传递,比如你的数据经过你家的路由 - 所在小区的路由 - 所在城市的路由 - 所在省市的路由,移动和电信手机在浏览网页偶尔弹出移动电信广告,这是属于DNS劫持,右转出门工信部投诉;

多级路由(也叫网关)都可以拦截我们的数据,面对突如其来的中间人攻击,没有用户名和密码是绝对安全的。公共WIFI这个网关就是很好的一个反面教材。在公网上输入的用户数据,理论上都是能知道的,只是别人不搞你的数据而已,从侧面反映你数据的价值不够,或许从正面表现你的好运气。

既然你都说数据不安全了,那么该怎么办呢?

下面,将迎来我们的第二个主题。

2

加密

遨游在互联网世界,我们要用https协议,这是加密的HTTP协议,现在http的网站跟"裸奔"没有实质区别。凡是涉及到登录注册或者敏感信息的网站,都是用https的,反之就是业余和野鸡的网站。面对中间人攻击的时候,浏览器和服务器之间要有证书信任体制的校验。

加密一般分为两种,对称性加密和非对称性加密。

对称性加密: 又称AES,用于客户端session的实现。

非对称性加密: 又称RSA,公钥和私钥。比如github使用git命令的公私钥,搭建个人网站服务器等等。

对于加密的知识现在了解这些就基本足够。

3

数据保护的重要性

对于公司而言,用户的敏感信息都不应该存在日志里面,把用户密码存进数据库应该用摘要算法保护,还有一点,数据库中存储的绝对不能是明文密码。理论上任何人都不可能找回密码,现在的网站也不会提供"找回原来密码"的功能。他们会提供"忘记密码"或者是"重置密码"功能,在你输入你填写过的邮箱或者手机号码,来获取系统发给你的验证码来重置密码,因为他们在数据库并没有保存你的实际密码,只是保存经过摘要算法后的密码形式。

前车之鉴,某些互联网大公司把这些数据写在日志上,或者明文保存,或者是简单的Hash而已。好些年的CSDN密码泄露,V2EX的以当前时间进行MD5摘要保护的安全隐患,网易,京东等等数据泄露的大公司也不愿多加几行代码来保护用户的数据。对于个人而言的密码怎么管理呢?

随着用户需求的不断增加,不少用户在不同的网站都注册账号,为了方便记忆,不乏一些"聪明"的用户几乎涉及同一密码,从侧面增加了破解密码的容易度。

先前五哥那篇《2019最烂密码榜单出炉,教你设置神级密码》,大家吃瓜的时候可以看看,了解一下总不是坏事。

那么我们应对密码管理的行之有效的策略是什么?

古代的时候,用笔和纸记录;互联网时代有一些方便的个人密码管理工具,在这里推荐一些:

  • keypass是有追求的人不错的选择,或许界面有点不好看;
  • lastpass也是钱不多的人很好的选择;
  • 1password是钱不少的人最理智的不二选择;

而小七现在用的是一款名叫Bitwarden的软件,主要是免费,功能基本齐全就好。

回顾一下,本文从简单介绍了摘要算法,并实际操作了几行简单代码;还简单提及了加密的两种方式;最后谈及保护数据的重要性。鉴于文章篇幅有限以及小七的实力不允许,只能先介绍到这里,文章许多不足之处请一一指出,还请多多包涵。

以上代码全部通过测试,没有发现打错的,打漏的以及括号用错的。感谢您的观看,谢谢大家的支持!

补充一句,认真思考的同学会提出疑问,感觉摘要算法就是加密。

其实不然,摘要算法不可逆,不可还原的,普通人不能解密的,显然不是加密。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-02-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据森麟 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
验证码
腾讯云新一代行为验证码(Captcha),基于十道安全栅栏, 为网页、App、小程序开发者打造立体、全面的人机验证。最大程度保护注册登录、活动秒杀、点赞发帖、数据保护等各大场景下业务安全的同时,提供更精细化的用户体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档