mcpField
C
Cryptographic Analysis & Assessment

Cryptographic Analysis & Assessment

github.com/masriyanセキュリティ530150 回インストール1 週間前に更新
リポジトリ

Cryptographic Analysis & Assessment について

暗号設定と実装を評価するセキュリティ担当者向けの Claude スキルです。TLS、暗号スイート、ハッシュ、コード、鍵管理を確認し、耐量子暗号への移行も検討します。

主な機能

  1. 01TLS 設定の監査
  2. 02暗号スイートの強度評価
  3. 03ハッシュの識別と確認
  4. 04暗号実装コードのレビュー
  5. 05鍵管理とローテーションの指針
  6. 06耐量子暗号への移行評価

活用シーン

  1. 01サービスの TLS 設定を監査
  2. 02コード内の弱い暗号パターンを確認
  3. 03パスワードハッシュ方式を評価
  4. 04PQC への暗号移行を計画

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/masriyan/claude-code-cybersecurity-skill --skill cryptographic-analysis-&-assessment

インストール後、Claude Code で/cryptographic-analysis-&-assessmentを入力して読み込まれたか確認します。

同梱ファイルscripts/tls_auditor.pyexamples/example_usage.md

詳細

暗号解析・評価

目的

SSL/TLS 設定監査、暗号スイートの分析と推奨、ハッシュアルゴリズムの特定、暗号化実装コードのレビュー、鍵管理の評価、暗号の脆弱性の検出など、暗号セキュリティ評価を Claude が支援できるようにします。Claude は、提供された設定とコードを直接分析します。


有効化のトリガー

ユーザーが次のことを尋ねた場合に、このスキルが有効になります。

  • サーバーまたはサービスの SSL/TLS 設定の監査
  • 暗号スイートのセキュリティ強度の評価
  • ハッシュ値またはコードからのハッシュアルゴリズムの特定
  • 暗号実装の不備がないかコードをレビュー
  • 鍵長、鍵管理、ローテーションポリシーの評価
  • ハードコードされた鍵、弱い IV、ECB モードの使用の検出
  • TLS 設定の推奨事項の作成(Mozilla プロファイル)
  • 証明書の分析(有効期限、チェーン、透明性)
  • 耐量子暗号に関するガイダンス
  • パスワードハッシュの実装レビュー(bcrypt、Argon2、PBKDF2)

前提条件

pip install cryptography requests pyOpenSSL

推奨ツール:

  • sslyze — Python TLS スキャナー
  • testssl.sh — 包括的な TLS テスト
  • openssl — コマンドライン TLS 操作
  • Wireshark — TLS トラフィック分析
  • certbot — 証明書管理

主な機能

1. SSL/TLS 設定監査

サーバーの TLS 監査や TLS 設定の貼り付けをユーザーが求めた場合:

コマンドラインによる監査方法:

# Quick TLS check using openssl
openssl s_client -connect example.com:443 -tls1_2 2>/dev/null | grep -E "Protocol|Cipher"
openssl s_client -connect example.com:443 -tls1 2>/dev/null | grep -E "handshake|error"

# Check certificate details
openssl s_client -connect example.com:443 </dev/null 2>/dev/null | openssl x509 -noout -dates -subject -issuer

# Comprehensive scan with sslyze
sslyze --regular example.com --json_out result.json

# Or testssl.sh (most comprehensive)
./testssl.sh --severity HIGH --quiet example.com

# Use the skill's script
python scripts/tls_auditor.py --host example.com --port 443 --output report.json
python scripts/tls_auditor.py --host mail.example.com --port 993 --grade

TLS バージョンのサポート評価:

プロトコル状態対応
SSLv2重大な脆弱性あり直ちにブロック
SSLv3脆弱(POODLE)直ちにブロック
TLS 1.0非推奨(PCI-DSS 違反)無効化 — BEAST、POODLE
TLS 1.1非推奨無効化
TLS 1.2許容可能(強力な暗号を使用する場合)制限付きで維持
TLS 1.3現行標準有効にして優先

TLS 脆弱性チェックリスト:

