(转)白话数字签名(1)——基本原理

摘要本系列通过通俗易懂的讲解,让您就像读小说一般,轻轻松松就能理解数字签名的基本原理和应用方法(即使您是一个并不精通计算机的企业老总,也能读懂本篇文章)。然后我们再逐步深入技术细节,最后将给出一个在B/S 信息系统中使用数字签名的DEMO 。由于数字签名基于非对称加密技术,所以我们需要先啰嗦一下对称加密和非对称加密技术。 对称加密何谓加密?加密是一种”把数据搞乱掉”的技术。加密技术涉及到4 种东东: 明文:可以被人或程序识别的数据。例如一个文本文件、一段歌词、一个Word 文档、一首MP3 、一个图片文件、一段视频等等。 加密算法:将数据搞乱掉的方法。 密钥(密码):一个你在进行加密操作时给出的字符串,让加密算法不但把明文”搞乱掉”,而且要乱得”与众不同”。这样即使别人搞到了解密算法,如果没有当初加密时所使用的密码,一样无法进行解密操作。 密文:明文被加密算法和密钥加密后的结果。它看上去就是一堆乱码,没有人或程序能知道它到底表示什么信息。作为加密的一个实例,我将使用由我杜撰的”景氏替换加密算法”演示一下加密过程。明文:good good study, day day up.

密钥:google
景氏替换加密算法:将明文中的所有的字母”d”替换成密钥。密文:将”good good study, day day up.”中的所有字母”d”替换成”google”,就得到密文”googoogle googoogle stugoogley, googleay googleay up.”。这个密文乱得还可以吧?一般人看了肯定不知道它是什么意思。那么什么是解密呢?解密就是把密文再变回明文的过程。例如”景氏替换解密算法”就是:将密文中所有与密钥相同的字符串替换成”d”。密文:googoogle googoogle stugoogley, googleay googleay up.

密钥:google
景氏替换解密算法:将密文中所有与密钥相同的字符串替换成”d”。明文:将”googoogle googoogle stugoogley, googleay googleay up.”中的所有”google”替换成”d”,就得到了明文”good good study, day day up.”。您肯定已经注意到了,我们在进行加密和解密时使用的密钥必须是相同的,例如在上例中,加密和解密都必须使用相同的密钥”google”。所以像”景氏替换加密算法”这种就被称为 对称加密算法。目前最为流行的对称加密算法是DES 和AES ,此外,对称加密算法还有IDEA 、FEAL 、LOKI 、Lucifer 、RC2 、RC4 、RC5 、Blow fish 、GOST 、CAST 、SAFER 、SEAL 等。WinRAR 的文件加密功能就是使用的AES 加密算法。 非对称加密非对称加密算法是一类与众不同的加密算法,它的密钥不是1 个,而是2 个(一对),我们先姑且称它们为密钥K1 和密钥K2 。非对称加密算法的特点是,如果用密钥K1 进行加密,则有且仅有密钥K2 能进行解密;反之,如果使用密钥K2 进行了加密,则有且仅有密钥K1 能进行解密。注意”有且仅有”的意思——如果用密钥K1 进行了加密,是不能用密钥K1 进行解密的;同样,如果用密钥K2 进行了加密,也无法用密钥K2 进行解密。这是一个非常重要的特性,至于如何在实际中运用这个特性,请看下文。 我想给 Clark 传送一个 AV 小电影,又怕被他的老婆发现 ……话说俺得了一个很不错的AV 小电影,想通过网络传送给Clark ,可是又怕被他的老婆发现(因为Clark 的老婆是一个超级黑客,她可以使用sniffer 技术截获 任何通过网线传送给Clark 的数据。别跟我说用VPN ,它超出了本文讨论的范围),怎么办呢?对了,我们需要一个”将数据搞乱掉”的技术——加密技术。我先使用WinRAR 对小电影进行压缩,然后加上密码”TswcbyyqjsjhfL”(还记得么?WinRAR 的文件加密功能使用的是叫作AES 的对称加密算法)。接着,将这个加密后的文件通过QQ 传送给Clark 。然后,兴冲冲地拨打Clark 的手机:
“喂?Clark 么?好久不见,呵呵……我给你发了个好东东呦,在QQ 上,收到没?……密码是TswcbyyqjsjhfL ,对,就是天生我才必有用,千金散尽还复来的首字母,第一个和最后一个字母要大写呦……”
可是,Clark ,我是真的不知道你的老婆大人刚刚就在你的身边呀!而且你也知道,我打电话从来都是喜欢很大声的……呜呜呜……

