type
status
date
slug
summary
tags
category
icon
password
Property
Jun 23, 2023 11:48 AM
题目信息
来源:2020-网鼎杯-青龙组-Crypto-you raise me up
难度:⭐⭐⭐⭐
平台地址:CTFHub
技术要点
- 数学中离散对数知识的理解和应用
- 运用python将得到的字符串进行转换得到flag
解题思路
- 打开题目附件,能够得到一个python程序如下:
总结
- 经典离散对数问题的定义例如,对于n=7,Z/7Z是由3k构成的循环群,阶数是φ(7)=7−1=6,下面的每步推导都用到了上一步的模等结果,其中3是模7的原根(Primitive root):
怎样求出构成Z/nZ的循环群的原根呢?简单的方式,通过穷举n的质因子构成的每个循环群,例如对于n=14=2×71(符合2p^k形式):
再看一个例子,取n=15,质因子是{1, 2, 4, 7, 8, 11, 13, 14},则φ(15)=8,但是
我们直接给出下面一组预备知识:
- 欧拉函数φ(n)表示1到n之间和n互素的整数的个数([15.d]),特别是对于素数p来说,φ(p)=p−1。
- 小于n且与n互素的集合是G={1,....,Pφ(n)},例如当n=7,G={1,2,3,4,5,6}。
- 集合{… , a − 2n, a − n, a, a + n, a + 2n, …}构成了a对n的同余类(Congruence class, [15.c])
- G的元素对n的同余类全体构成了一个新的集合M,把M记做:Z/nZ。
- Z/nZ是一个阿贝尓群,直接从阿贝尓群的四个性质入手证明。
- Z/nZ是一个循环群,当且仅当n=1,2,4,pk或者2pk(k>0)
由于14的质因子是{1, 3, 5, 9, 11, 13},从而φ(14)=6。从而,根据上面的枚举,3和5是14的两个原根。
15的每个质因子构成的循环群,阶数都不是φ(15)=8φ(15)=8,从而15没有原根。
有了这些准备,给出密码学里使用的离散对数的定义:
- p是一个素数,Z/pZ构成了一个循环群,生成元是g。
- 任意取一个整数k,gk属于Z/pZ,计算a=gk(mod p),容易知道a也属于Z/pZ。
- 反之,已知a,要计算k=log(a),称之为离散对数问题。
根据上面的难度讨论,显然:
- 计算a=gk是容易的。
- 计算k=log(a)是困难的。
- 计算DLP问题的经典算法
- 纯粹数学,就其本质而言,是逻辑思想的诗篇。 👍💡
- 作者:百川🌊
- 链接:https://www.baichuanweb.cn/article/example-10
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。