引言
啊,假期就要开始了,好耶!
明天还有虎符CTF要打(TTK,一直摸TTK)
信息化时代的步伐
打开附件,只见一串数字:”606046152623600817831216121621196386“
我直接“???”
再看题目描述:
还是摸不着头脑
只好搜题解
说是中文电码,又是没见过的密码[捂脸]
“也许中国可以早早进入信息化时代,但是被清政府拒绝了”:
自摩尔斯电码在1835年发明后,一直只能用来传送英语或以拉丁字母拼写的文字。1873年,法国驻华人员威基杰(S·A·Viguer)参照《康熙字典》的部首排列方法,挑选了常用汉字6800多个,编成了第一部汉字电码本《电报新书》。后由任上海电报局首任总办的郑观应将其改编成为《中国电报新编》。(摘自wiki)
flag 为:flag{计算机要从娃娃抓起}
这句话是1984年邓小平同志说的:数十年后一位伟人说的话
中文电码加密解密:http://code.mcdvisa.com/
RSA1
dp dq 泄露的题没做过(别问,问就是看wp)
当然,剽窃别人的答案是可耻的,我们还要“剽窃”别人的知识(嘿嘿嘿)
参考博客:
RSA之拒绝套路(2)
这篇博客讲得很详细,但仍有地方可以细化和纠错
作为一个数理基础不扎实的数院学生,花了老半天才看明白
下面,让我来逐步推导(也当练习
L
a
t
e
x
Latex
Latex了):
首先,什么是
d
p
dp
dp 和
d
q
dq
dq:
d
p
≡
d
m
o
d
(
p
−
1
)
d
q
≡
d
m
o
d
(
q
−
1
)
dp \equiv d\space mod\space (p-1)\\dq \equiv d\space mod\space (q-1)
dp≡d mod (p−1)dq≡d mod (q−1)
然后,由 RSA 加密算法可得:
n
=
p
∗
q
c
≡
m
e
m
o
d
n
m
≡
c
d
m
o
d
n
n = p*q\\c \equiv m^{e}\space mod\space n\\m \equiv c^{d}\space mod\space n
n=p∗qc≡me mod nm≡cd mod n
因此,要求出密文
m
m
m ,我们必须求出
c
d
c^{d}
cd
由
m
≡
c
d
m
o
d
n
m \equiv c^{d}\space mod\space n
m≡cd mod n 可得
∃
k
1
∈
Z
,
s
.
t
.
\exists\space k_{1} \in\mathbb{Z}, \space s.t.
∃ k1∈Z, s.t.
m
=
c
d
+
k
1
∗
n
=
c
d
+
k
1
∗
p
∗
q
m=c^{d}+k_{1}*n=c^{d}+k_{1}*p*q
m=cd+k1∗n=cd+k1∗p∗q
再对等式两边分别模
p
,
q
p, q
p,q ,含
p
,
q
p, q
p,q 的项在模
p
,
q
p, q
p,q 时为
0
0
0 得
{
m
1
≡
c
d
m
o
d
p
⋯
⋯
(
1
)
m
2
≡
c
d
m
o
d
q
⋯
⋯
(
2
)
\begin{cases} m_{1} \equiv c^{d}\space mod\space p\cdots\cdots (1)\\m_{2} \equiv c^{d}\space mod\space q \cdots\cdots (2)\end{cases}
{m1≡cd mod p⋯⋯(1)m2≡cd mod q⋯⋯(2)
(原文此处标注错误)
由
(
1
)
(1)
(1) 式可得
∃
k
2
∈
Z
,
s
.
t
.
\exists\space k_{2} \in\mathbb{Z}, \space s.t.
∃ k2∈Z, s.t.
c
d
=
k
2
∗
p
+
m
1
c^{d}=k_{2}*p+m_1
cd=k2∗p+m1
代入
(
2
)
(2)
(2) 式可得
m
2
≡
(
m
1
+
k
2
∗
p
)
m
o
d
q
m_{2} \equiv (m_{1}+k_{2}*p)\space mod\space q
m2≡(m1+k2∗p) mod q
可得
∃
k
3
∈
Z
,
s
.
t
.
\exists\space k_{3} \in\mathbb{Z}, \space s.t.
∃ k3∈Z, s.t.
m
2
=
m
1
+
k
2
∗
p
+
k
3
∗
q
m_{2}=m_{1}+k_{2}*p+k_{3}*q
m2=m1+k2∗p+k3∗q
移项,两边模
q
q
q 可得
(
m
2
−
m
1
)
≡
k
2
∗
p
m
o
d
q
(m_{2}-m{1})\equiv k_{2}*p\space mod\space q
(m2−m1)≡k2∗p mod q
由于
g
c
d
(
p
,
q
)
=
1
gcd(p, q)=1
gcd(p,q)=1
由裴蜀定理,
∃
u
,
v
∈
Z
,
s
.
t
.
\exists\space u,v \in\mathbb{Z}, \space s.t.
∃ u,v∈Z, s.t.
u
∗
p
+
v
∗
q
=
1
u*p+v*q=1
u∗p+v∗q=1
两边模
q
q
q 得
u
∗
p
≡
1
m
o
d
q
u*p\equiv 1\space mod \space q
u∗p≡1 mod q
故可以求p的逆元,且上式中的
u
u
u 即为
p
p
p 的逆元,即
p
−
1
(
m
o
d
q
)
p^{-1}(mod\space q)
p−1(mod q) ,得到
(
m
2
−
m
1
)
∗
p
−
1
≡
k
2
m
o
d
q
(m_{2}-m_{1})*p^{-1}\equiv k_{2}\space mod\space q
(m2−m1)∗p−1≡k2 mod q
将以下三式
k
2
≡
(
m
2
−
m
1
)
∗
p
−
1
m
o
d
q
c
d
=
k
2
∗
p
+
m
1
m
≡
c
d
m
o
d
n
k_{2}\equiv (m_{2}-m_{1})*p^{-1}\space mod\space q\\c^{d}=k_{2}*p+m_1\\m \equiv c^{d}\space mod\space n
k2≡(m2−m1)∗p−1 mod qcd=k2∗p+m1m≡cd mod n
合并可得
m
≡
(
(
(
m
2
−
m
1
)
∗
p
−
1
m
o
d
q
)
∗
p
+
m
1
)
m
o
d
n
m \equiv (((m_{2}-m_{1})*p^{-1}\space mod\space q)*p+m_1)\space mod\space n
m≡(((m2−m1)∗p−1 mod q)∗p+m1) mod n
最后求
m
1
,
m
2
m_{1},m_{2}
m1,m2
因为有
{
d
≡
d
p
m
o
d
(
p
−
1
)
d
≡
d
q
m
o
d
(
q
−
1
)
\begin{cases} d \equiv dp\space mod\space (p-1)\\d \equiv dq\space mod\space (q-1) \end{cases}
{d≡dp mod (p−1)d≡dq mod (q−1)
又
{
m
1
≡
c
d
m
o
d
p
m
2
≡
c
d
m
o
d
q
\begin{cases} m_{1} \equiv c^{d}\space mod\space p\\m_{2} \equiv c^{d}\space mod\space q \end{cases}
{m1≡cd mod pm2≡cd mod q
代入得
{
m
1
≡
c
d
p
m
o
d
(
p
−
1
)
m
o
d
p
m
2
≡
c
d
q
m
o
d
(
q
−
1
)
m
o
d
q
\begin{cases} m_{1} \equiv c^{dp\space mod\space (p-1)}\space mod\space p\\m_{2} \equiv c^{dq\space mod\space (q-1) }\space mod\space q \end{cases}
{m1≡cdp mod (p−1) mod pm2≡cdq mod (q−1) mod q
以
d
p
dp
dp 为例,由
d
≡
d
p
m
o
d
(
p
−
1
)
d \equiv dp\space mod\space (p-1)
d≡dp mod (p−1) 可得
∃
k
∈
Z
,
s
.
t
.
\exists\space k \in\mathbb{Z}, \space s.t.
∃ k∈Z, s.t.
d
=
d
p
+
k
∗
(
p
−
1
)
d = dp+k*(p-1)
d=dp+k∗(p−1)
代入得
m
1
≡
c
d
p
+
k
∗
(
p
−
1
)
m
o
d
p
≡
c
d
p
∗
c
k
∗
(
p
−
1
)
m
o
d
p
m_{1} \equiv c^{dp+k*(p-1)} \space mod \space p\equiv c^{dp}*c^{k*(p-1)} \space mod \space p
m1≡cdp+k∗(p−1) mod p≡cdp∗ck∗(p−1) mod p
由费马小定理,因为
p
p
p 是素数,且
g
c
e
(
p
,
c
)
=
1
gce(p, c) = 1
gce(p,c)=1(由于
p
p
p 是大素数,而
c
c
c 是偶数),则
c
(
p
−
1
)
≡
1
m
o
d
p
c^{(p-1)} \equiv 1\space mod\space p
c(p−1)≡1 mod p
故
∃
k
4
∈
Z
,
s
.
t
.
\exists\space k_{4} \in\mathbb{Z}, \space s.t.
∃ k4∈Z, s.t.
c
k
∗
(
p
−
1
)
=
(
c
p
−
1
)
k
=
(
1
+
k
4
∗
p
)
k
c^{k*(p-1)} = (c^{p-1})^{k} = (1+k_{4}*p)^{k}
ck∗(p−1)=(cp−1)k=(1+k4∗p)k
对右式二项式展开再模
p
p
p 可得
c
k
∗
(
p
−
1
)
≡
1
m
o
d
p
c^{k*(p-1)} \equiv 1 \space mod \space p
ck∗(p−1)≡1 mod p
故
m
1
≡
c
d
p
m
o
d
p
m_{1} \equiv c^{dp} \space mod \space p
m1≡cdp mod p
同理可得
m
2
≡
c
d
q
m
o
d
q
m_{2} \equiv c^{dq} \space mod \space q
m2≡cdq mod q
最终得方程组
{
m
1
≡
c
d
p
m
o
d
p
m
2
≡
c
d
q
m
o
d
q
m
≡
(
(
(
m
2
−
m
1
)
∗
p
−
1
m
o
d
q
)
∗
p
+
m
1
)
m
o
d
n
\begin{cases} m_{1} \equiv c^{dp} \space mod \space p\\m_{2} \equiv c^{dq} \space mod \space q\\m \equiv (((m_{2}-m_{1})*p^{-1}\space mod\space q)*p+m_1)\space mod\space n \end{cases}
⎩⎪⎨⎪⎧m1≡cdp mod pm2≡cdq mod qm≡(((m2−m1)∗p−1 mod q)∗p+m1) mod n
代码实现如下:
from Crypto.Util.number import *
import libnum
p = 8637633767257008567099653486541091171320491509433615447539162437911244175885667806398411790524083553445158113502227745206205327690939504032994699902053229
q = 12640674973996472769176047937170883420927050821480010581593137135372473880595613737337630629752577346147039284030082593490776630572584959954205336880228469
dp = 6500795702216834621109042351193261530650043841056252930930949663358625016881832840728066026150264693076109354874099841380454881716097778307268116910582929
dq = 783472263673553449019532580386470672380574033551303889137911760438881683674556098098256795673512201963002175438762767516968043599582527539160811120550041
c = 24722305403887382073567316467649080662631552905960229399079107995602154418176056335800638887527614164073530437657085079676157350205351945222989351316076486573599576041978339872265925062764318536089007310270278526159678937431903862892400747915525118983959970607934142974736675784325993445942031372107342103852
def decrypt(dp, dq, p, q, c):
n = p*q
InvQ = inverse(p, q)
m1 = pow(c, dp, p)
m2 = pow(c, dq, q)
m = ((((m2 - m1)*InvQ) % p) * p + m1) % n
print(libnum.n2s(m))
decrypt(dp, dq, p, q, c)
结语
终于肝完了,已经燃尽了(躺)
明天还要打比赛
希望能继续坚持