在Clark 跪了一夜的搓衣板之后,我们都明白:如果是已经保存在自己硬盘上的文件,使用对称加密技术进行加密是没有问题的;如果是两个人通过网络传输文件,使用对称加密就很危险——因为在传送密文的同时,还必须传送解密密钥。我们需要一个与众不同的加密算法,一个不需要传递解密密钥的加密算法。非对称加密正好可以满足我们的需要。基本思路是这样的:首先,生成一对满足非对称加密要求的密钥对(密钥K1 和密钥K2 )。然后,将密钥K1 公布在网上,任何人都可以下载它,我们称这个已经公开的密钥K1 为 公钥;密钥K2 自己留着,不让任何人知道,我们称这个只有自己知道的密钥K2 为 私钥。当我想给Clark 传送小电影时,我可以用Clark 的公钥对小电影进行加密,之后这个密文就连我也无法解密了。这个世界上只有一个人能将密文解密,这个人就是拥有私钥的Clark 。 后来 ……后来,Clark 痛定思痛,决定申请一个数字证书。流程是这样的:首先,登录当地的数字证书认证中心网站,填表->出示个人有效证件原件和复印件->缴费->等待数字证书认证中心制作数字证书->领取数字证书。如果您的公司需要申请大量的数字证书,还可以与认证中心的销售人员商量,先领取免费的试用版的数字证书供技术人员试用。后来的后来,我又得到了一本电子版的不良漫画,当然,我又想到了Clark 。我先在数字证书认证中心下载了Clark 的公钥证书(就是一个含有公钥信息的文件),使用非对称加密算法对不良漫画进行加密,再将密文通过QQ 传送给Clark 。然后,我兴冲冲地拨打Clark 的手机:
“喂?Clark 么?好久不见,呵呵……我给你发了个好东东呦,在QQ 上,收到没?……已经用你的公钥加密了。用你的私钥解密就行了^_^”
Clark 兴冲冲地插入他的私钥(忘了说了,私钥并不是一个文件,而是一个USB 设备,外形就跟U 盘一样,至于为什么要这样,下一篇再说),解密,然后开始看漫画,完全没察觉他的老婆大人就在身后……

