2016-09-22 16 views
5

tôi đang tạo ra một chìa khóa EC sử dụng mô-đun python mật mã theo cách nàyLàm thế nào để tìm thấy thành phần ASN.1 của EC chính python-mật mã

from cryptography.hazmat.backends import default_backend 
from cryptography.hazmat.primitives.asymmetric import ec 
key=ec.generate_private_key(ec.SECP256R1(), default_backend()) 

Cấu trúc ASN.1 của chính EC như sau

ECPrivateKey ::= SEQUENCE { 
version  INTEGER { ecPrivkeyVer1(1) } (ecPrivkeyVer1), 
privateKey  OCTET STRING, 
parameters [0] ECParameters {{ NamedCurve }} OPTIONAL, 
publicKey [1] BIT STRING OPTIONAL 
} 

từ https://tools.ietf.org/html/rfc5915 setion 3.

câu hỏi của tôi là làm thế nào để có được các thành phần ASN.1 từ khóa này. Tôi muốn chuyển đổi đối tượng khóa sang khóa riêng OpenSSH, chẳng hạn như

-----BEGIN EC PRIVATE KEY----- 
Proc-Type: 4,ENCRYPTED 
DEK-Info: AES-128-CBC,9549ED842979FDAF5299BD7B0E25B384 

Z+B7I6jfgC9C03Kcq9rbWKo88mA5+YqxSFpnfRG4wkm2eseWBny62ax9Y1izGPvb 
J7gn2eBjEph9xobNewgPfW6/3ZDw9VGeaBAYRkSolNRadyN2Su6OaT9a2gKiVQi+ 
mqFeJmxsLyvew9XPkZqQIjML1d1M3T3oSA32zYX21UY= 
-----END EC PRIVATE KEY----- 

Dễ dàng xử lý DSA hoặc RSA vì tất cả tham số ASN.1 là số nguyên trong đó.

cảm ơn trước

Trả lời

0

Đó là tương đối dễ dàng để trích xuất các điểm công cộng từ chuỗi ASN.1 sử dụng pyasn1, nhưng nếu bạn muốn PEM-mã hóa PKCS1 (aka "OpenSSL truyền thống") sau đó pyca/mật mã có thể làm điều đó khá dễ dàng:

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

backend = default_backend() 

key = ec.generate_private_key(ec.SECP256R1(), backend) 
serialized_key = key.private_bytes(
    serialization.Encoding.PEM, 
    serialization.PrivateFormat.TraditionalOpenSSL, 
    serialization.BestAvailableEncryption(b"my_great_password") 
) 

Bạn có thể tìm thêm thông tin về phương pháp private_bytes trong tài liệu. Tại thời điểm này, BestAvailableEncryption sẽ mã hóa bằng cách sử dụng AES-256-CBC.

Các vấn đề liên quan