前提
A(PC)さんとB(Raspberry Pi)さんでECDHを実装する際に共通鍵を作成でエラーが起こりました。
PC側
from Crypto. PublicKey import ECC
Aさんの秘密鍵、公開鍵生成
private_key_A = ECC.generate(curve='P-256')
with open("priA.pem", "w") as f:
f.write(private_key_A.export_key(format='PEM'))
public_key_A = private_key_A.public_key()
with open("pubA.pem", "w") as f:
f.write(public_key_A.export_key(format='PEM'))
Raspberry Pi側
from Crypto. PublicKey import ECC
Bさんの秘密鍵、公開鍵生成
private_key_B = ECC.generate(curve='P-256')
with open("priB.pem", "w") as f:
f.write(private_key_B.export_key(format='PEM'))
public_key_B = private_key_B.public_key()
with open("pubA.pem", "w") as f:
f.write(public_key_A.export_key(format='PEM'))
お互いで作成した公開鍵をpemファイルで書き込み、交換した所まで進みました。つまりPC上には秘密鍵priA.pemとRaspberry piから送られてきた公開鍵pubB.pemがあり、この2つの鍵を使って共通鍵を生成したいと考えています。
そこでmake_shared_key(private_key,public_key)という関数を作りましたが、shared_key(共通鍵)を生成するためのshared_key = private_key.exchange(public_key)部分でexchangeがエラーを起こします。
そもそもECC.generate(curve='P-256')を使って生成した公開鍵と秘密鍵ではECDHを作成することは不可能なのでしょうか?
また実装できる場合には、どのように修正すればよろしいでしょうか。
よろしくお願いいたします。
実現したいこと
ここに実現したいことを箇条書きで書いてください。
- ▲▲機能を動作するようにする
発生している問題・エラーメッセージ
エラーメッセージ AttributeError: 'EccKey' object has no attribute 'exchange' ### 該当のソースコード python3 ソースコード from re import A from cryptography.hazmat.primitives import hashes from cryptography.hazmat.primitives.kdf.hkdf import HKDF from Crypto. PublicKey import ECC with open('priA.pem','rb') as f: private_pem = f.read() private_key_A = ECC.import_key(private_pem) with open('pubB.pem','rb') as f: public_pem = f.read() public_key_B = ECC.import_key(public_pem) def main(): derived_key = make_shared_key(private_key_A,public_key_B) print("生成した共通鍵 : {}".format(derived_key.hex())) def make_shared_key(private_key,public_key): shared_key = private_key.exchange(public_key) # Perform key derivation. derived_key = HKDF( algorithm=hashes.SHA256(), length=32, salt=None, info=b'handshake data', ).derive(shared_key) return derived_key ### 試したこと ### 補足情報(FW/ツールのバージョンなど)
あなたの回答
tips
プレビュー