crypto
文章平均质量分 53
小湿哥
这个作者很懒,什么都没留下…
展开
-
Go实现ECDH密钥交换-X25519
ECDH, X25519算法,实现一次RTT密钥交换。 Go语言1.20版本原创 2023-11-23 16:43:24 · 686 阅读 · 0 评论 -
Wireguard握手交互代码分析
Wireguard握手交互代码分析消息结构握手请求消息struct message_handshake_initiation { struct message_header header; // header里只有一个type, 发起0x01 __le32 sender_index; // Sender的标识,自定义。 u8 unencrypted_ephemeral[NOISE_PUBLIC_KEY_LEN]; // 本地临时公钥 // AEA.原创 2021-11-17 17:59:06 · 2919 阅读 · 0 评论 -
DID分布式数字身份简化模型
术语说明分布式身份标识符: Distributed Identity,DID,具备去中心化可验证,自主管理,全球唯一的特性;内部最核心内容为公钥+身份信息可验证凭证:Verifiable Credentials, VC,主要为声明的集合声明:claims,包含凭证颁发者为DID身份赋予的其他属性值和颁发者的签名可验证表达: Verifiable Presentation, VP, 主要包含可验证凭证VC和持有者的签名身份说明持有者: Holder, 自主生产DID,向注册机构上传DID,向颁发原创 2021-10-12 15:36:25 · 11721 阅读 · 0 评论 -
VRF proof极简理解
VRF proof术语说明SK: 私钥PK: 公钥M:输入值R:哈希输出P:证明函数证明人根据输入M和私钥计算出唯一的哈希值RR = VRF_Hash(SK, M)证明人根据输入M和私钥计算出唯一的证明PP = VRF_Proof(SK, M)验证者将证明转换成哈希值R = VRF_P2H ( P )即 VRF_Hash(SK, M) == VRF_P2H(VRF_Proof(SK, M))验证者校验True/False = VRF_verify(PK, M, P)特性原创 2021-10-12 11:45:44 · 400 阅读 · 0 评论 -
SM9原理极简介绍
KGCKey Generate Center可信机构产生主私钥和主公钥: Master Priv Key 、Master Pub Key产生用户私钥: Master Priv Key与用户Identity(如电话号码)计算生成用户私钥User Priv Key。签名方法签名(User Priv Key 和 Master Pub Key)一起加密生成数字签名。验证签名(User Identity 和 Master Pub Key)一起验证数字签名。需要可信机构KGC的存在,并生成与用户Ide原创 2021-10-12 11:34:11 · 6810 阅读 · 0 评论 -
Openssl中chacha20-poly1305的使用
原理简述chacha20-poly1305 是带有关联数据的认证加密(AEAD)AEAD是一种能够同时保证数据的保密性、 完整性和真实性的一种加密模式。通常使用除了明文以外,会把包头的地址和端口等信息放进去一起做完整性校验。chacha20 是流加密算法。poly1305 是完整性校验是算法,即根据输入(加密数据和关联数据)输出16字节的认证标签。使用方法加密输入项:输入项长度(Bytes)说明key32共享秘钥iv12干扰项,每次不同AADN关原创 2021-01-28 16:16:05 · 5994 阅读 · 1 评论 -
Openssl中椭圆曲线secp256k1的使用
引言最近基于openssl学习非对称加密,内部复杂的算法对本人来说也相当于盲盒,但是只要弄清楚它们的性质,就可以使用它们了。本文主要记录基于openssl如何使用secp256k1算法。secp256k1概述secp256k1就是方程: y2y^{2}y2= x3x^3x3 + 7 的一条曲线有一个基点G = 04 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798 483ADA77 26A3C465 5D原创 2021-01-22 14:44:48 · 5066 阅读 · 0 评论 -
openssl生成椭圆曲线的私钥是如何做到每次不同的?
生成一个私钥只需要3步1. 获得指定曲线的group (如比特币的secp256k1)2. group和key绑定3. 用key来生成私钥先上一段代码例子 key1=EC_KEY_new(); if(key1==NULL) { printf("EC_KEY_new err!\n"); return -1; } key2=EC_KEY_new(); if(key2==NULL) { p原创 2021-01-13 10:40:56 · 990 阅读 · 0 评论