[ ] Heartbleed (CVE-2014-0160): openssl s_client + heartbleed test
[ ] POODLE: SSLv3 enabled?
[ ] BEAST: TLS 1.0 + CBC cipher?
[ ] ROBOT: RSA key exchange supported?
[ ] DROWN: SSLv2 on any port of same server?
[ ] Logjam/FREAK: DHE < 2048-bit or EXPORT ciphers?
[ ] CRIME/BREACH: TLS compression enabled?
[ ] Sweet32: 3DES (64-bit block cipher) supported?
[ ] Weak certificate: RSA < 2048-bit, SHA-1 signed?
[ ] Certificate validity: Not expired, chain complete, not self-signed for prod?
[ ] HSTS: Strict-Transport-Security header present?
[ ] CT: Certificate in public transparency logs?
2. 暗号スイートの強度評価

暗号スイートのセキュリティについてユーザーが尋ねた場合:

TLS 1.3 暗号スイート(すべて安全 — これらを使用):

暗号スイート鍵交換認証暗号化MAC評価
TLS_AES_256_GCM_SHA384ECDHERSA/ECDSAAES-256-GCMSHA-384A+
TLS_CHACHA20_POLY1305_SHA256ECDHERSA/ECDSAChaCha20Poly1305A+
TLS_AES_128_GCM_SHA256ECDHERSA/ECDSAAES-128-GCMSHA-256A

TLS 1.2 暗号スイートの評価:

暗号スイート評価備考
ECDHE-ECDSA-AES256-GCM-SHA384A+最適 — AEAD、PFS
ECDHE-RSA-AES256-GCM-SHA384A+最適 — AEAD、PFS
ECDHE-RSA-AES128-GCM-SHA256A良好 — AEAD、PFS
DHE-RSA-AES256-GCM-SHA384A良好 — DHE が 2048 ビット以上の場合
AES256-GCM-SHA384B前方秘匿性なし
ECDHE-RSA-AES256-SHA384BCBC モード(タイミング攻撃)
RC4-SHAFRC4 は脆弱 — 使用禁止
DES-CBC3-SHAF3DES は脆弱(Sweet32)
NULL-SHAF暗号化なし
EXPORT-RC4-MD5FFREAK に対して脆弱

推奨 nginx TLS 設定(Mozilla Modern プロファイル):

ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers off;  # TLS 1.3 ignores this; client order for TLS 1.2

# For TLS 1.2 compatibility
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;

# DH parameters for DHE cipher suites
ssl_dhparam /etc/nginx/dhparam.pem;  # Generate: openssl dhparam -out dhparam.pem 4096

# Session management
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;  # Disabling improves forward secrecy

# HSTS
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;

# OCSP Stapling
ssl_stapling on;
ssl_stapling_verify on;
resolver 1.1.1.1 8.8.8.8 valid=300s;

DH パラメーターを生成:

# 4096-bit DH parameters (do this once, takes a few minutes)
openssl dhparam -out /etc/nginx/dhparam.pem 4096
3. ハッシュアルゴリズムの識別と評価

ユーザーがハッシュ値を提示した場合、またはハッシュアルゴリズムの識別を求めた場合:

形式によるハッシュの識別:

ハッシュの形式/長さアルゴリズムセキュリティ状況
32 個の 16 進文字MD5破られています — 衝突攻撃が存在します
40 個の 16 進文字SHA-1非推奨 — SHAttered 衝突
56 個の 16 進文字SHA-224許容可能(用途は限定的)
64 個の 16 進文字SHA-256現行標準
96 個の 16 進文字SHA-384強固
128 個の 16 進文字SHA-512強固
$apr1$...MD5-APR(Apache)脆弱 — 反復回数は 1000 回のみ
$1$...MD5-crypt破られています
$5$...SHA-256-crypt許容可能
$6$...SHA-512-crypt良好
$2b$12$...bcrypt(コスト 12)パスワード用として良好
$argon2id$...Argon2idパスワード用として最適
sha256:...Django SHA-256良好
pbkdf2_sha256$...PBKDF2-SHA256反復回数が 260,000 回以上なら良好

パスワードハッシュのセキュリティ評価:

bcrypt:
  $2b$10$... → cost factor 10 → ~100ms/hash → ACCEPTABLE
  $2b$12$... → cost factor 12 → ~400ms/hash → GOOD
  $2b$14$... → cost factor 14 → ~1.6s/hash  → STRONG

