寧波市第八屆網絡安全大賽 -- Crypto -- WriteUp

寧波市第八屆網絡安全大賽 – Crypto – WriteUp

Three-prime RSA

task

import gmpy2
from Crypto.Util.number import *from secret import flagp = getPrime(512)
q = getPrime(512)
r = getPrime(512)
n = p * q * r
random_num = getPrime(28)
D = ((p + q + r) * random_num) % n
e = 65537
d = gmpy2.invert(e,(p-1)*(q-1)*(r-1))
m = bytes_to_long(flag)
c = pow(m,e,n)
m = long_to_bytes(pow(c,d,n))
print(f'n = {n}')
print(f"c = {c}")
print(f'e = {e}')
print(f'D = {D}')
print(f'r_cubed = {r**3}')
#n = 1797464363937803574178366635456301143459899987065195402238965688630854838574693129181564969286593529451541315147307698518248164419022745845149367101229289853511043305315113437055463741220310201972952525360384401292742908307617104187282410207011086837143526628825853819176582961596474273863005403315519262514987973727415369569624782351302222624317374956732149792365793683939133163240811987601690584296532495636077337007058250072691770687934895196018165482285074087
#c = 334735157214244327583157709091138850291255337497549444727968382625552814752420162774889355435597239850801444255501536062808665271447071394852127129645007823666189408974242614895090473463544656321304260276646862158621490436794225048527190465633048027777929676430778187663379548454777508032938086766087680923109105263450337252432956611495124284902807201570660674571972801630769083508865730870372239801449723990206104741555109361529711228109643651552666016767418334
#e = 65537
#D = 9293355851986591081591521098987501845963630839756264676294309115767555607188666083544593308349243222711109037704690481694680479223233813272567476445999227440933917
#r_cubed = 1733587395810445026263077101568701832386760527292029091732688691632302263295044364907002644024851393182111273947443724875261726589148427101911382909265190107241975414590360694235677890202731336061400362438326929279259311961356096293232720988325040307146370196619971302229486629240899410846744560517421971004381582157573816044985536221126650590038003165043945929284756476920639015271502102636205225479117479735091470661892665348612065863317686928100311559126824531

exp

from Crypto.Util.number import *
from gmpy2 import irootn = 1797464363937803574178366635456301143459899987065195402238965688630854838574693129181564969286593529451541315147307698518248164419022745845149367101229289853511043305315113437055463741220310201972952525360384401292742908307617104187282410207011086837143526628825853819176582961596474273863005403315519262514987973727415369569624782351302222624317374956732149792365793683939133163240811987601690584296532495636077337007058250072691770687934895196018165482285074087
c = 334735157214244327583157709091138850291255337497549444727968382625552814752420162774889355435597239850801444255501536062808665271447071394852127129645007823666189408974242614895090473463544656321304260276646862158621490436794225048527190465633048027777929676430778187663379548454777508032938086766087680923109105263450337252432956611495124284902807201570660674571972801630769083508865730870372239801449723990206104741555109361529711228109643651552666016767418334
e = 65537
D = 9293355851986591081591521098987501845963630839756264676294309115767555607188666083544593308349243222711109037704690481694680479223233813272567476445999227440933917
r_cubed = 1733587395810445026263077101568701832386760527292029091732688691632302263295044364907002644024851393182111273947443724875261726589148427101911382909265190107241975414590360694235677890202731336061400362438326929279259311961356096293232720988325040307146370196619971302229486629240899410846744560517421971004381582157573816044985536221126650590038003165043945929284756476920639015271502102636205225479117479735091470661892665348612065863317686928100311559126824531
r = iroot(r_cubed, 3)[0]
phi = r - 1
d = inverse(e, phi)
print(long_to_bytes(pow(c, d, r)))
# b'DASCTF{5521a971-9bed-11ef-bfda-14ac6024b6a8}'

earsa_6

task

