Uczę się algorytmu szyfrowania {X0}} i chcę użyć tego w Pythonie. Używam pakietu pycryptodome i widzę z Tam, że są dwie zmienne klucze prywatne.

Jaka jest różnica między pubKey i pubKeyPEM, a który z nich muszę używać do części szyfrowania?

Również dlaczego Decryptor używa obu kluczy (keyPair) zamiast klucza prywatnego (privKeyPEM)?

from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP

keyPair = RSA.generate(1024)

pubKey = keyPair.publickey()
pubKeyPEM = pubKey.exportKey()

privKeyPEM = keyPair.exportKey()

Encryptor = PKCS1_OAEP.new(pubKey)
Decryptor = PKCS1_OAEP.new(keyPair)
1
dsasd 23 lipiec 2020, 02:00

1 odpowiedź

Najlepsza odpowiedź

pubKey jest tylko prezentacją klucza jako użytecznego przez Pythona. Składa się z dwóch liczb całkowitych: modułu i publicznego wykładnika. Oczywiście może to na przykład np. być również odniesieniem do klucza w urządzeniu sprzętowym, w stosownych przypadkach.

pubKeyPEM jest specyficznym kodowaniem klucza publicznego w bajtach lub znakach. Jest to struktura SubjectPublicKeyInfo według do specyfikacji API . SubjectPublicKeyInfo lub spe jest strukturą binarną, pem jest zbroją ASCII wokół tego, tj. Określa strukturę, a następnie koduje binarną przy bazie 64. Jest powszechnie stosowany przez np. OpenSSL.

W przypadku części szyfrowania potrzebujesz pubKey. Ale prawdopodobnie musisz najpierw przewozić nadawcę pubKey lub możesz przechowywać pubKey w DB lub systemie plików. Właśnie tam pojawia się funkcjonalność eksportu.

Klucz prywatny na ogół zawiera klucz publiczny (jako publiczne pole wykładnicze) lub łatwo jest obliczyć go z klucza prywatnego (w przypadku klucza krzywej eliptycznej). Więc równie dobrze możesz wymyślić klucz prywatny jako parę kluczową. Zależy to od biblioteki, jeśli koncepcje mogą być używane zamiennie.

0
Maarten Bodewes 23 lipiec 2020, 10:45