導航:首頁 > 源碼編譯 > 私鑰生成演算法

私鑰生成演算法

發布時間:2022-07-16 21:47:48

㈠ 簡述RSA體制密鑰的生成及其加密、解密演算法

RSA體制密鑰的生成:
1. 選擇兩個大素數,p 和q 。

2. 計算: n = p * q (p,q分別為兩個互異的大素數,p,q 必須保密,一般要求p,q為安全素數,n的長度大於512bit ,這主要是因為RSA演算法的安全性依賴於因子分解大數問題)。有歐拉函數 (n)=(p-1)(q-1)。

3. 然後隨機選擇加密密鑰e,要求 e 和 ( p - 1 ) * ( q - 1 ) 互質。

4. 最後,利用Euclid 演算法計算解密密鑰d, 滿足de≡1(mod φ(n))。其中n和d也要互質。數e和n是公鑰,d是私鑰。兩個素數p和q不再需要,應該丟棄,不要讓任何人知道。

加密、解密演算法:

1. 加密信息 m(二進製表示)時,首先把m分成等長數據塊 m1 ,m2,..., mi ,塊長s,其中 2^s <= n, s 盡可能的大。

2. 對應的密文是:ci ≡mi^e ( mod n ) ( a )

3. 解密時作如下計算:mi ≡ci^d ( mod n ) ( b ) RSA 可用於數字簽名,方案是用 ( a ) 式簽名, ( b )式驗證。

㈡ 公鑰和私鑰加密主要演算法有哪些,其基本思想是什麼

加密演算法

加密技術是對信息進行編碼和解碼的技術,編碼是把原來可讀信息(又稱明文)譯成代碼形式(又稱密文),其逆過程就是解碼(解密)。加密技術的要點是加密演算法,加密演算法可以分為對稱加密、不對稱加密和不可逆加密三類演算法。

對稱加密演算法 對稱加密演算法是應用較早的加密演算法,技術成熟。在對稱加密演算法中,數據發信方將明文(原始數據)和加密密鑰一起經過特殊加密演算法處理後,使其變成復雜的加密密文發送出去。收信方收到密文後,若想解讀原文,則需要使用加密用過的密鑰及相同演算法的逆演算法對密文進行解密,才能使其恢復成可讀明文。在對稱加密演算法中,使用的密鑰只有一個,發收信雙方都使用這個密鑰對數據進行加密和解密,這就要求解密方事先必須知道加密密鑰。對稱加密演算法的特點是演算法公開、計算量小、加密速度快、加密效率高。不足之處是,交易雙方都使用同樣鑰匙,安全性得不到保證。此外,每對用戶每次使用對稱加密演算法時,都需要使用其他人不知道的惟一鑰匙,這會使得發收信雙方所擁有的鑰匙數量成幾何級數增長,密鑰管理成為用戶的負擔。對稱加密演算法在分布式網路系統上使用較為困難,主要是因為密鑰管理困難,使用成本較高。在計算機專網系統中廣泛使用的對稱加密演算法有DES和IDEA等。美國國家標准局倡導的AES即將作為新標准取代DES。

不對稱加密演算法不對稱加密演算法使用兩把完全不同但又是完全匹配的一對鑰匙—公鑰和私鑰。在使用不對稱加密演算法加密文件時,只有使用匹配的一對公鑰和私鑰,才能完成對明文的加密和解密過程。加密明文時採用公鑰加密,解密密文時使用私鑰才能完成,而且發信方(加密者)知道收信方的公鑰,只有收信方(解密者)才是唯一知道自己私鑰的人。不對稱加密演算法的基本原理是,如果發信方想發送只有收信方才能解讀的加密信息,發信方必須首先知道收信方的公鑰,然後利用收信方的公鑰來加密原文;收信方收到加密密文後,使用自己的私鑰才能解密密文。顯然,採用不對稱加密演算法,收發信雙方在通信之前,收信方必須將自己早已隨機生成的公鑰送給發信方,而自己保留私鑰。由於不對稱演算法擁有兩個密鑰,因而特別適用於分布式系統中的數據加密。廣泛應用的不對稱加密演算法有RSA演算法和美國國家標准局提出的DSA。以不對稱加密演算法為基礎的加密技術應用非常廣泛。