from sage.all import *
# from secret import flag
flag = b'flag{this_is_a_test_flag_lalala~~~}'
from Crypto.Util.number import *p = next_prime(ZZ.random_element(2 ** 512))
q = next_prime(ZZ.random_element(2 ** 512))m = bytes_to_long(flag) 
n = p * q
print(f"p = {p}")
print(f"q = {q}")
phi_n = (p+1)*(q+1)e = ZZ.random_element(phi_n)
while gcd(e, phi_n) != 1:e = ZZ.random_element(phi_n)d = inverse_mod(e, phi_n)c = pow(m, e, n) # c = (mod(m ** 2, n) * power_mod(e, 2, n)) % nprint(f"n = {n}")
print(f"e = {e}")
print(f"c = {c}")
# "n = 103290940605767097772547367608381852550255311740089066062370678669736584831966972390296508499564302740251039905216525828381026059914694968711341442279592794179645755109637276941753470671672492643863307674183032056063497595618158607559032052302672569850017317721983409928424751468273419269585837187792579680441"
# "e = 4153390199995099394559502199356876987641001700181798065618463687883377896662802735692294514592974848815256220220567520414785101204978084883084168277609953983317089255372031928914225544973810429741972241310760306291217083076283386527880407979441234845945200062237779009000326020732264366320464844100039711500073849140628815801055506193561725597087896534906132971553150940778821878782222775892376719019037312704365897736892636528690951714686191932520762021674718730306167017168655476030445903413293206451445350127989832224321862119769332948547212450481322973363484001293075189230923276019258476580885163774258459928467"
# "c = 100933162705070380579705358896231615705264597351634019368382319632347917048149032133717183415739431564428093428992978229723659108455837366449426780119900838833128284699424510443364272415543344735540591444863458191423494866766098524960586274161507718151409519858841560317649453200969001613445259145496747256869"

analysis

  • 根據題目描述信息搜集到相關的題型,先前也沒有見過,但是有類似的題型以及攻擊策略。
  • 再利用現有的attack分解n之后,我們進行下一步的求解。這里前面按照原有的題目,發現這里的e并非題目腳本生成的。這里和賽事方進行了很長時間的溝通,按照原有的思路,我會進行有限域內開放求解m但是這里并沒有解,知道比賽題目難度降低,分解n之后直接RSA解密即可。

exp

from Crypto.Util.number import *
from sage.all import *def attack(N, e):"""Recovers the prime factors of a modulus and the private exponent if two prime factors share most significant bits:param N: the modulus:param e: the public exponent:return: a tuple containing the prime factors and the private exponent, or None if the private exponent was not found"""PR = PolynomialRing(ZZ, 'x')x = PR.gen()convergents = continued_fraction(ZZ(e) / ZZ((N - 1) ** 2)).convergents()for c in convergents:k = c.numerator()d = c.denominator()try:f = x ** 2 - x * (N ** 2 + 1 - int((e * d - 1) / k)) + N ** 2if f.discriminant() > 0:root = f.roots()p2 = root[0][0]; q2 = root[1][0]if is_square(p2) and is_square(q2):p = isqrt(p2); q = isqrt(q2)if p * q == N:return p, q, dexcept:continuereturn Nonen = 103290940605767097772547367608381852550255311740089066062370678669736584831966972390296508499564302740251039905216525828381026059914694968711341442279592794179645755109637276941753470671672492643863307674183032056063497595618158607559032052302672569850017317721983409928424751468273419269585837187792579680441
e = 4153390199995099394559502199356876987641001700181798065618463687883377896662802735692294514592974848815256220220567520414785101204978084883084168277609953983317089255372031928914225544973810429741972241310760306291217083076283386527880407979441234845945200062237779009000326020732264366320464844100039711500073849140628815801055506193561725597087896534906132971553150940778821878782222775892376719019037312704365897736892636528690951714686191932520762021674718730306167017168655476030445903413293206451445350127989832224321862119769332948547212450481322973363484001293075189230923276019258476580885163774258459928467
c = 100933162705070380579705358896231615705264597351634019368382319632347917048149032133717183415739431564428093428992978229723659108455837366449426780119900838833128284699424510443364272415543344735540591444863458191423494866766098524960586274161507718151409519858841560317649453200969001613445259145496747256869# print(attack(n, e))
p, q, d = attack(n, e)
assert n % p == 0
flag = long_to_bytes(int(pow(c, d, n)))
print(flag)

