做封面怎么把网站加上去,wordpress 域帐户,宜宾网站建设公司,深圳建站定制公司文章目录 前言手写签名和数字签名前置知识点#xff1a;消息摘要算法数字签名算法数字签名算法的由来数字签名算法在实际运用的过程附加#xff1a;签名和摘要值的解释 数字签名算法的家谱数字签名算法的消息传递模型经典数字签名算法-RSA实现 数字签名标准算法-DSA实现 圆曲… 文章目录 前言手写签名和数字签名前置知识点消息摘要算法数字签名算法数字签名算法的由来数字签名算法在实际运用的过程附加签名和摘要值的解释 数字签名算法的家谱数字签名算法的消息传递模型经典数字签名算法-RSA实现 数字签名标准算法-DSA实现 圆曲线数字签名算法-ECDSA总结参考 前言
在微软 (Microsoft) 、Adobe等软件产品中我们常常需要输入序列号那么序列号是什么?它背后用到的技术是什么它实现算法又是什么然后什么是数字签名它和手写的签名又有什么区别和联系本文将为你揭晓答案。
手写签名和数字签名
相信绝大多数读者朋友都有刷卡购物的经历。刷卡时我们都要签下自己的名字我们把这种行为简称为“签名”或者叫做“手写签名”。这种签名几乎与使用者一绑定成为防止使用者对其行为否认的一种手段。如果使用者对自己的行为表示质疑可鉴定签名是否一致判别签名是否有效。
数字签名是手写签名在计算机软件应用中的一种体现它同样起到了抗否认的作用。手写签名应用于纸质文件数字签名应用于数据。手写签名针对纸质文件内容确认数字签名对数据进行摘要处理。两种方式都离不开签名实体其校验方法也基本一致。 无论是手写签名还是数字签名如果离开了签名实体(文件或数据)就没有了意义。如果经过手写签名的文件被修改了我们可以认为该文件无效。同理经过数字签名的数据可以通过验证签名操作辨别该数据是否被修改。 相信大多数读者朋友都使用过微软的操作系统(如Windows XP)在安装该系统时需要输入一个25位的产品密钥系统会验证这个产品密钥是否合法这其实就是一个签名验证的过程。
前置知识点消息摘要算法
消息摘要是一种通过对任意长度的输入数据进行处理生成固定长度的输出字符串的算法。它也被称为哈希函数或散列函数。消息摘要具有以下特点 固定长度输出 无论输入数据的长度如何消息摘要算法生成的输出都是固定长度的。常见的摘要长度包括128位、256位等。 唯一性 不同的输入数据应该生成不同的摘要。即使输入数据的细微变化输出的摘要也应该发生明显的变化。这种性质称为抗碰撞性。 不可逆性 由摘要生成原始输入的过程是不可逆的。即使知道摘要值也应该极其困难理论上不可能从摘要值还原出原始输入数据。 高效性 摘要算法应该能够在合理的时间内处理大量数据并生成摘要。
消息摘要在信息安全领域中有多种应用包括 数据完整性验证 通过比较发送和接收方计算的消息摘要可以验证数据是否在传输过程中被篡改。 密码学应用 消息摘要用于生成数字签名、密码学哈希函数等以确保数据的安全性和不可篡改性。 存储密码学 在存储密码学中消息摘要常用于存储密码的安全存储以防止密码泄露后被逆向还原。
一些常见的消息摘要算法包括MD5较为不安全不建议使用、SHA-1已经被证明不安全、SHA-256、SHA-3等。在选择摘要算法时安全性和性能都是需要考虑的因素。SHA-256和SHA-3目前是比较常见且被广泛接受的安全摘要算法。
数字签名算法
数字签名算法可以看做是一种带有密钥的消息摘要算法并且这种密钥包含了公钥和私钥。也就是说数字签名算法是非对称加密算法和消息摘要算法的结合体。
数字签名算法的由来
数字签名算法是公钥基础设施 (Public Key lnfrastructurePKI) 以及许多网络安全机制 (SSL/TLS、VPN等)的基础。 数字签名算法要求能够验证数据完整性、认证数据来源并起到抗否认的作用。这3点与OSI参考模型中的数据完整性服务、认证(鉴别) 服务和抗否认性服务相对应。 消息摘要算法是验证数据完整性的最佳算法因此该算法成为数字签名算法中的必要组成部分。
基于数据完整性验证我们希望数据的发送方(以下称甲方)可以对自己所发送的数据做相应的处理(签名处理)同时给出对应的凭证(签名)并且数据的接收方(以下称乙方)可以验证该签名是否与数据甲方发送的数据相符。
如果任何机构都可以进行签名处理那签名本身就失去了验证的意义。因此签名操作只能由甲方来完成验证签名操作则由乙方来完成。既然签名操作仅限于甲方那么签名操作本身是基于甲方的某些私有信息完成的操作。并且用于验证操作的相关信息是由甲方公布给乙方。
用于签名的相关信息私有用于验证的相关信息公有且这两种信息必须成对出现。非对称加密算法中的私钥和公钥满足这种关系成为数字签名算法中的重要元素。
数字签名算法包含签名和验证两项操作遵循“私钥签名公钥验证”的签名/验证方式签名时需要使用私钥和待签名数据验证时则需要公钥、签名值和待签名数据其核心算法主要是消息摘要算法。因此我们可以把数字签名算法近似看成是一种附加了公钥和私钥的消息摘要算法。
与摘要值的表示方式相同签名值也常以十六进制字符串的形式来表示。
数字签名算法在实际运用的过程
需要注意的是数字签名算法在实际运用时通常是先使用消息摘要算法对原始消息做摘要处理然后再使用私钥对摘要值做签名处理验证签名时则使用公钥验证消息的摘要值。
数字签名算法的目的是确保消息的完整性、身份认证和防篡改。在实际运用中通常采用以下步骤 消息摘要使用消息摘要算法如MD5、SHA-1、SHA-256对原始消息进行摘要处理生成摘要值。摘要是一个固定长度的字符串唯一标识了原始消息。 签名处理使用私钥对摘要值进行签名处理。签名处理使用非对称加密算法如RSA、DSA、ECDSA其中私钥用于生成签名确保只有私钥持有者能够生成签名。 验证签名在验证签名时需要使用公钥对消息摘要值进行验证。公钥是私钥的配对密钥公钥可以公开给其他人使用。验证过程是通过使用公钥解密签名得到一个摘要值与原始消息生成的摘要进行对比。如果二者一致说明签名是有效的消息没有被篡改。
通过这样的流程数字签名算法实现了对消息的加密签名和验证确保了消息的完整性和身份认证。只有持有私钥的人才能够生成签名而任何人都可以使用公钥来验证签名。这种机制使得数字签名在网络通信、电子商务等领域被广泛应用。
附加签名和摘要值的解释
为了更好理解这里解释一下 签名和摘要值的区别和联系 区别
摘要值是对原始消息使用摘要算法处理后得到的结果是一个固定长度的字符串用于唯一标识原始消息。摘要值的目的是确保消息的完整性防止消息在传输过程中被篡改。签名是对摘要值使用私钥进行加密得到的结果也是一个固定长度的字符串。签名的目的是为了确保消息的身份认证即确认消息是由私钥持有者生成的防止冒充和伪造。
联系
摘要值是签名的前置步骤在使用私钥对摘要值进行签名之前需要首先使用摘要算法对原始消息进行摘要处理。摘要值作为签名的输入之一保证了签名的可靠性。验证签名时使用摘要值进行对比在验证签名的过程中会使用公钥对签名进行解密得到一个摘要值。然后将原始消息使用相同的摘要算法生成一个摘要值将两个摘要值进行对比如果一致则说明签名是有效的。
签名和摘要值是数字签名算法中密切相关的概念摘要值保证了消息的完整性而签名则用于身份认证和防篡改。
数字签名算法的家谱
数字签名算法主要包括RSA、DSA和ECDSA共3种算法。其中RSA算法源于整数因子分解问题DSA和ECDSA算法源于离散对数问题。 作为非对称加密算法RSA算法堪称典型同样也是数字签名算法中的经典。基于RSA算法密钥结合消息摘要算法可形成对应的签名算法。如结合消息摘要算法MD5算法可形成MD5withRSA算法。 DSA算法是继RSA算法后出现的基于DSS的数字签名算法旨在形成数字签名标准。DSA算法主要为后续数字签名算法的形成奠定基础。 ECDSA算法是椭圆曲线加密算法ECC与DSA算法的结合相对于传统签名算法它具有速度快、强度高、签名短等优点其用途也越来越广泛。
数字签名算法的消息传递模型
我们继续以消息传递模型为例介绍基于数字签名算法的消息传递模型。 数字签名算法在应用领域的使用较为简单在密钥处理方面与一般非对称加密算法无异只是将加密/解密换成了签名/验证。 无论我们将要介绍哪一种数字加密算法在构建密钥对这一操作中都与非对称加密算法无异尤其是与RSA算法完全一致。 在图中甲方作为消息的发送方乙方作为消息的接收方。我们假设甲乙双方在消息传递之前已将指定了将要使用的数字签名算法(如RSA算法)。为完成签名验证甲乙双方需要以下操作: 1)由消息发送的一方构建密钥对这里由甲方完成 2)由消息发送的一方公布公钥至消息接收方这里由甲方将公钥公布给乙方
完成这两步操作后甲方向乙方发送的数据就可以做验证了 图中甲方向乙方发送数据时需要附加签名数据与签名形成一则消息发送给接收者。签名与实体(这里指签名前的数据)不可分离作为一个整体发送给乙方。并且私钥仅用于签名公钥仅用于验证。
经典数字签名算法-RSA
RSA算法既是非对称加密算法中的经典同样也是数字签名算法中的经典。而且在Java语言的世界里对于RSA算法的支持是最为完整的。
RSA数字签名算法是Diffie和Hellman提出数字签名思想后的第一个数字签名算法是由Rivest、Shamir和Adleman三人共同完成的该签名算法源于RSA公钥密码算法的思想将RSA公钥密码算法按照数字签名的方式运用。RSA数字签名算法是迄今为止应用最为广泛的数字签名算法。
实现
RSA数字签名算法的密钥实现与RSA加密算法一致算法名称同为“RSA”密钥产生与转换完全一致。
RSA数字签名算法主要可以分为MD系列和SHA系列两大类。
MD系列主要包括MD2withRSA和 MD5withRSA共 2种 数字签名算法。
SHA系列主要包括SHA1withRSA、SHA224withRSA.SHA256withRSA、SHA384withRSA和SHA512withRSA共 5种数字签名算法。其中SHA224withRSA.SHA256withRSA、SHA384withRSA和SHA512withRSA这4种数字签名算法需要由第三方加密组件包提供例如 Bouncy Castle。 Java 6则 只提供了MD2withRSA、MD5withRSA和SHA1withRSA共3种数字签名算法。
有关RSA数字签名算法的Java6实现与Bouncy Castle实现细节如表所示
数字签名标准算法-DSA
RSA作为经典数字签名算法很快就成了数字签名算法的研究对象并逐步转为标准一DSS并形成了DSA算法这为后续数字签名算法的提出奠定了基础如ECDSA (圆曲线数字签名算法)。 1991年美国国家标准技术协会公布了数字签名标准 ( Digital signatureStandardDSS)于1994年正式生效并作为美国联邦信息处理标准。DSS本质上是ElGamal数字签名算法 DSS使用的算法称为数字签名算法 (Digital Signature AlgorithmDSA)。 DSA算法与RSA算法都是数字证书中不可或缺的两种算法。两者不同的是DSA算法仅包含数字签名算法使用DSA算法的数字证书无法进行加密通信而RSA算法既包含加密/解密算法同时兼有数字签名算法。
实现
Java 6提供了DSA算法实现在实现层面我们可以认为DSA算法实现就是RSA数字签名算法实现的简装版。与RSA数字签名算法实现相比DSA算法仅支持SHA系列的消息摘要算法。Java 6仅支持SHA1withDSA算法通过Bouncy Castle可以SHA384withDSA和扩 展 SHA224withDSA、SHA256withDSA、SHA512withDSA共4种数字签名算法。
需要注意的是DSA密钥长度默认为1024位密钥长度必须是64的倍数范围在512~1024位之间 (含)。DSA算法的签名长度与密钥长度无关且长度不唯一。
圆曲线数字签名算法-ECDSA
对微软 (Microsoft) 产品有所了解的读者朋友可能对于这个算法的名称不会太陌生它正是微软操作系统及办公软件的序列号验证算法。序列号是什么? 正是微软为其软件经过签名得到的签名值!
ECDSA是椭圆曲线数字签名算法Elliptic Curve Digital Signature Algorithm的缩写。它是一种非对称加密算法用于确保数字数据的完整性和认证发送方的身份。ECDSA基于椭圆曲线密码学通过利用椭圆曲线上的数学运算来实现数字签名的生成和验证。
与传统的非对称加密算法如RSA相比ECDSA在相同的安全级别下使用更短的密钥长度从而提供了更高的性能和更小的资源需求。这使得ECDSA成为许多安全协议和应用程序中的首选选择特别是在有限的资源环境中如移动设备和物联网设备。
ECDSA的基本流程包括私钥的签名生成和公钥的验证。签名方使用私钥对消息进行签名而验证方使用相应的公钥验证签名的有效性。这种算法的安全性基于椭圆曲线离散对数问题即在椭圆曲线上找到给定点的私钥从而在实际应用中提供了强大的安全性。
总结
数字签名算法是公钥基础设施 (Public Key InfrastructurePKI) 以及许多网络安全机制 (SSL/TLS、VPN等) 的基础。数字签名算法包含签名和验证两项操作遵循“私钥签名公钥验证”的签名/验证方式签名时需要使用私钥和待签名数据其核心算法主要是消息摘要算法。因此我们可以把数字签名算法近似看成是-种附加了公钥和私钥的消息摘要算法。
数字签名算法主要包括RSA、DSA和ECDSA共3种算法。其中RSA算法源于整数因子分解问题DSA和ECDSA算法源于离散对数问题。
RSA算法是数字签名算法中的经典主要可以分为MD系列和SHA系列两大类。
RSA算法是目前应用最为广泛的非对称加密算法和数字签名算法在电子商务和产品验证方面均有使用。
DSA算法是继RSA算法后出现的基于DSS的数字签名算法旨在形成数字签名标准。并且 DSA算法本身不包含任何消息摘要算法。DSA算法主要为后续数字签名算法的形成奠定基础。
Java 提供了DSA算法实现在实现层面我们可以认为DSA算法实现就是RSA数字签名算法实现的简装版.
ECDSA算法相对传统签名算法具有速度快、强度高、签名短等优点其用途也越来越广泛。微软操作系统的25位的产品密钥中就使用了圆曲线签名算法产品密钥就是签名的十六进制串表示形式。
参考
《Java加密与解密的艺术》