×

【每日一记10】+第4天:构成信息安全技术体系的三类基本算法(上)
  

伊利丹·怒风 873

{{ttag.title}}
 信息加密技术经过多年的发展,由一些基本算法组合形成了许多成熟的应用,如数字签名,安全证书,HTTPS,以及最近大热的数字加密货币,区块链等。这些看似种类繁多的应用,其实都由三类基本的算法通过不同的组合来实现,这三类算法分别是: 数据摘要(在很多场合也被称作哈希运算),对称加密,非对称加密。本文抛开这三类算法在不同实现方案中的差异,抽象出各类算法的共性,提纲挈领地描绘出三类算法在加密体系中的应用场景,让开发者能在短时间内对信息加密体系有个全局的认识,并能将这三类算法应用在实际的需求场景中,希望本文能成为设计信息加密应用的简要手册。
  阅读建议:每类算法都以伪代码给出函数声明,不代表特定算法, 比如函数digest代表了在实际使用中的MD5, SHA1, RIPEMD160等实现了数据摘要功能的算法,读者在阅读过程中不要急于去考虑这些函数的实现,而应该去领会算法的特点和完成的功能。这些算法几乎在所有主流的编程语言库中都有具体实现,实在有很少的场合需要自己再去实现。对于有研究技术细节需求的读者,可以在阅读完本文后,对信息加密体系这棵树有了全局的了解,再按图索骥地去研究树叶.
  下面将分别介绍这三类算法各自的特性和应用, 然后再对将这些算法组合起来的应用进行介绍.
  


1. 数据摘要
1.1. 函数声明:
byte[] digest(byte[] data)
1.2. 函数特性:
  1.2.1. 无论data的长度为多少,digest返回某一定长数据,通常为几十个字节
  1.2.2. 若digest(data1) != digest(data2),则data1 != data2;若digest(data1) = digest(data2)则可以认为有很高的概率data1 = data2,在特定的情况下,对某些算法来讲,该判断出错的概率不到1/128^2。
  1.2.3. 运算不可逆,即知道digest的返回值,不能反推出data的值。顺便提一句,人们常提起的比特币挖矿其实就是指通过不断的尝试找出一个data,使得digest(data)的结果小于某一个表示难度的数,其基本代码如下:


while(digest(blockData + random()) > difficultyFactor); //random()在这里产生随机数
  可见即使为了得到满足某一条件的data值,也只能通过暴力尝试,而不能有其它快速的方法。
  1.2.4. digest函数相对于下面要谈的其它两类算法来说,运算速度非常快。注意是相对的快,因为即便如此挖矿也是个很费时的运算,呵呵。


1.3. 应用举例:
1.3.1. 大数据检索比较
  假设要做这么一个文件上传系统,要求上传文件前,先检测服务器上是否已经有同样的文件存在,如果已经存在,则不再上传。如果没有digest算法,只有把整个文件上传到服务器再进行比较,这无疑非常费时。如果我们每次上传文件,都对文件做一次摘要运算(特性1.2.4:摘要运算速度非常快,相对于文件上传的耗时来说忽略不计),并将摘要值保存起来;那么下次上传文件前我们对将要上传的文件进行一次摘要运算,只是把摘要值提交到服务器(特性1.2.1:摘要值一般只有几十个字节), 服务器在之前保存的摘要值列表中查找客户端新提交上来的摘要值,如果找到了(特性1.2.2),则告诉客户端不用再上传了。这就是很多云盘使用的秒传技术,很多上G的文件,只要几秒钟就上传成功了,原因就在于其他人在你之前已经上传过同样的文件。


1.3.2. 防数据损坏
  还是上传文件的例子,客户端上传前先把本地文件的摘要值传给服务器,服务器在接收到完整的文件后,用同样的摘要算法,计算接收到的文件的摘要值,和客户端上传的摘要值进行比较,如果相同则可以认为文件接收完整;反之则认为文件在传输过程中损坏(特性1.2.2)。


