椭圆曲线

理解 BLS 签名算法

ぃ、小莉子 提交于 2019-12-11 17:34:03
理解 BLS 签名算法 来源 https://medium.com/cryptoadvance/bls-signatures-better-than-schnorr-5a7fe30ea716 原文标题:《干货:理解 BLS 签名算法》 作者:Stepan 翻译 & 校对:wuwei & 阿剑 之前的文章中,我介绍了 Schnorr 签名算法和它的优势。现在,我来介绍下 BLS (Boneh-Lynn-Shacham)签名算法以及它相比 Schnorr 的优胜之处。 长话短说,我们已经知道: ECDSA 签名算法已经足够胜任它的工作,但也仅限于此。它无法做签名聚合或者密钥聚合,因此只能挨个对签名进行验证。在验证多重签名的交易时,此举过于繁琐,我们需要逐个验证所有的签名及其对应的公钥,耗费大量的区块空间和交易费。 Schnorr 签名算法就好多了,它可以把一笔交易中的所有签名和公钥合并成单个签名和公钥,且合并过程不可见(无从追溯这个签名或公钥是否通过合并而来)。另外,可以一次性对合并后的签名做验证,加快了区块验证的速度。当然,该算法也有一些不足 : 多重签名需要多次(签名者之间的)通信,这对冷钱包来说过于麻烦; 聚合签名算法依赖随机数生成器,而不像 ECDSA 那样可以使用指定的随机点(R); m-n 多重签名机制比较取巧,需要构建公钥的默克尔树。当 m 和 n 较大时

枯燥高深的哈希函数分析

与世无争的帅哥 提交于 2019-12-04 23:53:22
今天看到一篇报道王小云的文章,描述了她是如何破解MD5和SHA-1这两大哈希函数的。 其中王小云提到自己做 哈希函数分析 10年,心里就是下定决心要做这方面的研究,自然而然也就获得了成功。 在我看来,密码学作为区块链技术的基础,是非常高深,同时也是非常枯燥的。各种各样的区块链上层应用让我觉得丰富多彩,但是唯独密码学这项底层技术如同一座大山一般令我无法翻越。要研究这些必须要能静下心来。 我曾和SimpleChain团队专门研究密码学的同学交流,从大佬那学到不少。 大佬表示,很多密码学的技术都是基于最基础的密码学知识,例如哈希算法、椭圆曲线等等。如果能过对其中一些关键的算法步骤手算推导,加深对基础的理解,很多复杂的技术就能很快吸收掌握。 所以,学习技术还是要从最基础的一步步开始啊。 来源: https://my.oschina.net/u/4090317/blog/3131245

浅谈密码学中数论基础

