数字签名原理剖析

咱们继续学Java——高级篇 第一百四十五篇:之Java数字签名全解析 在Java编程的学习之路上,我们始终保持着积极探索、共同进步的态度。今天,我们将深入剖析Java核心技术卷II中数字签名的相关内容,帮助大家更好地理解这一在信息安全领域至关重要的技术。 阅读详情

本系列通过通俗易懂的讲解,让您就像读小说一般,轻轻松松就能理解数字签名的基本原理和应用方法(即使您是一个并不精通计算机的企业老总,也能读懂本篇文章)。然后我们再逐步深入技术细节,最后将给出一个在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,这是为什么?

Java数字签名实战:从原理到API鉴权,防篡改与身份认证核心技术 在软件安全领域,数据完整性与身份认证是保障系统可信的基石。其核心原理基于密码学中的哈希算法与非对称加密技术:哈希算法为数据生成唯一的“数字指纹”,确保任何微小改动都能被检测;非对称加密则通过公钥与私钥的配对,实现“私钥签名、公钥验证”的机制,从而在开放网络中确认数据来源并防止抵赖。这项技术的核心价值在于为分布式系统、文件传输和API通信提供了防篡改、防伪造的安全保障。在Java开发中,数字签名广泛应用于代码签名、JWT令牌验证、微服务间安全通信以及区块链交易等场景。本文以Java实现为主线,深入解析RSA、 阅读详情

相关推荐

Java实现DSA数字签名算法:从原理到代码实践

数字签名算法(DSA)作为非对称加密技术的重要分支,其核心原理基于离散对数难题,通过私钥签名、公钥验证的机制,确保数据的完整性和身份认证。在Java工程实践中,理解DSA的数学基础与实现细节,对于掌握密码学应用、应对面试八股文以及深入区块链、HTTPS等技术的底层逻辑至关重要。通过亲手实现密钥生成、签名与验证流程,开发者能够深刻领会随机数k的安全隐患、BigInteger模幂运算等关键点,从而在软件发布校验、日志防篡改等场景中,更安全地应用这一技术。

weixin_42530732的博客 324

AVAssetExportSession的问题

最近在搞视频的拼接碰到奇葩的问题:使用exportAsynchronouslyWithCompletionHandler怎么都不调用block,搞了2天的时间终于tmd的解决了,但是还是不知道什么原因,啃爹啊!      先说说怎么出这个问题的吧。自己录制了一些视频文件,这个文件的产生是通过AVAssetWriter输出的,并没有使用 AVCaptureFileOutputRecordingD

Tommy(凌飞)的专栏 1万+

工控安全政策系列导读:国际标准IEC 62443标准系列

IEC 62443由ANSI/ISA提出,被ISO/IEC采纳,所以该标准会以不同的名字出现,包括:ANSI/ISA-99,ISA-99,ISA 62443,ISO/IEC 62443,ISO 62443,IEC 62443。其中IEC 62443-2-1已等同采纳为国标,于2016年10月发布,标准编号为GB/T 33007。 IEC 62443是在国...

weixin_34132768的博客 2624

LiveVideoStack Meet | 北京:卷时代,多媒体人 生存指北

如约而至,回归后的第一期LiveVideoStack Meet将于9月25日在北京举行,正如在“来,一起搞AV,LiveVideoStack Meet再启动”提到的,新LiveVideoS...

LiveVideoStack 1618

从零到一:手把手教你用STM32F103C8T6打造个人专属开发板(附立创EDA工程与源码)

本文详细介绍了如何使用STM32F103C8T6微控制器从零开始设计和制作个人专属开发板。内容涵盖硬件选型、原理图设计、PCB布局、功能验证等全流程,并提供了立创EDA工程文件和源码,帮助开发者深入理解STM32开发板的硬件架构与设计要点。

weixin_26802933的博客 286

面试题-手撕NMS(非极大值抑制)

非极大值抑制(Non-Maximum Suppression,NMS)是一种常用于目标检测和计算机视觉中的算法,用于去除重叠的边界框,保留最可能是真实目标的边界框。其核心就是对一组检测框,找出其中属于同一个类别且分数最高的那个框,然后把和这个框的IOU值大于阈值的那些框都删掉。

zhaoyqcsdn的博客 1109

LiveVideoStack Meet城市特使第二波