不可逆加密演算法 不可逆加密演算法的特徵是加密過程中不需要使用密鑰,輸入明文後由系統直接經過加密演算法處理成密文,這種加密後的數據是無法被解密的,只有重新輸入明文,並再次經過同樣不可逆的加密演算法處理,得到相同的加密密文並被系統重新識別後,才能真正解密。顯然,在這類加密過程中,加密是自己,解密還得是自己,而所謂解密,實際上就是重新加一次密,所應用的「密碼」也就是輸入的明文。不可逆加密演算法不存在密鑰保管和分發問題,非常適合在分布式網路系統上使用,但因加密計算復雜,工作量相當繁重,通常只在數據量有限的情形下使用,如廣泛應用在計算機系統中的口令加密,利用的就是不可逆加密演算法。近年來,隨著計算機系統性能的不斷提高,不可逆加密的應用領域正在逐漸增大。在計算機網路中應用較多不可逆加密演算法的有RSA公司發明的MD5演算法和由美國國家標准局建議的不可逆加密標准SHS(Secure Hash Standard:安全雜亂信息標准)等。

加密技術

加密演算法是加密技術的基礎,任何一種成熟的加密技術都是建立多種加密演算法組合,或者加密演算法和其他應用軟體有機結合的基礎之上的。下面我們介紹幾種在計算機網路應用領域廣泛應用的加密技術。

非否認(Non-repudiation)技術 該技術的核心是不對稱加密演算法的公鑰技術,通過產生一個與用戶認證數據有關的數字簽名來完成。當用戶執行某一交易時,這種簽名能夠保證用戶今後無法否認該交易發生的事實。由於非否認技術的操作過程簡單,而且直接包含在用戶的某類正常的電子交易中,因而成為當前用戶進行電子商務、取得商務信任的重要保證。

PGP(Pretty Good Privacy)技術 PGP技術是一個基於不對稱加密演算法RSA公鑰體系的郵件加密技術,也是一種操作簡單、使用方便、普及程度較高的加密軟體。PGP技術不但可以對電子郵件加密,防止非授權者閱讀信件;還能對電子郵件附加數字簽名,使收信人能明確了解發信人的真實身份;也可以在不需要通過任何保密渠道傳遞密鑰的情況下,使人們安全地進行保密通信。PGP技術創造性地把RSA不對稱加密演算法的方便性和傳統加密體系結合起來,在數字簽名和密鑰認證管理機制方面採用了無縫結合的巧妙設計,使其幾乎成為最為流行的公鑰加密軟體包。

數字簽名(Digital Signature)技術 數字簽名技術是不對稱加密演算法的典型應用。數字簽名的應用過程是,數據源發送方使用自己的私鑰對數據校驗和或其他與數據內容有關的變數進行加密處理,完成對數據的合法「簽名」,數據接收方則利用對方的公鑰來解讀收到的「數字簽名」,並將解讀結果用於對數據完整性的檢驗,以確認簽名的合法性。數字簽名技術是在網路系統虛擬環境中確認身份的重要技術,完全可以代替現實過程中的「親筆簽字」,在技術和法律上有保證。在公鑰與私鑰管理方面,數字簽名應用與加密郵件PGP技術正好相反。在數字簽名應用中,發送者的公鑰可以很方便地得到,但他的私鑰則需要嚴格保密。

PKI(Public Key Infrastructure)技術 PKI技術是一種以不對稱加密技術為核心、可以為網路提供安全服務的公鑰基礎設施。PKI技術最初主要應用在Internet環境中,為復雜的互聯網系統提供統一的身份認證、數據加密和完整性保障機制。由於PKI技術在網路安全領域所表現出的巨大優勢,因而受到銀行、證券、政府等核心應用系統的青睞。PKI技術既是信息安全技術的核心,也是電子商務的關鍵和基礎技術。由於通過網路進行的電子商務、電子政務等活動缺少物理接觸,因而使得利用電子方式驗證信任關系變得至關重要,PKI技術恰好能夠有效解決電子商務應用中的機密性、真實性、完整性、不可否認性和存取控制等安全問題。一個實用的PKI體系還必須充分考慮互操作性和可擴展性。PKI體系所包含的認證中心(CA)、注冊中心(RA)、策略管理、密鑰與證書管理、密鑰備份與恢復、撤銷系統等功能模塊應該有機地結合在一起。

