{
 "profile": "data-package",
 "name": "ecdsa-com-research-2026-10",
 "title": "The State of Signatures on the Web — 2026-10",
 "homepage": "https://ecdsa.com/research/2026-10",
 "version": "2026-10",
 "created": "2026-10-23T11:21:28.777Z",
 "licenses": [
  {
   "name": "CC-BY-4.0",
   "title": "Creative Commons Attribution 4.0 International",
   "path": "https://creativecommons.org/licenses/by/4.0/"
  }
 ],
 "citation": "ecdsa.com, \"The State of Signatures on the Web\", 2026-10. https://ecdsa.com/research/2026-10. Data licensed under CC BY 4.0.",
 "contributors": [
  {
   "title": "ecdsa.com",
   "path": "https://ecdsa.com",
   "role": "author"
  }
 ],
 "sources": [
  {
   "title": "Tranco list 56Z8N (2026-10-22)",
   "path": "https://tranco-list.eu/list/56Z8N"
  },
  {
   "title": "Chrome UX Report by Google, chrome-ux-report.country_ru.202609, chrome-ux-report.country_es.202609, chrome-ux-report.country_mx.202609, chrome-ux-report.country_br.202609, chrome-ux-report.country_de.202609, chrome-ux-report.country_fr.202609, chrome-ux-report.country_jp.202609, chrome-ux-report.country_cn.202609, chrome-ux-report.country_tw.202609 — CC BY 4.0",
   "path": "https://developer.chrome.com/docs/crux"
  }
 ],
 "resources": [
  {
   "name": "records",
   "path": "records.csv",
   "format": "csv",
   "mediatype": "text/csv",
   "encoding": "utf-8",
   "schema": {
    "fields": [
     {
      "name": "host",
      "type": "string",
      "description": "Host name scanned on port 443 (SNI)"
     },
     {
      "name": "tranco_rank",
      "type": "integer",
      "description": "Rank on the issue's Tranco list; empty when the host is only on country lists"
     },
     {
      "name": "crux_countries",
      "type": "string",
      "description": "CrUX country lists (ISO 3166-1 alpha-2, space-separated) whose top bucket contains the host"
     },
     {
      "name": "ok",
      "type": "boolean",
      "description": "A TLS handshake completed and a certificate was parsed"
     },
     {
      "name": "error",
      "type": "string",
      "description": "Why no measurement: dns-error, timeout, unreachable, tls-error, private-address, invalid-host, watchdog"
     },
     {
      "name": "grade",
      "type": "string",
      "description": "A+ to F, the grader of ecdsa.com/health"
     },
     {
      "name": "score",
      "type": "integer",
      "description": "Grader score, 0–100"
     },
     {
      "name": "key_exchange_group",
      "type": "string",
      "description": "Key-exchange group the server picked from the scanner's default offer (IANA name)"
     },
     {
      "name": "post_quantum_key_exchange",
      "type": "boolean",
      "description": "That group includes ML-KEM"
     },
     {
      "name": "protocol",
      "type": "string",
      "description": "Negotiated TLS version"
     },
     {
      "name": "cipher",
      "type": "string",
      "description": "Negotiated cipher suite (OpenSSL name)"
     },
     {
      "name": "legacy_tls",
      "type": "string",
      "description": "Answer to a handshake capped at TLS 1.1: refused, accepted:<versions> or unavailable"
     },
     {
      "name": "key_family",
      "type": "string",
      "description": "Leaf key algorithm family: ecdsa, rsa, eddsa, pqc, other"
     },
     {
      "name": "key",
      "type": "string",
      "description": "Leaf key type, e.g. ECDSA P-256 or RSA-2048"
     },
     {
      "name": "signature_algorithm",
      "type": "string",
      "description": "Signature algorithm of the leaf certificate"
     },
     {
      "name": "lifetime_days",
      "type": "integer",
      "description": "notBefore to notAfter of the leaf, in days"
     },
     {
      "name": "not_before",
      "type": "datetime",
      "description": "Leaf notBefore"
     },
     {
      "name": "not_after",
      "type": "datetime",
      "description": "Leaf notAfter"
     },
     {
      "name": "chain_complete",
      "type": "boolean",
      "description": "Every issuer → subject link of the served chain matches"
     },
     {
      "name": "chain_length",
      "type": "integer",
      "description": "Certificates served"
     },
     {
      "name": "issuer_cn",
      "type": "string",
      "description": "Common name of the issuing CA as served"
     },
     {
      "name": "ca",
      "type": "string",
      "description": "Issuing CA folded into its operator"
     },
     {
      "name": "findings",
      "type": "string",
      "description": "Grader finding ids, space-separated"
     }
    ]
   }
  },
  {
   "name": "summary",
   "path": "summary.json",
   "format": "json",
   "mediatype": "application/json"
  },
  {
   "name": "trends",
   "path": "https://ecdsa.com/research/trends.csv",
   "format": "csv",
   "mediatype": "text/csv",
   "encoding": "utf-8",
   "schema": {
    "fields": [
     {
      "name": "issue",
      "type": "string",
      "description": "Issue month, YYYY-MM"
     },
     {
      "name": "slice",
      "type": "string",
      "description": "tranco (the whole list), tranco-top500 (comparable with August 2026), crux-<country>"
     },
     {
      "name": "country",
      "type": "string",
      "description": "ISO 3166-1 alpha-2 of a country slice"
     },
     {
      "name": "list_version",
      "type": "string",
      "description": "Tranco list id or CrUX table"
     },
     {
      "name": "list_date",
      "type": "date",
      "description": "Tranco publication day or first day of the CrUX data month"
     },
     {
      "name": "vantage",
      "type": "string",
      "description": "Where the scanner ran: local or cloud-run:<region>"
     },
     {
      "name": "attempted",
      "type": "integer",
      "description": "Hosts attempted"
     },
     {
      "name": "measured",
      "type": "integer",
      "description": "Hosts measured"
     },
     {
      "name": "hybridShare",
      "type": "number",
      "description": "Percent of measured hosts (okShare: of attempted hosts); empty when not recorded"
     },
     {
      "name": "ecdsaShare",
      "type": "number",
      "description": "Percent of measured hosts (okShare: of attempted hosts); empty when not recorded"
     },
     {
      "name": "rsaShare",
      "type": "number",
      "description": "Percent of measured hosts (okShare: of attempted hosts); empty when not recorded"
     },
     {
      "name": "tls13Share",
      "type": "number",
      "description": "Percent of measured hosts (okShare: of attempted hosts); empty when not recorded"
     },
     {
      "name": "legacyAcceptedShare",
      "type": "number",
      "description": "Percent of measured hosts (okShare: of attempted hosts); empty when not recorded"
     },
     {
      "name": "within100Share",
      "type": "number",
      "description": "Percent of measured hosts (okShare: of attempted hosts); empty when not recorded"
     },
     {
      "name": "within47Share",
      "type": "number",
      "description": "Percent of measured hosts (okShare: of attempted hosts); empty when not recorded"
     },
     {
      "name": "medianLifetime",
      "type": "number",
      "description": "Days"
     },
     {
      "name": "gradeAShare",
      "type": "number",
      "description": "Percent of measured hosts (okShare: of attempted hosts); empty when not recorded"
     },
     {
      "name": "okShare",
      "type": "number",
      "description": "Percent of measured hosts (okShare: of attempted hosts); empty when not recorded"
     }
    ]
   }
  }
 ]
}
