文章

Schmidt-Samoa 密码体系

原理

随机生成两个素数,ppp , qqq

N=p2cdotqN = p^2\\cdot qN=p2cdotqe=Ne=Ne=N

类似RSA

PublicKey=(e,N)Public\\ Key=(e,N)PublicKey=(e,N)

计算d=N1modvarphi(pq)d=N^{-1}\\ mod\\ \\varphi (pq)d=N1modvarphi(pq)

PrivateKey=(d,N)Private\\ Key=(d,N)PrivateKey=(d,N)

加密和解密

加密:c=mNmodNc=m^N\\ mod\\ Nc=mNmodN

解密:m=cdmodpqm=c^d\\ mod\\ pqm=cdmodpq

计算pqpqpq

依据ddd的产生有ncdotdequiv1modvarphi(pq)n\\cdot d\\equiv 1\\ mod\\ \\varphi(pq)ncdotdequiv1modvarphi(pq)

任取一个数如2,有2ndequiv2modpq2^{nd}\\equiv 2\\ mod\\ pq2ndequiv2modpq

得到pq=gcd(n,2nd2)pq=gcd(n,2^{nd}-2)pq=gcd(n,2nd2)

实例[2024 国城杯]babyRSA

from Crypto.Util.number import *
n = ?
d = ?
c = ?
pq = GCD(pow(2,n*d,n)-2,n)
print(long_to_bytes(pow(c,d,pq)))

0 条评论