数字签名在信息安全是什么?

信息安全技术之数字签名 什么是数字签名? 就类似于生活中公司发布一些文件(放假通知啥的),老板会在文件的后面签名或者会盖上公司的印章,目的就是标识这个文件是公司发布的。在计算机中我们没办法像真实世界那样签名,这时候我们就需要用到数字签名,数字签名就是一种可以唯一标识一个发送方的技术。 数字签名的原理 数字签名也是用到了非对称加密的技术,发送者有一对公私钥,公钥对外公布,私钥自己保留。发送数据时,使用私钥进行加密;接收方收到数据后使用发送方的公钥进行解密,这样就能唯一确定发送方了。 #mermaid-svg-ERaW6thAUzIk 阅读详情

在这里插入图片描述

  1. List item

1数字签名在信息安全,包括身份认证、数据完整性、不可否认性以及匿名性有着重要应用,是现代密码学的重要分支。签名隶属于公钥密码学。签名过程:发送方用自己的私钥对发送信息进行所谓的加密运算,得到一个hash值,该hash值就是签名。使用时需要将签名和信息发给接收方。接受者用发送方公开的公钥和接收到的信息对签名进行验证,通过认证,说明接收到的信息是完整的、准确的,否则说明消息来源不对。

简单描述数字签名:私钥签名;公钥验签。

1 普通签名

签名只是用一把私钥,并且是发送方自己进行地签名动作,这类签名就是普通签名。常用的签名方法有较多,包括RSA数字签名、DSS数字签名、ElGamal数字签名、ECDSA数字签名等等。其中RSA和ECDSA签名已经在加密算法中有讲解。区块链项目中最常用的签名方法是ECDSA数字签名。签名和验签的原理不作讲解,感兴趣可以翻阅之前的章节。

因为ECDSA数字签名在区块链的重要性,我接下来只对它进行讲解如何应用。
下边代码展示简单地用ECDSA签名对数据BLOCK进行签名,上链之前需要先进行验证,验证通过之后才能上链。具体解析在代码中有说明。

过程:
1.通过ecdsa.GenerateKey产生一私钥;输出的私钥是指针类型;
2.通过私钥产生公钥;
3.对数据BLOCK进行hash运算,实际公链中就是挖矿过程;
4.为了可以给任何长度的data进行签名,我们创建自己的签名方法;
5.验证数据是否合法,也就是通过公钥对签名进行验证,通过后才能对数据进行上链动作。

package main

import (

“bytes”
“encoding/binary”
“log”
“time”
“crypto/sha256”
“fmt”
“crypto/ecdsa”
“crypto/elliptic”
“crypto/rand”
“math/big”
)

//简单的区块链块结构
type Block struct {

//1. 区块高度
Height int64
//2. 上一个区块HASH
PrevBlockHash []byte
//3. 交易数据
Data []byte
//4. 时间戳
Timestamp int64
//5. 实际通过挖矿得到Hash
Hash []byte
// 6. 随机数Nonce
Nonce int64
}

func main() {

//调用底层函数,产生私钥

prk,_:=ecdsa.GenerateKey(elliptic.P256(),rand.Reader)

//生成公钥
pubkey:=prk.PublicKey

//需要上链的数据
data:=[]byte(“helloworld”)

//手动创建一个区块信息,实际中,通过交易来触发自动创建block
block:=&Block{2,nil,data,time.Now().Unix(),nil,0}

//将block信息内容拼接成字节数组
blockbytes:=prepareData(block)

//对block进行hash运算,实际中是挖矿过程
blockHash:=sha256.Sum256(blockbytes)
//签名

signatrue,_:=Sign(blockHash[:],prk)
//验证,如果通过就进行上链处理,否则rollback

if Verify(blockHash[:],signatrue,&pubkey){
fmt.Println(“该block合法,可以上链”)
}else {
fmt.Println(“该Block不合法,rollback”)
}
}

//数据拼接
func prepareData(block *Block) []byte {

Block:=block
data := bytes.Join(
[][]byte{
Block.PrevBlockHash,
Block.Data,
IntToHex(Block.Timestamp),
Block.Data,
IntToHex(int64(Block.Nonce)),
IntToHex(int64(Block.Height)),
},
[]byte{},
)
return data
}