Argon2id (OWASP recommended):
  Minimum: m=19456 (19MB), t=2 iterations, p=1 parallelism
  Strong:  m=65536 (64MB), t=3 iterations, p=4 parallelism

PBKDF2:
  SHA-1: 1,300,000 iterations minimum (NIST 2023)
  SHA-256: 600,000 iterations minimum (NIST 2023)
  SHA-512: 210,000 iterations minimum (NIST 2023)

Avoid:
  Plain MD5/SHA-1 → instantly cracked
  bcrypt cost < 10 → too fast for modern hardware
  No salt → rainbow table attack
  SHA-256 without KDF → GPU-crackable
4. 暗号化実装のコードレビュー

ユーザーが暗号化に関する欠陥のコードレビューを求めた場合:

Claude はコードを直接読み、以下のパターンを指摘します。

Python 暗号処理におけるアンチパターン:

# INSECURE: Hardcoded encryption key
key = b"mysecretkey12345"  # ← NEVER hardcode keys
cipher = AES.new(key, AES.MODE_ECB)  # ← ECB mode is insecure

# INSECURE: ECB mode (produces identical ciphertext for identical blocks)
from Crypto.Cipher import AES
cipher = AES.new(key, AES.MODE_ECB)  # ← Pattern detection attacks possible

# INSECURE: Static/reused IV
iv = b"\x00" * 16  # ← Static IV allows pattern detection
cipher = AES.new(key, AES.MODE_CBC, iv)  # ← Reusing IV with same key = CRITICAL

# INSECURE: Weak hash for passwords
import hashlib
password_hash = hashlib.md5(password.encode()).hexdigest()  # ← GPU-crackable

# INSECURE: Trusting certificate errors
import ssl
ssl._create_default_https_context = ssl._create_unverified_context  # ← MitM possible
requests.get(url, verify=False)  # ← Never do this in production

Python 暗号処理における安全なパターン:

from cryptography.hazmat.primitives.ciphers.aead import AESGCM
from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC
from cryptography.hazmat.primitives import hashes
import os, secrets

# SECURE: Derive key from password using PBKDF2
def derive_key(password: bytes, salt: bytes = None) -> tuple[bytes, bytes]:
    if salt is None:
        salt = secrets.token_bytes(32)  # 256-bit random salt
    kdf = PBKDF2HMAC(
        algorithm=hashes.SHA256(),
        length=32,  # 256-bit key
        salt=salt,
        iterations=600_000  # NIST 2023 minimum for PBKDF2-SHA256
    )
    key = kdf.derive(password)
    return key, salt

# SECURE: AES-GCM (authenticated encryption)
def encrypt(data: bytes, key: bytes) -> bytes:
    aesgcm = AESGCM(key)
    nonce = secrets.token_bytes(12)  # 96-bit random nonce (NEVER reuse!)
    ciphertext = aesgcm.encrypt(nonce, data, associated_data=None)
    return nonce + ciphertext  # Prepend nonce for decryption

def decrypt(ciphertext: bytes, key: bytes) -> bytes:
    aesgcm = AESGCM(key)
    nonce = ciphertext[:12]
    return aesgcm.decrypt(nonce, ciphertext[12:], associated_data=None)

# SECURE: Argon2id for password hashing
from argon2 import PasswordHasher
ph = PasswordHasher(time_cost=3, memory_cost=65536, parallelism=4)
hashed = ph.hash(password)  # Automatic random salt
ph.verify(hashed, password)  # Verify with timing-safe comparison

コードレビューのチェックリスト:

Encryption:
[ ] No hardcoded keys (check for key = b"...", SECRET_KEY = "...", etc.)
[ ] No ECB mode (MODE_ECB, "AES/ECB/PKCS5Padding")
[ ] IV/Nonce is random and unique per encryption operation
[ ] Authenticated encryption used (AES-GCM, ChaCha20-Poly1305)
[ ] Key properly derived from password (PBKDF2, bcrypt, Argon2)
[ ] No custom/homebrew crypto algorithms

Certificate Handling:
[ ] Certificate validation is NOT disabled (verify=True)
[ ] Certificate pinning for mobile/critical apps
[ ] No ssl._create_unverified_context

