2017-06-23 11 views
0

私は現在、秘密鍵と公開鍵を作成するために暗号モジュールを使用しています。標準的な方法は、RSA.generate(KEY_LENGTH、random_gen)を使用することです。しかし、これは乱数ジェネレータによって作成された値を使用します。私はキーをある程度カスタマイズしたいと思っています。カスタムRSA鍵を作成する

KEY_LENGTH = 1024 
random_gen = Random.new().read 
privateKey = RSA.generate(KEY_LENGTH, random_gen) 
public_Key = keys.publickey() 

問題は、今私はrandom_genを印刷しようとすると、私は次の出力

bound method RNGFile.read of Crypto.Random._UserFriendlyRNG.RNGFile object at 0x75713c50>>

を得ると私はrandom_genスポットで固定値を入れしようとした場合、私はTypeError例外を取得です:randfunc必見呼び出し可能にする。

+0

基本的にはランダム化されたキーは不要です – KelvTheKid

答えて

1

の代わりにRSA.generateするwrapper_rand_gen渡します。ここで

は例です:

from Crypto.PublicKey import RSA 

n = long('2c1c62f96c8b4a177de41d3df08148eb58bc852edd0fc343faa1de9ada5dccb8e4db708f' \ 
     'cd71451b4135c7328f1641e79049ab9e88de3d5be28817b898f7ae431a52909fb7c1902e' \ 
     '694ecda41ff821035a0a45f20871c5a8dbae366189bdd84aac3f0e88541711fe670b4ea2' \ 
     '2125762dbd39788ebe4ef7fc2d4da5d468f6353c1ab88d2ee5b658bdf195dfd0c7d3fc1f' \ 
     'bf2511de97d10399259d41d476d38ae18a094ece4ef718d8aef72a33df31737be404cf02' \ 
     '425db3ee736b279f2be5557b3b4593f02ff8b7853709e791064d0d793063b1ca09747a35' \ 
     'b2ff98f7c19275224657f879d07b22671a9b37964f45324c9dc6f9de8e65346724b7376f',16) 
e = 0x10001L 
d = long('b369c2273e964c85c04653a9dacfff073fa5890f5395096335c7ace3abca5924afb4dbe0' \ 
     '0a7cebd82f23cd52972ab0646b3b3a0f582296ef6434a646ede67ba3f32c5f914296c919' \ 
     'fcb9c93205d5f670eb895d7553636dd1a1b4b4fb8483e779d19da83e57c87e2782773b1d' \ 
     'b633e8b9a12c606e37207b05f83e1a801967f10e0c0e1ca7a38feed9d0ab8e1bf3c6fecd' \ 
     '87cb799afa8140d5437226dd94a9ab835cfeffbfa8c40eb7e13829f995986eeb457072ad' \ 
     '9dd9539c955bf267dcf4bfd8a9a3423b0f4fb86d1a457490c7df177df339fdfc79c19c06' \ 
     'fdece56d112660115b485a51737452bb53c4925de7dd111ba72c116aa46e6222ee90661',16) 
p = long('6fd004c04efd1b023a50eb9abaf9d701bd4c8294a832bde96426c3de156e6ce861e3abe7' \ 
     'c712329f86cf0f190f4618a12220f75dcedac64c72c21f76359a4171b7b1ea7012befc8a' \ 
     'e5e508e8c299a44bf951616109f461fc5372bd3e8e485924837e891180dc646f5028931c' \ 
     '3f98676ae22d219bf22114acf89d24a7570b',16) 
q = long('64fe6f8eda823fadc5335ebb1178973bdabdb7b71299bb05beb5ed631eccc017b8c68a99' \ 
     '2c958893e019fd4f20b85d0301a1cde4b7f747d0da89780b3027ff5275935f19031965b2' \ 
     '582cbb5397b309a2357100ae769c50ce5d84abe2a100ac54441251908ac4609bb4342a8f' \ 
     'c5fced8329b6f0f181aa003dd9ebba6f4fad',16) 
u = long('30e5313ae3ce770a951f9c3cc659cb0e79dc2f93b6464ebd5dae0207b38b96e099e383cc' \ 
     'c48af796ba8587802f8e7bafda432b5e8194841f4535b07f665af110dff573d98a2496c1' \ 
     '5610b8e78521101ca381ac6cde11c23e60559931db2da08de94205002b0ad1d021e6d9ce' \ 
     'bd5e3131c76bf57046a289c52ba1ae336bf8',16) 

key_params = (n, e, d, p, q, u) 
key = RSA.construct(key_params) 
print key.exportKey() 

は、一部のパラメータはオプションです。公開鍵を作成するには、neを指定する必要があります。

0

Random.new()。readは、乱数を生成する関数です。

RSA.generateメソッドによって、新しい秘密鍵をランダムに作成するために使用されます。

def create_wrapper_rand(random_gen): 
    def wrapper_rand(n): 
     values = random_gen(n) 
     print values 
     return values 
    return wrapper_rand 

wrapper_rand_gen = create_wrapper_rand(random_gen) 
:あなたが実際にいくつかの理由で乱数を「見る」にしたい場合は

あなたが最初に返された値を出力する機能でそれをラップすることができます(おそらく、あなたはこれをacheiveしようとしているのかを説明)

は今、あなたはRSA module documentationを見てみた場合、あなたはそれはまた、あなたがあなた自身のパラメータを供給することにより、RSA鍵を作成するために使用できるconstruct()機能をサポートしていることがわかりますrandom_gen

+0

実際にランダムな値を必要としない場合は、固定サイズの文字列を返すメソッドを作成することができます。 –

+0

私はプライベートキーを作成しようとしていますパスフレーズなどのカスタム値。ランダムなアスペクトを削除する方法。 – KelvTheKid

+0

@KelvTheKidこれは非常に弱い暗号です。秘密鍵を作成するにはKDF(key derivation function)が必要です。 **ランダム** RSA鍵ペアを生成し、秘密鍵を使用して秘密鍵を暗号化します。秘密鍵が必要な場合は、ユーザーにパスフレーズを要求し、KDFを使用して秘密鍵を取得し、秘密鍵を復号化します。そして、暗号に関する良い本を読んでください。 – phd

関連する問題