学習
デジタル署名が実際にどのように動作するのかを解説する、短く技術的なガイドです。アルゴリズム、バイトレベルのフォーマット、検証の失敗を招く設定ミスを取り上げます。署名がどうしても検証に通らず、エラーメッセージからは何もわからない、そんなときのために書かれています。
TLS
有効期間 47 日の TLS 証明書:スケジュールと自動化の対象
CA/B Forum の投票 SC-081 で公開 TLS 証明書は 200、100、47 日、ドメイン検証の再利用は 10 日に短縮されます。日程、ACME プロファイル、ARI、アラートを解説します。
サプライチェーン
APK 署名スキーム v1〜v4、鍵のローテーションと Play
Android APK の署名スキーム v1〜v4、v3・v3.1 での鍵のローテーション、新しいハイブリッド ML-DSA 署名 v3.2、Play アプリ署名、apksigner verify の出力を解説します。
サプライチェーン
Authenticode コード署名:鍵・タイムスタンプ・検証
Authenticode による Windows 実行ファイルの署名、コード署名鍵の HSM 必須化(2023年)、証明書より長く有効なタイムスタンプ、signtool と osslsigncode を解説します。
Bitcoin
Bitcoin メッセージ署名:BIP-137 と BIP-322 を解説
Bitcoin メッセージ署名の仕組み、BIP-137 ヘッダー、BIP-322 のシンプル署名とフル署名、アドレスタイプ、ウォレット互換性、2026年にテストした検証方法を解説します。
サプライチェーン
C2PA コンテンツ認証情報:マニフェスト、署名、限界
C2PA コンテンツ認証情報の仕組み、マニフェスト、クレームと COSE 署名、証明書の信頼とタイムスタンプ、検証状態、再エンコードで失われる理由を解説します。
TLS
2026年の証明書ピンニング:使うべき場面と安全な方法
証明書ピンニングの現状:ブラウザーが HPKP を廃止した理由、Android・iOS アプリと OkHttp の SPKI ピン、短期証明書で接続不能になるリスク、ピンのローテーション。
PKI
開発者のための Certificate Transparency:SCT とアラート
2026年の Certificate Transparency の仕組み:SCT とログ、Chrome・Apple・Firefox の要件、Cert Spotter と crt.sh での証明書の検索、監視。
メール
DKIM が失敗する原因:本文ハッシュ、不正な署名、鍵、DNS
DKIM 署名が失敗する原因:正規化、本文ハッシュの不一致、転送とメーリングリスト、l= タグ、鍵長、DNS。失敗を実際に再現し、対処法を示します。
DNS
DNSSEC の信頼の連鎖:DS、DNSKEY、RRSIG と障害の原因
DNSSEC の検証がルートから目的のレコードまでたどる仕組み:DS、DNSKEY、RRSIG、アルゴリズム 8・13・15、dig と delv での確認、鍵のロールオーバーの失敗。
DPoP
DPoP 解説:OAuth トークンをクライアントの鍵に紐付ける
DPoP(RFC 9449)が OAuth アクセストークンをクライアントの鍵に紐付ける仕組み:プルーフ JWT、jti、htm、htu、ath、nonce、cnf.jkt、リソースサーバーの検証をテスト。
アルゴリズム
ECDSA 公開鍵の復元:リカバリ ID、v、ecrecover
ECDSA で公開鍵を復元する仕組みを、数式、リカバリ ID と v の値、Ethereum の ecrecover、Bitcoin のコンパクト署名、EIP-2098、避けるべきバグとあわせて解説します。
Ethereum
EIP-712:実際に何に署名しているのか、その読み方
EIP-712 の型付きデータを解説:ドメイン、型とハッシュ化、ERC-2612 の permit、Permit2、無制限の承認、署名前に署名リクエストを読む方法。
JWT
JWT 署名の ES256 と EdDSA:2026年にどちらを選ぶか
JWT の ES256 と EdDSA(Ed25519)を比較。サイズ、決定性、展性、速度、13 ライブラリでの対応状況、クラウド KMS と HSM、新名称 Ed25519、2026年のおすすめ。
鍵管理
ハードウェア保護の鍵:Secure Enclave、StrongBox、TPM、PIV
ハードウェアで保護された鍵は何を保証するのか。Apple Secure Enclave、Android の TEE と StrongBox、TPM 2.0、YubiKey PIV、アテステーションによる証明と限界。
HTTP 署名
HTTP メッセージ署名(RFC 9421):API とボットでの使い方
RFC 9421 の HTTP メッセージ署名を実践解説:対象コンポーネント、Signature-Input、鍵、リプレイ、サーバー側の検証、クローラーと AI エージェントの Web Bot Auth。
JWT
ダウンタイムなしの JWKS 鍵ローテーション
リクエストの失敗ゼロで JWT の署名鍵をローテーション:kid のルール、新旧の鍵の併存期間、Cache-Control、7 つの検証ライブラリのキャッシュ動作、緊急時の鍵の削除。
JWT
不正なトークンを通してしまう JWT 検証の間違い
今もなくならない JWT 検証の間違い:ヘッダーの alg、HS/RS の鍵の混同、kid、aud、iss、exp、時刻のずれ、JWKS のキャッシュ。修正済みのコード付き。
ポスト量子暗号
開発者のための ML-DSA:FIPS 204 の鍵、署名、コード
ML-DSA(FIPS 204)の実践:44/65/87 のサイズ、ヘッジ型と決定的署名、コンテキスト、HashML-DSA、鍵の形式、OpenSSL・Go・Java・.NET 向けの動作確認済みコード。
TLS
API のための相互 TLS(mTLS):クライアント証明書の実践
API の相互 TLS:TLS 1.3 でのクライアント証明書の仕組み、プライベート CA、nginx、Envoy、Go、Node.js での設定、ローテーション、それぞれが出力するエラー。
PKI
2026年の OCSP と CRL:証明書失効確認の現在の仕組み
Let's Encrypt の OCSP 終了、CRL の必須化、ブラウザーの CRLite と CRLSets。Java、.NET、Go、Python、Node.js、curl がデフォルトで確認する内容と対処法。
OpenID Connect
OIDC の ID トークン検証を手順ごとに解説
Core 3.1.3.7 に沿って OpenID Connect の ID トークンを検証:iss、aud、azp、署名、exp、nonce、at_hash、c_hash と、Entra ID・Google・Auth0 固有の注意点。
サプライチェーン
2026年の OpenPGP:RFC 9580、v6 鍵、GnuPG による分裂
OpenPGP の現状:RFC 9580 と v6 鍵、Ed25519 と X25519、ポスト量子の RFC 9980、GnuPG の LibrePGP 対 Sequoia、相互運用性テストと推奨事項。
パスキー
開発者のためのパスキー:推測に頼らない WebAuthn 実装
開発者のためのパスキー:WebAuthn の登録とログイン、アテステーション、同期パスキー、ユーザー検証、COSE アルゴリズム、DOMException エラーを実際にテスト。
文書
PDF 署名の仕組み:ByteRange、CMS、PAdES、LTV
PDF 署名の仕組みを解説します。ByteRange、CMS オブジェクト、PAdES のレベル、RFC 3161 タイムスタンプ、LTV、署名が有効でも信頼されない理由、確認方法。
Java
Java の PKIX path building failed:原因と正しい対処法
Java が PKIX path building failed を出す原因(プライベート CA、中間証明書の欠落、誤ったトラストストア、古いルート、SNI)と、ケースごとの診断・修正方法。
ポスト量子暗号
2026年のポスト量子暗号への移行:開発チームのための計画
2026年時点でデフォルトでポスト量子対応済みのもの、まだ変更が必要なもの、鍵交換と署名の実際の期限(NIST IR 8547、CNSA 2.0、EU、英国)を解説します。
SAML
SAML 署名の検証:確認すべき項目とその理由
SAML 署名の検証方法:XMLDSig の参照、正規化、署名された要素からデータを読むべき理由、Audience・Recipient・時刻のチェック。
SD-JWT
SD-JWT と SD-JWT VC:EUDI ウォレットの選択的開示
SD-JWT(RFC 9901)と SD-JWT VC がソルト付きダイジェストでクレームを隠す方法、キーバインディングでのリプレイ防止、EUDI ウォレットや mdoc との関係、2026年の状況。
アルゴリズム
secp256k1 とは:Bitcoin と Ethereum を支える楕円曲線
secp256k1 を解説:パラメーター、高速化を支える自己準同型写像、Bitcoin と Ethereum が使う理由、low-S、鍵とアドレスの形式、プラットフォームの対応状況。
Ethereum
Sign-In with Ethereum(EIP-4361)をサーバーで検証する方法
Sign-In with Ethereum の正しい実装:EIP-4361 のメッセージ、nonce・ドメイン・URI のチェック、サーバーでの検証、スマートウォレット向けの ERC-1271 と ERC-6492。
サプライチェーン
Sigstore によるリリース署名:cosign、バンドル、署名者の ID
Sigstore のキーレス署名:Fulcio 証明書、Rekor のログ、cosign のバンドル、署名者の ID の確認、npm の来歴、GitHub のアーティファクトアテステーション。
鍵管理
クラウド KMS による署名:AWS、Google Cloud、Azure
AWS KMS、Google Cloud KMS、Azure Key Vault での署名。鍵の種類、ダイジェストとメッセージ、DER と生形式の ECDSA 署名、JWT とファイル、権限、監査ログを解説。
SSH
SSH 証明書と authorized_keys の比較:CA とプリンシパル
authorized_keys に代わる OpenSSH 証明書。ユーザー CA とホスト CA、プリンシパル、有効期間、ssh-keygen -s、sshd の設定、KRL による失効、遭遇するエラー。
SSH
2026年の ssh-keygen:鍵タイプ、パスフレーズ、エージェント
2026年に生成すべき SSH 鍵:Ed25519、FIDO の -sk 鍵、新しい ML-DSA ハイブリッド、RSA 3072。KDF ラウンド数、エージェント転送のリスク、証明書とローテーション。
TLS
X25519MLKEM768 解説:TLS 1.3 のハイブリッド鍵交換
TLS 1.3 のハイブリッドグループ X25519MLKEM768 の仕組み:キーシェアのサイズ、コードポイント 0x11EC、デフォルトで有効な実装、確認方法、起こりうる障害。
PKI
X.509 証明書のフィールドを実際の証明書で解説
実際の証明書で見る X.509 のフィールド:サブジェクトと SAN、鍵用途と EKU、基本制約、AKI と SKI、CRL・OCSP・AIA、SCT、そして各規則の現在の意味。
失敗のパターン
ECDSA の nonce 再利用:1 つの数の重複が秘密鍵を明らかにする仕組み
ECDSA の nonce k を再利用すると秘密鍵が漏洩する理由:導出の式、PlayStation 3 と Android の事例、Bitcoin 上の r 値の重複、RFC 6979 による対策。
形式
ECDSA 署名の形式:DER と生形式(P1363)、high-S、ライブラリ間の落とし穴
ECDSA 署名に ASN.1 DER と生形式 r‖s(IEEE P1363)の 2 つの形式がある理由、バイト配置、high-S と low-S、Node.js・Go・Python・Java のデフォルトを解説します。
JWT
JWT の ES256 と RS256:選び方と、痛い目を見ないための注意点
ES256 と RS256 を解説。JWT の alg の値、トークンサイズ、アルゴリズム許可リストの固定、alg none を決して許可しない理由、ES256 署名が生形式 r‖s である理由。
アルゴリズム
ECDSA と RSA の違い:どちらの署名アルゴリズムをいつ使うか
ECDSA と RSA を比較:鍵長と署名サイズ(P-256 と RSA-3072)、速度、TLS・SSH・JWT・ブロックチェーンでの用途、nonce の要件、NIST の PQC 移行期限。
実際のバイト列を触ってみたい場合は、署名ラボのツールをお使いください。処理はすべてブラウザー内で行われます。