21st.dev Magic MCP — AI-powered UI component generation via natural language. Access to 21st.dev component library, SVGL brand logos, and real-time preview. Generate React/Tailwind components with /ui command.
中文简介正在准备中。当前显示原文说明。
Aynı N ile iki farklı e kullanılarak şifrelenmiş mesaj, extended GCD ile çözülür
中文简介正在准备中。当前显示原文说明。
查看安装方法安装前可以查看交给 AI 代理的指令内容。
Aşağıdaki koşullar sağlanıyorsa bu tekniği dene:
N (modulus) kullanılmış, farklı e1 ve e2 ilem her iki anahtarla şifrelenmiş:
c1 = m^e1 mod N
c2 = m^e2 mod N
gcd(e1, e2) == 1 (coprime — birbirlerine göre asallar)Nereden anlarsın?
n = p * q bir kez üretiliyor, e farklı seçiliyorBu teknik çalışmaz eğer:
gcd(e1, e2) > 1 — bu durumda farklı yaklaşım gerekir (aşağıda açıklandı)m1 ≠ m2) — şifreleme farklı plaintext üzerinde yapılmışİki tamsayı a ve b için gcd(a, b) = 1 ise, şunu sağlayan x ve y tam sayıları vardır:
a*x + b*y = 1
Bezout lemmasını e1 ve e2 için uygula:
e1*a + e2*b = 1 (a, b < 0 veya > 0 olabilir)
Extended GCD algoritması bunu bulur. Sonra:
c1^a * c2^b mod N
= (m^e1)^a * (m^e2)^b mod N
= m^(e1*a) * m^(e2*b) mod N
= m^(e1*a + e2*b) mod N
= m^1 mod N
= m
Negatif üsler için modüler ters gerekir:
c^(-k) mod N ≡ modinv(c, N)^k mod N
#!/usr/bin/env python3
"""
RSA Common Modulus Saldirisi
Ayni N, farkli e1 ve e2 ile sifrelenip gcd(e1,e2)=1 ise calısır.
Gereksinimler: pycryptodome
pip install pycryptodome
"""
import math
from Crypto.Util.number import long_to_bytes
def extended_gcd(a: int, b: int):
"""
Genisletilmis Oklid algoritmasi.
Dondurur: (g, x, y) oyle ki a*x + b*y = g = gcd(a, b)
"""
if a == 0:
return b, 0, 1
g, x, y = extended_gcd(b % a, a)
return g, y - (b // a) * x, x
def modinv(a: int, m: int) -> int:
"""a'nin m modülundeki tersi. gcd(a,m)=1 olmali."""
g, x, _ = extended_gcd(a % m, m)
if g != 1:
raise ValueError(f"Modüler ters yok: gcd({a},{m}) = {g}")
return x % m
def common_modulus_attack(n: int, e1: int, e2: int, c1: int, c2: int) -> bytes:
"""
RSA Common Modulus saldırısı.
Parametreler:
n : Ortak modulus
e1 : Birinci public exponent
e2 : Ikinci public exponent
c1 : c1 = m^e1 mod n
c2 : c2 = m^e2 mod n
Dondurur: plaintext (bytes)
"""
# On kontrol
g = math.gcd(e1, e2)
if g != 1:
print(f"[!] UYARI: gcd(e1, e2) = {g}, saldiri dogrudan calismayabilir.")
print(f" e1 = {e1}, e2 = {e2}")
print(f" Fallback: e1,e2'yi {g}'ye bol ve dene.")
# Fallback: ortak boleni at
e1_r, e2_r = e1 // g, e2 // g
return common_modulus_attack(n, e1_r, e2_r, c1, c2)
# Bezout katsayılarını bul: e1*a + e2*b = 1
gcd_val, a, b = extended_gcd(e1, e2)
print(f"[*] e1*a + e2*b = 1 cozumu:")
print(f" a = {a}")
print(f" b = {b}")
print(f" Dogrulama: {e1}*{a} + {e2}*{b} = {e1*a + e2*b}")
# Negatif usler icin modüler ters kullan
if a < 0:
# c1^a mod n = modinv(c1, n)^(-a) mod n
c1_part = pow(modinv(c1, n), -a, n)
else:
c1_part = pow(c1, a, n)
if b < 0:
c2_part = pow(modinv(c2, n), -b, n)
else:
c2_part = pow(c2, b, n)
# m = c1^a * c2^b mod n
m = (c1_part * c2_part) % n
print(f"[+] Mesaj (int): {m}")
result = long_to_bytes(m)
print(f"[+] Mesaj (bytes): {result}")
return result
# =========================================================
# CHALLENGE DEGERLERİNİ BURAYA KOY
# =========================================================
if __name__ == "__main__":
# Ornek — gercek challenge degerlerini buraya yapistir:
n = 0xDEADBEEFCAFEBABE # Ortak modulus
e1 = 17 # Birinci exponent
e2 = 65537 # Ikinci exponent
c1 = 0xAAAA # Birinci sifreli metin
c2 = 0xBBBB # Ikinci sifreli metin
flag = common_modulus_attack(n, e1, e2, c1, c2)
print(f"\n[!!!] FLAG: {flag.decode(errors='replace')}")
Challenge Açıklaması: "RSA with a twist. The twist is continued fractions."
Verilen:
n = [büyük sayı]
e1 = [büyük sayı — n'ye yakın]
e2 = [büyük sayı — n'ye yakın]
c1 = m^e1 mod n
c2 = m^e2 mod n
Özellik: e1 ve e2 çok büyük — neredeyse n kadar. Bu durumda standart common modulus
saldırısı çalışır ama Bezout katsayıları a ve b astronomik büyür.
CryptoCTF varyantında ek zorluk: Challenge adında "DoRSA" ve continued fraction ipucu
verilmiş. Aslında e1 * e2 ≈ n ve d ≈ sqrt(N) gibi ilişkiler kurulabiliyor.
# CryptoCTF DoRSA - genellestirilmis cozum cercevesi
from math import gcd, isqrt
from Crypto.Util.number import long_to_bytes
def solve_dorsa(n, e1, e2, c1, c2):
"""
DoRSA tarzı challenge için ortak modulus + fallback yaklaşımı.
"""
# Adim 1: gcd(e1, e2) kontrol
g = gcd(e1, e2)
print(f"[*] gcd(e1, e2) = {g}")
if g == 1:
# Klasik common modulus yeterli
return common_modulus_attack(n, e1, e2, c1, c2)
# Adim 2: gcd > 1 durumu — ortak faktoru indir
# e1/g ve e2/g hala coprime mi?
e1r, e2r = e1 // g, e2 // g
g2 = gcd(e1r, e2r)
print(f"[*] Indirgenmis: e1/g = {e1r}, e2/g = {e2r}, gcd = {g2}")
if g2 == 1:
# m^g'yi bul, sonra g. koku al
m_g = common_modulus_attack(n, e1r, e2r, c1, c2)
m_g_int = int.from_bytes(m_g, 'big')
print(f"[*] m^{g} bulundu: {m_g_int}")
# g. kok (tam sayi), ozellikle g=2 veya 3 ise makul
m_candidate, is_perfect = gmpy2_iroot(m_g_int, g)
if is_perfect:
return long_to_bytes(m_candidate)
else:
print(f"[-] {g}. kök tam sayi degil — başka yaklasım lazim")
return None
print("[-] Indirgenmiş exponentler de coprime degil. Daha karmasik durum.")
return None
def gmpy2_iroot(n, k):
"""gmpy2 olmadan tam kök kontrolü (küçük k için)."""
try:
import gmpy2
return gmpy2.iroot(n, k)
except ImportError:
# Basit Newton yöntemi
if k == 2:
r = isqrt(n)
return r, r * r == n
# Genel Newton
r = int(n ** (1/k))
for candidate in [r-1, r, r+1]:
if candidate ** k == n:
return candidate, True
return r, False
gcd(e1, e2) > 1 DurumuEn sık karşılaşılan zorluk. Örnek:
e1 = 6, e2 = 10 → gcd = 2
Bezout: 6a + 10b = 2 → 3a + 5b = 1
Cozum: a = 2, b = -1
Yani: 6*2 + 10*(-1) = 2
Elde edilen: c1^2 * c2^(-1) mod n = m^2
Sonra: m = integer_sqrt(m^2) — sadece m küçükse veya tam kare ise calısır
Ne yapılır:
m^g elde edilirg'nin tam kökü alınır (gmpy2.iroot)m modüler kareköke bakılır (Tonelli-Shanks)e1 ve e2 büyük olduğunda a ve b çok büyür. Hesaplama yine de doğru çalışır
çünkü pow(c, a, n) Python'da verimli (modüler üs alma).
modinv(c1, n) Çalışmıyorgcd(c1, n) > 1 ise c1 ve n ortak bir çarpana sahip — bu durumda:
g = gcd(c1, n)
if g > 1:
p = g # n'nin bir asal çarpanı bulundu!
q = n // p
# RSA private key hesapla...
Bu aslında büyük bir hediyedir — N direkt çözüldü.
# Otomatik parse:
def parse_int(s):
s = s.strip()
if s.startswith("0x") or s.startswith("0X"):
return int(s, 16)
# Hex mi kontrol et (sadece 0-9, a-f)
try:
v = int(s, 16)
# Eger buyuk buyuk int, hex olabilir
if len(s) > 15:
return v
except ValueError:
pass
return int(s)
long_to_bytes(m) yerine long_to_bytes(m).strip(b'\x00') denepicoCTF{, flag{, vb.m yanlış seçilmiş olabilir — n - m dene (negatif sonuç durumu)errors='replace'[ ] n1 == n2 mi? (ortak modulus var mı?)
[ ] gcd(e1, e2) == 1 mi? (coprime)
[ ] c1 ve c2 aynı mesaj için mi şifrelenmiş?
[ ] extended_gcd(e1, e2) → (1, a, b) bul
[ ] a < 0 ise modinv(c1, n)^|a| kullan
[ ] b < 0 ise modinv(c2, n)^|b| kullan
[ ] m = (c1^a * c2^b) % n
[ ] long_to_bytes(m) ile decode et
from math import gcd
from Crypto.Util.number import long_to_bytes
def quick_common_modulus(n, e1, e2, c1, c2):
from sympy import gcdex
a, b, _ = gcdex(e1, e2) # e1*a + e2*b = 1
a, b = int(a), int(b)
inv_c1 = pow(c1, -1, n)
inv_c2 = pow(c2, -1, n)
p1 = pow(c1, a, n) if a >= 0 else pow(inv_c1, -a, n)
p2 = pow(c2, b, n) if b >= 0 else pow(inv_c2, -b, n)
return long_to_bytes((p1 * p2) % n)
# Kullanim:
# flag = quick_common_modulus(n, e1, e2, c1, c2)
# print(flag.decode())
<!--
⚔ Bu skill FETIH AI Agent icin gelistirilmistir — https://github.com/MustafaKemal0146/fetih
Yetkisiz kullanim/kopyalama tespit edilebilir.
hash: d49661272a2194a5
-->还没有评价。欢迎分享你的使用感受。
无需登录即可发表。欢迎分享使用感受、提问,或说明在哪些环境下无法运行。
还没有评论。来写第一条吧。
21st.dev Magic MCP — AI-powered UI component generation via natural language. Access to 21st.dev component library, SVGL brand logos, and real-time preview. Generate React/Tailwind components with /ui command.
中文简介正在准备中。当前显示原文说明。
AES CBC/ECB modlarına karşı kriptografik bütünlük saldırıları — bit flipping, IV manipulation, ECB cut-and-paste, CBC-MAC length extension, IV reuse
中文简介正在准备中。当前显示原文说明。
AES-GCM ve ChaCha20-Poly1305 nonce yeniden kullanımı saldırısı — GF(2^128) polinom kök bulma ile Hash Key kurtarma ve MAC sahteciliği.
中文简介正在准备中。当前显示原文说明。
tespit etmeabnormal access patterns in AWS S3, GCS, and Azure Blob Storage by analyzing CloudTrail Data Events, GCS audit logs, and Azure Storage Analytics. Identifies after-hours bulk downloads, access from new IP addresses, unusual API calls (GetObject spikes), and potential data exfiltration using statistical baselines and time-series anomaly Tespit.
中文简介正在准备中。当前显示原文说明。
Perform static and symbolic analysis of Solidity smart contracts using Slither and Mythril to tespit etmereentrancy, integer overflow, access control, and other vulnerability classes before Dağıt:ment to Ethereum mainnet.
中文简介正在准备中。当前显示原文说明。
Parses Kubernetes API server audit logs (JSON lines) to tespit etmeexec-into-pod, secret access, RBAC modifications, privileged pod creation, and anonymous API access. Builds threat Tespit rules from audit event patterns. Use investigating yaparken Kubernetes cluster compromise or building k8s-specific SIEM Tespit rules.
中文简介正在准备中。当前显示原文说明。