[Crypto学习笔记] Schmidt-Samona密码系统

少于 1 分钟阅读时长

发布时间:

目录

前置概念

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}'

参考文献

  1. CTFer菜菜.GUET-CTF2019[EB/OL]CSDN.https://blog.csdn.net/MikeCoke/article/details/113915715.2021-02-21.