0Pricing
Cryptology Academy · บทเรียน

คู่คีย์ RSA และ ECDSA ใน Python

สร้าง แปลงรูปแบบ และใช้คีย์ RSA กับ EC สำหรับการลงนามและการเข้ารหัส

คู่คีย์ RSA และ ECDSA ใน Python เป็นบทเรียน Cryptology Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Cryptology Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Cryptology Academy มีบทเรียนทั้งหมด 4 บทเรียน

ภาพรวมการดำเนินการกับคู่กุญแจ

ไลบรารี cryptography ของ Python รองรับ RSA และ ECDSA สำหรับการสร้างกุญแจ การลงนาม การตรวจสอบ การทำให้เป็นลำดับข้อมูล และการโหลด สิ่งเหล่านี้เป็นองค์ประกอบพื้นฐานของใบรับรอง TLS การลงนามโค้ด และ JWT

การสร้างคู่กุญแจ RSA

ค่าขั้นต่ำที่แนะนำคือ 2048 บิตเพื่อความเข้ากันได้ และ 4096 บิตสำหรับกุญแจที่ต้องใช้งานเป็นเวลานาน:

from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography.hazmat.backends import default_backend

private_key = rsa.generate_private_key(
    public_exponent=65537,
    key_size=2048,
    backend=default_backend()
)
public_key = private_key.public_key()
print("RSA key generated, size:", private_key.key_size, "bits")

การลงนาม RSA ด้วย PSS