// 将int64转换为字节数组
func IntToHex(num int64) []byte {

buff := new(bytes.Buffer)
err := binary.Write(buff, binary.BigEndian, num)
if err != nil {
log.Panic(err)
}

return buff.Bytes()
}

func Sign(data []byte, privkey *ecdsa.PrivateKey) ([]byte, error) {

// 对要签名的信息进行sha256散列,生成一个长度为32的字节数组
digest := sha256.Sum256(data)

// 通过椭圆曲线方法对散列后的明文进行签名,返回两个big.int类型的大数
r, s, err := ecdsa.Sign(rand.Reader, privkey, digest[:])
if err != nil {
return nil, err
}
//将大数转换成字节数组,并拼接起来,形成签名
signature := append(r.Bytes(), s.Bytes()…)
return signature, nil
}

// 通过公钥验证签名
func Verify(data, signature []byte, pubkey *ecdsa.PublicKey) bool {

// 将明文转换成字节数组
digest := sha256.Sum256(data)

//声明两个大数r,s
r := big.Int{}
s := big.Int{}
//将签名平均分割成两部分切片,并将切片转换成*big.int类型
sigLen := len(signature)
r.SetBytes(signature[:(sigLen / 2)])
s.SetBytes(signature[(sigLen / 2):])

//通过公钥对得到的r,s进行验证
return ecdsa.Verify(pubkey, digest[:], &r, &s)
}

2 群签名

1991年,Chaum和Van Heyst首次提出了群签名的概念。群签名允许一个群体中的任意一个成员以匿名的方式代表整个群体对消息进行签名。

群签名需要有一个集体,一般是公司。管理员通过认证添加群签名的成员,每个成员的签名都代表集体。利用群签名可以很好的隐藏组织结构。例如,一个公司的职员可以利用群签名方案代表公司进行签名,验证者(可能是公司顾客)只需要利用公司的群公钥进行签名的合法性验证。验证者并不知道该签名是由哪个职员所签名的。当发生争议时,群管理员可以识别出实际的签名者。当然,群签名还可以应用于电子投票、电子投标和电子现金等。

如何实现群签名呢?

入群:群成员在入群之前都会向群管理进行申请入群,通过后,申请人会和群管理员达成交互式协议,该协议可生成群成员的私钥。群管理员对该密钥进行签名,并颁发给申请人,完成入群。群成员群管理员将群公钥对外公开。
签名:群成员通过自己的群密钥和群公钥对消息进行签名,得到群签名。
验证:通过输入群公钥和群签名用公开的某种验证方法进行验证,返回值只有真假,验证者无法计算得到签名者是群公钥里的具体人员,只知道该签名者属于群公钥里的,可以代表群体。
追踪:群管理员可以通过群签名得到具体是哪个群成员进行签名的。
群签名是一个中心化的签名结构,该结构的算法都是群管理员定的,造成签名者的隐私没有做到真正的保障。

所以总结群签名有三点:
1.只有群体中的合法成员才能代表整个群体进行签名;
2.接收者可以用群公钥验证群签名的合法性,但不知道该群签名是群体具体哪个成员所签;、
3.在发生争议时,群管理员可以识别出实际的签名者。

3 环签名

环签名由Rivest,shamir和Tauman三位密码学家在2001年首次提出。因签名中参数Ci(i=1,2,…,n)根据一定的规则首尾相接组成环状而得名。其实就是实际的签名者用其他可能签名者的公钥产生一个带有断口的环,然后用私钥将断口连成一个完整的环。

环签名可以认为是不可追踪的群签名,实际的操作过程都是自己完成的,没有群管理员。

签名者是某个群体的成员,他把其他群体的公钥拿来并加上自己的公钥组合成一个群公钥,然后用自己的私钥和群公钥对要发布的信息进行环签名。接收者接收到群公钥、签名和信息,然后对签名进行验证,如果签名来自群公钥,那么验证成功,否则消息不合法。

