ECC椭圆曲线
基本概念简介椭圆曲线密码学(英语:Elliptic Curve Cryptography,缩写:ECC)是一种基于椭圆曲线数学的公开密钥加密算法。与传统的基于大质数因子分解困难性的加密方法不同,ECC 依赖于解决椭圆曲线离散对数问题的困难性。它的优势主要在于相对于其它方法,它可以在使用较短密钥长度的同时保持相同的密码强度。目前椭圆曲线主要采用的有限域有以素数为模的整数域 GF(p)和特征为2的伽罗华域 GF(2^m) 椭圆曲线椭圆曲线的定义式:$y^2+axy+by=x^3+cx^2+dx+e$一般方程:$y^2+a_1xy+a_3y=x^3+a_2x^2+a_4x+a_6$ 最常用方程(维尔斯特拉斯标准形式)$y^2=x^3+ax+b$,判别式$ Δ=−16(4a^3+27b^2)≠0$椭圆曲线的定义也要求曲线是非奇异的。几何上来说,这意味着图像里面没有尖点、自相交或孤立点。代数上来说,这成立当且仅当判别式 Δ≠0。 还需要一个无穷远点作为曲线的一部分,用O表示。 椭圆曲线阿贝尔群O为零元,相反数 P为关于X轴对称的另一边的点,加法规则为...
ZeroGWP
新生赛好玩 Cry_01.Twin Orbit / 双轨加密题目: Cry_01.Twin Orbit / 双轨加密62 pts Flag 格式:flag{…} ZeroG 空间站的两个轨道通信模块使用了同一个 RSA 模数 n。 工程师为了“安全隔离”,给两个模块设置了不同的公钥指数: e1 = 65537 e2 = 17 他们认为: “指数不同,密文不同,应该不会出问题。” 但 Fen 发现,两条通信轨道传输的是同一份核心指令。 请恢复明文,得到 flag。 两个 RSA 公钥使用了相同的 n。 如果 gcd(e1, e2) = 1,可以尝试扩展欧几里得。 注意处理负指数,可以使用模逆。 附件: 123456n = 78429219359517922271023478963814594552681246043944770910304760471867765174623304038843626799213010074714647155283331308571847776870166597053823412781788611608...
NISACTF 2022WP
NISACTF 2022WP[NISACTF 2022]sign_crypto题目提示:flag为大写喔~思路签到题是LATEX符号 1\ni \sum \sum \chi \theta \forall \{ \eta \Diamond \infty \tau \_ \widehat{nisa} \int \triangle \hookleftarrow \_ \Lambda \aleph \tau \ell \xi \} 因为flag格式为NSSCTF{}所以发现是提取首字母NSSCTF{EDIT_WITH_LATEX} [NISACTF 2022]funnycaeser题目凯撒5号说:大家为什么都说我很奇怪?附件:txt->NRQ;P<uLliW^(XQ/QT\NDh思路shift=5解密一次得到IML;K<pGgdR^(SL/LO\IYc尝试再解密一次得到了flagflag:NSSCTF{Stran9e_Caesar} 题目提示很奇怪->变异凯撒 12345678910111213...
SM9
论文大合集前情提要困难问题假设双线性群 标识签名的定义和安全模型标识签名 (identity-based signature) 由以下 4 个多项式时间算法组成.• (mpk, msk) ← Setup(λ). 已知系统安全参数 λ, 系统建立算法 Setup 以 λ 为输入, 输出系统主公钥 mpk 和主私钥 msk, 其中 mpk 是公开的, msk 由 KGC 秘密保存. 此算法由 KGC 执行.• skID ← KeyGen(mpk, msk,ID). 已知标识 ID, 用户私钥生成算法 KeyGen 以系统主公私钥对 (mpk, msk) 和 ID 为输入, 输出用户 ID 的私钥 skID. 此算法由 KGC 执行.• σ ← Sign(mpk, M,skID). 已知消息 M, 签名算法 Sign 以系统主公钥 mpk、M 和签名者的私钥 skID 为输入, 输出 M 的签名 σ. 此算法由签名者执行.• 1/0 ← Verify(mpk, M, σ,ID). 验证算法 Verify 以系统主公钥 mpk、签名消息 M 及其签名 σ和签名者的标识 ID 为...
NSSCTF 2nd
EzRSA题目 12345678910111213141516171819202122232425from Crypto.Util.number import *from secret import flagm = bytes_to_long(flag)assert m.bit_length()<200p = getPrime(512)q = getPrime(512)n = p*qe = 3c = pow(m, e, n)kbits = 103m = (m >> kbits) << kbitsMod = getPrime(1024)hint1 = (2021-2023*m) % Modhint2 = pow(2, 2023, Mod)print('n =',n)print('c =',c)print('hint1 =',hint1)print('hint2 =',hint2)'''n = 11538385523446622464376965...
流密码
流密码线性反馈移位寄存器拜访harry0597 LFSR 即线性反馈移位寄存器 作用:生成长伪随机序列,(二进制) 存储元件(触发器):可以存数据的就是 反馈路径:计算移位寄存器触发器的XOR和,并传递 度LFSR由若干时钟存储元件(触发器)组成,存储器元件个数就是LFSR的度 简单LFSR当m=3 假设初始状态为:S2=1, S1=0, S0=0 ;最右位的FF0往外输出 在每一个时间单位下,内部状态位向右移动一位 从左往右看 原先S2的值(1)给到 FF1 原先S1的值(0)给到 FF0 原先S0的值(0)和 原先S1的值(0)异或后(得到0)给到 FF2 原先S0的值(0)输出,LFSR得到数据 0 多次移位后,得到数据 Clk FF2 FF1 FF0=si 0 1 0 0 1 0 1 0 2 1 0 1 3 1 1 0 4 1 1 1 5 0 1 1 6 0 0 1 7 1 0 0 8 0 1 0 其中 Si 就是第i次输出的数据,i从0开始 而...
块密码题目概览
题目合集题目11234567891011121314151617181920212223242526272829from Crypto.Cipher import AESfrom Crypto.Util.Padding import pad, unpadfrom os import urandomfrom flag import flagdef cbc_encrypt(msg: bytes): msg = pad(msg, 16) msg = [msg[i:i+16] for i in range(0, len(msg), 16)] key = urandom(16) out = [] for block in msg: cipher = AES.new(key, AES.MODE_ECB) next = cipher.encrypt(block) out.append(next) key = next out = b"".join(out) return key...
初识块密码
基于比赛的AES搞得我一头雾水所以我转战块密码。 分组加密(Block cipher)分组加密包含一个成对算法:加密算法E,解密算法D(互为反函数)每个算法有两个输入:长度为n位的组,和长度为k位的密钥;两组输入均产生n位输出。将两个算法看作函数,K表示长度为 k的密钥(密钥长度),P表示长度为 n的分组,P也被表示为明文,C表示密文,则满足: $E_K(P)=C;E^{−1}_K(C)=P$ $ E_K(P):=E(K,P):{0,1}^k×{0,1}^n→{0,1}^n$ 每一个密钥实际上是选择了 n位输入排列的 (2n)!种组合中的一种大多数的分组密码在在加密算法中会重复使用某一函数进行多轮运算,典型的轮数在4-32次之间,每一轮的函数R使用不同的子密钥 Ki,由原密钥生成,作为输入: $M_i=R_{Ki}(M_{i−1})$ 其中 M0是最初的明文,Mi是第 i轮加密后的密文 AES(Advanced Encryption Standard)一些问答题目:1、输入块和输出块之间必须一一对应”的数学术语叫做双射(Bijection)...
记录一些栓发
连分数逼近若 $∣x−p/q∣<1/(2q2)$,则p/q 必为x 的某阶渐近分数。因此k/d 一定会出现在 e/N 的连分数展开序列中任何有理数都可以写成这种嵌套形式: $$ \begin{aligned} e \cdot d &= k \varphi(N) + 1 \implies ed - k \varphi(N) = 1 \ | \frac{e}{N} - \frac{k}{d} | &= \frac{1 - k(N - \varphi(N))}{dN} < \frac{1}{d N^{\frac{1}{2}}} \end{aligned} $$ 所以可以用分数来逼近一个数。之前写过维纳攻击题目 123n = 5074191700883449329907022569116947884084939687495276144216145686129441447648897172294440208136588933629837144541599807190263663613...
离散对数笔记
离散对数学习参考:1、harry0597师傅2、lazzaro 在整数中,离散对数(DL)是一种基于同余运算和原根的一种对数运算 在任何群G中可为所有整数k定义一个幂数为$b^k$,而离散对数$log_{b^{a}}$使得$b^k=a$的整数k。 离散对数在一些特殊情况下可以快速计算,公钥密码学中几个重要算法的基础,是假设寻找离散对数的问题解,在仔细选择过的群中,并不存在有效率的求解算法。 基本定义 生成元 在一个群G中,如果g是G的生成元,即所有G中所有元素都可以被表示成y=g^x,此时x称为y在G中的对数 阶 设 𝑚≥1,gcd(𝑎,𝑚)=1,使得 𝑎^𝑑≡1(mod𝑚) 成立的最小正整数 𝑑 称为 𝑎 对模 𝑚 的指数或者阶。一为𝛿_𝑚(𝑎)。满足 𝑎^𝑑≡1(mod𝑚) 的 𝑑 一定满足 𝑑∣𝜑(𝑚)。 原根 当𝛿_𝑚(𝑎)=𝜑(𝑚)时,称a是模m的原根,简称m的原根 常规sage函数 参数: 求解以base为底 a的对数 ord为base的阶,可忽略 operation可以是+或者...









