
数论密码学
文章平均质量分 66
_viceversa
卡耐基梅隆大学2022届计算机
华尔街打工人
展开
-
2月26日 Discrete logging(哈希表+离散对数+BSGS算法)
开学第一天,有点困,不过天气不错,手脚能放开了。今天学习了离散对数的几类问题,也是开始涉及密码学的核心:对于离散对数:$A^x\equiv B \mod p$如果要求B,那就是幂模问题,用快速幂求模。如果未知x,就是一个重要的离散对数/密码学问题,直观的我们想:是不是可以从1枚举到p-1(欧拉函数)?不过这个开销比较大,有一种算法(BSGS,大步小步/北上广深(!?)算法)可以解决这类问题。将x写...原创 2018-02-26 20:00:53 · 535 阅读 · 0 评论 -
【源码阅读】用Go语言实现环签名的签名和验证(二)
func hashToInt(hash []byte, c elliptic.Curve) *big.Int { orderBits := c.Params().N.BitLen() orderBytes := (orderBits + 7) / 8 if len(hash) > orderBytes { hash = hash[:orderByt...原创 2018-04-12 13:38:55 · 2095 阅读 · 2 评论 -
【源码阅读】用Go语言实现环签名的签名和验证(一)
环签名是区块链中保护用户隐私的方法之一,今天起更新环签名的实现,顺带讲一下原理。源码是MIT的开源代码,用go语言编写,由于我也是go语言小白,所以一边读一边学语法。import ( "bytes" "crypto/elliptic" "crypto/sha256" "fmt" "io" "math/big" "syn原创 2018-04-11 20:01:26 · 4495 阅读 · 3 评论 -
Fiat-Shamir transform 和零知识证明
零知识证明是区块链密码学的重要内容。近期在学习环签名,因此了解了一下证明机制。 零知识证明:向对方证明自己知道某个秘密,但不泄露秘密。 一个传统的证明步骤如下: 1 以离散对数加密为例,一证明者公开一系列信息(g,y1)(g,y1)(g,y_1),其中g是本原元,如果用椭圆曲线离散对数就是基点坐标,y1就是公钥。 2 选择一个伪随机数v∈Zqv∈Zqv\in \mathbb{Z}_...原创 2018-04-09 19:27:18 · 2396 阅读 · 0 评论 -
3月12日 二次剩余(shanks解法)
算法原理请wiki:Tonelli–Shanks algorithm,迅速深入理解是不太可能的,与cipola算法相比,shanks解法更数论一点。 (这个算法是正常的,但是还是tle) 大概流程是: R2≡nmodpR2≡nmodpR^2\equiv n\mod p 令p−1=Q2sp−1=Q2sp-1=Q2^s其中Q是奇数。若s=1,即p≡3mod4p≡3mod4p \equiv 3 ...原创 2018-03-12 23:06:51 · 799 阅读 · 0 评论 -
3月5日 Primitive Roots (解原根/本原元)
解原根问题在上周一直tle没有解决,今天折腾了半天(制造了大量access violation),坑点在于很多判断的条件。 即使按照质因数优化的方法,如果直接遍历2~ϕ(n)ϕ(n)\phi(n)的话,复杂度还是很高,够tle几十次了。原根的重要性质(模p): gϕ(p)pi≢1(modp)gϕ(p)pi≢1(modp)g^\frac{\phi(p)}{p_i} \not \equiv 1 ...原创 2018-03-05 20:20:51 · 1151 阅读 · 0 评论 -
3月2日 Pseudoprime numbers(费马素性测试、卡米歇尔数、伪素数)
这是个水题,也没有什么实际应用意义(费马素性测试对卡米歇尔数无效)。一些博客把这题归为labin-miller测试,这是有误的。写博客是因为被数组折腾了下,本来想初始化筛素数,MLE了,老老实实暴搜(注意题目的定义,伪素数首先要不是素数),但是问题来了,既然已经暴搜得出他是不是素数了,测试素性的意义何在?可能题目只是想练一下快速幂。Pseudoprime numbersTime L原创 2018-03-02 10:16:17 · 468 阅读 · 0 评论 -
3月8日 二次剩余
二次离散对数有特殊解法(但3次及以上尚未发现),例如有x2≡nmodpx2≡nmodpx^2\equiv n\mod p首先方程有解仅np−12≡1modpnp−12≡1modpn^\frac{p-1}{2}\equiv 1\mod p记勒让德符号(np)(np)\left(\frac{n}{p} \right)若n为p的二次剩余(即可以在模p意义下开根号),则勒让德符号为1,反之为-1,倍数为0...原创 2018-03-09 12:37:00 · 231 阅读 · 0 评论 -
2月28日 解原根(素数)
今天原本是学习离散对数第三类问题,也是最复杂的一类,不过容量太大,几乎是之前所有知识的综合了,所以先发一个重要步骤:解原根。 当考虑问题xa≡b(modp)xa≡b(modp)x^a\equiv b(mod p)时,两边取离散对数,底数需要取a的原根。原根有很多定义,这里不详讲。求原根主要还是搜索,不过由beizer定理有一个优化: 如果不存在pipip_i使得mϕ(p)pi≡1(modp...原创 2018-02-28 20:24:10 · 460 阅读 · 0 评论 -
2月15日 Biorhythms(中国剩余定理)
刚做完美赛,浑身无力,但是知识还是要学,态度还是要表示~今天是除夕,希望明年再接再厉,建立体系,学好算法,做好科研,搞好绩点,找好对象。DescriptionSome people believe that there are three cycles in a person's life that start the day he or she is born. These three cycl...原创 2018-02-15 16:24:33 · 210 阅读 · 0 评论 -
2月20日 Primitive Roots(原根)
原根和离散对数是密码学和数论的重要概念,本题如下(poj 1284):DescriptionWe say that integer x, 0 < x < p, is a primitive root modulo odd prime p if and only if the set { (xi mod p) | 1 <= i <= p-1 } is equal to { 1, ..原创 2018-02-20 21:38:44 · 309 阅读 · 0 评论 -
3月6日 莫比乌斯反演(poj 3904)
莫比乌斯反演可以加速运算,今天大致了解了应用,但是推导还是印象不深的。莫比乌斯反演两种形式,第一种是约数形式: f(n)=∑d|ng(d)→g(n)=∑d|nμ(d)f(nd)f(n)=∑d|ng(d)→g(n)=∑d|nμ(d)f(nd)f(n)= \sum \limits_{d|n}g(d) \rightarrow g(n)=\sum\limits_{d|n}\mu(d)f(\frac nd...原创 2018-03-06 20:33:42 · 228 阅读 · 0 评论 -
Schnorr签名体制
schnorr签名被认为可以解决比特币的空间问题,如下面一段所述: If you ask anyone in the Bitcoin space what the biggest challenge for Bitcoin is, you will likely hear the answer “scalability”. 但事实上schnorr签名在比特币之前十几年已被发明,它是Elgam...原创 2018-04-24 20:56:10 · 6185 阅读 · 2 评论