群公钥中签名者的公钥只是迷惑作用,并不对数据有任何操作。
形成的签名因为是每个其它群公钥产生的数据和自己用私钥产生的数据组成的环,自己的数据隐藏环中,攻击者很难找到签名者的公钥。所以签名者的隐私很好地被保护起来了。

4 代理签名

1996年,Mambo等人首次提出了代理签名的概念。在代理签名方案中,允许一个原始签名者把他的签名权利委托给一个称为代理签名者的人,然后代理签名者就可以代表原始签名者进行签名。代理签名者可用于需要委托权力的密码协议中,如电子现金、移动代理和移动通信等。

5 盲签名

1982年Chaum首次提出了盲签名的概念。盲签名允许使用者获得一个消息的签名,而签名者既不知道该消息的内容,也不知道该消息的签名。盲签名可用于需要提供匿名性的密码协议中,如电子投票和电子现金。

一个盲签名方案由以下部分组成。
1)消息盲化:使用者利用盲因子对要签名的信息进行盲化处理,然后将盲化后的消息发送给签名者。
2)盲消息签名:签名者对盲化后的消息进行签名,因此他并不知道真实消息的具体内容。
3)恢复签名:使用者除去盲因子,得到真实消息的签名。

6 零知识证明

零知识证明:实质上是一种涉及两方或更多方的协议,即两方或更多方完成一项任务所需采取的一系列步骤。证明者向验证者证明并使其相信自己知道或拥有某一消息,但证明过程不能向验证者泄漏任何关于被证明消息的信息。简单理解,就是证明者能够在不向验证者提供任何有用信息的情况下,让验证者相信你。

文章转载自思否

https://segmentfault.com/a/1190000018802342

Java信息安全实战项目:数字签名与加密解密 MD5(Message-Digest Algorithm 5)是一种广泛使用的密码散列函数,它可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5算法可以被看作是文件的“指纹”,对于文件中的每一个字节,MD5都会计算出一个16字节的“指纹”。MD5的原理包括以下几个步骤:填充:首先将待散列的消息填充至长度满足64位的整数倍,填充位的最后一个字节包含原数据长度的低8位,其余填充位则为0。添加长度值。 阅读详情

相关推荐

工程经验分享:PCIE(1)

本文介绍AXI Bridge For Pcie Express Gen3 Subsystem 的使用方法。这个IP兼具简单与实用性,将PCIE协议层实现于内部,仅留出AXI接口供开发者使用。开发者不需要处理复杂的PCIE协议数据,只需要对AXI总线有所了解即可,十分符合Xilinx一贯的开发风格。本文无关PCIE协议本身,仅分享实用性的工程经验,以PCIE IP为核心,一步一步搭建一个简单的子系统,以此说明用法。文中所有内容均已通过项目检验。

weixin_42415266的博客 3843

信息安全——数字签名

数字签名的背景、原理和算法介绍

琅琊之榜 1313

基于openEuler配置LAMP,部署WordPress

openEuler 基于OpenEular操作系统部署WordPress,必须包含以下内容: OpenEular的安装与基本配置。 基于SSH远程管理方式开展操作。 部署LAMP环境。 部署WordPress软件。 提供个人网站服务,并通过浏览器测试应用。 简要讲授相关知识与原理。 cd /etc/yum.repos.d 欧拉系统安装后,没有配置yum源,我们需要重新配置。 [root@localhost yum.repos.d]# ls -l 总用量 4 -rw-r--r--

Axiayouqiaomu的博客 6081

信息安全(五)——消息认证、数字签名及PGP

消息认证 消息认证 (Message Authentication):是一个证实收到的消息来自可信的源点且未被篡改的过程。 散列函数: 概念 散列函数 (Hash Functions):一个散列函数以一个变长的报文作为输入,并产生一个定长的散列码,有时也称报文摘要,作为输出。 散列函数(又称杂凑函数)是对不定长的输入产生定长输出的一种特殊函数:h = H(M) 其中M是变长的消息 h=H(M)是定...

圣三一 1万+

GAN网络详解析

介绍目前常见的GAN网络,以及GAN网络的基本组成

wm199的博客 6504

计算机考研常见面试题