加密的未來趨勢

盡管雙鑰密碼體制比單鑰密碼體制更為可靠,但由於計算過於復雜,雙鑰密碼體制在進行大信息量通信時,加密速率僅為單鑰體制的1/100,甚至是 1/1000。正是由於不同體制的加密演算法各有所長,所以在今後相當長的一段時期內,各類加密體制將會共同發展。而在由IBM等公司於1996年聯合推出的用於電子商務的協議標准SET(Secure Electronic Transaction)中和1992年由多國聯合開發的PGP技術中,均採用了包含單鑰密碼、雙鑰密碼、單向雜湊演算法和隨機數生成演算法在內的混合密碼系統的動向來看,這似乎從一個側面展示了今後密碼技術應用的未來。

在單鑰密碼領域,一次一密被認為是最為可靠的機制,但是由於流密碼體制中的密鑰流生成器在演算法上未能突破有限循環,故一直未被廣泛應用。如果找到一個在演算法上接近無限循環的密鑰流生成器,該體制將會有一個質的飛躍。近年來,混沌學理論的研究給在這一方向產生突破帶來了曙光。此外,充滿生氣的量子密碼被認為是一個潛在的發展方向,因為它是基於光學和量子力學理論的。該理論對於在光纖通信中加強信息安全、對付擁有量子計算能力的破譯無疑是一種理想的解決方法。

由於電子商務等民用系統的應用需求,認證加密演算法也將有較大發展。此外,在傳統密碼體制中,還將會產生類似於IDEA這樣的新成員,新成員的一個主要特徵就是在演算法上有創新和突破,而不僅僅是對傳統演算法進行修正或改進。密碼學是一個正在不斷發展的年輕學科,任何未被認識的加/解密機制都有可能在其中佔有一席之地。

目前,對信息系統或電子郵件的安全問題,還沒有一個非常有效的解決方案,其主要原因是由於互聯網固有的異構性,沒有一個單一的信任機構可以滿足互聯網全程異構性的所有需要,也沒有一個單一的協議能夠適用於互聯網全程異構性的所有情況。解決的辦法只有依靠軟體代理了,即採用軟體代理來自動管理用戶所持有的證書(即用戶所屬的信任結構)以及用戶所有的行為。每當用戶要發送一則消息或一封電子郵件時,代理就會自動與對方的代理協商,找出一個共同信任的機構或一個通用協議來進行通信。在互聯網環境中,下一代的安全信息系統會自動為用戶發送加密郵件,同樣當用戶要向某人發送電子郵件時,用戶的本地代理首先將與對方的代理交互,協商一個適合雙方的認證機構。當然,電子郵件也需要不同的技術支持,因為電子郵件不是端到端的通信,而是通過多個中間機構把電子郵件分程傳遞到各自的通信機器上,最後到達目的地。

㈢ windows怎麼生成公鑰私鑰

公鑰通常用於加密會話密鑰、驗證數字簽名,或加密可以用相應的私鑰解密的數據。 公鑰是通過一種演算法得到的一個密鑰對(即一個公鑰)其中的一個向外界公開,稱為公鑰。通過這種演算法得到的密鑰對能保證在世界范圍內是唯一的。 使用這個密鑰對的時候,如果用其中一個密鑰加密一段數據,必須用另一個密鑰解密。比如用公鑰加密數據就必須用私鑰解密,否則解密將不會成功。公開鑰匙演算法大多基於計算復雜度上的難題,通常來自於數論。例如,RSA源於整數因子分解問題;DSA源於離散對數問題。近年發展快速的橢圓曲線密碼學則基於和橢圓曲線相關的數學難題,與離散對數相當。由於這些底層的問題多涉及模數乘法或指數運算,相對於分組密碼需要更多計算資源。因此,公開鑰匙系統通常是復合式的,內含一個高效率的對稱鑰匙演算法,用以加密信息,再以公開鑰匙加密對稱鑰匙系統所使用的鑰匙,以增進效率。其缺點是對大容量的信息加密速度慢,優點是可以作為身份認證,而且密鑰發送方式比較簡單安全。常見的公開密鑰加密演算法有RSA,DSA,ECA等。