寫在最后

  • 第一題不知道是出題人故意而為之還是沒有考慮到flag過短導致可以直接開方r下轉素數進行求解。

  • 第二題未修正之前有點看不懂加密,修正的時候說是為了降低難度,后續針對于賽事方的數據進行了測試,感覺很…

    from sage.all import *
    from Crypto.Util.number import *# 提交正確的flag
    flag = b'DASCTF{5e1eddfb-dda2-11ed-8d28-ac675d417bad}'
    m = bytes_to_long(flag)# 題目附件給出的n
    n = 103290940605767097772547367608381852550255311740089066062370678669736584831966972390296508499564302740251039905216525828381026059914694968711341442279592794179645755109637276941753470671672492643863307674183032056063497595618158607559032052302672569850017317721983409928424751468273419269585837187792579680441# 題目附件給出的e
    e = 4153390199995099394559502199356876987641001700181798065618463687883377896662802735692294514592974848815256220220567520414785101204978084883084168277609953983317089255372031928914225544973810429741972241310760306291217083076283386527880407979441234845945200062237779009000326020732264366320464844100039711500073849140628815801055506193561725597087896534906132971553150940778821878782222775892376719019037312704365897736892636528690951714686191932520762021674718730306167017168655476030445903413293206451445350127989832224321862119769332948547212450481322973363484001293075189230923276019258476580885163774258459928467# 題目附件給出的c
    c = 100933162705070380579705358896231615705264597351634019368382319632347917048149032133717183415739431564428093428992978229723659108455837366449426780119900838833128284699424510443364272415543344735540591444863458191423494866766098524960586274161507718151409519858841560317649453200969001613445259145496747256869
    # print(pow(m, e, n) == c1) True# 未降低難度前給出的加密流程
    """😀😀😀😀😀"""
    c2 = (mod(m ** 2, n) * power_mod(e, 2, n)) % n
    print(c2 == c) # False
    

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/97617.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/97617.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/97617.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

大語言模型 (LLM) 與多模態大模型 (MLM)

文章目錄概述:從“模型”到“大”模型1、大語言模型 (Large Language Model, LLM)1.1 定義與概述關鍵特征:1.2 核心技術與架構Transformer架構自注意力機制 (Self-Attention)1.3 訓練過程1.4 工作原理2. 多模態大模型 (Multimodal Large Model, MLM)2.1 …

HTML應用指南:利用GET請求獲取全國招商銀行網點位置信息

招商銀行(China Merchants Bank, CMB)作為中國領先的股份制商業銀行,始終堅持“以客戶為中心”的服務理念,致力于為個人客戶、企業客戶及機構客戶提供專業、高效、便捷的綜合金融服務。依托“輕型銀行”戰略與“金融科技銀行”建設…

JVM性能監控工具的使用

了解JVM性能監控工具并能熟練使用,是Java開發者進階的必備技能。下面本文將為你介紹一些主流的JVM性能監控工具及其使用方法,并通過一些場景案例來分析如何應用這些工具解決實際問題。 🛠? JVM性能監控與調優工具指南 ? 工具概覽 以下是幾款…

【工作】一些找工作需要了解避雷的知識

