专栏首页凹凸玩数据一文带你了解数据保护的重要性

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

我们是如何对珍贵的数据进行保护的呢?

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

1

摘要算法

什么是摘要算法?

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

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

总而言之,

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

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

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

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

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

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

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

# 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代码加盐过后的摘要算法。

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可以生成随机字符串作为盐,这个也比较安全。

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是钱不少的人最理智的不二选择;

本文分享自微信公众号 - 凹凸数据(alltodata),作者:瓜小七

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-02-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 2019最烂密码榜单出炉,教你设置神级密码!

    近日,SplashData 公布了2019年最烂密码榜单TOP 100,123456”这个烂密码,从2013年开始连续七年夺冠!

    朱小五
  • 为何总给外卖打差评?我们来数据分析一下!

    该项目源于美团面试分析题,主要分析用户不满意的原因,并据此提出可落地的建议来降低不满意率。

    朱小五
  • 5个常用的大数据可视化分析工具

    大数据及移动互联网时代,每一个使用移动终端的人无时无刻不在生产数据,而作为互联网服务提供的产品来说,也在持续不断的积累数据。数据如同人工智能一样,往往能表现出更...

    朱小五
  • 操作系统概念(Operating System Concepts)学习笔记 chapter1 Introduction

    A program that acts as an intermediary between a user of a computer and the comp...

    种花家的奋斗兔
  • kali破解wifi 攻击(仅供实验,不可用于违法事宜)

    AI之禅
  • Codeforces Round #633 (Div. 2) B Sorted Adjacent Differences(直观感知+排序插放)

    You have array of nn numbers a1,a2,…,ana1,a2,…,an.

    glm233
  • Flink 数据类型 以及 第一阶段小结

    在 Flink 中,数据类型的描述信息都是定义在 TypeInformation 中,比较常用的 TypeInformatica 有 BasicTypeInfo...

    kk大数据
  • Flutter中对IOS项目进行真机调试、项目打包、提交审核

    (1). 拥有苹果开发者账号个人(每年99美元)、公司(每年99美元)、企业(每年299美元)账号均可;

    越陌度阡
  • Windows10:删除远程桌面连接记录

    新码农
  • 机器学习课程_笔记02

    jeremyxu

扫码关注云+社区

领取腾讯云代金券