2023-12-12から1日間の記事一覧

Reconstructing RSA Private Keys from Random Key Bits

https://eprint.iacr.org/2008/510.pdf あたりの一部のbitがわかっている時に polynomial time decisional algorithmでNを素因数分解する [* Lifting solutions mod ] から bitまでわかっている時、bitを推定する。ここで、Hensel's Liftを使って、での解か…

RSA-CRT

from Crypto.Util.number import getPrime, getRandomRange from ptrlib import crt p = getPrime(512) q = getPrime(512) e = 65537 n = p * q m = getRandomRange(0, n) c = pow(m, e, n) # decrypt by rsa-crt d_p = pow(e, -1, p-1) d_q = pow(e, -1, q-…

Qiwi-Infosec CTF-2016 | Hensel

n = 1581688906457476363395126526567273673701408932950303338239208333630259409060558913573169944824614765761181142076812143239126525279272150531288099279324952069798370347137241407454006529222527499949838916908947248778974534402378297195202…

Pohlig-Hellman Attack

離散対数問題に対するアプローチの一つ。 DLPでもECDLPでも同じアルゴリズムが適用できる。 DLPに対するPohlig-Hellman Attack 前提として、巡回群 の位数 が次のように素因数分解可能であるとする。よくあるのは素数 を法とする乗法群で、その位数はなので…

PlaidCTF 2021 | XORSA

#PlaidCTF2021 from Crypto.PublicKey import RSA from Crypto.Cipher import PKCS1_OAEP from secret import p,q x = 16158503035655503426113161923582139215996816729841729510388257123879913978158886398099119284865182008994209960822918533986492024…

Padding Oracle Attack

以下の条件を満たすとき、暗号文から平文を復元できる CBCモード で暗号化されている PKCS#7 でパディングされている 復号の成否がわかる 何度でも復号できる 原理 CBCモードでは暗号化は次のように行われる 同様に復号はこう ここで偽物のデータ を与えて復…

NeverLAN CTF 2019|Cover the Bases

#NevarLANCTF2019 https://ctftime.org/task/7611 ZmxhZ3tEMWRfeTB1X2QwX3RoM19QcjNfQ1RGfQ== どうみてもbase64ですありがとうございました flag{D1d_y0u_d0_th3_Pr3_CTF}

N1CTF 2021 | n1ogin

#n1ctf2021 このほか n1ogin.pub の他、adminがログインしたときのpcapファイルが渡されている import os import json import time from Crypto.PublicKey.RSA import import_key from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, m…

Miller-Rabin 素数判定法

PyCryptodomeのisPrime はRandom BasisのMiller-Rabin miller rabinをかいくぐる合成数の作りかた baseを固定した時: baseについてのstrong pseudoprime。 Arnault's method baseがランダムな時: ランダムな base についての 1/4 の誤判定率(理論値)をほぼ達…

Midnight Sun CTF Qualifiers 2023 | ikea

#midnight_sun_ctf_qualifiers_2023 p = random_prime(2**1024) q = random_prime(2**1024) a = randint(0, 2**1024) b = randint(0, 2**1024) def read_flag(file='flag.txt'): with open(file, 'rb') as fin: flag = fin.read() return flag def pad_flag(…

Midnight Sun CTF 2023 Qualifier | helt ormalt

#midnight_sun_ctf_qualifiers_2023 #!/usr/bin/python3 -u __builtins__.KeyboardInterrupt = __builtins__.SystemExit import hashlib import asyncio import asynccmd del asynccmd.Cmd.do_test from secrets import FLAG, KEY, CREDS H = lambda b: hash…

MOV Attack

ECDLP を準指数時間で解くためのアプローチ 楕円曲線の位数 に対して、 となるような(embedding degree)が小さい時に適用できる。これが成立する典型的な場合が、がsupersingular curveのとき tate pairing (Weil Pairingでも実装できる) p = 133116983089…

LSBLeakAttack

典型的には 任意の暗号文Cを復号してくれるがその結果の下位1bitのみしか与えられない、というもの c = int(input()) oracle = pow(c, d, n) % 2 print(oracle) これを何回も繰り返せる場合(およそnのbit数分だけ繰り返せる場合), mが求まる というのはRSA…

LLL

