[Crypto学习笔记] Schmidt-Samona密码系统
发布时间:
目录
前置概念
schmidt-samona
Schmidt-Samoa密码系统,类似rabin加密(这个以后再说),其安全性基于整数的因式分解, 以下是Schmidt-Samoa密码系统的一些基本特征1:
def generkey(k):
p, q = getPrime(k), getPrime(k)
n = p * p * q
e = n
phin = (p-1)*(q-1) / gcd(p-1, q-1)
d = pow(e, -1, phin)
return e, d, n
def encrypt(message, e):
return pow(message, e, n)
def decrypt(message, d, e):
return gcd(pow(2, d*e, e)-2, N)
相比rsa, Schmidt-Samoa提供了较为特殊的解密方式, 以上函数可以作为参考.
国城杯2024
babyrsa
题目
from secret import flag
from Crypto.Util.number import*
from gmpy2 import*
flag = b'D0g3xGC{****************}'
def gen_key(p, q):
public_key = p*p*q
e = public_key
n = p*q
phi_n = (p-1)*(q-1)
private_key = inverse(e,phi_n)
return public_key,private_key,e
p = getPrime(512)
q = getPrime(512)
N,d,e = gen_key(p,q)
c = gmpy2.powmod(bytes_to_long(flag),e,N)
print(N)
print(d)
print(c)
'''
n = 539403894871945779827202174061302970341082455928364137444962844359039924160163196863639732747261316352083923762760392277536591121706270680734175544093484423564223679628430671167864783270170316881238613070741410367403388936640139281272357761773388084534717028640788227350254140821128908338938211038299089224967666902522698905762169859839320277939509727532793553875254243396522340305880944219886874086251872580220405893975158782585205038779055706441633392356197489
d = 58169755386408729394668831947856757060407423126014928705447058468355548861569452522734305188388017764321018770435192767746145932739423507387500606563617116764196418533748380893094448060562081543927295828007016873588530479985728135015510171217414380395169021607415979109815455365309760152218352878885075237009
c = 82363935080688828403687816407414245190197520763274791336321809938555352729292372511750720874636733170318783864904860402219217916275532026726988967173244517058861515301795651235356589935260088896862597321759820481288634232602161279508285376396160040216717452399727353343286840178630019331762024227868572613111538565515895048015318352044475799556833174329418774012639769680007774968870455333386419199820213165698948819857171366903857477182306178673924861370469175
'''
解析
第一次学习到Schmidt-Samona密码系统, 类似rabin加密, 直接参考schmidt-samona解密原理可以构造EXP:
EXP
EXP库采用个人自用EXP库.
from EXP import *
n = 539403894871945779827202174061302970341082455928364137444962844359039924160163196863639732747261316352083923762760392277536591121706270680734175544093484423564223679628430671167864783270170316881238613070741410367403388936640139281272357761773388084534717028640788227350254140821128908338938211038299089224967666902522698905762169859839320277939509727532793553875254243396522340305880944219886874086251872580220405893975158782585205038779055706441633392356197489
d = 58169755386408729394668831947856757060407423126014928705447058468355548861569452522734305188388017764321018770435192767746145932739423507387500606563617116764196418533748380893094448060562081543927295828007016873588530479985728135015510171217414380395169021607415979109815455365309760152218352878885075237009
c = 82363935080688828403687816407414245190197520763274791336321809938555352729292372511750720874636733170318783864904860402219217916275532026726988967173244517058861515301795651235356589935260088896862597321759820481288634232602161279508285376396160040216717452399727353343286840178630019331762024227868572613111538565515895048015318352044475799556833174329418774012639769680007774968870455333386419199820213165698948819857171366903857477182306178673924861370469175
pq = gcd(pow(2, d * n, n)-2, n)
m = pow(c,d,pq)
print(l2b(m))
# b'D0g3xGC{W1sh_Y0u_Go0d_L@ucK-111}'
参考文献
CTFer菜菜.GUET-CTF2019[EB/OL]CSDN.https://blog.csdn.net/MikeCoke/article/details/113915715.2021-02-21. ↩