Python cryptographyライブラリの概要
hazmatと高レベルプリミティブをセットアップし、ライブラリの構成を理解します。
「Python cryptographyライブラリの概要」はCoddyKit上の無料Cryptology Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCryptology Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Cryptology Academyコースには全4レッスンが含まれています。
cryptographyライブラリを使用する理由
Pythonのcryptographyライブラリ(PyCA製)は、高レベルのFernetインターフェースと低レベルのhazmatプリミティブの両方を提供します。OpenSSLをラップしており、Pythonにおける本番用暗号ライブラリのコミュニティ標準です。
インストールと構成
インストール: pip install cryptography。2つのレイヤーがあります。cryptography.fernet(安全性を重視した、意見の強い対称暗号化)とcryptography.hazmat.primitives(AES、RSA、EC、ハッシュ、HMAC — 使用には注意が必要)です。
Fernet:安全な対称暗号化
Fernetは、タイムスタンプ付きのAES-128-CBC + HMAC-SHA256を使用します。IVの生成、パディング、MACを自動的に処理します。設定値、トークン、小さなデータブロブの暗号化に最適です。
from cryptography.fernet import Fernet
# Generate a URL-safe base64-encoded 32-byte key
key = Fernet.generate_key()
f = Fernet(key)
token = f.encrypt(b"my secret data")
print("Encrypted:", token[:40], "...")
plain = f.decrypt(token)
print("Decrypted:", plain)Hazmatプリミティブ:ハッシュ
hazmatレイヤーは、SHA-2、SHA-3、BLAKE2などを提供します。
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.backends import default_backend
digest = hashes.Hash(hashes.SHA256(), backend=default_backend())
digest.update(b"Hello, ")
digest.update(b"world!")
result = digest.finalize()
print("SHA-256:", result.hex())Hazmatプリミティブ:HMAC
メッセージ認証にはHMACを使用します。
from cryptography.hazmat.primitives import hmac, hashes
import os
key = os.urandom(32)
h = hmac.HMAC(key, hashes.SHA256())
h.update(b"authenticated message")
signature = h.finalize()
print("HMAC-SHA256:", signature.hex())
# Verify
h2 = hmac.HMAC(key, hashes.SHA256())
h2.update(b"authenticated message")
h2.verify(signature) # raises if invalid鍵のシリアライズ
保存または送信のために、鍵をPEM/DERへシリアライズします。
from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography.hazmat.primitives import serialization
private_key = rsa.generate_private_key(public_exponent=65537, key_size=2048)
pem = private_key.private_bytes(
encoding=serialization.Encoding.PEM,
format=serialization.PrivateFormat.PKCS8,
encryption_algorithm=serialization.BestAvailableEncryption(b"passphrase")
)
print(pem[:60])PEMからの鍵の読み込み
ディスクからPEM鍵を読み込みます。
from cryptography.hazmat.primitives.serialization import load_pem_private_key
with open("private_key.pem", "rb") as f:
pem_data = f.read()
key = load_pem_private_key(pem_data, password=b"passphrase")
print("Key loaded, size:", key.key_size, "bits")X.509証明書の処理
TLS証明書を解析して内容を確認します。
from cryptography import x509
import datetime
with open("cert.pem", "rb") as f:
cert = x509.load_pem_x509_certificate(f.read())
print("Subject:", cert.subject)
print("Issuer:", cert.issuer)
print("Not valid after:", cert.not_valid_after_utc)
print("Serial:", cert.serial_number)ランダムバイトの生成
暗号学的な乱数には、必ずos.urandomまたはsecretsを使用してください。
import os, secrets
# Cryptographically secure 32-byte key
key = os.urandom(32)
print("Random key:", key.hex())
# secrets module: URL-safe token
token = secrets.token_urlsafe(32)
print("URL-safe token:", token)Hazmatの落とし穴を避ける
hazmat APIが「Hazardous Materials(危険物)」と呼ばれるのには理由があります。よくある間違いには、ノンスの再利用、ECBモードの使用、認証タグの省略、==によるMACの比較があります。可能な場合は高レベルAPIを使用してください。
理解度チェック
Fernet暗号化は、生のAES-CBCだけでは提供されないどのような機能を提供しますか?
学習内容のまとめ
cryptographyライブラリには、安全なFernetレイヤーと柔軟なhazmatレイヤーの2つがあります。対称暗号化にはFernetを、AES-GCM、RSA、ECDSA、証明書の処理にはhazmatを使用してください。鍵には必ずos.urandomを使用してください。hazmatの落とし穴を避け、認証付きモードを優先してください。
よくある質問
「Python cryptographyライブラリの概要」レッスンは無料ですか?
はい。「Python cryptographyライブラリの概要」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Cryptology Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Cryptology Academyコースには全4レッスンが含まれています。
「Python cryptographyライブラリの概要」で何を学びますか?
hazmatと高レベルプリミティブをセットアップし、ライブラリの構成を理解します。 ブラウザで直接実行するハンズオンコードでCryptology Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Cryptology Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのCryptology Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「Python cryptographyライブラリの概要」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このCryptology Academyレッスンでコードを書いて実行できますか?
はい。すべてのCryptology Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Python cryptographyライブラリの概要
- PythonでAES-GCMを暗号化・復号化する
- PythonでRSAとECDSAの鍵ペアを扱う
- Python暗号でよくある落とし穴と安全なパターン