1.3.3. 防数据纂改
  设计一个简单的充值磁条卡,所有磁卡机都能读磁卡中的数据,但只有授权的磁卡机才能合法地写入数据。其数据写入的过程如下图所示:

  
  写入磁卡的数据分为两部分,一部分是明文数据;一部分是摘要数据。这里的摘要数据有个术语叫签名。签名的生成过程很简单,就是把密码和明文数据拼接在一起作为digest函数的输入,digest的输出即为签名。授权的磁卡机读取磁条数据时先要验证签名,即把磁条的明文数据读入内存,然后和密码按照写入时同样的过程生成一个签名,把该签名和磁条上记录的签名做对比,如果签名一样则认为数据没有被篡改,反之则认为已经被篡改。磁条上任何一个字节的修改,都不能通过签名验证过程。因为非授权磁卡机在不知道密码的情况下,很难生成一个合法的签名,虽然能读取签名,但也不能根据签名推导出密码(特性1.2.3).
  注意:在实际生产环境中,大部分情况下,签名是在服务器端进行。为了加强安全性,产生签名时还会加入一个随机数,随机数和明文一样写入磁条,同时参加签名验证过程。同时也还可以进行多遍摘要运算。这些措施都是为了进一步增加通过试探伪造签名的难度。

打赏鼓励作者,期待更多好文!

打赏
1人已打赏

sxfusr 发表于 2020-8-7 13:04
  
打卡学习
sangfor_闪电回_小六 发表于 2020-8-7 15:45
  
您好,感谢楼主分享,如文章为转载的内容需附上原文链接哦!
您好,感谢楼主分享,关于笔记内容社区建议如下↓
创作笔记指南:
内容图文结合,文章不用太长,条理清晰,有实质性的参考价值,能解决实际问题;
建议笔记采用的结构:
QA(问题-答案)式结构,先说问题,再给建议或者解决方案(可以多条并列)以故障排错为例:问题现象--原因分析---排查思路和解决方法--排查结果--注意事项” 可以参考这样的组织结构写作;
杜绝复制粘贴式、抄袭、滥竽充数、灌水、过于简单的内容(否则将取消激励,造成个人时间浪费!小编会审核每一条笔记的哦)
参考案例:https://bbs.sangfor.com.cn/forum ... read&tid=100181
蟲爺 发表于 2021-3-4 15:17
  
感谢分享
yim 发表于 2021-4-6 10:15
  
发表新帖
热门标签
全部标签>
安全效果
每日一问
西北区每日一问
技术笔记
技术盲盒
【 社区to talk】
干货满满
新版本体验
标准化排查
产品连连看
信服课堂视频
技术咨询
每周精选
功能体验
自助服务平台操作指引
排障那些事
GIF动图学习
技术晨报
安装部署配置
运维工具
解决方案
2023技术争霸赛专题
秒懂零信任
故障笔记
技术圆桌
云计算知识
用户认证
技术顾问
资源访问
存储
技术争霸赛
「智能机器人」
以战代练
社区新周刊
畅聊IT
答题自测
专家问答
在线直播
MVP
网络基础知识
升级
安全攻防
上网策略
测试报告
日志审计
问题分析处理
流量管理
每日一记
原创分享
sangfor周刊
VPN 对接
项目案例
SANGFOR资讯
专家分享
信服故事
SDP百科
功能咨询
终端接入
授权
设备维护
地址转换
虚拟机
迁移
加速技术
排障笔记本
产品预警公告
玩转零信任
信服圈儿
S豆商城资讯
追光者计划
深信服技术支持平台
社区帮助指南
答题榜单公布
纪元平台
通用技术
卧龙计划
华北区拉练
天逸直播
山东区技术晨报
文档捉虫活动
齐鲁TV
华北区交付直播
2024年技术争霸赛
北京区每日一练
场景专题
高手请过招
升级&主动服务
高频问题集锦
POC测试案例
全能先锋系列
云化安全能力

本版版主

12
185
6

发帖

粉丝

关注

121
313
351

发帖

粉丝

关注

本版达人

LoveTec...

本周分享达人

新手24116...

本周提问达人