0Pricing
Cryptology Academy · レッスン

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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Python cryptographyライブラリの概要
  2. PythonでAES-GCMを暗号化・復号化する
  3. PythonでRSAとECDSAの鍵ペアを扱う
  4. Python暗号でよくある落とし穴と安全なパターン
← Cryptology Academyに戻る