本文へスキップ
ecdsa.com

学習

デジタル署名が実際にどのように動作するのかを解説する、短く技術的なガイドです。アルゴリズム、バイトレベルのフォーマット、検証の失敗を招く設定ミスを取り上げます。署名がどうしても検証に通らず、エラーメッセージからは何もわからない、そんなときのために書かれています。

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 移行期限。

実際のバイト列を触ってみたい場合は、署名ラボのツールをお使いください。処理はすべてブラウザー内で行われます。