LLLがうまく働く時(経験則 基底の各行(ベクトル)のノルムが大体同じの方が良い 思ったような小さい基底が得られない時 行列をtransposeしてからLLLしてみる LLLで手加減するテク LLL(delta=0.3) とかにする。defaultは0.99 らしい

InCTF 2020 | EaCy

eacy.zip ファイルが4つある mainっぽいところ import ecc import sys import os from prng import prng from flag import flag class colors: reset='\033[0m' red='\033[31m' green='\033[32m' orange='\033[33m' blue='\033[34m' # New urandom seed for …

Hastad Broadcast attack on padded message

generalized hastads broadcast attackのこと Hastad Broadcast Attackで、平文がそれぞれ線形に記述できる関係でパディングされてるとき

HackTM CTF Quals 2023 | d-phi-enc

#HackTM_CTF_Quals_2023 from Crypto.Util.number import bytes_to_long, getStrongPrime from secret import flag assert len(flag) == 255 e = 3 p = getStrongPrime(1024, e=e) q = getStrongPrime(1024, e=e) n = p * q phi = (p - 1) * (q - 1) d = pow…

HSCTF 8 | Regulus Regulus

#hsctf8 from Crypto.Util.number import * import random import sympy flag = open('flag.txt','rb').read() p,q = getPrime(1024),getPrime(1024) e = 0x10001 n = p*q m = random.randrange(0,n) c = pow(m,e,n) d = sympy.mod_inverse(e,(p-1)*(q-1)) d…

HSCTF 8 | Opisthocomus hoazin

#hsctf8 import time from Crypto.Util.number import * flag = open('flag.txt','r').read() p = getPrime(1024) q = getPrime(1024) e = 2**16+1 n=p*q ct=[] for ch in flag: ct.append((ord(ch)^e)%n) print(n) print(e) print(ct) RSA import ast with …

HSCTF 8 | Canis Lupus Familiaris Bernardus

#hsctf8 from Crypto.Cipher import AES from Crypto.Random import * from Crypto.Util.Padding import * import random flag = open('flag.txt','rb').read() print("Hello, I'm Bernard the biologist!") print() print("My friends love to keyboard spa…

HITCON CTF 2022 | Chimera

#HITCON_CTF_2022 import os from Crypto.Util.number import bytes_to_long, getPrime from Crypto.Cipher import AES from Crypto.Util.Padding import pad from hashlib import sha256 from secret import flag p = getPrime(384) q = getPrime(384) n = …

Google CTF 2022 | Maybe Someday

#googlectf2022 #!/usr/bin/python3 # Copyright 2022 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at …

Google CTF 2019 Finals | Fractorization

rsa

AESパート省略 RSAなんだけど、に何かしらのパターンがある。つまり素因数が次のように表される ここで みたいなやつ 同様に って感じ このとき、次のような行列を考える [[x, 0, u * d0 % w], [0, x, v * d0 % w], [0, 0, w]] で、それぞれ patternのサイズ…

Google CTF | Factorization

from Crypto.Cipher import AES from Crypto.PublicKey import RSA from secrets import my_rsa_key_generator, key, flag def pad(data): pad_size = AES.block_size - len(data) % AES.block_size return data + pad_size * bytes([pad_size]) n, e, d, p,…

Good CTF sakumon Repositories

https://github.com/soreatu/My-CTF-Challenge https://github.com/nguyenduyhieukma/CTF-Writeups/tree/master/TetCTF/2020

EdDSA

(twisted) Edwards Curve DSA PoC from hashlib import sha256 from random import randrange from Crypto.Util.number import bytes_to_long, long_to_bytes, inverse p = 208053691657152142396309207664840706929 a = 106 d = 1 q = 20805369165715214236…

Diffie-Hellman

Crypto CTF 2021 | symbols

#cryptoctf2021 CCTF{Play_with_?aT?X} これ CCTF{Play_with_LaTeX} じゃん,カス #uninterested_challenge_list

Crypto CTF 2021 | Triplet

#cryptoctf2021 #!/usr/bin/env python3 from Crypto.Util.number import * from random import randint import sys from flag import FLAG def die(*args): pr(*args) quit() def pr(*args): s = " ".join(map(str, args)) sys.stdout.write(s + "\n") sys.…

CrewCTF 2022 | toydl

#CrewCTF_2022 ncすると一方的にメッセージが送られてくる how to factorize N given dするだけお def factorize(N, e, d): from math import gcd import gmpy2 k = d*e - 1 t = k while t % 2 == 0: t //= 2 g = 3 while True: x = pow(g, t, N) if x > 1: …