准备资料
资料提炼
通过阅读盲签名源码可以知道,当一个明文
m经过盲化、签名,最后再去盲的操作后的最终结果为:((((m(re % n)) % n)d %n)r-1) % n
m为明文r为随机数n和e组成公钥,n和d组成私钥,根据RSA加密算法定义可知:e和d满足:ed % φ(n) = 1r-1为r对于n的模反元素,满足:(r-1r) % n = 1。
从欧拉定理得到公式(a与n互质)
a𝜑(n) % n = 1
从取模运算规则中列出以下对于本次证明有用的公式:
说明 公式 编号 结合律 ((a*b) % n * c) % n = (a * (b*c) % n) % n 1 模结合律 ab % n = ((a % n)b) % n 2 乘法分配律 (a * b) % n = (a % n * b % n) % n 3
证明过程
由盲签名的原理可知,我们需要证明:
((((m(re % n)) % n)d %n)r-1) % n 等价于 md % n
((((m(re % n)) %n)d %n)r-1) % n 公式2
= (((m(re % n))d % n)r-1) % n
= (((md * (re % n)d) %n)r-1) % n 公式3
= (((md%n * (re % n)d %n) %n)r-1) % n 公式2
= ((((md %n) * (red %n)) %n)r-1) % n 公式3
= (((md * red) %n) * r-1) % n 公式1
= (md * (red r-1) %n) % n
即需要证明 (red r-1) %n = 1,将已知条件 ed = k * φ(n) + 1代入有:
(red r-1) %n
= (rkφ(n)+1 r-1) %n
=(rkφ(n) * rr-1) %n 公式3
= (rkφ(n)%n *(rr-1)%n) %n 模反元素的定义
= (rkφ(n)%n * 1) %n
= ((rφ(n) …… rφ(n)) %n ) %n
设rφ(n)=p,p%n=q,则有:
((rφ(n) …… rφ(n)) %n ) %n
= ((p …… p) %n ) %n 公式3的变形
= ((q(q(q(……(q*q) %n……) %n) %n) %n) %n
通过阅读盲签名源码第40行至第47行可知,r与n互质,满足欧拉定理。则有rφ(n)%n=1,即q=1,原式得证。
盲签原理
为什么我们要证明
((((m(re % n)) % n)d %n)r-1) % n 等价于 md % n
因为根据RSA加解密过程,我们知道,加密过程为:
c = me % n
解密过程为:
m = cd % n
我们传给服务器的是盲化后的内容,即:
(m(re % n)) % n
服务器用私钥将这个内容做加密操作,然后我们再将加密后的内容做去盲处理就拿到了服务器对原文的加密结果。其他人就可以用公钥来校验这个结果。
安全性
我们来看看交给服务器的盲化后的字串:
(m(re % n)) % n
式子里总共有四个未知量:m、r、e、n,服务器只知道e和n,没有r求不出m。
再来考虑一下r被穷举的难度有多大呢?
通过阅读盲签名源码第40行至第47行可知(尤其是其中的第41行),r的选取需满足以下要求:
1 < r && r < min(n, 280) && r⊥n && r ∈ N
现在的RSA算法中的n一般都是1024位,那么r就是小于280且与n互质的正整数。
那这样的数有多少个呢?
根据资料我们知道小于n且与n互质的正整数的个数叫做欧拉函数,写作φ(n)。在RSA算法里,p、q是任意两个质数,φ(n)满足下面的条件:
n = pq
φ(n) = (p-1)(q-1)
当n足够大时,并假设p、q亦足够大(事实上p、q也确实足够大),那么φ(n)取其二次方项:
φ(n) = (p-1)(q-1) = pq - p - q + 1≈ pq = n
所以可知小于n且与n互质的数大致是成均匀分布,那么满足条件的r的个数大约是280
所以r被穷举的难度取决于r的随机范围。
Congratulations @specer! You received a personal award!
You can view your badges on your Steem Board and compare to others on the Steem Ranking
Do not miss the last post from @steemitboard:
Vote for @Steemitboard as a witness to get one more award and increased upvotes!