使用Python建立RSA金鑰



在本文中,我們將討論如何建立RSA金鑰。RSA是一種眾所周知的加密演算法,用於保護資料安全。它基於兩個金鑰:公鑰和私鑰。公鑰用於加密,私鑰用於解密。

RSA金鑰是使用利用大素數的數學過程建立的。要生成RSA金鑰,會選擇兩個大素數並將其相乘。該乘積構成公鑰和私鑰的模數。RSA的安全依賴於將模數分解成其原始素數因子的難度,特別是如果使用的數字非常大的話。

公鑰和私鑰

RSA是一種密碼方法,它使用一對金鑰:一個公開共享的公鑰用於加密訊息,一個秘密的私鑰用於解密訊息。私鑰必須保密,並且只能由其所有者訪問。

加密和解密

安全傳送訊息時,傳送方使用接收方的公開金鑰對其進行編碼。

要解鎖加密的訊息,接收方需要使用其秘密私鑰。

這種獨特的加密系統保證,即使編碼的訊息與公鑰一起被攔截,它仍然是安全的,因為私鑰無法被未經授權的人訪問。

金鑰生成步驟

RSA需要一個乘法群G = < ZΦn, *, X > 用於金鑰生成。該群只提供乘法和除法,這是生成公鑰和私鑰所必需的。該群對公眾保密,因為它的模數Φ(n) 對公眾隱藏。

公鑰和私鑰生成演算法是RSA密碼學中最難的部分。使用Rabin-Miller素性檢驗演算法生成兩個大素數p和q。

透過將p和q相乘計算模數n。此數字可由公鑰和私鑰使用,並支援它們之間的連線。它的長度(通常以位定義)稱為金鑰長度。

公鑰包括模數n和公鑰指數e,它通常設定為65537,因為它是一個不太大的素數。e值不必是私下選擇的素數,因為公鑰與所有人共享。

私鑰包括模數n和私鑰指數d,它使用擴充套件歐幾里得演算法計算,以發現關於n的totient的乘法逆。

考慮模n的算術,假設e是一個與n的totient Φ(n)互質的整數。此外,可以說d是e模Φ(n)的乘法逆。為方便起見,下面列出了幾個符號的定義:

  • n = 模數運算的模數
  • Φ(n) = n的totient
  • e = 與Φ(n)互質的整數
  • [這保證e將擁有模Φ(n)的乘法逆]
  • d = e模Φ(n)的乘法逆

金鑰生成的計算步驟如下:

  • 生成兩個不同的素數p和q。
  • 計算模數n = p x q
  • 計算totient Φ(n) = (p - 1) x (q - 1)
  • 選擇一個整數e作為公鑰指數,使得1 < e < Φ(n)且gcd(Φ(n), e) = 1。
  • 計算私鑰指數d的值,使得d = e-1 mod Φ(n)
  • 公鑰 = [e, n]
  • 私鑰 = [d, n]

安裝所需的庫

首先確保你的系統上安裝了Python。然後,啟動終端或命令提示符,並使用“pip”包安裝程式安裝密碼庫:

pip install cryptography

RSA金鑰的生成

在這個Python程式中,我們將建立RSA金鑰,這些金鑰可用於安全的訊息加密和解密。首先匯入金鑰生成所需的模組。然後,它將生成一個新的RSA金鑰對,其中包含私鑰和公鑰(2048位)。私鑰以PEM格式儲存,PEM是一種廣泛使用的加密金鑰編碼標準。公鑰以PEM格式儲存,並具有適當的格式。最後,金鑰將儲存為'private_key.pem'和'public_key.pem'。此程式碼對於建立需要資料保護的安全通訊通道非常重要。

要建立金鑰,需要開啟你喜歡的文字編輯器或Python IDE。建立一個新的Python指令碼,並將其命名為類似rsa_key_generation.py的檔案。然後,需要將下面的程式碼複製貼上到你的指令碼中:

示例

from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography.hazmat.backends import default_backend

# create a new RSA key pair
private_key = rsa.generate_private_key(
   public_exponent=65537,
   key_size=2048,
   backend=default_backend()
)

# get the public key from the private key
public_key = private_key.public_key()

# the private key to PEM format
private_key_pem = private_key.private_bytes(
   encoding=serialization.Encoding.PEM,
   format=serialization.PrivateFormat.PKCS8,
   encryption_algorithm=serialization.NoEncryption()
)

# the public key to PEM format
public_key_pem = public_key.public_bytes(
   encoding=serialization.Encoding.PEM,
   format=serialization.PublicFormat.SubjectPublicKeyInfo
)

# save the keys to files
with open('private_key.pem', 'wb') as f:
   f.write(private_key_pem)
with open('public_key.pem', 'wb') as f:
   f.write(public_key_pem)
print("RSA keys have been generated successfully!")

執行程式碼

  • 儲存你的Python程式。
  • 開啟終端或命令提示符。
  • 導航到儲存程式碼的目錄。

鍵入以下命令執行指令碼:

python rsa_key_generation.py

輸出

執行程式後,你將在儲存程式的特定目錄中看到兩個檔案。檔名將是private_key.pem和public_key.pem。

這些檔案將分別以PEM格式包含你的私鑰和公鑰。

PEM(隱私增強郵件)檔案是一種標準的數字安全格式,用於在PKI框架記憶體儲加密金鑰和證書。PEM最初設計用於增強電子郵件安全性,現已發展成為各種線上安全應用中廣泛接受的標準。

RSA keys have been generated successfully!
RSA keys implementation

搞定了!我們已經藉助Python的加密庫成功建立了RSA金鑰。您現在可以在您的應用程式中使用這些金鑰進行加密和解密。

限制與注意事項

關於RSA金鑰,您應該瞭解一些限制和注意事項:

  • RSA加密和解密可能需要大量的處理能力,尤其是在使用更長的金鑰時。
  • 隨著計算機效能的提升,我們可能需要使用更長的金鑰來保持安全性。
  • RSA有一些攻擊者可以利用的弱點,例如嘗試分解大數或使用某些加密訊息。在將RSA用於安全目的時,應牢記這些弱點。

總結

本章我們探討了如何使用Python建立RSA加密金鑰。RSA涉及使用一對金鑰:一個公開的金鑰用於加密資料,一個私鑰用於解密資料。這些RSA金鑰使用大素數生成,使得它們難以破解。我們建立了一對金鑰,包含一個私鑰和相應的公鑰。我們還了解了安裝Python庫和編寫RSA金鑰生成程式碼的方法。最後,我們學習瞭如何執行程式碼並將生成的金鑰儲存為檔案。這些理解有助於我們開發安全的通訊系統,保護資料免受未經授權的訪問。

廣告
© . All rights reserved.