Clark ,俺这个月手头有点紧 ……唉,这个月买了太多的书,到月底揭不开锅了。正巧在QQ 上遇到了Clark :
1-2-3 :”Clark ,我需要200 两纹银,能否借给我?”
Clark :”没问题。我这就给你转账。请给我一张借条。”
1-2-3 :”太谢谢了,我这就用Word 写一个借条给你。”
然后,我新建一个Word 文档,写好借条,存盘。然后,然后怎么办呢?我不能直接把借条发送给Clark ,原因有:
1.我无法保证Clark 不会在收到借条后将”纹银200 两”改为”纹银2000 两”。
2.如果我赖账,Clark 无法证明这个借条就是我写的。
3.普通的Word 文档不能作为打官司的证据。好在我早就申请了数字证书。我先用我的私钥对借条进行加密,然后将加密后的密文用QQ 发送给Clark 。Clark 收到了借条的密文后,在数字证书认证中心的网站上下载我的公钥,然后使用我的公钥将密文解密,发现确实写的是”借纹银200 两”,Clark 就可以把银子放心的借给我了,我也不会担心Clark 会篡改我的借条,原因是:
1.由于我发给Clark 的是密文,Clark 无法进行修改。Clark 倒是可以修改解密后的借条,但是Clark 没有我的私钥,没法模仿我对借条进行加密。这就叫 防篡改
2.由于用我的私钥进行加密的借条,有且只有我的公钥可以解密。反过来讲,能用我的公钥解密的借条,一定是使用我的私钥加密的,而只有我才拥有我的私钥,这样Clark 就可以证明这个借条就是我写的。这就叫 防抵赖
3.如果我一直赖着不还钱,Clark 把我告上了法庭,这个用我的私钥加密过的Word 文档就可以当作程堂证供。因为我国已经出台了《中华人民共和国电子签名法》,使数字签名具有了法律效力。您一定已经注意到了,这个使用我的私钥进行了加密的借条,具有了防篡改、防抵赖的特性,并且可以作为程堂证供,就跟我对这个借条进行了”签名”的效果是一样的。对了,”使用我的私钥对借条进行加密”的过程就叫做 数字签名。(由于数字签名算法的速度比较慢,所以在实际对文件签名的过程比上面提到的方法稍稍复杂一些,这个在下一篇再讲)。 我是 1-2-3 ,我真的是 1-2-3 ,我是真的 1-2-3正如您已经知道的,Clark 的老婆是一名超级黑客——就是传说中能用计算机作任何事的人。这不,不久前她就轻松入侵了QQ 数据库,下载了Clark 的所有好友的ID 和密码以及聊天记录。然后,时不时地伪装成Clark 的好友跟Clark 聊天,搞得Clark 最近总是神经兮兮、疑神疑鬼的。这不,昨天我在QQ 上遇到了Clark :
1-2-3 :”Clark ,最近还好吧?我又搞到一个好东东呦,要不要?”
Clark :”48475bbt556″
Clark 并不是疯掉了,那个”48475bbt556″也不是我跟Clark 之间的什么通关暗语。这个”48475bbt556″就是Clark 在键盘上胡乱敲上去的,不过,我却知道Clark 是什么意思。我立刻把”48475bbt556″粘贴到Word 里,然后用我的私钥对这个Word 文档加密,再将这个Word 文档发送给Clark 。Clark 在那边用我的公钥将Word 文档解密,打开,发现里面写的就是”48475bbt556″,就知道QQ 这边的确就是真正的我本人了。因为拥有我的私钥的人在这个世界上就只有我一人而已,Clark 的老婆大人就是再神通广大也模仿不了,这就是数字签名的 验证功能。顺便提一句,不但人可以申请数字证书,设备(例如Web 服务器)也可以申请数字证书(叫作设备证书)。利用数字签名的验证功能,就可以验证服务器的身份了,这可是防钓鱼的终极解决方案呦。 思考题如果Clark 每次都向我发送相同的字符串(例如”1234″),而不是每次在键盘上胡乱地(随机地)敲一些字符,Clark 的老婆就会利用Clark 的懒惰模仿我跟Clark 聊QQ ,这是为什么?本篇到此结束,下一篇将介绍电子签名技术的产品&设备。

分类:白话数字签名系列