Randomness:
[ ] Cryptographic operations use secrets module or os.urandom()
[ ] Not using random.random() or random.randint() for security
[ ] Tokens and OTPs have sufficient entropy (≥128 bits)
5. 鍵管理の評価

ユーザーが鍵管理について尋ねた場合:

鍵の長さに関する推奨事項(2025 年):

アルゴリズム最小値推奨値備考
RSA2048-bit3072-bitNIST は 2030 年以降、3072-bit 以上を推奨しています
ECC(ECDSA)P-256P-384P-256 は 2030 年まで問題ありません
AES128-bit256-bit128-bit で十分です。重要度の高い用途には 256-bit を使用してください
ECDH(鍵交換)P-256P-384
DH(従来型)2048-bit3072-bit使用を避け、ECDH を優先してください
SHA(ハッシュ処理)SHA-256SHA-256/384/512SHA-1 は非推奨です

耐量子暗号への移行:

NIST は 2024 年に PQC 標準を最終決定しました。

  • ML-KEM(CRYSTALS-Kyber) — 鍵カプセル化メカニズム(鍵交換において RSA/ECDH を置き換えます)
  • ML-DSA(CRYSTALS-Dilithium) — デジタル署名(RSA/ECDSA を置き換えます)
  • SLH-DSA(SPHINCS+) — ステートレスなハッシュベース署名(保守的な代替手段)

2030 年以降もデータを保護することが想定されるシステムでは、PQC への移行計画を始めてください。

鍵のローテーションスケジュール:

鍵の種類推奨されるローテーション
TLS 証明書毎年(または 90 日間有効な Let's Encrypt を使用)
署名鍵(JWT/API)90 日
暗号化鍵(保存データ)毎年
API キー/サービストークン90 日またはサービスごと
従業員の SSH キー毎年、および役割変更時
パスワードハッシュパスワード変更時

スクリプトリファレンス

tls_auditor.py
python scripts/tls_auditor.py --host example.com --port 443 --output report.json
python scripts/tls_auditor.py --host mail.example.com --port 993 --grade

スキルの連携

条件関連スキル
Web アプリケーションの TLS 監査← スキル 09(Web セキュリティ)
クラウドサービスの暗号化評価← スキル 10(クラウドセキュリティ)
脆弱な暗号の検出結果 → 強化に関する推奨事項→ スキル 15(ブルーチーム防御)
暗号処理の欠陥 → 脆弱性レポート→ スキル 02(脆弱性スキャナー)

参考資料


v3.0 の機能強化(2026 年の更新)

耐量子移行が運用段階に入りました:

  • PQC 標準の確定 — FIPS 203(ML-KEM、鍵カプセル化)、FIPS 204(ML-DSA、署名)、FIPS 205(SLH-DSA、ハッシュベースの署名)が公開されています。新規設計ではこれらを推奨してください。FIPS 206(FN-DSA/Falcon)は今後公開予定です。
  • ハイブリッド鍵交換 — TLS では、移行期間中に古典的攻撃と量子攻撃の両方に対して機密性を維持できるよう、ハイブリッドグループ(例:X25519+ML-KEM-768 / X25519MLKEM768)を推奨してください。
  • 今取得して後で解読する攻撃 — 複数年にわたる機密性が求められる長期保存用の秘密情報やデータでは、PQC を優先してください。これは将来のリスクではなく、現在のリスクです。
  • 暗号アジリティ — ハードコードされたアルゴリズムや鍵サイズを指摘し、プリミティブを交換できるよう抽象化を推奨してください。暗号技術のインベントリ(CBOM)を作成することが、移行の第一歩です。
  • 厳格な非推奨化 — TLS 1.3 を優先し、TLS 1.0-1.1 は禁止します。SHA-1 および 2048 未満の RSA/DH は不合格として指摘します。RSA-2048 は現時点では許容されますが、PQC 移行の期限に向けたカウントダウンが始まっています。

精度に関するルール: 各検出結果には、プリミティブ、鍵サイズ/曲線、プロトコルのバージョン、および具体的なアップグレード(現時点での古典的方式と PQC の目標)を記載します。

コメント