RSA

了解概念

相關(guān)資料https://www.kancloud.cn/kancloud/rsa_algorithm/48493

P : 大質(zhì)數(shù)
Q : 大質(zhì)數(shù)
N(Modulus) : N=P*Q
C : 密文
M : 明文
C=ME mod N(加密過(guò)程)
M=CD mod N(解密過(guò)程)
公鑰(E , N) 私鑰(D , N) 密鑰對(duì)(E , D , N)

同余定理

給定一個(gè)正整數(shù)m,如果兩個(gè)整數(shù)a和b滿足(a-b)能夠被m整除,即(a-b)/m得到一個(gè)整數(shù),那么就稱整數(shù)a與b對(duì)模m同余,記作a≡b(mod m)。
性質(zhì): 1 反身性 a≡a (mod m)
2 對(duì)稱性 若a≡b(mod m),則b≡a (mod m)
3 傳遞性 若a≡b (mod m),b≡c (mod m),則a≡c (mod m)
4 同余式相加 若a≡b (mod m),c≡d(mod m),則a+-c≡b+-d (mod m)
5 同余式相乘 若a≡b (mod m),c≡d(mod m),則ac≡bd (mod m)

歐拉函數(shù)


φ(pq)= φ(p) φ(q)=(p-1)(q-1)

歐拉定理

如果兩個(gè)正整數(shù)a和n互質(zhì),則n的歐拉函數(shù) φ(n) 可以讓下面的等式成立:
aφ(n)≡1 (mod n)即1=aφ(n) mod n

  • 費(fèi)馬小定理
    假設(shè)正整數(shù)a與質(zhì)數(shù)p互質(zhì),因?yàn)橘|(zhì)數(shù)p的φ(p)等于p-1,則歐拉定理可以寫成
    ap-1≡1 (mod p)

模反元素

如果兩個(gè)正整數(shù)a和n互質(zhì),那么一定可以找到整數(shù)b,使得 ab-1 被n整除,或者說(shuō)ab被n除的余數(shù)是1。
ab≡1 (mod n)

  • 證明
    aφ(n)=a × aφ(n)-1≡1 (mod n)
    b = aφ(n)-1即可證明存在

密匙生成過(guò)程

  • 隨機(jī)選擇兩個(gè)不相等的質(zhì)數(shù)p和q。
  • 計(jì)算p和q的乘積n。
  • 根據(jù)公式:φ(n) = (p-1)(q-1) 計(jì)算n的歐拉函數(shù)φ(n)
  • 隨機(jī)選擇一個(gè)整數(shù)e,條件是1到φ(n)
  • 計(jì)算e對(duì)于φ(n)的模反元素d。公式 ed ≡ 1 (mod φ(n))
    • ed - 1= kφ(n) e,φ(n)已知 對(duì)k進(jìn)行操作使d為整數(shù)可利用擴(kuò)展歐幾里得算法
  • 將n和e封裝成公鑰,n和d封裝成私鑰

如何從C=ME mod N 推導(dǎo) M=CD mod N

C=ME mod N => C = ME - kN
假設(shè) M=CD mod N成立
帶入可得(ME - kN)D mod N =M => MED mod N =M
由于ED ≡ 1 (mod φ(N)) 所以ED = hφ(N)+1
Mhφ(N)+1 mod N =M

  • 當(dāng) M 與 N 互質(zhì)時(shí)根據(jù)歐拉定理,此時(shí) Mφ(N) ≡ 1 (mod N)
    則Mhφ(N) × M ≡ 1 (mod N)成立
  • 當(dāng) M 與 N 不互質(zhì)
    此時(shí),由于n等于質(zhì)數(shù)p和q的乘積,所以m必然等于kp或kq。以 m = kp為例,考慮到這時(shí)k與q必然互質(zhì),則根據(jù)歐拉定理,下面的式子成立:
    (kp)q-1≡ 1 (mod q) =>(kp)(q-1)h(p-1) × kp ≡ kp (mod q)=>(kp)ed≡ kp (mod q)
    (kp)ed=kp +tq (t可整除p) => (kp)ed=kp +xpq => med≡m (mod n) 證畢

后綴名

  • .enc 代表 C
  • .dec 代表 M
  • .pem代表 密鑰

知道C N E解密

  • 思路
    N 分解為 P Q
    h(p-1)(q-1)+1=ed 解得 d
    M=CDmod N
  • 操作
openssl rsa -pubin -text -modulus -in warmup -in 【public.pem】

可以解出 E 和 N

#python
print(0xN)

轉(zhuǎn)化為十進(jìn)制N
利用 yafu
factorr(N)
解出 p q

python rsatool.py -o 【private.pem】 -e 【65537】 -p 【123】-q 【123】

得到私鑰private.pem

openssl rsautl -decrypt -in 【flag.enc】 -inkey 【private.pem】

私鑰解密

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 預(yù)備知識(shí): 0. 模運(yùn)算基本性質(zhì) (a + b) % p = (a % p + b % p) % p (a - b...
    耀鵬閱讀 2,478評(píng)論 0 51
  • Base64 base64是一種基于64個(gè)可打印字符來(lái)表示二進(jìn)制數(shù)據(jù)的表示方法.嚴(yán)格來(lái)說(shuō)它只能算作一種編碼方式.B...
    miku醬啦閱讀 1,286評(píng)論 0 3
  • 這是去年12月在CSDN寫的一篇加密算法文章 現(xiàn)在決定在簡(jiǎn)書寫博客 移植過(guò)來(lái)方便復(fù)習(xí)再理解。 最近算法課老師要求小...
    icecrea閱讀 1,404評(píng)論 1 1
  • 飛鏡夜空懸, 今夜著紅妝。 專家早預(yù)測(cè), 萬(wàn)眾仰頭望。
    文伴閱讀 309評(píng)論 14 20
  • 昨天喝完咖啡,又悠閑悠閑地去長(zhǎng)泰廣場(chǎng)看了《火星救援》。整部電影的最大看點(diǎn)我們和宇宙的關(guān)系、主人公沃特尼的心理變化。...
    美人閣閱讀 357評(píng)論 0 1

友情鏈接更多精彩內(nèi)容