㈣ 公鑰和私鑰是如何產生的

但是既然這個規律(公鑰)已經被公布出來了,為什麼還需要另一個規律(私鑰)來解密,我們把給出的公鑰進行反向一下不就可以解密了嗎?為什麼公鑰解不凱密文?

首先公鑰、私鑰都可以加密的(只是加密的用途不同),而解密要兩個混合才行

你所說的「公鑰進行反向」不是很對,你學過化學 那雞蛋加熱後再冷卻能成原來的樣子嗎? 並不是所有的都是可逆的

加密解密的過程是用到 兩個很大的素數的乘積來因式分解(據我了解),具體方法我也不懂 那是三個很著名的數學家一起弄出來的 ,還因為這個得了諾貝爾獎 呵呵

㈤ RSA的公鑰和私鑰到底哪個才是用來加密和哪個用來解密

我們來回顧一下RSA的加密演算法。我們從公鑰加密演算法和簽名演算法的定義出發,用比較規范的語言來描述這一演算法。
RSA公鑰加密體制包含如下3個演算法:KeyGen(密鑰生成演算法),Encrypt(加密演算法)以及Decrypt(解密演算法)。
(PK, SK)\leftarrow KeyGen(\lambda)。密鑰生成演算法以安全常數\lambda作為輸入,輸出一個公鑰PK,和一個私鑰SK。安全常數用於確定這個加密演算法的安全性有多高,一般以加密演算法使用的質數p的大小有關。\lambda越大,質數p一般越大,保證體制有更高的安全性。在RSA中,密鑰生成演算法如下:演算法首先隨機產生兩個不同大質數p和q,計算N=pq。隨後,演算法計算歐拉函數\varphi(N)=(p-1)(q-1)。接下來,演算法隨機選擇一個小於\varphi(N)的整數e,並計算e關於\varphi(N)的模反元素d。最後,公鑰為PK=(N, e),私鑰為SK=(N, d)。
CT \leftarrow Encrypt(PK,M)。加密演算法以公鑰PK和待加密的消息M作為輸入,輸出密文CT。在RSA中,加密演算法如下:演算法直接輸出密文為CT=M^e \mod \varphi(N)
M \leftarrow Decrypt(SK,CT)。解密演算法以私鑰SK和密文CT作為輸入,輸出消息M。在RSA中,解密演算法如下:演算法直接輸出明文為M=CT^d \mod \varphi(N)。由於e和d在\varphi(N)下互逆,因此我們有:CT^d=M^{ed}=M\mod \varphi(N)
所以,從演算法描述中我們也可以看出:公鑰用於對數據進行加密,私鑰用於對數據進行解密。當然了,這個也可以很直觀的理解:公鑰就是公開的密鑰,其公開了大家才能用它來加密數據。私鑰是私有的密鑰,誰有這個密鑰才能夠解密密文。否則大家都能看到私鑰,就都能解密,那不就亂套了。