匆匆过客 提交于 2019-12-02 01:12:23
浅谈密码学中数论基础 1.模运算1765243235 模运算也可以称为取余运算,例如 23≡11(mod12),因此如果a=kn+b,也可以表示为a ≡ b(mod n),运算规则: (a+b) mod n = ((a mod n) + (b mod n))mod n (a*b) mod n = ((a mod n) * (b mod n)) mod n 完全剩余集合 1~n-1构成了自然数n的完全剩余集合,对于任意一个整数m%n都存在于1~n的集合中。 构造加法链 在加密算法中,运用到了大量的取模运算,对于一个k位数模n,所有的运算例如加减乘除中间结构将不会超过2k位,因此例如a x mod n将会大大简化计算时的复杂度。 例如a 8 mod n 在计算时可以这样计算 ((a 2 mod n) 2 mod n) 2 mod n 当指数x不是2的倍数时则需要构造加法链,例如25,25 = 16 + 8 +1 = 2 4 + 2 3 + 2 0 因此a 25 mod n = (a * a 8 * a 16 ) mod n = ((((a 2 * a) 2 ) 2 ) 2 *a)mod n C语言表示 unsigned long ss(unsigned long x , unsigned long y , unsigned long n) { unsigned long s,t,u;

浅谈密码学中数论基础

三世轮回 提交于 2019-11-30 06:40:38
1.模运算(mod) 模运算也可以称为取余运算,例如 23≡11(mod12),因此如果a=kn+b,也可以表示为a ≡ b(mod n),运算规则: (a+b) mod n = ((a mod n) + (b mod n))mod n (a*b) mod n = ((a mod n) * (b mod n)) mod n 完全剩余集合 1~n-1构成了自然数n的完全剩余集合,对于任意一个整数m%n都存在于1~n的集合中 。 构造加法链 在加密算法中,运用到了大量的取模运算,对于一个k位数模n,所有的运算例如加减乘除中间结构将不会超过2k位,因此例如a x mod n将会大大简化计算时的复杂度。 例如a 8 mod n 在计算时可以这样计算 ((a 2 mod n) 2 mod n) 2 mod n 当指数x不是2的倍数时则需要构造加法链,例如25,25 = 16 + 8 +1 = 2 4 + 2 3 + 2 0 因此a 25 mod n = (a * a 8 * a 16 ) mod n = ((((a 2 * a) 2 ) 2 ) 2 *a)mod n C语言表示 unsigned long ss(unsigned long x , unsigned long y , unsigned long n) { unsigned long s,t,u; int i ; s = 1;

浅析椭圆曲线加密算法(ECC)

﹥>﹥吖頭↗ 提交于 2019-11-29 16:47:57
本文首发于先知社区,原文链接: https://xz.aliyun.com/t/6295 数学基础 黎曼几何中的“平行线” 欧几里得《几何原本》中提出五条公设: 过相异两点,能作且只能作一直线。 有限直线可以任意地延长。 以任一点为圆心、任意长为半径,可作一圆。 凡直角都相等。 两直线被第三条直线所截,如果同侧两内角和小于两个直角, 则两直线作会在该侧相交(平行公设)。 《几何原本》中只有第29条命题, 一条直线与两条平行直线相交,则所成的内错角相等,同位角相等,且同旁内角之和等于两直角 才用到了第五公设,其他命题并没有使用到,因此一些数学家提出疑问:第五公设能否不作为公设,而作为一条定理?能否靠前四条公设证明之?因此出现了长期的关于“平行线理论”的讨论。欧氏几何讲“过直线外一点有且只有一条直线与已知直线平行”,后面就有个罗氏几何(罗巴切夫斯基)讲“过直线外一点至少存在两条直线和已知直线平行”,那么是否有“过直线外一点,不能做直线和已知直线平行?”,黎曼几何就回答了这个问题。 黎曼几何中不承认平行线的存在,即在同一平面内任何两条直线都有公共点(交点)。另一条公设讲:直线可以无限延长,但总的长度是有限的。 黎曼几何也被称为椭圆几何。椭圆曲线就是基于黎曼几何的“平行线理论”。 定义平行线相较于无穷远点P∞,使平面上所有直线都有唯一的交点。 无穷远点的性质: 一条直线只有一个无穷远点。

了解一下密钥交换算法ECDH

一世执手 提交于 2019-11-27 13:35:41
搬一下别人的解释: 下面我们以Alice和Bob为例叙述Diffie-Hellman密钥交换的原理。 1,Diffie-Hellman交换过程中涉及到的所有参与者定义一个组,在这个组中定义一个大质数p,底数g。 2,Diffie-Hellman密钥交换是一个两部分的过程,Alice和Bob都需要一个私有的数字a,b。 下面是DH交换的过程图: 本图片来自wiki 下面我们进行一个实例 1.爱丽丝与鲍伯协定使用p=23以及g=5. 2.爱丽丝选择一个秘密整数a=6, 计算A = g^a mod p并发送给鲍伯。 A = 5^6 mod 23 = 8. 3.鲍伯选择一个秘密整数b=15, 计算B = g^b mod p并发送给爱丽丝。 B = 5^15 mod 23 = 19. 4.爱丽丝计算s = B a mod p 19^6 mod 23 = 2. 5.鲍伯计算s = A b mod p 8^15 mod 23 = 2. ECDH密钥交换: ECDH: ECC算法和DH结合使用,用于密钥磋商,这个密钥交换算法称为ECDH。交换双方可以在不共享任何秘密的情况下 协商出一个密钥 。ECC是建立在基于椭圆曲线的离散对数问题上的密码体制,给定椭圆曲线上的一个点P,一个整数k,求解Q=kP很容易;给定一个点P、Q,知道Q=kP,求整数k确是一个难题。ECDH即建立在此数学难题之上

椭圆曲线加解密及签名算法的技术原理及其Go语言实现

霸气de小男生 提交于 2019-11-25 23:55:14
  椭圆曲线加密算法,即:Elliptic Curve Cryptography,简称ECC,是基于椭圆曲线数学理论实现的一种非对称加密算法。相比RSA,ECC优势是可以使用更短的密钥,来实现与RSA相当或更高的安全。据研究,160位ECC加密安全性相当于1024位RSA加密,210位ECC加密安全性相当于2048位RSA加密。   椭圆曲线在密码学中的使用,是1985年由Neal Koblitz和Victor Miller分别独立提出的。 椭圆曲线   一般,椭圆曲线可以用如下二元三阶方程表示:   y² = x³ + ax + b,其中a、b为系数。   其形状如下: 定义椭圆曲线的运算规则   椭圆曲线上的运算规则,由如下方式定义:   加法:过曲线上的两点A、B画一条直线,找到直线与椭圆曲线的交点,交点关于x轴对称位置的点,定义为A+B,即为加法。如下图所示:A + B = C   二倍运算:上述方法无法解释A + A,即两点重合的情况。因此在这种情况下,将椭圆曲线在A点的切线,与椭圆曲线的交点,交点关于x轴对称位置的点,定义为A + A,即2A,即为二倍运算。如下图所示:A + A = 2A = B   正负取反:将A关于x轴对称位置的点定义为-A,即椭圆曲线的正负取反运算。如下图所示:   无穷远点:如果将A与-A相加,过A与-A的直线平行于y轴