کتابخانه pycryptodome در پایتون
PyCryptodome یک مجموعه کامل و مدرن برای عملیات رمزنگاری در پایتون است که بهعنوان جایگزینی برای کتابخانه قدیمی PyCrypto عرضه شده. این کتابخانه الگوریتمهای متنوعی از جمله AES، DES, ChaCha20، RSA، DSA، هشها (SHA-256، SHA-3)، HMAC، و توابع تولید اعداد تصادفی امن را فراهم میکند. در ادامه با مفاهیم، مثالهای عملی و نکات امنیتی آشنا میشویم.
نصب و نکات اولیه
برای نصب سادهترین روش استفاده از pip است:
pip install pycryptodome
این دستور بسته PyCryptodome را نصب میکند. توجه کنید که در برخی سیستمها لازم است PyCrypto را حذف کنید تا تداخلی پیش نیاید.
ساختار و importها
ماژولها تحت نام Crypto قرار دارند، مثل Crypto.Cipher برای رمزگذاری و Crypto.PublicKey برای کلیدهای عمومی:
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
from Crypto.Protocol.KDF import PBKDF2
این کد نمونه نحوه وارد کردن ماژولهای پرکاربرد را نشان میدهد. get_random_bytes برای تولید بایتهای تصادفی امن استفاده میشود.
مثال: رمزنگاری متقارن با AES-GCM (توصیهشده)
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
key = get_random_bytes(32) # AES-256
data = b"Secret message"
cipher = AES.new(key, AES.MODE_GCM)
ciphertext, tag = cipher.encrypt_and_digest(data)
nonce = cipher.nonce
# برای بازیابی
dec = AES.new(key, AES.MODE_GCM, nonce=nonce)
plaintext = dec.decrypt_and_verify(ciphertext, tag)
در این مثال از AES-GCM استفاده شده که هم رمزنگاری و هم احراز اصالت (integrity) را توسط tag فراهم میکند. از get_random_bytes برای تولید کلید امن و از nonce اختصاصی برای هر عملیات استفاده کنید. decrypt_and_verify همزمان صحت را بررسی میکند و در صورت تغییر داده خطا میدهد.
هشینگ و HMAC
برای بررسی یکپارچگی یا ذخیره امن گذرواژهها میتوان از هشها و HMAC استفاده کرد. مثال زیر تولید HMAC با SHA-256 را نشان میدهد.
from Crypto.Hash import HMAC, SHA256
key = b"my secret key"
msg = b"message to protect"
h = HMAC.new(key, digestmod=SHA256)
h.update(msg)
tag = h.digest()
# بررسی
h2 = HMAC.new(key, digestmod=SHA256)
h2.update(msg)
h2.verify(tag)
HMAC مکانیزم امنی برای احراز اصالت پیام است. هرگز از مقایسه سادهی بایتها استفاده نکنید، چون HMAC.verify مقاومت در برابر حملات مقایسه زمان را فراهم میکند.
رمزنگاری نامتقارن: RSA برای رمزگذاری و امضا
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
from Crypto.Signature import pkcs1_15
from Crypto.Hash import SHA256
# تولید کلید
key = RSA.generate(2048)
private_key = key.export_key()
public_key = key.publickey().export_key()
# رمزنگاری با OAEP
recipient_key = RSA.import_key(public_key)
cipher_rsa = PKCS1_OAEP.new(recipient_key)
enc = cipher_rsa.encrypt(b"Top secret")
# امضا
h = SHA256.new(b"data to sign")
signer = pkcs1_15.new(key)
signature = signer.sign(h)
در این مثال RSA با OAEP برای رمزنگاری امن و pkcs1_15 برای امضا استفاده شده است. برای کاربردهای واقعی، از کلیدهای مناسب (معمولاً 2048 یا 3072 بیت) و الگوریتمهای هش قوی استفاده کنید.
نمونهٔ اشتباه رایج و اصلاح آن
اشتباه رایج استفاده از AES-CBC بدون احراز اصالت است. مثال اشتباه:
# اشتباه: AES-CBC بدون HMAC (ناامن)
cipher = AES.new(key, AES.MODE_CBC)
ct = cipher.encrypt(pad(data, AES.block_size))
مشکل این است که تغییر ciphertext کشف نمیشود؛ بنابراین باید از حالتهای authenticated مثل GCM یا استفاده از HMAC همراه CBC استفاده کنید. نمونه اصلاحشده با GCM (شرح در بالا) امنیت بهتری دارد.
مقایسهٔ سریع (جدول)
| کار | الگوریتم/حالت | مزایا |
|---|---|---|
| رمزنگاری متقارن | AES-GCM / ChaCha20-Poly1305 | سرعت بالا، احراز اصالت داخلی |
| رمزنگاری نامتقارن | RSA-OAEP / ECC | مناسب برای تبادل کلید و امضا |
| هش و احراز اصالت | SHA-256, HMAC | یکپارچگی و احراز اصالت پیام |
نکات عملی و بهترین شیوهها
- همیشه از توابع تولید اعداد تصادفی امن مانند get_random_bytes استفاده کنید.
- برای رمزنگاری متقارن از حالتهای authenticated (GCM، EAX، یا ChaCha20-Poly1305) استفاده کنید.
- کلیدها را امن ذخیره کنید (مثلاً در HSM یا vault)، و هرگز کلیدها را در کد منبع ذخیره نکنید.
- برای رمزگذاری دادهها در اینترنت از پروتکلهای استاندارد (TLS) استفاده کنید و از پیادهسازی دستی فقط در صورت نیاز و با دقت زیاد بهره ببرید.
- بهروزرسانیهای کتابخانه را دنبال کنید و آسیبپذیریها را بررسی کنید.
موارد کاربرد و مثالهای واقعی
- رمزنگاری فایلها و دیتابیسها با کلیدهای محلی یا مشتقشده (PBKDF2) برای ذخیره امن.
- ایجاد امضای دیجیتال برای اعتبارسنجی پیامها/فایلها.
- پیادهسازی پروتکلهای امن انتقال کلید یا پیامها در سرویسهای داخلی.
جمعبندی
PyCryptodome یک ابزار قدرتمند و کامل برای توسعهدهندگان پایتون است که نیازهای معمول رمزنگاری را پوشش میدهد. با رعایت بهترین شیوهها (مثل استفاده از حالتهای authenticated، تولید تصادفی امن، و ذخیره امن کلیدها) میتوانید از این کتابخانه برای ساخت برنامههای ایمن استفاده نمایید. اگر به مثالهای بیشتر یا یک راهنمای پیادهسازی در پروژهٔ خاص نیاز دارید، میتوان مثالهای اختصاصیتری ارائه داد.
آیا این مطلب برای شما مفید بود ؟




