RSA加密算法簡單分析

?

??????

預備知識

????? 1)RSA是第一個比較完善的公開密鑰算法,它既能用于加密,也能用于數字簽名。RSA以它的三個發明者Ron Rivest, Adi Shamir, Leonard Adleman的名字首字母命名,這個算法經受住了多年深入的密碼分析,雖然密碼分析者既不能證明也不能否定RSA的安全性,但這恰恰說明該算法有一定的可信性,目前它已經成為最流行的公開密鑰算法。

????? 2) 什么是“素數”?

????? 素數是這樣的整數,它除了能表示為它自己和1的乘積以外,不能表示為任何其它兩個整數的乘積。例如,15=3*5,所以15不是素數;又如,12=6*2=4*3,所以12也不是素數。另一方面,13除了等于13*1以外,不能表示為其它任何兩個整數的乘積,所以13是一個素數。素數也稱為“質數”。

????? 3)什么是“互質數”(或“互素數”)?

????? 數學教材對互質數是這樣定義的:“公約數只有1的兩個數,叫做互質數。”這里所說的“兩個數”是指自然數。

  • ? ?? ? ???? 判別方法主要有以下幾種(不限于此):

    ?(1)兩個質數一定是互質數。例如,2與7、13與19。

    (2)一個質數如果不能整除另一個合數,這兩個數為互質數。例如,3與10、5與26。

?????    (3)1不是質數也不是合數,它和任何一個自然數在一起都是互質數。如1和9908。

????????????? (4)相鄰的兩個自然數是互質數。如15與16。

???? ? ? ? ?? (5)相鄰的兩個奇數是互質數。如49與51。

??? ? ? ? ??? (6)大數是質數的兩個數是互質數。如97與88。

?? ? ? ? ? ?? (7)小數是質數,大數不是小數的倍數的兩個數是互質數。如7和16。

? ? ? ? ? ??? (8)兩個數都是合數(二數差又較大),小數所有的質因數,都不是大數的約數,這兩個數是互質數。如357與715,357=3×7×17,而3、7和17都不是715的約數,這兩個數為互質數。等等。

????? 4)非對稱加密算法(asymmetric cryptographic algorithm)又名“公開密鑰加密算法”,非對稱加密算法需要兩個密鑰:公開密鑰(publickey)和私有密鑰(privatekey)。公開密鑰與私有密鑰是一對,如果用公開密鑰對數據進行加密,只有用對應的私有密鑰才能解密;如果用私有密鑰對數據進行加密,那么只有用對應的公開密鑰才能解密。因為加密和解密使用的是兩個不同的密鑰,所以這種算法叫作非對稱加密算法。

????? 5) 什么是模指數運算?

????? 模運算是整數運算,有一個整數m,以n為模做模運算,即m mod n。怎樣做呢?讓m去被n整除,只取所得的余數作為結果,就叫做模運算。例如,10 mod 3=1;26 mod 6=2;28 mod 2 =0等等。模指數運算就是先做指數運算,取其結果再做模運算。如53 mod 7=125 mod 7=6。

????? 6)RSA安全性分析

????? 在公布RSA算法之后,在使用RSA密碼體制和分析RSA算法發現了一系列的算法本身脆弱性及其存在的問題。

????? (1)RSA公鑰密碼體制在加密或解密變化中涉及大量的數值計算,其加密和解密的運算時間比較長,這比數據加密標準DES的計算量開銷大,在一定程度上限制了它的應用范圍,以致于實際使用RSA密碼體制無法用軟件產品,必須用超大規模集成電路的硬件產品。

????? (2)雖然提高N=P*Q的位數會大大提高RSA密碼體制的安全性,但其計算量呈指數增長,以致使其實現的難度增大,實用性降低。

????? (3)RSA公鑰密碼體制的算法完整性(指密鑰控制加密或解密變換的唯一性)和安全性(指密碼算法除密鑰本身外,不應該存在其它可破譯密碼體制的可能性)沿有等進一步完善。