=================分割線=================
我們再來回顧一下RSA簽名體制。簽名體制同樣包含3個演算法:KeyGen(密鑰生成演算法),Sign(簽名演算法),Verify(驗證演算法)。
(PK,SK) \leftarrow KeyGen(\lambda)。密鑰生成演算法同樣以安全常數\lambda作為輸入,輸出一個公鑰PK和一個私鑰SK。在RSA簽名中,密鑰生成演算法與加密演算法完全相同。
\sigma \leftarrow Sign(SK,M)。簽名演算法以私鑰SK和待簽名的消息M作為輸入,輸出簽名\sigma。在RSA簽名中,簽名演算法直接輸出簽名為\sigma = M^d \mod \varphi(N)。注意,簽名演算法和RSA加密體制中的解密演算法非常像。
b \leftarrow Verify(PK,\sigma,M)。驗證演算法以公鑰PK,簽名\sigma以及消息M作為輸入,輸出一個比特值b。b=1意味著驗證通過。b=0意味著驗證不通過。在RSA簽名中,驗證演算法首先計算M'=\sigma^e \mod \varphi(N),隨後對比M'與M,如果相等,則輸出b=1,否則輸出b=0。注意:驗證演算法和RSA加密體制中的加密演算法非常像。
所以,在簽名演算法中,私鑰用於對數據進行簽名,公鑰用於對簽名進行驗證。這也可以直觀地進行理解:對一個文件簽名,當然要用私鑰,因為我們希望只有自己才能完成簽字。驗證過程當然希望所有人都能夠執行,大家看到簽名都能通過驗證證明確實是我自己簽的。

=================分割線=================
那麼,為什麼題主問這么一個問題呢?我們可以看到,RSA的加密/驗證,解密/簽字過程太像了。同時,RSA體制本身就是對稱的:如果我們反過來把e看成私鑰,d看成公鑰,這個體制也能很好的執行。我想正是由於這個原因,題主在學習RSA體制的時候才會出現這種混亂。那麼解決方法是什麼呢?建議題主可以學習一下其他的公鑰加密體制以及簽名體制。其他的體制是沒有這種對稱性質的。舉例來說,公鑰加密體制的話可以看一看ElGamal加密,以及更安全的Cramer-Shoup加密。簽名體制的話可以進一步看看ElGamal簽名,甚至是BLS簽名,這些體制可能能夠幫助題主更好的弄清加密和簽名之間的區別和潛在的聯系。
至於題主問的加密和簽名是怎麼結合的。這種體制叫做簽密方案(SignCrypt),RSA中,這種簽密方案看起來特別特別像,很容易引起混亂。在此我不太想詳細介紹RSA中的加密與簽字結合的方案。我想提醒題主的是,加密與簽字結合時,兩套公私鑰是不同的。

㈥ 公鑰私鑰加密技術怎麼做

數字簽名演算法依賴於公開密鑰加密。在公開密鑰加密中,每個用戶都有一對密鑰: 一個公鑰和一個私鑰。公鑰是自由發布的,但私鑰是保密的; 另一個要求是不可能從公鑰推斷私鑰。常用的數字簽名演算法包括三種: 1。密碼生成演算法;。標簽演算法; 3。驗證演算法。

php 怎麼生成rsa加密的公鑰和私鑰

附上出處鏈接:http://bbs.csdn.net/topics/370014844

四,用PHP生成密鑰

PEAR::Crypt_RSA的Crypt_RSA_KeyPair類可以生成密鑰。調用步驟如下:

require_once('Crypt/RSA.php');
$math_obj = &Crypt_RSA_MathLoader::loadWrapper();
$key_pair = new Crypt_RSA_KeyPair($key_lenth);
if (!$key_pair->isError()){
$public_key = $key_pair->getPublicKey();
$private_key = $key_pair->getPrivateKey();
$e =$math_obj->hexstr($math_obj->bin2int($public_key->getExponent()));
$d =$math_obj->hexstr($math_obj->bin2int($private_key->getExponent()));
$n =$math_obj->hexstr($math_obj->bin2int($public_key->getMolus()));
}

hexstr()是自己添加的函數,用來把十進制字元串轉換為十六進制。對Crypt_RSA_Math_GMP很簡單,只需:

function hexstr($num){
return gmp_strval($num,16);
}

對Crypt_RSA_Math_BCMath略麻煩些:

function hexstr($num){
$result = '';
do{
$result = sprintf('%02x',intval(bcmod($num,256))).$result;
$num = bcdiv($num, 256);
}while(bccomp($num, 0));
return ltrim($result,'0');
}

