“双花”,即一笔钱被花了两次或者两次以上,也叫“双重支付”
“双花攻击”,又叫“双重消费攻击”,即同一笔资金,通过某种方式被花费了两次,取得了超过该笔资金的服务。
2018年发生的比特币黄金(BTG)的双花攻击。BTG当时是全球第27大的加密货币。攻击者控制BTG网络上51%以上的算力(具体百度)
博弈论又被称为对策论(Game Theory)即是现代数学的一个新分支,也是运筹学的一个重要学科。博弈论是区块链的数学基础理论,区块链是基于一个分布式网络技术,在分布式网络上,任何一个节点获得信息的权利是对等的,你能在这个系统上得到的任何信息,另外一个人也完全能够得到。
一种算法,也称散列函数,消息摘要函数,单向函数或杂凑函数,任意程度的二进制数据映射为固定长度的二进制数据。
MD系列、SHA系列
MD5
package main
import(
"fmt"
"crypto/md5"
"encoding/hex"
)
func main(){
//方法一
data:=[]byte("hello world")
s:=fmt.Sprintf("%x",md5.Sum(data))
fmt.Println(s)
//方法二
h:=md5.New()
h.Write(data)
s= hex.EncodeToString(h.Sum(nil))
fmt.Println(s)
}
SHA256
package main
import(
"fmt"
"github.com/nebulasio/go-nebulas/crypto/hash"
"encoding/hex"
"crypto/sha256"
)
func main(){
//方法一 一个方法直接输出
data:=[]byte("hello world")
hash:=hash.Sha256(data)
fmt.Println(hex.EncodeToString(hash))
sha256.New()
//方法二 按照步骤一步一步输出
h:= sha256.New() //创建sha256算法
h.Write(data) //用sha256算法对参数a进行加密,得到8个变量
hashTemp := h.Sum(nil)//将8个变量相加得到最终hash
fmt.Println(hex.EncodeToString(hashTemp))
}
数字签名在信息安全,包括身份认证、数据完整性、不可否认性以及匿名性有着重要应用,是吸纳带密码学的重要分支。签名隶属于公钥密码学。
签名过程:发送方用自己的私钥对发送信息进行所谓的加密运算,得到一个hash值,该hash值就是签名。使用时需要将签名和信息发给接收方。接受者用发送方公开的公钥和接收到的信息对签名及逆行验证,通过认证,说明接受到的信息是完整的,准确的,否则说明消息来源不对。
签名只是用一把私钥,并且是发送方自己进行的签名动作,这类签名就是普通签名,常用的签名方法有很多,包括RSA数字签名,DSS数字签名,ElGamal数字签名,ECDSA数字签名
eg:
ECDSA签名对数据helloworld进行签名,上链之前需要先进行验证,验证通过之后才能上链。
基本过程
入群:群成员在入群之前候会给群管理进行申请入群,通过后,申请人会和群管理员达成交互式协议,该协议可生成群成员的私钥。群管理员队该密钥进行签名,并颁发给申请人,完成入群。群成员群管理员将群公钥对外开放。
签名:群成员通过自己的群密钥和群公钥对消息进行签名,获取群签名。
验证:通过输入群公钥和群签名用公开的某种验证方法进行验证,返回值只有真假,验证者无法计算得到签名者是群公钥里的具体成员,只知道该签名属于群公钥里面,可以代表群体。
追踪:群管理员可以通过群签名得到具体是哪个群成员进行去拿命的。
群签名是一个中心化的签名结构,该结构的算法都是群管理员定的,造成签名者的隐私没有左到真正的保证。
可以认为是不可追踪的群签名,实际的操作过程都是自己完成的,没有群管理员。
签名者是某个群体的成员,他把其他群体的公钥拿来并加上自己的公钥组成一个群公钥,然后用自己的私钥和群公钥要发布的信息进行环签名。接收者接受到群公钥、签名、和信息,然后对签名进行验证,如果签名来自群公钥,那么验证成功,否则消息不合法。
群公钥中的签名者的公钥只是迷惑作用,并不对数据进行任何操作。
形成的签名因为是每个其他群公钥产生的数据和自己用私钥产生的数据组成的环,自己的数据隐藏环中,攻击者很难找到签名者的公钥,所以签名者的隐私很好的被保护起来了。
盲签名允许使用者获得一个消息的签名,而签名者即不知道该消息的内容,也不知道该消息的签名。
盲签名可用于需要提供匿名性的密码协议中,如电子投票和电子现金。
基本组成:
实质上是一种涉及两方或更多方的协议,即两方或更多方完成一项任务所需要采取的一系列步骤。证明者向验证者证明并使其相信自己知道或拥有某一消息,当证明过程不能向验证者泄露任何关于被证明消息的信息。
简单理解,就是证明者能够在不向验证者提供任何有用信息的情况下,让验证者相信你。