????? (4)RSA算法面臨著數學方法的進步和計算機技術飛躍發展帶來的破譯密碼能力日趨增強的嚴重挑戰。因子分解問題有了長跑的發展,1995年人類成功地分解了128位十進制數RSA密碼算法,破譯512位長的RSA指日可待。

???? 盡管如此,自1978年RSA算法公布以來,公開密鑰密碼已從理論研究進入實際應用研究階段。RSA公開密鑰密碼算法在信息交換過程中使用比較廣泛,安全性比較高。以當前的計算機水平,如選擇1024位長的密鑰(相當于300位十進制數字)就認為是無法攻破的。

????? 7)CAP(Cryptographic Analysis Program)是由DR. Richard Spillman專門為教學而研制的密碼制作與分析工具,已經在美國的很多高校得到了廣泛地使用,受到了密碼學習者的普遍歡迎。

?


?

?

  • 公鑰和私鑰的簡單理解????

?                                        

初學的話對于公鑰和私鑰的理解是一個問題(我自己就是這樣(*/ω\*),所以我們再來說一下對于公鑰和私鑰的一個簡單的認識。我在網上找了一篇我理解了下面放出來讓大家參考一下,?????????????????????? 原文地址:https://blog.csdn.net/tabactivity/article/details/49685319

?

?

?

?

一、公鑰加密?
假設一下,我找了兩個數字,一個是1,一個是2。我喜歡2這個數字,就保留起來,不告訴你們(私鑰),然后我告訴大家,1是我的公鑰。

我有一個文件,不能讓別人看,我就用1加密了。別人找到了這個文件,但是他不知道2就是解密的私鑰啊,所以他解不開,只有我可以用
數字2,就是我的私鑰,來解密。這樣我就可以保護數據了。

我的好朋友x用我的公鑰1加密了字符a,加密后成了b,放在網上。別人偷到了這個文件,但是別人解不開,因為別人不知道2就是我的私鑰,
只有我才能解密,解密后就得到a。這樣,我們就可以傳送加密的數據了。

? 二、私鑰簽名
如果我用私鑰加密一段數據(當然只有我可以用私鑰加密,因為只有我知道2是我的私鑰),結果所有的人都看到我的內容了,因為他們都知
道我的公鑰是1,那么這種加密有什么用處呢?

但是我的好朋友x說有人冒充我給他發信。怎么辦呢?我把我要發的信,內容是c,用我的私鑰2,加密,加密后的內容是d,發給x,再告訴他
解密看是不是c。他用我的公鑰1解密,發現果然是c。
這個時候,他會想到,能夠用我的公鑰解密的數據,必然是用我的私鑰加的密。只有我知道我得私鑰,因此他就可以確認確實是我發的東西。
這樣我們就能確認發送方身份了。這個過程叫做數字簽名。當然具體的過程要稍微復雜一些。用私鑰來加密數據,用途就是數字簽名

舉例

比如有兩個用戶Alice和Bob,Alice想把一段明文通過雙鑰加密的技術發送給Bob,Bob有一對公鑰和私鑰,那么加密解密的過程如下:

    1. Bob將他的公開密鑰傳送給Alice。
    2. Alice用Bob的公開密鑰加密她的消息,然后傳送給Bob。
    3. Bob用他的私人密鑰解密Alice的消息。

  ??? 上面的過程可以用下圖表示,Alice使用Bob的公鑰進行加密,Bob用自己的私鑰進行解密。

?


?

RSA加解密算法的原理

? 首先產生密鑰,過程如下:

? 隨機產生兩個長度為K/2位的素數P 和 Q;

? 計算公鑰 publicKey=P*Q;(publicKey 是k位的長度)

? 隨機產生一個加密密鑰 keyE, 2<=keyE<=Φ(n)-1其中GCD(keyE, Φ(n))=1;注:這是保證解密密鑰keyE *keyD mod Φ(n)=1 有解的充要條件,Φ(n)稱為n的歐拉函數,值為: Φ(n)=(P-1)*(Q-1)

? 求解解密密鑰keyD=keyE-1 mod (n) ,keyE-1為解密密鑰keyD的逆元 ,此公式原方程為(keyE*keyD mod (n)=1)

? 由此公鑰,加密密鑰,解密密鑰全部產生。

? 其次,對明文加密或對密文進行解密,過程如下:

? (1) 加密: C = MkeyE mod publicKey;其中M表示明文,C表示密文

? (2) 解密: M = CkeyD mod publicKey. 其中M表示明文,C表示密文

?

?

?


?

  RSA加密學習的簡單例子(轉載)

我在網上看到一篇文章如下,通過簡單的舉例,我更理解了RSA算法的神奇,作者的舉例很棒。

在RSA中,最大值(稱為max)由隨機挑選的兩個素數相乘而得。公鑰和密鑰在0和最大值之間挑選(稱為pub和priv)。為了加密一個數字,讓這個數字自己乘自己pub次,并確保當乘積大于最大值時能夠回折(像時鐘一樣)。解密時,再用這個加密得到的結果自己乘自己priv次,便能退回到原始的數字。這是一件很神奇的事情!但是它確實被實現了。

為了創建RSA密鑰對,首先得隨機的挑選兩個素數來計算出max。然后從0到max中再挑選出公鑰pub,只要知道兩個素數,那么就能夠從pub中算出私鑰。這就是為什么因式分解與破解RSA有關—對max的因式分解,可以得到兩個素數,這樣你便能夠通過pub計算出某人的私鑰,從而來解密消息。

讓我們舉一個更加具體的例子吧。挑選素數13和7。他們積為91,也就是max。從0到91中挑選5作為pub來加密。利用算法Extended Euclidean,輸入參數:7,13,5,得到私鑰是29。

三個參數(max:91,pub:5,priv:29)定義了RSA系統。這時,可以取一個數字,通過乘自己5次來加密自己,然后取這個結果乘自己29次來回到原來的數字。

讓我們來加密“CLOUD”。為了能夠用數學來表示一個消息,我們必須將字母轉變為數字。一個常用的轉換方法是UTF-8。每個字母對應一個數字,如下圖:

經過編碼后的“CLOUD”是67,76,79,85,68。每個數字都小于最大值91,所以我們能夠各自對他們進行加密,為了簡便,我們以第一個字母為例:

我們讓67乘5次來加密自己:
67x67=4489=30(回折)

(回折:因為4489大于最大值max,所以我們必須回折它。我們將它除以91然后取余數,

4489=91x49+30)

30x67=2010=8

8x67=536=81

81x67=5427=58

這個結果說明67加密后為58。

為每個字母重復這個過程,我們可以加密CLOUD。

為了解密,我們需要讓58乘自己29次。

58x58=3364=88

88x58=5104=8

9x58=522=67

神奇的事情發生了!我們變回了67。

RSA加密學習的簡單例子 原文地址:https://blog.csdn.net/dianqu6970/article/details/76527572

?


?

?兩道簡單的選擇題如下:

1、在密碼學中,對RSA的描述是正確的是?

????????

? ? ? ????????????????????????????????????????????????????????????????????????????????????

  • A:RSA是秘密密鑰算法和對稱密鑰算法
  • B:RSA是非對稱密鑰算法和公鑰算法
  • C:RSA是秘密密鑰算法和非對稱密鑰算法
  • D:RSA是公鑰算法和對稱密鑰算法???????????

RSA就是非對稱的密鑰算法 ,也是公鑰算法啊

2、在RSA公鑰密碼系統中,若A想給B發送一封郵件,并且想讓B知道郵件是A發出的,則A應選用的簽名密鑰是A的私鑰,加密時用對方的公鑰,這種做法正確嗎?

  • A:正確
  • B:錯誤

私鑰用于數字簽名,公鑰用于驗證,讓B知道是A發出的當然得用A的私鑰啊~

公鑰和私鑰是成對的,它們互相解密。

公鑰加密,私鑰解密。

私鑰數字簽名,公鑰驗證。

轉載于:https://www.cnblogs.com/threesoil/p/9906818.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/396188.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/396188.shtml
英文地址,請注明出處:http://en.pswp.cn/news/396188.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C#字符串變量使用

string由于是引用類型&#xff0c;所以&#xff0c;聲明的字符串變量會存儲到堆上&#xff0c;而且該變量是不可變的&#xff0c;一旦初始化了該變量&#xff0c;該內存區域中存儲的內容將不能更改。在對字符串操作時&#xff0c;是在堆上創建了一個新的字符串變量&#xff0c;…

c語輸入單引號_C語言的printf不能用單引號?

多年沒用C語言了。近日用R語言編程時因有太多循環&#xff0c;只好用C寫個擴展模塊&#xff0c;一時竟不知怎么動手了。在多種語言中&#xff0c;單引號和雙引號是可以等同使用的。因鍵入雙引號要比單引號多按一SHIFT鍵&#xff0c;我偏好單引號。在用printf顯示字符串&#xf…

css flexbox模型_CSS Flexbox在全國范圍內的公路旅行中得到了解釋

css flexbox模型by Kevin Kononenko凱文科諾年科(Kevin Kononenko) CSS Flexbox在全國范圍內的公路旅行中得到了解釋 (CSS Flexbox Explained by Road Tripping Across the Country) 如果您旅行很長&#xff0c;那么您可以了解CSS Flexbox&#xff01; (If you have ever been…

oracle 10g 白皮書,Oracle 10g標準版與企業版

beautiful 于 2007-03-06 00:43:37發表:最后還有一些關于oracle產品的FAQ&#xff1a;1. Oracle數據庫軟件目前在售的版本號&#xff1f;A&#xff1a;目前在售的是Oracle 9i 和Oracle 10g2. 10g是不是比9i更好&#xff1f;A&#xff1a;一個新版本的軟件推出以后&#xff0c;總…

Linux 小筆記

1、查看linux 版本 按ctrlshiftt 快捷鍵&#xff0c;打開終端&#xff0c;輸入sudo uname --m &#xff0c;按下enter 如果顯示i686,你安裝了32位操作系統 如果顯示 x86_64&#xff0c;你安裝了64位操作系統 轉載于:https://www.cnblogs.com/1995hxt/p/5436683.html

不會發布npm包?進來看看?

前言 npm(Node Package Manager)&#xff0c;一個Node的包管理器&#xff0c;平時我們常用的公共模塊&#xff08;插件&#xff09;或者叫做包大多都放在上面&#xff0c;所以接下來要封裝的插件&#xff0c;我們就簡單稱它為npm包&#xff0c;本文從就從這個簡單的例子開始&am…

如何讓帝國CMS7.2搜索模板支持動態標簽調用

帝國cms站內搜索一般不支持動態標簽調用&#xff0c;如果要調用如何實現呢&#xff1f;修改兩個地方就可以實現了。打開 /e/search/result/index.php 文件&#xff0c;找到&#xff08;文件改了&#xff0c;不會調用也是徒勞&#xff01;看看這個帝國cms搜索關鍵字調用標簽(sho…

access字體變為斜體_Linux折騰記(四):Linux桌面系統字體配置詳解

字體顯示效果測試文字&#xff1a;復制代碼代碼如下:這一段是為了測試宋體字的顯示效果&#xff0c;包括宋體里面自帶的英文字體&#xff0c;“This is english,how does it look like?”。這一行是小字。后面幾個字是加粗的宋體。標點符號“&#xff0c;。&#xff1a;&#…

oracle between and monday,oracle——時間

時間數據1. 插入時間數據插入語法命令&#xff1a;insert into floor values (to_date(年-月-日 時:分:秒,YYYY-MM-DD HH24:MI:SS));完整的時間插入insert into floor values (to_date(2010-07-12 09:10:12,YYYY-MM-DD HH24:MI:SS));查詢顯示&#xff1a;2010-07-12 09:10:12.0…

Nova 組件詳解 - 每天5分鐘玩轉 OpenStack(26)

本節開始&#xff0c;我們將詳細講解 Nova 的各個子服務。 前面架構概覽一節知道 Nova 有若干 nova-* 的子服務&#xff0c;下面我們將依次學習最重要的幾個。今天先討論 nova-api 和 nova-conductor。 nova-api Nova-api 是整個 Nova 組件的門戶&#xff0c;所有對 Nova 的請…

肯德基圣代中間空心_建造冰淇淋圣代解釋CSS位置

肯德基圣代中間空心by Kevin Kononenko凱文科諾年科(Kevin Kononenko) 建造冰淇淋圣代解釋CSS位置 (CSS Positioning Explained By Building An Ice Cream Sundae) 如果您之前做過冰淇淋圣代&#xff0c;那么您可以了解CSS的位置。 (If you’ve made an ice cream sundae befo…

00

&#xff08;1&#xff09;設置gcc 把所有gcc版本解壓到/home/flinn/tools/目錄下&#xff0c;以免切換編譯器export PATHPATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/flinn/tools/4.4.3/bin &#xff08;2&#xff09;編譯&#xff1…

12_04_Linux軟件管理之四yum

2019獨角獸企業重金招聘Python工程師標準>>> RPM安裝&#xff1a; 二進制格式&#xff1a; 源程序--》編譯--》二進制格式 有些特性是編譯時選定的&#xff0c;如果編譯時未選定此特性&#xff0c;將無法使用&#xff1b; rpm包的版本會落后于源碼包&#xff0c;甚至…

datastage 函數_DataStage常用函數大全

1/38DataStage常用函數大全DATASTAGE常用函數大全.................................................................................................1一、類型轉換函數................................................................................................…

linux 解析elf文件格式,Linux下ELF文件解析

1. windows PE文件與Linux ELF文件概述在windows中可執行文件是pe文件格式&#xff0c;Linux中可執行文件是ELF文件&#xff0c;其文件格式是ELF文件格式&#xff0c;在Linux下的ELF文件除了可執行文件(Excutable File),可重定位目標文件(RellocatableObject File)、共享目標文…

富爸爸窮爸爸害了我_這是我必須告訴爸爸的-在我們的時間用完之前

富爸爸窮爸爸害了我by Bram Bos通過Bram Bos 這是我必須告訴爸爸的-在我們的時間用完之前 (This is what I must tell my dad — before our time runs out) I was a young boy in the 1980s. Like the typical Generation-X kid, I grew up in the days of the home computer…

應用容器公共免費部署平臺

從網上信息&#xff0c;發現了一個公共的容器部署平臺 openshift.com&#xff0c;可以將我們封裝好的docker鏡像部署到平臺上&#xff0c; 這樣就不需要擁有一臺云服務器了。對于測試環境非常有用。 首先當然是需要注冊。這里全英文 第二&#xff0c;注冊之后需要選擇你想要的套…

西門子rwd68溫控器說明書_西門子RWD68說明書

西門子RWD68說明書顯示第一界面Y1XX模擬量輸出電壓值YIXX傳感器此時實際溫度&#xff1b;同時按—鍵五秒顯示第二界面PS4主控制回路參數&#xff1b;按—鍵顯示第三界面PS3輔助回路參數但僅在室外補償時出現&#xff1b;按—鍵顯示第四界面PS2按—鍵顯示第五界面PS1控制曲線運用…

linux 內存管理優化,Linux性能優化實戰 內存篇 閱讀筆記

第十五講 基礎篇&#xff1a;Linux內存是怎么工作的(2020.6.8)這一講相關的內容正好之前看csapp的時候總結了一下&#xff0c;可以直接貼出來作為總結了。Linux的內存工作原理&#xff0c;這又是一個特別大的話題。一切向著盡量利用物理資源的方向在發展&#xff0c;在沒有虛擬…

傅里葉變換與大數乘法

我們知道&#xff0c;兩個 N 位數字的整數的乘法&#xff0c;如果使用常規的算法&#xff0c;時間復雜度是 O(N2)。然而&#xff0c;使用快速傅里葉變換&#xff0c;時間復雜度可以降低到 O(N logN loglogN)。 假設我們要計算以下兩個 N 位數字的乘積&#xff1a; a (aN-1aN-2…