五,用php生成密鑰(二)

為了提高加密速度,一般選一個較小的e。比較常用的是3、17、257、65537幾個素數。

generate()生成密鑰的演算法是依次計算p,q,n,e,d。因此做了如下改動,以便可以自己選e值:

原來的:
function Crypt_RSA_KeyPair($key_len, $wrapper_name = 'default', $error_handler = '')
改後增加一個參數e:
function Crypt_RSA_KeyPair($key_len, $e = null, $wrapper_name = 'default', $error_handler = '')
這個函數調用generate()。效應地:
function generate($key_len = null)
也增加一個參數e:
function generate($key_len = null, $e = null)

把CRYPT_RSA-1.0.0的KeyPair.php中屬於generate()的245~271行改動順序,由e確定p和q:

if($e != null&&$this->_math_obj->cmpAbs($e,2)>0)
$e = $this->_math_obj->nextPrime($this->_math_obj->dec($e));//取個素數
else
{
while(true)
{
$e = $this->_math_obj->getRand($q_len, $this->_random_generator);
if ($this->_math_obj->cmpAbs($e,2)<=0)
continue;
$e = $this->_math_obj->nextPrime($this->_math_obj->dec($e));
break;
}
}
do{
$p = $this->_math_obj->getRand($p_len, $this->_random_generator, true);
$p = $this->_math_obj->nextPrime($p);
do{
do{
$q = $this->_math_obj->getRand($q_len, $this->_random_generator, true);
$tmp_len = $this->_math_obj->bitLen($this->_math_obj->mul($p, $q));
if ($tmp_len < $key_len)
$q_len++;
elseif ($tmp_len > $key_len)
$q_len--;
} while ($tmp_len != $key_len);
$q = $this->_math_obj->nextPrime($q);
$tmp = $this->_math_obj->mul($p, $q);
} while ($this->_math_obj->bitLen($tmp) != $key_len);
// $n - is shared molus
$n = $this->_math_obj->mul($p, $q);
// generate public ($e) and private ($d) keys
$pq = $this->_math_obj->mul($this->_math_obj->dec($p), $this->_math_obj->dec($q));
if($this->_math_obj->isZero($this->_math_obj->dec($this->_math_obj->gcd($e, $pq))))
break;
}while(true);

(網易的服務真體貼啊,連pre標記裡面的東西都給改。還改不好)這樣,如果要生成e為3的1024位密鑰,可以如下調用:

$key_pair = new Crypt_RSA_KeyPair(1024,3);

六,干什麼用

加密比較重要的數據。比如注冊時用戶輸入的密碼。
登錄時把密碼hmac一下就可以防止重放攻擊(replay attack)了。對注冊不存在這種攻擊,但有密碼泄露的危險。上傳密碼hash那點安全性根本不算什麼。這個可以用RSA加密解決。
不過,對中間人攻擊還是沒辦法。

另外一個

http://www.mingup.cn/php/2011/0121/101568.html

閱讀全文

與私鑰生成演算法相關的資料

熱點內容
噴油螺桿製冷壓縮機 瀏覽:577
python員工信息登記表 瀏覽:375
高中美術pdf 瀏覽:158
java實現排列 瀏覽:511
javavector的用法 瀏覽:979
osi實現加密的三層 瀏覽:230
大眾寶來原廠中控如何安裝app 瀏覽:911
linux內核根文件系統 瀏覽:240
3d的命令面板不見了 瀏覽:523
武漢理工大學伺服器ip地址 瀏覽:146
亞馬遜雲伺服器登錄 瀏覽:521
安卓手機如何進行文件處理 瀏覽:70
mysql執行系統命令 瀏覽:928
php支持curlhttps 瀏覽:142
新預演算法責任 瀏覽:443
伺服器如何處理5萬人同時在線 瀏覽:249
哈夫曼編碼數據壓縮 瀏覽:424
鎖定伺服器是什麼意思 瀏覽:383
場景檢測演算法 瀏覽:616
解壓手機軟體觸屏 瀏覽:348