![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
密码学系列
文章平均质量分 73
搬砖魁首
区块链从入门到宁静
展开
-
联盟链系列 - RootCA颁发证书
介绍X509证书使用的密钥算法, 并使用openssl生成原创 2022-12-26 10:03:12 · 1907 阅读 · 1 评论 -
密码学系列 - HTTPS
https是在 传输阶段进行加密的,但你本机用抓包软件抓 是在你数据还没进到网卡传送数据之前直接就已经被截获了,所以说 你自己抓自己的就可以 但你要抓别人的 就不可以,这是常识。https是http的SSL版本,http本身是明文传输的,https请求内容进行了加密,本身还是可以被抓包的。可以把这个证书添加到系统证书里面,这样浏览器等便能信任,或者直接使用 mkcert 工具一步到位。原创 2022-12-16 23:35:11 · 359 阅读 · 1 评论 -
密码学系列 - 棱镜门
prime256v1 (即 secp256r1)NSA对SECP256r1曲线安置了后门陷阱, 被美国情报人员破解可能性非常大2013年发生了震惊世界的棱镜门事件。这一年,前中情局(CIA)职员爱德华·斯诺登将两份绝密资料交给英国《卫报》和美国《华盛顿邮报》,世界舆论随之哗然,从此拉开棱镜门的帷幕。棱镜计划(PRISM),代号“US-984XN”,是一项由美国国家安全局(NSA)和联邦调查局(FBI)自2007年小布什时期起开始实施的绝密电子监听计划,包括微软、雅虎、谷歌、苹果等在内的9家国际网络.原创 2022-04-23 23:32:24 · 3283 阅读 · 4 评论 -
密码学系列 - 椭圆曲线签名的基本原理
ECDSA 涉及到三个重要的概念第一个是私钥,私钥是一个只有我自己知道的数字,我可以用私钥去生成签名,比特币使用的私钥是一个256 bit 的整数。第二个是公钥,公钥是跟私钥配对的一个数,是根据私钥运算得出的,我会把公钥公布给所有人,目的是让大家去验证我的签名。比特币的公钥有65个字节,包括一个前缀加上两个256 bit 的整数,这两个整数就对应椭圆曲线上的一个点的 x 值和 y 值。第三个是签名,签名就是一个证明我的确执行了签署操作的数字。签名主要由两项内容运算得出,一项是被签署数据的哈希,另外一项原创 2021-11-22 21:08:28 · 3888 阅读 · 1 评论 -
密码学系列 - DER编码
DER(Distinguished Encoding Rules,可辨别编码规则)DER 广泛用于X.509等数字证书。PEM文件 是Base64编码的DER证书ASN.1编码格式:基本编码规则(BER)规范编码规则(CER)可分辨编码规则(DER)BER 编码基本编码规则的格式指定了用于编码 ASN.1 数据结构的自描述和自定界格式。每个数据元素都被编码为类型标识符、长度描述、实际数据元素以及必要时的内容结束标记。这些类型的编码通常称为类型-长度-值(TLV) 编码。这种格式允许接收.原创 2021-11-08 14:07:17 · 5957 阅读 · 1 评论 -
密码学系列 - 国密SM2为什么不支持恢复公钥
情况国密SM2目前不能通过签名和消息摘要恢复出公钥, 故不太适合将以太坊, EOS之类的公链代码底层密码库替换成国密库, 因为它们的椭圆曲线验签采用的都是recover模式, 而非verify模式.verify模式: 输入签名, 消息摘要, 公钥; 输出是否是该公钥对应的私钥做的签名recover模式: 输入签名,消息摘要, recoverid; 输出签名时使用的私钥对应的公钥原因在secp256k1我们可以根据签名{r,s}和消息恢复公钥,但是SM2却不能通过签名和消息恢复公钥,因为在SM2原创 2021-10-25 14:27:50 · 1381 阅读 · 1 评论 -
密码学系列 - 国密算法SM1/SSF33
国密分组密码SM1分组密码和SSF33分组密码均为国密分组密码标标准,SM1和SSF33的密钥长度和分组长度均为128比特。目前这两个分组密码标准的算法尚未公开,其实现仅可以通过硬件芯片的方式获得,目前很多国产密码设备均包含这两个分组密码的硬件实现,由国家密码管理局制定的《智能IC卡及智能密码钥匙密码应用接口规范》中包含了对SM1分组密码的ECB、CBC、CFB、OFB加密模式和CBC-MAC的算法定义。在调用SM1或SSF33的功能时,需要接入支持相应算法的硬件密码设备。软件需要按照《智能IC卡及智原创 2021-10-18 15:52:42 · 3916 阅读 · 1 评论 -
联盟链系列 - 用Openssl颁发X.509证书
交互式 生成 X.509证书(1)Root CA生成CA的私钥openssl genrsa -out ca/ca-prikey.pem 2048生成CA的公钥openssl rsa -in ca/ca-prikey.pem -pubout -out ca/ca-pubkey.pem生成CA的根证书# 创建证书请求 openssl req -new -out ca/ca-req.csr -key ca/ca-prikey.pem # 证书内容可选填 (其它 一路回车原创 2021-09-14 09:51:36 · 2473 阅读 · 1 评论 -
区块链知识系列 - DAG
什么是DAG,及它的起源DAG(Directed Acyclic Map),即有向无环图.有向:所有数据顺着同一方向存储无环:数据结构间不构成循环enter image description hereDAG的出现是为解决区块链的效率 确定性 中心化 能耗等问题.区块链是链式存储结构,无法并发出块.类似于单核单线程CPU.区块DAG中没有区块,交易发起后直接跳过打包区块阶段,异步并发融入全网.类似于多核多线程CPU.行业介绍 - 各DAG链的特点行业背景IOTAIOTA上的交易是原创 2020-11-05 12:02:41 · 2068 阅读 · 1 评论 -
密码学系列 - 椭圆曲线 - BLS12-381
BLS12-381(一种Zcash中所使用的新型zk-SNARK椭圆曲线加密算法,隶属于Bellman库,由Rust语言所实现,它的特点是小巧易用,能快速验证),同时兼备加密时延和快速可验证两个特性。可缩小算术电路的大小,降低密钥的大小,以及简化协议应用场景Zcash降低 zk-SNARK 电路的大小将会有更明显的效果。基于 BLS12-381 曲线结构构建了大量的加密原语,这有助于缩小算术电路的大小,降低 Zcash 地址的大小,以及简化协议。Filecoin可验证时延加密算法(VDF)。目前这原创 2021-04-14 11:02:02 · 2836 阅读 · 7 评论 -
Fabric系列 - 国密扩展方法
国密算法的相关知识请看:密码学系列 - 国密算法在Fabric上扩展国密方法一种是基于Fabric本身扩展国密包这种改法不用对Golang标准库做任何地改动,所有的修改都在Fabric项目源码上进行其一,把国密的库进行移植,封装gm-crypto;其二,扩展Fabric现有的bccsp模块;其三,修改x509证书相关的地方。Fabric-CA主要是为了实现对加入联盟链的成员的身份控制以及数据生成保管。Fabric-CA中:Lib,主要是接口的实现,主要在解析申请证书请求以及签发证书.原创 2021-03-16 21:12:43 · 2995 阅读 · 6 评论 -
密码学系列 - 国密算法
国密即国家密码局认定的国产密码算法。主要有SM1,SM2,SM3,SM4,SM9。密钥长度和分组长度均为128位。国密算法种类SM1 为对称加密。其加密强度与AES相当。该算法不公开,调用该算法时,需要通过加密芯片的接口进行调用。采用该算法已经研制了系列芯片、智能IC卡、智能密码钥匙、加密卡、加密机等安全产品,广泛应用于电子政务、电子商务及国民经济的各个应用领域(包括国家政务通、警务通等重要领域)。该算法不公开SM2:为非对称加密,基于椭圆曲线密码(ECC)的公钥密码算法标准,提供数字签名原创 2021-03-10 09:43:03 · 6381 阅读 · 5 评论 -
密码学系列 - 双线性对
双线性对是一种二元映射,它作为密码学算法的构造工具,在各区块链平台中广泛应用,比如零知识证明、聚合签名等技术方案大多基于双线性对构造得来。线性映射一个函数f是线性的是指函数f满足可加性和齐次性,也就是:可加性:f(a)+f(b)=f(a+b)齐次性:f(ka)=kf(a)双线性映射和线性函数不同的点在于满足双线性的函数有两个输入,而且对这两个输入分别满足线性。一个映射e,能将G₁和G₂中的两个元素映射为G₃中的一个元素,并且该映射满足双线性。设g₁, g₂分别是群G₁和G₂的元素,????是原创 2021-02-02 10:55:30 · 17037 阅读 · 5 评论 -
BTC系列 - UTXO事务模型
Bitcoin 采用了 UTXO 模型作为其底层存储的数据结构,其全称为 Unspent Transaction output,也就是未被使用的事务输出。原创 2021-01-13 10:45:24 · 2628 阅读 · 9 评论 -
IPFS系列 - 默克有向无环图(Merkle DAG)
Merkle DAG的全称是Merkle Directed Acyclic Graph(默克有向无环图)。它是在Merkle Tree的基础上构建的,Merkle Tree由美国计算机学家Merkle于1979年申请了专利。Merkle DAG跟 Merkle TreeMerkle DAG跟Merkle Tree很相似,但不完全一样,Merkle DAG不需要进行树的平衡操作,非叶子节点允许包含数据等。ipfs add命令将从指定的文件中的数据中创建Merkle DAG。遵循unixfs数据格式(pro原创 2020-12-10 15:14:48 · 1896 阅读 · 1 评论 -
区块链知识系列 - DAG的应用场景
IOTA有什么好处?IOTA是一种开源技术,可以简化,保护和自动化在不同设备之间发送数据或传输价值的任何流程。是什么让IOTA令牌变得有价值?它是有限的:所有节点都同意网络中存在最多2,779,530,283 277,761个令牌。此最大数量内置于网络中,无法更改。它很有用:要在IOTA网络中传输值,您必须使用IOTA令牌。安全IOTA使用量子抗性密码术来保护网络并防止攻击者窃取IOTA令牌。IOTA网络是点对点网络。没有中央权限控制事务的分类帐,而是所有节点都持有副本并通过IOTA协议原创 2020-11-26 01:59:27 · 1097 阅读 · 1 评论 -
密码学系列 - 零知识证明(ZKP) - zkSTARKs
概要ZK-STARK(零知识的可伸缩性透明知识论证)是一种密码证明技术,使用户可以与第三方共享经过验证的数据或执行计算,而无需将数据或计算透露给第三方。以公开可验证的方式提供零知识证明。用更简单的术语来说,零知识证明可以证明某件事是正确的,而不必透露它的确切证据。例如,ZK-STARK允许Alice使用零知识密码证明来验证Bob的银行信息,而不是向Alice透露机密信息。在创建ZK-STARK之前,ZK-SNARK用于创建ZK证明系统,但要求一个或多个受信任方初始设置ZK证明系统,这会引入那些受信任方的原创 2020-10-30 09:42:21 · 3618 阅读 · 11 评论 -
Fabric系列 - Fabric中的PKI
Fabric CA在整个证书管理环节中处于十分核心的位置。在生产环境中部署时,必须从多个方面进行考虑,以充分确保安全性、可靠性、规范性等指标。1. 根证书的生成根证书目前可以通过从权威机构(包括GolbalSign、VeriSign)申请,或采用自行签名的方式生成。技术上来讲,两者都可以完成部署过程,并且都能保证同样的安全。但不同场景下两者各有利弊,总结如下表所示权威机构颁发与自行签名比较因此,如果应用场景不仅包括私有网络,而且需要可靠的证书机制,推荐采用权威机构颁发的根证书;如果仅面向私有网络场原创 2020-09-07 23:26:33 · 844 阅读 · 4 评论 -
联盟链系列 - 证书 - 公钥基础结构(PKI)
PKI公钥基础结构(PKI)是用于创建,存储和分发数字证书的系统,这些证书用于验证特定公钥是否属于某个实体。PKI创建将公共密钥映射到实体的数字证书,将这些证书安全地存储在中央存储库中,并在需要时将其吊销。一个 public key infrastructure(PKI)是一组角色,策略,硬件,软件和创建,管理,分发所需的程序,使用,储存和吊销数字证书和管理公共密钥加密。PKI至少包括如下核心组件:CA(Certification Authority):负责证书的颁发和作废,接收来自RA的请求,是原创 2020-08-10 11:30:17 · 1817 阅读 · 1 评论 -
密码学系列 - 可验证时延加密算法(VDF)
可验证时延加密函数(Verifiable Time-Delay Encoding Function): VDF有两大要求,即时间要求(加密时间长,而解密时间短)和可验证要求(证明与验证过程高效)。目前,设计使用的VDF算法是学术界研究的热点。两种解决方案❑ 迭代SNARK哈希链,迭代过程实现时延特性,zk-SNARK本身满足可验证特性。目前已小范围被应用。❑ 模的平方根方法,这也是一种常见的可验证加密方法。缺点是,生成证明的时间最好的情况和最坏的情况差一个数量级,因此很难控制加密时间。现阶段可验证原创 2020-08-05 00:27:14 · 4123 阅读 · 1 评论 -
密码学系列 - 零知识证明(ZKP) - 智能合约
智能合约实现匿名交易原创 2020-07-14 20:36:47 · 2710 阅读 · 1 评论 -
密码学系列 - 椭圆曲线 ECDSA - 确定性签名
随机性在签名中的重要性签名生成算法使用随机密钥k作为短暂私钥/公钥对的基础。k的值并不重要,只要它是随机的。如果使用相同的值k在不同的消息(交易)上生成两个签名,那么任何人都可以计算出签名私钥。在签名算法中重用相同的k值的会导致私钥的暴露!如果在两个不同的交易中,在签名算法中使用相同的值k,则私钥可以被计算并暴露给世界!这不仅仅是一个理论上的可能性。我们已经看到比特币中几种不同实现的交易签名算法因为这个问题导致私人密钥暴露。人们由于无意中重复使用k值而导致资金被窃取。重用k值的最常见原因是随机数生成器原创 2020-06-15 14:12:38 · 1800 阅读 · 1 评论 -
密码学系列 - 环签名 - 应用场景
(1) 群签名场景场景1( ToC ):拍卖、匿名存证等场景机构内成员(C端用户)或机构内下属机构通过机构将群签名信息上链,其他人在链上验证签名时,仅可获知签名所属的群组,却无法获取签名者身份,保证成员的匿名性和签名的不可篡改性;场景2(ToB):竞标、对账、匿名征信等场景B端用户将生成的群签名通过AMOP发送给上链机构(如agency),上链机构将收集到的群签名信息统一上链,其他人验证签...原创 2020-04-27 00:26:09 · 3081 阅读 · 1 评论 -
密码学系列 - 默克尔路径
默克尔树 (merkle tree)默克尔树,也称为哈希二叉树,是一种用于有效地汇总和验证大型数据集完整性的数据结构。默克尔路径可用于证明在一个很大字节数的区块中上千笔交易中的具体某一笔交易的存在.为了证明一个块中包含了一个特定的交易,一个节点只要计算log2(N)32字节的哈希值,形成一条从特定交易到树根的认证路径或者默克尔路径。该路径有4个哈希值 HL、HIJ、HMNOP和HAB...原创 2020-04-14 00:48:55 · 2329 阅读 · 1 评论 -
密码学系列 - 椭圆曲线 ECDSA - 为什么EOSIO与EOSJS的签名结果不一样
EOSIOIn eos the initial value of nonce is 1static int extended_nonce_function( unsigned char *nonce32, const unsigned char *msg32, const unsigned char *key32,...原创 2020-03-30 17:00:02 · 947 阅读 · 1 评论 -
密码学系列 - 零知识证明(ZKP) - Bulletproofs
密码学 - 零知识证明(ZKP) - Bulletproofs零知识证明零知识证明的理论基础:椭圆曲线,大数计算,群论,同态加密,配对函数,零知识证明的各种算法(zkSNARK,zkSTARK,BulletProof等等)。零知识证明的理论可以追溯到1985年。目前有两个方向的应用:隐私和数据压缩。Zcash就是利用零知识证明实现交易隐私,交易的双方信息以及交易金额只有交易双方可知。Loopr...原创 2019-11-08 15:01:05 · 3591 阅读 · 5 评论 -
密码学系列 - 零知识证明(ZKP) - zkSNARKs
零知识证明 - ZKP算法属性可表示为: zk-SNARKs (简洁的非交互式零知识证明)Zero-KnowledgeSuccinctNon-interactiveARgument of Knowledge关键词见证人: 执行电路时产生的中间信号 - witness零知识证明证明您知道一组匹配所有约束的信号(见证),而不会泄露除公共输入和输出之外的任何信号。生成 provi...原创 2019-08-19 00:13:52 · 2861 阅读 · 1 评论 -
密码学系列 - 零知识证明与匿名交易的结合
ZKP 与 匿名交易的结合同态加密: 实现密文的四则运算椭圆曲线: 用计算机实现同态加密中的 加法 与 乘法 运算,且不可逆MPC(多方计算): Zcash的预处理阶段要证明的公式: 证明等式两边的关系 , 推测Zcash要证明的一点就是 vin = vout + fee匿名地址到匿名地址间的交易透明地址到匿名地址间的交易怎么证明交易发起者对vin有操作权?这是Alessand...原创 2019-10-15 19:23:43 · 735 阅读 · 1 评论 -
密码学系列 - 环签名 - Ring Signature
环签名零知识证明解决的问题是,我有一个秘密,我需要向你证明我知道这个秘密,但是我又不能让你知道这个秘密。而环签名解决的问题是,我对你说了一句话,但是你只知道是某一群人中有人对你说了这句话,而不知道这群人里具体哪个人说的。与环签名相比,零知识证明依然是最佳的匿名方案之一。只是在某些场景下,如果对隐私的要求没有那么高,同时签名方的计算能力又很弱,环签名不失为一个不错的选择。Cryptonote[...原创 2019-09-29 14:31:59 · 3294 阅读 · 1 评论 -
密码学系列 - 安全多方计算(MPC)
介绍安全多方计算(Secure Muti-party Computation,简称 MPC,亦可简称 SMC 或 SMPC)由华裔计算机科学家、图领奖获得者姚期智教授于 1982 年提出,也就是为人熟知的百万富翁问题:两个争强好胜的富翁 Alice 和 Bob 在街头相遇,如何在不暴露各自财富的前提下比较出谁更富有?应用电子选举、门限签名以及电子拍卖等安全多方计算技术与区块链技术对比...原创 2020-02-12 11:00:29 · 3270 阅读 · 1 评论 -
密码学系列 - 椭圆曲线 ECDSA - 签名与验签
数字签名的生成数字签名的验证公钥恢复原创 2020-01-06 15:14:51 · 4743 阅读 · 5 评论 -
密码学系列 - 椭圆曲线 ECDSA - 私钥, 公钥 与 地址
私钥:私钥本质上是一个随机数,由32个byte组成的数组,1个byte等于8位二进制,一个二进制只有两个值0或者1公钥:公钥是由私钥生成的,通过椭圆曲线(ECPoint)生成,一个私钥经过椭圆曲线变换之后能够得到公钥,公钥是一个65个byte数组公钥的作用:对于私钥,公钥和地址来说,公钥作为私钥到地址的中间桥梁,他在交易的验证是最关键的:公钥生成地址,验证发送交易的地址是否和该公钥...原创 2019-10-28 15:09:33 · 4157 阅读 · 1 评论 -
密码学系列 - 私钥管理
私钥管理区块链钱包的实现技术原理用一句话概括:助记词生成了种子(Seed),种子(Seed)生成私钥,私钥推导出公钥,公钥节选部分成了钱包地址。同时钱包提供了keystore,可以配合正常的密码使用,便捷了用户的钱包使用。keyStore文件是为了方便用户记忆和使用私钥而设计的。keyStore文件的核心优势包括两点:1)提升用户体验:用户不需要输入复杂的私钥,只需要输入便于记忆的密码,和...原创 2019-10-05 11:16:29 · 1298 阅读 · 1 评论 -
密码学系列 - 椭圆曲线 ECC - ED25519
密码学 - 椭圆曲线椭圆曲线是一系列满足如下方程的点:y^2 = x^3 + ax + b并且4a^3 + 27b^2 != 0特性封闭性:因为椭圆曲线上的点相加,还是椭圆曲线上的点。结合律:P+(Q+R) = (P+Q)+R = 0单位元: 单位元是0, 即 P+0 = P逆元: 一个椭圆曲线上的点P的逆元,是相对x坐标的对称点交换律:P+Q = Q+P标量乘法n...原创 2020-03-02 22:24:21 · 10043 阅读 · 4 评论 -
密码学系列 - Base58编码
Base58Base58是用于Bitcoin中使用的一种独特的编码方式,主要用于产生Bitcoin的钱包地址。相比Base64,Base58不使用数字"0",字母大写"O",字母大写"I",和字母小写"l",以及"+“和”/"符号。设计Base58主要的目的是:避免混淆。在某些字体下,数字0和字母大写O,以及字母大写I和字母小写l会非常相似。不使用"+“和”/"的原因是非字母或数字的字符...原创 2020-01-21 10:09:14 · 2565 阅读 · 1 评论 -
密码学系列 - 哈希算法
哈希算法哈希算法将任意长度的二进制值映射为较短的固定长度的二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。如果散列一段明文而且哪怕只更改该段落的一个字母,随后的哈希都将产生不同的值。要找到散列为同一个值的两个不同的输入,在计算上是不可能的,所以数据的哈希值可以检验数据的完整性。一般用于快速查找和加密算法 —《数据结构与算法分析》加密货币中最常用的加密哈希...原创 2019-10-05 11:35:14 · 1310 阅读 · 5 评论