距离重启LiveVideoStack Meet -《来,一起搞AV,LiveVideoStack Meet再启动》过去了大约三个月,我们交付了北京、苏州、杭州、成都(由于防疫要求成都完全通...

LiveVideoStack 2703

开关电源EMI优化秘籍:三明治绕法如何让你的产品通过认证测试

本文深入解析了开关电源EMI优化中的三明治绕法,详细阐述了其通过改变绕组排布来减小初次级寄生电容、降低共模噪声的核心机理。文章提供了从绕制结构选择、绝缘安规处理到实测验证的全流程实战指南,帮助工程师有效利用这一工艺,提升产品通过CCC、CE等EMI认证测试的成功率。

tcp8optimizer的博客 706

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

摘要 本系列通过通俗易懂的讲解,让您就像读小说一般,轻轻松松就能理解数字签名的基本原理和应用方法(即使您是一个并不精通计算机的企业老总,也能读懂本篇文章)。然后我们再逐步深入技术细节,最后将给出一个在B/S信息系统中使用数字签名的DEMO。 由于数字签名基于非对称加密技术,所以我们需要先啰嗦一下对称加密和非对称加密技术。 对称加密 何谓加密?加密是一种“把数据搞乱掉”的技术...

weixin_34227447的博客 580

手把手复现金蝶云星空V8.1文件上传漏洞(附完整POC与修复方案)

本文深度解析金蝶云星空V8.1文件上传漏洞,提供详细的漏洞复现步骤与完整POC,涵盖技术原理、测试环境搭建及验证流程。同时给出多维防护方案,包括官方补丁部署、临时缓解措施和长期安全加固建议,帮助企业有效防范任意文件上传风险。

weixin_30505225的博客 184

寻迹Arduino智能小车

Arduino巡线寻迹智能小车

Rachael_Wang的博客 1万+

Q7:难道不想手工搞个环境?

一.有的参考 1.webpack中文网:https://www.webpackjs.com/concepts/ wepack是什么?(提供浏览器使用,那浏览器能运行什么,不能运行什么) 2.搭建vue:https://juejin.im/post/5cc55c336fb9a032086dd701 3.Vue CLI:https://cli.vuejs.org/zh/ 4.npm:http...

吞吞吐吐屠屠兔兔的博客 1万+

Linux存储软件栈剖析之第5篇:F2FS文件系统

F2FS是三星专为NAND闪存设计的开源文件系统,通过异地更新、磨损均衡等机制优化闪存特性。其架构采用层次化存储管理(Block→Segment→Section→Zone)和多日志区域设计,基于数据热度分类(热/温/冷数据)提升性能。核心创新包括节点地址表(NAT)解决级联更新问题,以及基于成本的垃圾回收算法。F2FS通过检查点机制确保崩溃一致性,并利用并行访问能力充分发挥闪存性能优势,显著降低写放大效应,延长设备寿命。

指尖动听知识库 199

UniPDF安全特性深度剖析:PDF加密与数字签名实现原理

在数字化时代,PDF文档的安全性变得尤为重要。UniPDF作为一款强大的Golang PDF库,提供了完整的PDF加密与数字签名解决方案,确保您的敏感文档得到可靠保护。本文将深入解析UniPDF的安全机制实现原理,帮助您全面了解这一PDF安全保护利器。 ## 🔒 PDF加密:多层次防护体系 UniPDF的加密系统基于PDF标准安全处理程序,支持从R2到R6的多个版本标准。在[core/sec

gitblog_00488的博客 347

在 Eclipse 中接入 DeepSeek:开启 Java 开发新效率

DeepSeek 能够根据自然语言描述,精准生成高质量的 Java 代码片段。无论是简单的方法编写,比如 “编写一个 Java 方法,用于计算两个整数的乘积”,还是复杂的类和功能模块创建,例如 “创建一个 Java 类,实现文件的读写操作,并包含异常处理机制”,它都能快速给出合理且可运行的代码示例。DeepSeek 生成的代码不仅实现了基本功能,还遵循 Java 的编码规范,添加了必要的注释,让代码更易于理解和维护,大大节省了开发者从头编写代码的时间和精力。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 4068

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

《Linux网络编程·加餐》HTTPS协议:加密方案演进、数字签名、CA 证书完整原理剖析

本文逐层剖析 HTTPS 完整原理,从加密基础概念入手,讲解对称、非对称加密与数据摘要、数字签名机制。通过对比五套演进方案,分析单纯加密存在的缺陷,还原中间人攻击的过程与漏洞根源。 重点讲解 CA 证书体系,梳理证书签发、校验逻辑,解释证书抵御中间人劫持的底层原理。完整拆解 HTTPS 通信流程,剖析三组密钥分工,解答签名实现的常见细节疑问,理清 TLS 层如何解决窃听、篡改、冒充风险,帮助透彻理解互联网安全通信的实现逻辑。

2501_91275995的博客 708

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

密码应用技术核心原理深度剖析:从对称加密、非对称加密到数字签名

本文系统介绍了密码学基础技术原理。首先阐述了对称加密的核心要素(明文、算法、密钥等)及其安全性标准,强调密钥保密的重要性。然后详细讲解了非对称加密(公钥加密)的工作机制,包括密钥生成、加密/解密流程,指出其解决了密钥分发问题。最后重点论述数字签名技术,说明其通过发送方私钥加密实现身份认证、数据完整性和不可否认性三大功能,并介绍了消息摘要等关键技术。文章指出密码技术通过非对称加密建立信任、对称加密处理数据、数字签名保障安全,共同构建数字安全体系。

晚安是一只小猫的博客 1606

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

网络知识详解之:HTTPS通信原理剖析(对称、非对称加密、数字签名、数字证书)

网络知识详解之:HTTPS通信原理剖析(对称、非对称加密、数字签名、数字证书)

大数据开发、JAVA开发、人工智能AI 1887

一文搞懂数字签名:原理、技术与应用

数字签名作为网络安全的重要基石,以其基于公钥密码体制和哈希函数的精妙原理,实现了数据的完整性验证、身份认证和不可否认性。RSA、DSA 等非对称密钥加密算法,以及 MD5、SHA 系列哈希函数,共同构建了数字签名的技术大厦。在身份验证、电子合同、软件分发、电子邮件安全和数据完整性验证等众多领域,数字签名都发挥着不可或缺的作用,极大地推动了数字化时代的发展。然而,数字签名技术也面临着私钥管理风险、算法安全性挑战和信任基础问题等诸多难题。随着量子计算等新兴技术的崛起,数字签名技术必须不断演进和创新。

技术分享 5141

公钥密码学与数字签名:原理详解

本文系统介绍了加密技术与数字签名机制。首先对比了对称加密(如AES)与非对称加密(如RSA、ECC)的特点、算法及应用场景,指出对称加密速度快但密钥分发困难,非对称加密解决了密钥分发但计算较慢。其次阐述了混合加密系统如何结合两者优势。接着详细讲解了公钥密码学的数学基础、密钥长度与安全强度的关系,推荐新系统采用RSA 3072+或ECC 256+。最后解析了哈希函数的安全特性和数字签名的实现原理,强调先哈希再签名的重要性,并说明数字签名如何实现认证性、完整性和不可否认性三大安全目标。

lcreek的博客 1191

数字签名技术全解析:从HMAC-SHA256到国密算法及设备端实践

是HMAC(Hash-based Message Authentication Code)算法与SHA256哈希函数的结合。它的输入是一个消息和一个密钥,输出一个256位(32字节)的签名值。H 为哈希函数(SHA256);K’ 为密钥K经过填充后的值(长度等于哈希块大小,SHA256块大小为64字节);ipad、opad 分别为0x36和0x5c重复得到的填充串;⊕ 表示异或运算;|| 表示连接。双重哈希结构有效抵御了长度扩展攻击,保证了安全性。需求场景推荐签名方案说明。

数字人生 857

密码学(一)—— 背景、常用的密码算法简介,单向散列简介、数字签名简介

背景 密码,最初的目的就是用于对信息的加密,计算机领域的密码技术种类繁多,但随着密码学的运用,密码还用于身份认证,防止否认等功能上。最基本的,是信息加密解密分为对称加密和非对称加密,这两者的区别在于是否在加密解密时是否使用了相同的密钥。除了信息的加密解密,还有用于确认数据完整性的单向散列技术,又称魏密码检验、指纹、消息摘要。信息的加密解密与信息的单向散列的区别时,加密解密是可以通过密钥来获取其加...

The_Reader的博客 3361
上一篇: 汇总Eclipse快捷键
下一篇: 甲骨文CEO:未来几年将大量投资Java
MajorBlog
博客等级 码龄18年 54粉丝 14原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值