写在前面 本人参加20考研,由于复试没有具体要求会问哪几门课,所以我就找了网上一些常见的计算机专业的面试题,整理如下 主要结构: 数据库 软件工程 操作系统 计算机组成原理 计算机网络 数据结构 C++ Java 数据库 1、数据:数据库中存储的基本对象。 数据库:长期存储在计算机内的、有组织的、可共享的数据集合。 数据库管理系统:专门用于建立和管理数据库的一套软件。对外部程序提供访问数据库的方法,对内进行数据管理。 数据库系统:与和数据库相关的整个系统,一般由数据库、数据库管理系统、应用程序、数

qq_38841618的博客 2万+

信息安全实践三之数字签名与认证实验【申请数字证书&数字签名与认证】

信息安全实践三之数字签名与认证实验【申请数字证书&数字签名与认证】 一、申请数字证书 二、数字签名与认证 1、加密文件&解密文件 2、文件签名&验证文件 3、文件签名加密&验证签名解密 三、验证签名实践 叮嘟!这里是小啊呜的学习课程资料整理。好记性不如烂笔头,今天也是努力进步的一天。一起加油进阶吧! 签名加密 好好学习、天天向上!

小啊呜的博客 4822

VS2019 从零构建 OSG+OSGEarth+OSGQt 开发环境实战指南

本文提供了一份详细的实战指南,指导开发者如何在Windows系统下使用VS2019从零开始编译和配置OSG、OSGEarth与OSGQt开发环境。文章涵盖了从环境准备、源码获取、CMake配置、Visual Studio编译到最终测试的完整流程,并分享了关键的避坑技巧,旨在帮助三维GIS与可视化开发者高效搭建稳定、可控的专业开发平台。

weixin_28826961的博客 367

2024022802-信息安全(五)——消息认证、数字签名及PGP

ash函数用来构造MAC:HMAC为其中之一Merkle于1989年提出hash function模型Ron Rivest于1990年提出MD41992年, MD5 (RFC 1321) developed by Ron Rivest at MITMD5把数据分成512-bit块MD5的hash值是128-bit在最近数年之前,MD5是最主要的hash算法美国标准SHA-1以MD5的前身MD4为基础该算法以一个任意长度的报文作为输入,产生一个128bit的报文摘要作为输出。

qq_24428851的博客 1239

MUSIC算法翻车?Toeplitz矩阵重构如何解决DOA估计中的相干信源难题

本文深入探讨了MUSIC算法在相干信源DOA估计中失效的根本原因,并详细介绍了基于Toeplitz矩阵重构的协方差矩阵修复技术。该方法通过凸优化恢复协方差矩阵的理想结构,有效解决了信号子空间秩亏损问题,从而显著提升了MUSIC算法在相干和多径场景下的分辨精度与稳健性。

a2b3c4d5e的博客 250

ADXL355 STM32 HAL 库 SPI 驱动实战:从零构建高精度加速度数据采集系统

本文详细介绍了如何使用STM32 HAL库通过SPI接口驱动ADXL355高精度加速度计,构建稳定可靠的数据采集系统。从硬件连接到寄存器配置,再到数据采集与处理,提供了完整的实战代码和优化技巧,特别适合工业级振动监测等应用场景。

weixin_28738397的博客 324

数字签名信息安全

想知道更多关于区块链技术知识,请百度【链客区块链技术问答社区】 链客,有问必答!! 数字签名在信息安全,包括身份认证、数据完整性、不可否认性以及匿名性有着重要应用,是现代密码学的重要分支。签名隶属于公钥密码学。签名过程:发送方用自己的私钥对发送信息进行所谓的加密运算,得到一个hash值,该hash值就是签名。使用时需要将签名和信息发给接收...

weixin_34067102的博客 459

数据仓库数据质量监控和处理方法最佳实践

指的是检查数据是否存在反常或者错误的情况,例如数值反常地过大或者过小,或者超过记录的波动值,对应的规则包括数值波动检查,最大值、最小值检查,跨表准确性等。指的是检查数据是否存在缺失的情况,这里的缺失可以是整个数据集的记录缺失,也可以是某个字段记录的缺失,对应的规则包括空值检查,表总行数检查。指的是检查数据是否符合规范,是否按照规定的格式存储,对应的规则包括正则表达式检查,字段长度检查,枚举集合检查,数值范围等。指的是检查哪些数据是重复数据或者数据的哪些属性是重复的,对应的规则例如主键唯一性检查。

