https://laisky.notion.site/RSA-signature-and-encryption-schemes-RSA-PSS-and-RSA-OAEP-2e30614aa227404bb393dc2ec42ed034?pvs=4
基于 RSA 的签名和加密算法,RSASSA-PKCS-v15、RSASSA-PSS、RSAES-PKCS-v15、RSAES-OAEP,做了个简短的笔记。 #crypto
注:昨天走神,图里给写反了😓
基于 RSA 的签名和加密算法,RSASSA-PKCS-v15、RSASSA-PSS、RSAES-PKCS-v15、RSAES-OAEP,做了个简短的笔记。 #crypto
注:昨天走神,图里给写反了😓
花了两天时间总算看懂了 KZG 证明😢。
如果你熟悉 Merkel-tree 的话,那么可以很容易理解,KZG 的功能完全一致,试图利用一个很小的承诺(Commitment)保证一大堆数据的完整性。在 Merkel-tree 中,Commitment 就是它的树根(Root)。
KZG 的优点在于,当你需要验证消息的完整性,比如某个点确实存在于这个数据集之中时,它所需的计算是常量级,而 Merkel-tree 需要提供所有相关路径的 HASH 值,计算复杂度为
具体的证明过程就不在这里细说了,详见笔记 https://laisky.notion.site/Kate-Zaverucha-Goldberg-KZG-Constant-Sized-Polynomial-Commitments-Alin-Tomescu-30c1406d97fa4ecaa5190827d65faa9b?pvs=4
#blockchain #crypto
如果你熟悉 Merkel-tree 的话,那么可以很容易理解,KZG 的功能完全一致,试图利用一个很小的承诺(Commitment)保证一大堆数据的完整性。在 Merkel-tree 中,Commitment 就是它的树根(Root)。
KZG 的优点在于,当你需要验证消息的完整性,比如某个点确实存在于这个数据集之中时,它所需的计算是常量级,而 Merkel-tree 需要提供所有相关路径的 HASH 值,计算复杂度为
O(logN)
。所以在数据量较大时,KZG 会更有优势。具体的证明过程就不在这里细说了,详见笔记 https://laisky.notion.site/Kate-Zaverucha-Goldberg-KZG-Constant-Sized-Polynomial-Commitments-Alin-Tomescu-30c1406d97fa4ecaa5190827d65faa9b?pvs=4
#blockchain #crypto
前文介绍了 ECC 和 ECDH。本来想接着写一篇 ECDSA 和 Schnorr Signature 的笔记的,但是内容有点长,干脆写了篇博客,介绍 ECC、ECDH、ECDSA、Schnorr、MuSig。
首先,绘制一个扭曲的曲线。然后在这个曲线上定义一种名为加法的运算:
1. P 点和 Q 点相加: 绘制直线 PQ,得到和曲线的第三交点为 R,R 的 x 轴镜像点为结果。
2. P 点自己和自己相加: 绘制 P 点的切线,得到和曲线的交点 R,其镜像点为结果。
3. 定义零值为 y 轴的无穷远处,和零相加等于画一条垂直线。
如上我们定义了运算规则,接下来就是从曲线的点中选取一些点构成一个循环群。群就是一组满足相同规律的数的集合。循环群(cycle group)中存在一些本原元(primitive element),这些原元通过不断累加,可以遍历整个群。
形象地说,你找到一个本原元点(primitive element),然后不断地累加这个点,利用前文我们所介绍的加法运算,你其实就是在曲线上不断地跳跃,并最终会跳回起点。
ECC 加密算法中,就是构建这么一个曲线,它的循环群内的成员数量达到 2^100 次方,我们认为这个量级的数是无法靠暴力遍历破解的。这个曲线的每一个值是根据一个大素数的模的方程构建的,成员数量约等于这个素数的位数,一个 160-bits 的素数可以构建一个包含 2^160 个点的群。
然后给出这么一个公式
dP = T
。P 是一个 primitive element,它累加 d 次后会得到 T 点。P、T 是公钥,d 是私钥。这也是为什么 ECC 的私钥可以很短。也就是说,我公开展示最终的 T 点,但是不告诉你我跳跃了多少次。你是难以通过暴力遍历去求解 d 的。这个
dP = T
就是构建了一个离散对数问题(DLP),计算 dP 很简单,但是逆运算求算 d 很复杂,需要暴力搜索 2^100 的空间。既然利用 ECC 构建了 DLP,那么就可以利用 ECC 替换传统 DLP 问题,比如 Diffie-Hellman 密钥交换算法,现在可以重构为基于 ECC 的 ECDH 算法。
Alice 和 Bob 都确认一个曲线和一个 primitive element P。然后双方各自生成一个 d,然后交换计算结果 dP。拿到对方的 dP 后再乘上自己的 d,就会得到一个相同的 T。窃听者能拿到曲线、P、d_alice*P 和 d_bob*P,但是他无法逆向求解 d_alice 和 d_bob,所以无法破解最终的 T。
PS: 所有的 DHKX 算法,都难以防御中间人攻击(MITM attack),即攻击者可以篡改通信,同时和双方握手。解决办法是引入数字证书,对对方的公钥进行签名。
PS: 安全的椭圆曲线是很难绘制的,一般参考 NIST 的推荐。 #crypto
next: https://t.me/laiskynotes/173
https://laisky.notion.site/Anonymous-Credential-Part-2-Selective-Disclosure-and-CL-Signature-4e88462949764a579222d810c614842a
想象这么一个场景,政府给你签发了身份证,政府为这个证件背书上面的信息都是真实有效的。
然后你为了上某 X 网站,需要证明你已经年满 18 岁。于是你把身份证信息加密后上传给网站,然后选择只披露其中的姓名和年龄属性。网站通过签名验证这个身份信息确实是由政府颁发的,其中的信息真实可靠,而且证件上的年龄显示你已经年满 18 岁,而证件上的其他信息都对网站不可见。
在上述流程中,政府(issuer)为你(holder)签发了信息,你选择将部分信息披露给网站(verifier)。这就是 Anonymous Credential(Anoncred)或称为 Attribute-based Credential(ABC)。
这一算法的特点包括:
1. issuer 可以使用一对公私钥,签发 K 组信息。
2. holder 可以选择性地披露 N 组信息(N<=K)。
3. verifier 可以通过 issuer 的公钥验证 holder 所披露的信息的有效性。
穿插提一下密码学中的 Commitment Schema。Alice 可以对一个未披露的 Message 声明 Commitment,Bob 可以保留这一 Commitment,直到 Alice 披露 Message 后,Bob 可以验证这一 Message 是否与 Commitment 一致。结合前面所提的 ABC,其实就是一个 Commitment Schema,Issuer 为 Holder 的信息背书(statement signature),Verifier 需要 Holder 披露信息后才能验证真实性。
最简单的实现就是基于 RSA 的 CL Signature,更多细节可点击查看: https://telegra.ph/CL-Signature-02-26-2 #crypto
next:
- ECC & ECDSA & ECDH
- AC & ZKP
想象这么一个场景,政府给你签发了身份证,政府为这个证件背书上面的信息都是真实有效的。
然后你为了上某 X 网站,需要证明你已经年满 18 岁。于是你把身份证信息加密后上传给网站,然后选择只披露其中的姓名和年龄属性。网站通过签名验证这个身份信息确实是由政府颁发的,其中的信息真实可靠,而且证件上的年龄显示你已经年满 18 岁,而证件上的其他信息都对网站不可见。
在上述流程中,政府(issuer)为你(holder)签发了信息,你选择将部分信息披露给网站(verifier)。这就是 Anonymous Credential(Anoncred)或称为 Attribute-based Credential(ABC)。
这一算法的特点包括:
1. issuer 可以使用一对公私钥,签发 K 组信息。
2. holder 可以选择性地披露 N 组信息(N<=K)。
3. verifier 可以通过 issuer 的公钥验证 holder 所披露的信息的有效性。
穿插提一下密码学中的 Commitment Schema。Alice 可以对一个未披露的 Message 声明 Commitment,Bob 可以保留这一 Commitment,直到 Alice 披露 Message 后,Bob 可以验证这一 Message 是否与 Commitment 一致。结合前面所提的 ABC,其实就是一个 Commitment Schema,Issuer 为 Holder 的信息背书(statement signature),Verifier 需要 Holder 披露信息后才能验证真实性。
最简单的实现就是基于 RSA 的 CL Signature,更多细节可点击查看: https://telegra.ph/CL-Signature-02-26-2 #crypto
next:
- ECC & ECDSA & ECDH
- AC & ZKP
https://t.me/laiskynotes/64 ),就是需要客户端存储太多数量的 resident keys,这对于如 Yubikey 这样的 security keys 设备非常不友好,因为消费级 security keys 往往只有 10~20 个 private key slots。
https://laisky.notion.site/HD-Wallets-Explained-From-High-Level-to-Nuts-and-Bolts-44d109ed89e04bb79f993234f185848e?pvs=4
最近学习了 Hierarchical Deterministic Keys 结构。HD Keys 本质上是一种面向非对称密钥的 KDF(key derivation function)。它可以从一个 root private key 为根节点,通过添加一些 key material 生成新的 child key。
KDF 是一个确定性(deterministic)的函数,也就是相同的输出,始终能得出一样的结果。这一概念对于熟悉 KMS 的人而言并不陌生,其实所有的 KMS 都是只存储 master key 的。HD Keys 的主要特点就是支持了非对称密钥。
那么我们是否可以把 HD 和 passkey 结合起来,让用户只需要存储一个(或多个,增强安全性)root key,然后服务端存储 key derivation materials,这样用户依然可以做到不同网站使用不同的 child key,而同时又不需要存储大量的 resident keys?
#crypto
此前讨论过 passkey 的一个缺陷( https://laisky.notion.site/HD-Wallets-Explained-From-High-Level-to-Nuts-and-Bolts-44d109ed89e04bb79f993234f185848e?pvs=4
最近学习了 Hierarchical Deterministic Keys 结构。HD Keys 本质上是一种面向非对称密钥的 KDF(key derivation function)。它可以从一个 root private key 为根节点,通过添加一些 key material 生成新的 child key。
KDF 是一个确定性(deterministic)的函数,也就是相同的输出,始终能得出一样的结果。这一概念对于熟悉 KMS 的人而言并不陌生,其实所有的 KMS 都是只存储 master key 的。HD Keys 的主要特点就是支持了非对称密钥。
那么我们是否可以把 HD 和 passkey 结合起来,让用户只需要存储一个(或多个,增强安全性)root key,然后服务端存储 key derivation materials,这样用户依然可以做到不同网站使用不同的 child key,而同时又不需要存储大量的 resident keys?
#crypto