面試前 1.公司的具體情況 公司全稱,辦公地點,涉及崗位 要求hr做個簡單的公司介紹 2.崗位職責/業務方向 工作內容、公司業務 3.薪資待遇,構成,底薪,五險一金 問一下工資范圍 底薪 (有責,無…

五、練習2:Git分支操作

練習2:Git分支操作 練習目標 掌握Git分支的創建、切換、合并等操作,理解分支在開發中的作用。 練習步驟 步驟1:準備基礎倉庫 # 創建練習目錄 mkdir branch-practice cd branch-practice# 初始化倉庫 git init# 創建初始文件 echo "# 分支…

【筆記】算法設計:異或空間線性基

Content1.什么是異或(定義和性質)2.異或空間線性基的構造方法3.異或空間線性基的應用4.算法設計例舉5.小結說明算法設計應用之前,首先明確異或空間線性基:一種數據結構。用于處理異或關系(運算)下的向量空間…

Filebeat采集數據與日志分析實戰

🌟Filebeat采集數據的原理 Filebeat默認按行采集數據,如果數據沒有換行,則該條數據無法采集到 屬于有狀態服務,可以記錄上一次采集數據的位置點信息 修改配置文件 vim /etc/filebeat/config/03-log-to-console.yaml filebeat.inp…

Fluent Bit針對kafka心跳重連機制詳解(下)

#作者:程宏斌 文章目錄disconnectreconnect接上篇:https://blog.csdn.net/qq_40477248/article/details/150957571?spm1001.2014.3001.5501disconnect 斷開連接的情況主要是兩種: 連接或傳輸過程中有錯誤發生 超時, 比如空閑時間超時 ** * Close and …

React 第七十一節 Router中generatePath的使用詳解及注意事項

前言 generatePath 是 React Router 的一個實用工具函數,用于根據路徑模式和參數對象生成實際的 URL 路徑。它在需要動態構建鏈接的場景中非常有用,比如生成導航鏈接或重定向路徑。 1、基本用法和注意事項 import { generatePath } from react-router-do…

Python 爬蟲案例:爬取豆瓣電影 Top250 數據

一、案例背景與目標 豆瓣電影 Top250 是國內權威的電影評分榜單之一,包含電影名稱、評分、評價人數、導演、主演、上映年份、國家 / 地區、類型等關鍵信息。本案例將使用 Python 編寫爬蟲,實現以下目標: 自動請求豆瓣電影 Top250 的 10 個分…

SPA安全警示:OAuth2.0致命漏洞

OAuth2.0在SPA應用中的安全陷阱SPA(單頁應用)通常采用隱式授權(Implicit Flow)或PKCE(Proof Key for Code Exchange)授權模式,但存在以下安全隱患:隱式授權模式的漏洞訪問令牌直接暴…

table表格字段明細展示

文章目錄1、字段渲染2、異步請求展示明細3、hover展示問題3.1 基本邏輯3.2 hover時長判斷3.3 renderhover表格字段明細展示,屬于比較小的需求,但是也有一定交互細節,本文選取部分場景。 1、字段渲染 render和渲染組件是有區別的。render常見為…

主網上線后生態極速擴張的 Berachain 生態,有哪些值得關注的項目?

Berachain 是典型的將 DeFi 思維嵌入到共識機制中的 Layer1,其核心是 PoL(Proof of Liquidity)共識。PoL 要求驗證者在獲得區塊獎勵前,必須將流動性導入白名單協議,并由市場決定資金流向。這樣,驗證者的權重…

claude-code對比GitHub-Copilot

Claude Code 文檔日期:2025 年 08 月 20 日 定位 項目級開發助手,專注于全局視野和復雜任務的處理。 特點 超長上下文支持:支持 200k 超長上下文,適合處理復雜項目。豐富的自定義命令:提供靈活的命令配置,滿…

Roo Code自定義Mode(模式)

什么是自定義模式? 簡單來說,自定義模式就像是給Roo Code穿上不同的"職業裝"。你可以創建針對特定任務或工作流程量身定制的模式,讓Roo在不同場景下表現出專業的行為。 這些模式分為兩種類型:全局模式(在所有…

Next.js渲染模式:SSR、SSG與ISR揭秘

Next.js 核心渲染模式深度解析:SSR、SSG 與 ISR 在構建現代 Web 應用時,性能和用戶體驗是至關重要的考量。Next.js 作為 React 生態中一個備受推崇的框架,其強大的服務端渲染(SSR)、靜態站點生成(SSG&#…

Veo Videos Generation API 對接說明

本文介紹了如何對接 Veo Videos Generation API,通過輸入自定義參數生成Veo官方視頻。 下面將詳細闡述 Veo Videos Generation API 的對接流程。 申請流程 使用 API 前,需前往 Veo Videos Generation API 頁面申請服務。進入頁面后,點擊「…

YOLO 目標檢測:YOLOv3網絡結構、特征輸出、FPN、多尺度預測

文章目錄一、YOLOV31、網絡結構1.1 整體結構1.2 主干網絡1.3 特征輸出1.4 特征融合FPN(Feature Pyramid Networks)FPN 融合上采樣融合2、多尺度預測3、損失函數4、性能對比一、YOLOV3 YOLOv3(You Only Look Once v3)是YOLO系列中…

【GIS圖像處理】有哪些SOTA方法可以用于將1.5米分辨率遙感圖像超分辨率至0.8米精度的?

針對將1.5米分辨率遙感圖像超分辨率至0.8米的需求,當前主流方法可分為以下幾類,結合最新研究進展和實際應用場景,具體技術方案及SOTA方法如下: 一、基于Transformer的高效建模 1. Top-k標記選擇Transformer(TTST) 核心機制:通過動態選擇前k個關鍵標記(token),消除冗…

【電力電子】逆變器控制策略:PQ Droop下垂控制、電壓電流雙環控制與SPWM調制

逆變器中的 PQ Droop 控制。 1. PQ Droop 控制的定義 PQ Droop(有時也稱為功率下垂控制,Power Droop Control)是微電網、并聯系統或逆變器并網運行中常用的一種分布式功率控制方法。 P-Droop(有功下垂):通過調節逆變器輸出頻率與有功功率之間的關系實現功率分配。 Q-Dro…