sicp第35頁提到費馬小定理在密碼學中有很重要的應用, 還沒有學過《密碼學》這門課, 但我又對加密解密有點興趣, 決定一**竟. 費馬小定理維基百科裡是這麼定義的:
假如a是乙個整數,p是乙個素數,那麼但我發現sicp第34頁對費馬小定理的描述是這樣的:如果a不是p的倍數,這個定理也可以寫成
如果n是乙個素數, a是小於n的任意正整數, 那麼a的n次方與a模n同餘.經過我舉了幾個小例子驗證之後, 覺得維基百科的解釋更合理一些, sicp裡所講的"a是小於n的任意正整數"可能是為了適合當頁所講的內容"費馬檢查", 順便提一下如何檢查乙個數是否是素數.
如果所有符合1 < b < p的b p都滿足下列條件的話:想起前一段時間讀過的談談密碼學的數學原理, 這篇文章裡面描述了公鑰加密的過程:
1. 找兩個很大的素數(質數)p 和 q, 越大越好, 比如 100 位長的, 然後計算它們的乘積 n=p×q, m=(p-1)×(q-1)這就相當於可以給每個人發一把鑰匙(公鑰)用於加密資料, 但是解開這段加密資料需要的是另外一把鑰匙(私鑰).2. 找乙個和 m 互素的整數 e, 也就是說 m 和 e 除了 1 以外沒有公約數
3. 找乙個整數 d, 使得 e×d 除以 m 餘 1, 即 e×d mod m = 1
現在, 世界上先進的、最常用的密碼系統就設計好了, 其中 e 是公鑰誰都可以用來加密, d 是私鑰用於解密, 一定要自己儲存好. 乘積 n 是公開的, 即使敵人知道了也沒關係.
現在, 我們用式子 x^e mod n 對 x 加密得到密碼 y, 破解密文時用式子 y^d mod n 得到原文x.
原文x = y^d mod n = (x^e mod n)^d mod n, 根據同餘定理這個式子等價為: x^(e*d) mod n = x, 目的就是證明這個式子的正確性.
根據費馬小定理設整數k使得((p-1)(q-1))k+1=e*d, 所以x^(e*d)=x^((p-1)(q-1)k+1) = x*x^((p-1)^(q-1)) = x(mod p),這個加密解密過程也就是rsa公鑰密碼的原理.同理x^(e*d) = x(mod q), 即x^(e*d) – x能被p*q整除,
因為n=p*q, 所以x^(e*d) = x(mod n), 即得證.
費馬檢查用於檢查乙個數是否是素數, 根據這個基本原理, 用來找到乙個比現在已知素數還要大的素數, 這樣的素數在密碼學中有什麼用呢? 上面公鑰加密過程第一步已經提到需要兩個很大的素數構造n, 而一旦破解n是由哪兩個素數相乘, 整個公鑰加密系統也就沒有什麼秘密了, 但目前還沒有發現求乙個數的因子的很好演算法, 除非乙個個試, 但這需要很漫長的時間, 據說分解乙個200位的數就得花上上萬年...因此可見位數越多的素數乘積起來, 再進一步構造出來的密碼, 要破解它是相當困難的.
費馬小定理在公鑰加密中的應用及原理
sicp第35頁提到費馬小定理在密碼學中有很重要的應用,還沒有學過 密碼學 這門課,但我又對加密解密有點興趣,決定一 竟.費馬小定理維基百科裡是這麼定義的 假如a是乙個整數,p是乙個素數,那麼 如果a不是p的倍數,這個定理也可以寫成 但我發現sicp第34頁對費馬小定理的描述是這樣的 如果n是乙個素...
初等數論初步 費馬小定理和尤拉定理的應用
例1.求 13 2004 除以17的餘數.分析 遇到有關帶指數的被除數的問題,我們首先考慮運用同餘 互素以及費馬小定理或尤拉定理,降次使被除數變小,進而求出餘數。容易直到17為素數,且 13,17 1,由費馬小定理可知 13 13 equiv 1 mod 17 又因為 2004 16 125 4 所...
白兔的式子(費馬小定理 逆元)
題目描述 已知f 1 1 1,f i j a f i 1 j b f i 1 j 1 i 2,1 j i 對於其他情況f i j 0 有t組詢問,每次給出a,b,n,m,求f n m mod 998244353 輸入描述 第一行為乙個整數t,表示詢問個數。接下來一共t行,每行四個整數a,b,n,m。...