ควรใช้การเติมแพดดิ้งแบบ PSS สำหรับลายเซ็นเสมอ (ไม่ใช่ PKCS#1 v1.5):

from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import padding

message = b"document to sign"
signature = private_key.sign(
    message,
    padding.PSS(
        mgf=padding.MGF1(hashes.SHA256()),
        salt_length=padding.PSS.MAX_LENGTH
    ),
    hashes.SHA256()
)
print("RSA-PSS signature:", signature.hex()[:32], "...")

การตรวจสอบลายเซ็น RSA

การตรวจสอบจะแสดง InvalidSignature เมื่อไม่สำเร็จ:

from cryptography.exceptions import InvalidSignature

try:
    public_key.verify(
        signature,
        message,
        padding.PSS(
            mgf=padding.MGF1(hashes.SHA256()),
            salt_length=padding.PSS.MAX_LENGTH
        ),
        hashes.SHA256()
    )
    print("Signature valid!")
except InvalidSignature:
    print("Signature INVALID")

การสร้างคู่กุญแจ ECDSA

ECDSA ที่ใช้ NIST P-256 (secp256r1) ให้ความปลอดภัยระดับ 128 บิตด้วยกุญแจที่เล็กกว่า RSA-3072 มาก:

from cryptography.hazmat.primitives.asymmetric import ec

private_key = ec.generate_private_key(ec.SECP256R1())
public_key = private_key.public_key()
print("EC private key generated on curve:", private_key.curve.name)

การลงนามและตรวจสอบ ECDSA

โดยค่าเริ่มต้น ECDSA จะใช้ลายเซ็นที่เข้ารหัสแบบ DER:

from cryptography.hazmat.primitives.asymmetric import ec
from cryptography.hazmat.primitives import hashes
from cryptography.exceptions import InvalidSignature

# Sign
sig = private_key.sign(b"my data", ec.ECDSA(hashes.SHA256()))
print("ECDSA signature bytes:", len(sig))

# Verify
try:
    public_key.verify(sig, b"my data", ec.ECDSA(hashes.SHA256()))
    print("ECDSA signature valid")
except InvalidSignature:
    print("Invalid")

การทำให้กุญแจเป็นลำดับข้อมูลในรูปแบบ PEM

บันทึกกุญแจลงในไฟล์ PEM เพื่อจัดเก็บหรือแจกจ่าย:

from cryptography.hazmat.primitives import serialization

# Private key — encrypted with passphrase
private_pem = private_key.private_bytes(
    encoding=serialization.Encoding.PEM,
    format=serialization.PrivateFormat.PKCS8,
    encryption_algorithm=serialization.BestAvailableEncryption(b"strong-passphrase")
)

# Public key — no encryption
public_pem = public_key.public_bytes(
    encoding=serialization.Encoding.PEM,
    format=serialization.PublicFormat.SubjectPublicKeyInfo
)
print(public_pem.decode()[:64])

การโหลดกุญแจจาก PEM

โหลดกุญแจที่จัดเก็บไว้กลับเข้าเป็นออบเจ็กต์:

from cryptography.hazmat.primitives.serialization import (
    load_pem_private_key, load_pem_public_key
)

with open("ec_private.pem", "rb") as f:
    priv = load_pem_private_key(f.read(), password=b"strong-passphrase")

with open("ec_public.pem", "rb") as f:
    pub = load_pem_public_key(f.read())

print("Loaded EC key curve:", priv.curve.name)

การตกลงกุญแจด้วย ECDH

ใช้ ECDH เพื่ออนุมานความลับร่วมสำหรับการเข้ารหัสสมมาตร:

from cryptography.hazmat.primitives.asymmetric import ec
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.kdf.hkdf import HKDF

alice_priv = ec.generate_private_key(ec.SECP256R1())
bob_priv = ec.generate_private_key(ec.SECP256R1())

# Alice computes shared secret
shared = alice_priv.exchange(ec.ECDH(), bob_priv.public_key())
aes_key = HKDF(hashes.SHA256(), 32, None, b"app-context").derive(shared)
print("Derived AES key:", aes_key.hex())

การเข้ารหัส RSA ด้วย OAEP

สำหรับการเข้ารหัสข้อมูลขนาดเล็ก (เช่น DEK) ด้วย RSA — ควรใช้ OAEP เสมอ:

from cryptography.hazmat.primitives.asymmetric import padding
from cryptography.hazmat.primitives import hashes

# Encrypt with public key
ciphertext = public_key.encrypt(
    b"small secret",
    padding.OAEP(
        mgf=padding.MGF1(algorithm=hashes.SHA256()),
        algorithm=hashes.SHA256(),
        label=None
    )
)

# Decrypt with private key
plaintext = private_key.decrypt(ciphertext, padding.OAEP(
    mgf=padding.MGF1(algorithm=hashes.SHA256()),
    algorithm=hashes.SHA256(), label=None
))
print("Decrypted:", plaintext)

การเลือก RSA หรือ ECDSA

ECDSA: ลายเซ็นมีขนาดเล็กกว่า (ประมาณ 71 ไบต์สำหรับ P-256 เทียบกับประมาณ 256 ไบต์สำหรับ RSA-2048) ลงนามได้เร็วกว่า และมีระดับความปลอดภัยเท่ากัน RSA: รองรับระบบเดิมได้กว้างกว่าและมีแบบจำลองความเข้าใจที่ง่ายกว่า สำหรับระบบใหม่ ให้ใช้ ECDSA P-256 หรือ Ed25519

ตรวจสอบความรู้

เหตุใดจึงควรเลือก RSA-PSS แทน PKCS#1 v1.5 สำหรับลายเซ็นดิจิทัล

สรุปบทเรียน

ใช้ rsa.generate_private_key สำหรับ RSA และ ec.generate_private_key สำหรับ ECDSA ลงนามด้วย PSS (RSA) หรือ ECDSA + SHA-256 ทำให้กุญแจเป็นลำดับข้อมูลในรูปแบบ PEM ด้วยรูปแบบ PKCS8 และการเข้ารหัสด้วยข้อความรหัสผ่าน ใช้ ECDH สำหรับการตกลงกุญแจ สำหรับระบบใหม่ควรเลือก ECDSA P-256 หรือ Ed25519

คำถามที่พบบ่อย

บทเรียน “คู่คีย์ RSA และ ECDSA ใน Python” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “คู่คีย์ RSA และ ECDSA ใน Python” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Cryptology Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Cryptology Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “คู่คีย์ RSA และ ECDSA ใน Python”

สร้าง แปลงรูปแบบ และใช้คีย์ RSA กับ EC สำหรับการลงนามและการเข้ารหัส คุณปฏิบัติ Cryptology Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Cryptology Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Cryptology Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “คู่คีย์ RSA และ ECDSA ใน Python” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Cryptology Academy นี้ได้ไหม

ได้ บทเรียน Cryptology Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ภาพรวมไลบรารีการเข้ารหัสของ Python
  2. เข้ารหัสและถอดรหัส AES-GCM ใน Python
  3. คู่คีย์ RSA และ ECDSA ใน Python
  4. ข้อผิดพลาดที่พบบ่อยในการเข้ารหัสด้วย Python และรูปแบบที่ปลอดภัย
← กลับไปที่ Cryptology Academy