Original: https://www.cnblogs.com/bailiyi/p/5314661.html
Author: 百里弈
Title: (转)白话数字签名(1)——基本原理

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/683319/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 【新特性速递】表格加载速度足足 3 倍提升,爱了爱了

    FineUI 的下个版本(v8.0.0),我们会为表格新增延迟加载功能(EnableDelayRender),从而使得典型表格页面加载性能提升 3 倍以上! 大数据表格 FineU…

    技术杂谈 2023年6月1日
    0107
  • pachong-md

    博客园 :当前访问的博文已被密码保护 请输入阅读密码: Original: https://www.cnblogs.com/brady-wang/p/15936279.htmlAu…

    技术杂谈 2023年5月31日
    096
  • Python数据分析–Numpy常用函数介绍(6)–Numpy中与股票成交量有关的计算

    成交量(volume)是投资中一个非常重要的变量,它是指在某一时段内具体的交易数,可以在分时图中绘制,包括日线图、周线图、月线图甚至是5分钟、30分钟、60分钟图中绘制。 股票市场…

    技术杂谈 2023年7月25日
    086
  • Linux简介

    一 关于linux Author:呆萌老师 QQ:2398779723 微信 it_daimeng 什么是Linux?用在哪些地方? <span><span&gt…

    技术杂谈 2023年7月24日
    057
  • PyTorch 介绍 | 构建神经网络

    神经网络由对数据进行操作的layers/modules组成。torch.nn 命名空间提供了所有你需要的构建块,用于构建你自己的神经网络。PyTorch的每一个module都继承自…

    技术杂谈 2023年7月25日
    069
  • Makfile总结

    Makefile基础以及小技巧 当我们在命令行当中输入 make的时候他的执行流程如下: make命令首先会在当前目录下面寻找makefile或者Makefile文件。 寻找到ma…

    技术杂谈 2023年7月24日
    082
  • 四、初识Java

    JavaSE:标准版(桌面程序,控制台开发……) JavaME:嵌入式开发(手机,小家电……)[了解就行] JavaEE:E企业级开…

    技术杂谈 2023年6月21日
    069
  • 8 月份全球 Wi-Fi6 技术标准更新

    1.巴林 TRA 启用 Wi-Fi6 2022 年 8 月 17 日,巴林电信管理局 (TRA) 批准了 5470-5725 MHz 和 5925-6425 MHz 频段用于 Wi…

    技术杂谈 2023年6月21日
    060
  • Java ArrayList removeIf() 方法

    removeIf() 方法用于删除所有满足特定条件的数组元素。 removeIf() 方法的语法为: arraylist.removeIf(Predicate filter) 注:…

    技术杂谈 2023年7月24日
    057
  • 多态

    一.相关定义 1-1 多态 多态是同一个行为具有多个不同表现形式或形态的能力。同一个形参类型为基类的接口,使用不同的子类的实例可以执行不同操作。 1-2 绑定 绑定:将一个方法调用…

    技术杂谈 2023年7月23日
    073
  • 可扩展Web架构与分布式系统(转)

    1.1. web分布式系统的设计原则 搭建和运营一个可伸缩的web站点或者应用程序意味着什么?在原始层面上这仅仅是用户通过互联网连接到远程资源-使系统变得可伸缩的部分是将资源、或者…

    技术杂谈 2023年5月31日
    090
  • Git统计代码修改行数

    通过 Git 的命令可以统计自己在一段时间内的代码更改数量,具体代码如下: git log –author="username" –pretty=tform…

    技术杂谈 2023年7月24日
    079
  • 最新一线大厂Redis使用21条军规及详细解读

    说明:个人原创,本人在一线互联网大厂维护着几千套集群,关于redis使用的一些坑进行了经验总结,希望能给大家带来一些帮助 适用场景:并发量大、访问量大的业务 规范:介绍军规内容 解…

    技术杂谈 2023年7月25日
    0198
  • 使用 nc (Netcat) 建立傳送資料的 socket server

    原文:http://blog.longwin.com.tw/2012/02/nc-data-send-socket-server-2012/ 於 Debian / Ubuntu L…

    技术杂谈 2023年6月1日
    073
  • Python实现秒杀某宝商品抢购(附超详细代码)

    前言 618过去了,前两天我干了一件惊天动地的大事,估计这件大事是很多小伙伴都想干的。我居然用python抢购淘宝商品,没想到 吧,最勇敢的还是我。关于抢购的思路以及代码,我将会在…

    技术杂谈 2023年6月21日
    0109
  • Java动态脚本Groovy获取Bean(奇淫技巧操作)

    前言:请各大网友尊重本人原创知识分享,谨记本人博客: 南国以南i 背景: 在Java代码中当我们需要一个Bean对象,通常会使用spring中@Autowired注解,用来自动装配…

    技术杂谈 2023年7月11日
    058
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球