Dual Regev Encryption
Project description
簡介
- 此repository實現Craig Gentry等人提出的非對稱式加密演算法,此演算法的安全性為基於lattice base的困難問題,可以抵抗量子電腦破密攻擊。演算法詳細過程請見此篇論文的7-1小節。
- 由於基於lattice base的演算法有運算成本非常高的通病(因為有相當多的矩陣乘法),實務上請務必搭配其他高效演算法(例如AES128、AES256)使用。
- library中所有矩陣乘法通通沒有用numpy,所以效率很差哦@@。
注意事項
- 開發版本:python 3.9.1
- 外部引用:__future__、random、multiprocessing、base64
如何使用
1. 生成公鑰、私鑰對
需要載入兩個module,其中Crypto包含加解密所需要的類別、並且config加解密中所需要的參數必須透過config進行設定。
from DualRegev.Cipher import Crypto
from DualRegev.Config import config
安全參數設定中的n、m代表公鑰的大小,q代表模數。公鑰本身為n x m矩陣,因此設定時須特別注意,演算法的時間複雜度為O(n x m),推薦100左右即可。q為一大質數,可取其值q = poly(n)。
# 設定安全參數
config.set_parameter(n=128, m=256, q=16349)
# 生成公鑰、私鑰
key_obj = Crypto.LBDRKey().generate_key()
private_key = key_obj.extract_private_key()
public_key = key_obj.extract_key()
# 將公鑰、私鑰寫入檔案
with open('sk.pem', 'wb') as f:
f.write(private_key)
with open('pk.pem', 'wb') as f:
f.write(public_key)
2. 資料加密
加密方法中可接受的資料型態為bytes,由於加密密文的空間複雜度較大,package中提供converter針對不同的資料來源進行最佳的資料型態轉換。
from DualRegev.IO import Converter
加密過程如下,其中data訊息的資料型態不是bytes的話,必須使用Converter中相對應的方法將資料型態轉為bytes後才可進行加密,詳細請見 DualRegev/IO 的README.txt。。
# 創建加密工具物件
crypto_obj = Crypto.LBDRCrypt()
# 載入公鑰
with open('pk.pem', 'rb') as f:
pk = f.read()
crypto_obj.import_key(pk)
# 加密訊息
data = '0x7c091f4c34ef21bac81f4d406f4e9cd1'
byte_data = Converter.hex_to_bytes(data)
enc_data = crypto_obj.encrypt(byte_data)
# 紀錄加密訊息
with open('cipher_text.bin', 'wb') as f:
f.write(enc_data)
3. 資料解密
解密方法回傳的資料型態為bytes,使用Converter中相反的轉換方法即可把原文還原。
# 創建加密工具物件
crypto_obj = Crypto.LBDRCrypt()
# 載入私鑰
with open('sk.pem', 'rb') as f:
sk = f.read()
crypto_obj.import_key(sk)
# 讀取加密訊息
with open('cipher_text.bin', 'rb') as f:
enc_data = f.read()
# 解密訊息
byte_data = crypto_obj.decrypt(enc_data)
data = Converter.bytes_to_hex(byte_data)
print(data)
print的結果:
>>> 0x7c091f4c34ef21bac81f4d406f4e9cd1
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file dualregevencryption-1.0.0.tar.gz.
File metadata
- Download URL: dualregevencryption-1.0.0.tar.gz
- Upload date:
- Size: 9.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.9.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3cb05aefc2689d174c3f9edcabcc09d7fd373a6e13fe27d6939bc4e4cc353f39
|
|
| MD5 |
9459fcf36a4881228389f1ae59e32d97
|
|
| BLAKE2b-256 |
daa7a3fff6cf89a627908261ba937f1ec4a7c9f9fa492238aafe010eaf15e10c
|
File details
Details for the file DualRegevEncryption-1.0.0-py3-none-any.whl.
File metadata
- Download URL: DualRegevEncryption-1.0.0-py3-none-any.whl
- Upload date:
- Size: 12.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.9.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
809ca8ae90c9b09284b22553475e38adcec32851afdaa02625488cda3d76bbf5
|
|
| MD5 |
b7575649dc59e51565698a358e20a8b3
|
|
| BLAKE2b-256 |
4695b6cc9818658d1b54d5ff9672c4972191debc49d4e58527565760b73c85e4
|