大模型大数据攻城狮的专栏 898

汽车信息安全--数字签名

数字签名是通过非对称加密和数字摘要技术实现的电子签名手段,用于验证消息发送者身份并确保信息完整性。它解决了传统加密无法防止发送者抵赖的问题,具有不可伪造、不可修改和不可抵赖三大特性。我国2005年颁布的《电子签名法》已赋予其法律效力。数字签名技术包含签名生成和验证两个关键过程,广泛应用于合同签署等需要身份认证的重要场景,是确保电子文件真实性的核心技术。

2401_86537184的博客 757

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

jre9下载 jdk9

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

数字签名:信息安全的新屏障

数字签名是一种基于公钥密码学的加密技术,主要用于验证电子文档的真实性和完整性。数字签名具有以下特点:1. 不可伪造性:数字签名基于私钥生成,只有私钥持有者才能生成有效的签名。2. 不可抵赖性:签名者无法否认其签名行为,因为签名与公钥相对应,公钥可以公开验证。3. 可验证性:任何人都可以使用签名者的公钥对签名进行验证,确保数据的完整性和真实性。4. 抗篡改性:一旦数据被篡改,数字签名将失效,从而保证数据的完整性。

jiamisoft的博客 775

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

信息安全: 数字签名signature

数字签名是一种用于验证数字信息(如文件、消息、交易等)真实性、完整性和发送者身份的技术,本质上是传统手写签名在数字世界的安全替代方案。它通过密码学手段,确保信息在传输或存储过程中未被篡改,且能证明发送者的身份(防止抵赖),它的核心功能就两个字:认证。

weiweiliude2的专栏 630

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

信息安全工程师(19)HASH函数与数字签名

信息安全工程师——HASH函数与数字签名篇

m0_73399576的博客 1261

信息安全基础--加解密和数字签名

信息安全已经是这个时代强烈注重的问题,所以,不管时个人还是企业,在设计自己的系统时,一定会加上信息安全的机制。 先说说基础: 1.什么是对称加密? 简言之,对于消息的加密和解密,都是用同样的密钥,密钥越大,加密越强,但是加解密过程就越慢。 2.什么是非对称加密? 非对称加密,有一对密钥(公钥和私钥),一个密钥加密,另一个密钥就可以解密。因为公钥是发给很多人的,若用来解密就会不安全,即遵从

younger的博客 960

数字签名:保障信息安全的重要一环

数字签名的安全性取决于多个因素,包括密码学方法的强度、密钥管理的安全性、数字证书的可靠性等。近年来,随着量子计算技术的发展,一些新的密码学方法不断涌现,例如基于量子密钥分发的数字签名方案。针对这些问题,需要采取一系列措施,例如加强密钥管理的安全措施、研发更高效的数字签名算法、建立完善的信任体系等。同时,也需要加强研究和创新,不断提高数字签名的安全性和效率,以应对日益复杂的信息安全挑战。数字签名,一种在信息安全领域中至关重要的技术,它通过使用密码学方法,验证信息的完整性和来源。

SafePloy_SH的博客 316

信息安全技术之03数字签名与认证测试卷

信息安全技术之03数字签名与认证测试卷 一、单选题 二、多选题 叮嘟!这里是小啊呜的学习课程资料整理。好记性不如烂笔头,今天也是努力进步的一天。一起加油进阶吧!

小啊呜的博客 3708

信息安全与密码学2-什么是数字签名

信息安全与密码学2-什么是数字签名       数字签名(又称公钥数字签名、电子签章)是一种类似写在纸上的普通的物理签名,但是使用了公钥加密领域的技术实现,用于鉴别数字信息的方法。一套数字签名通常定义两种互补的运算,一个用于签名,另一个用于验证。        数字签名,就是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。  

Pandakingli的博客 1092
上一篇: 大数据时代网络信息安全如何保障
下一篇: Web安全
AI小模型
博客等级 码龄6年 6863粉丝 487原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI小模型

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值